Note
Go to the end to download the full example code.
GEDAI forward🔗
This tutorial demonstrates how to compute a custom covariance
matrix using a mne.Forward solution.
import mne
from mne.datasets import fetch_fsaverage
from mne.io import read_raw
from gedai.covariance import compute_covariance_from_forward
from gedai.data import get_contaminated_eeg_set_path
Download fsaverage files
fs_dir = fetch_fsaverage(verbose=True)
subjects_dir = fs_dir.parent
# The files live in:
subject = "fsaverage"
trans = "fsaverage" # MNE has a built-in fsaverage transformation
src = fs_dir / "bem" / "fsaverage-ico-5-src.fif"
bem = fs_dir / "bem" / "fsaverage-5120-5120-5120-bem-sol.fif"
0 files missing from root.txt in /home/runner/mne_data/MNE-fsaverage-data
0 files missing from bem.txt in /home/runner/mne_data/MNE-fsaverage-data/fsaverage
Load EEG data
raw = read_raw(str(get_contaminated_eeg_set_path()), preload=True)
Set the EEG electrode locations
raw.set_montage("standard_1005")
/home/runner/work/gedai/gedai/tutorials/advanced/10_gedai_forward.py:35: FutureWarning: Montage name 'standard_1005' is deprecated and will be removed in MNE 1.14. Use 'colin27_1005' instead.
raw.set_montage("standard_1005")
Check that the locations of EEG electrodes is correct with respect to MRI

Reading /home/runner/mne_data/MNE-fsaverage-data/fsaverage/bem/fsaverage-ico-5-src.fif...
Using pyvistaqt 3d backend.
For automatic theme detection, "darkdetect" has to be installed! You can install it with `pip install darkdetect`
For automatic theme detection, "darkdetect" has to be installed! You can install it with `pip install darkdetect`
Using outer_skin.surf for head surface.
Channel types:: eeg: 27
Projecting sensors to the head surface
<mne.viz.backends._pyvista.PyVistaFigure object at 0x7f772b113a90>
generate the forward solution
Source space : /home/runner/mne_data/MNE-fsaverage-data/fsaverage/bem/fsaverage-ico-5-src.fif
MRI -> head transform : /opt/hostedtoolcache/Python/3.11.16/x64/lib/python3.11/site-packages/mne/data/fsaverage/fsaverage-trans.fif
Measurement data : instance of Info
Conductor model : /home/runner/mne_data/MNE-fsaverage-data/fsaverage/bem/fsaverage-5120-5120-5120-bem-sol.fif
Accurate field computations
Do computations in head coordinates
Free source orientations
Reading /home/runner/mne_data/MNE-fsaverage-data/fsaverage/bem/fsaverage-ico-5-src.fif...
Read 2 source spaces a total of 20484 active source locations
Coordinate transformation: MRI (surface RAS) -> head
0.999994 0.003552 0.000202 -1.76 mm
-0.003558 0.998389 0.056626 31.09 mm
-0.000001 -0.056626 0.998395 39.60 mm
0.000000 0.000000 0.000000 1.00
Read 27 EEG channels from info
Head coordinate coil definitions created.
Source spaces are now in head coordinates.
Setting up the BEM model using /home/runner/mne_data/MNE-fsaverage-data/fsaverage/bem/fsaverage-5120-5120-5120-bem-sol.fif...
Loading surfaces...
Loading the solution matrix...
Three-layer model surfaces loaded.
Loaded linear collocation BEM solution from /home/runner/mne_data/MNE-fsaverage-data/fsaverage/bem/fsaverage-5120-5120-5120-bem-sol.fif
Employing the head->MRI coordinate transform with the BEM model.
BEM model fsaverage-5120-5120-5120-bem-sol.fif is now set up
Source spaces are in head coordinates.
Checking that the sources are inside the surface and at least 5.0 mm away (will take a few...)
Checking surface interior status for 10242 points...
Found 2433/10242 points inside an interior sphere of radius 47.7 mm
Found 0/10242 points outside an exterior sphere of radius 98.3 mm
Found 0/ 7809 points outside using surface Qhull
Found 0/ 7809 points outside using solid angles
Total 10242/10242 points inside the surface
Interior check completed in 5350.1 ms
Checking surface interior status for 10242 points...
Found 2241/10242 points inside an interior sphere of radius 47.7 mm
Found 0/10242 points outside an exterior sphere of radius 98.3 mm
Found 0/ 8001 points outside using surface Qhull
Found 0/ 8001 points outside using solid angles
Total 10242/10242 points inside the surface
Interior check completed in 5515.2 ms
Setting up for EEG...
Computing EEG at 20484 source locations (free orientations)...
Finished.
compute the covariance matrix from the forward solution
Total running time of the script: (0 minutes 25.293 seconds)
Estimated memory usage: 946 MB