Compute and plot standard EEG electrode positions¶
Quick Start¶
- Get pre-computed electrode positions from the repository’s ``/data`` directory
These are available here: GitHub
- Browse the commented and documented code base to understand what’s going on
Start here: API documentation
- Integrated into MNE-Python
The idealized spherical montages computed by this package (
spherical_1005,spherical_1010,spherical_1020) are shipped natively in MNE-Python viamne.channels.make_standard_montage(see mne-tools/mne-python#13903)
Introduction¶
When recording electroencephalography (EEG) data, electrodes are usually placed according to an international standard. The 10–20, and by extension the 10–10 and 10–05 systems are established sets of rules for this case [1].
Even when the actual electrode locations have not been empirically measured during the recording, an approximation of these positions is important for for plotting topographies or visualizing locations of sensors with the help of analysis software.
While standard locations are available in many places such as from Robert Oostenveld’s blog [2] or directly from electrode cap manufacturers such as Easycap, it is rarely specified and documented how these electrode locations are actually calculated.
The eeg_positions package contains code to compute the standard EEG electrode locations
on a spherical head model for the 10–20, 10–10, and 10–05 systems, as well as the around-the-ear
cEEGrid array. It also includes utility functions
to project the 3D locations to 2D space and to plot them.
Details¶
We compute the EEG electrode positions on a spherical head model.
EEG electrodes are typically placed on a human’s scalp, so the coordinate system we use for the EEG electrode positions is also described with reference to humans.
We are working in a 3D coordinate system with a “RAS” orientation. This means that from the perspective of the human with the electrodes on their scalp, the x-axis is pointing to the right hand side (R), the y-axis is pointing to the front (“anterior”, A), and the z-axis is pointing upwards (“superior”, S).
For more information on this topic, see the documentation in the BIDS specification.
The points in space used to properly define the coordinate system are anatomical landmarks:
Nasion (NAS)
Left preauricular point (LPA)
Right preauricular point (RPA)
Vertex
Inion
For more information on fiducial points, see the MNE-Python glossary for fiducial points.
In our spherical head model, the anatomical landmarks correspond to the
following positions (x, y, z) on the unit sphere:
NAS =
(0, 1, 0)LPA =
(-1, 0, 0)RPA =
(1, 0, 0)Vertex =
(0, 0, 1)Inion =
(0, -1, 0)
Note that eeg_positions also allows for some customization in this regard,
as shown in the examples.
Based on these known points, and the known distribution of EEG electrodes in the
10–20, 10–10, and 10–05 systems,
we then use the function find_point_at_fraction() to calculate the remaining points.
cEEGrid electrode positions¶
In addition to standard scalp EEG systems, eeg_positions provides idealized
spherical coordinates for the cEEGrid around-the-ear electrode array
[3][4].
The idealized coordinates originate from the BESA spherical format in
Martin Bleichner’s cEEGrid EEGLAB plugin (elec_cEEGrid.elp; [4]),
where the coronal angles span 92° to 132° (midpoint 112°, sitting below the equator at
elevation z ≈ -0.36 in the Fpz-T8-Oz-T7 equator system).
In the default Nz-T10-Iz-T9 equator system, coronal angles are shifted by 22°
to place the array symmetrically around the preauricular points (LPA and RPA at z = 0).
See the cEEGrid example for details and usage.
Cite¶
If you find this package useful and want to cite it in your work, please go to Zenodo and obtain the appropriate citation from the “Cite as” section.
Acknowledgments¶
Thanks to:
Robert Oostenveld for writing a blog post on EEG electrode positions.
Ed Williams for the helpful correspondence and discussions about “intermediate points on a great circle” (see also [5]).
“Nominal Animal” who helped figure out the math for the
find_point_at_fractionfunction [6].Martin Bleichner for developing the cEEGrid EEGLAB plugin and providing the original BESA spherical coordinates for the cEEGrid array.