Note
Click here to download the full example code
CTFs are computed for four labels in the MNE sample data set for linear inverse operators (MNE, dSPM, sLORETA). CTFs describe the sensitivity of a linear estimator (e.g. for one label) to sources across the cortical surface. Sensitivity to sources outside the label is undesirable, and referred to as “leakage” or “cross-talk”.
Out:
Reading forward solution from /home/circleci/mne_data/MNE-sample-data/MEG/sample/sample_audvis-meg-eeg-oct-6-fwd.fif...
Reading a source space...
Computing patch statistics...
Patch information added...
Distance information added...
[done]
Reading a source space...
Computing patch statistics...
Patch information added...
Distance information added...
[done]
2 source spaces read
Desired named matrix (kind = 3523) not available
Read MEG forward solution (7498 sources, 306 channels, free orientations)
Desired named matrix (kind = 3523) not available
Read EEG forward solution (7498 sources, 60 channels, free orientations)
MEG and EEG forward solutions combined
Source spaces transformed to the forward solution coordinate frame
Reading inverse operator decomposition from /home/circleci/mne_data/MNE-sample-data/MEG/sample/sample_audvis-meg-oct-6-meg-inv.fif...
Reading inverse operator info...
[done]
Reading inverse operator decomposition...
[done]
305 x 305 full covariance (kind = 1) found.
Read a total of 4 projection items:
PCA-v1 (1 x 102) active
PCA-v2 (1 x 102) active
PCA-v3 (1 x 102) active
Average EEG reference (1 x 60) active
Noise covariance matrix read.
22494 x 22494 diagonal covariance (kind = 2) found.
Source covariance matrix read.
22494 x 22494 diagonal covariance (kind = 6) found.
Orientation priors read.
22494 x 22494 diagonal covariance (kind = 5) found.
Depth priors read.
Did not find the desired covariance matrix (kind = 3)
Reading a source space...
Computing patch statistics...
Patch information added...
Distance information added...
[done]
Reading a source space...
Computing patch statistics...
Patch information added...
Distance information added...
[done]
2 source spaces read
Read a total of 4 projection items:
PCA-v1 (1 x 102) active
PCA-v2 (1 x 102) active
PCA-v3 (1 x 102) active
Average EEG reference (1 x 60) active
Source spaces transformed to the inverse solution coordinate frame
Average patch normals will be employed in the rotation to the local surface coordinates....
Converting to surface-based source orientations...
[done]
About to process 4 labels
Preparing the inverse operator for use...
Scaled noise and source covariance from nave = 1 to nave = 1
Created the regularized inverter
Created an SSP operator (subspace dimension = 3)
Created the whitener using a full noise covariance matrix (3 small eigenvalues omitted)
Applying inverse operator to ""...
Picked 305 channels from the data
Computing inverse...
Eigenleads need to be weighted ...
[done]
Dimension of inverse matrix: (7498, 306)
Computing SVD within labels, using 1 component(s)
First 5 singular values: [11650.27808851 7034.33675366 3267.03724057 2762.39609838
2221.0665056 ]
(This tells you something about variability of estimators in sub-inverse for label)
Your 1 component(s) explain(s) 63.6% variance in label.
Computing SVD within labels, using 1 component(s)
First 5 singular values: [8512.68820924 7872.78518609 6741.64926914 3353.04131104 2498.07715718]
(This tells you something about variability of estimators in sub-inverse for label)
Your 1 component(s) explain(s) 35.6% variance in label.
Computing SVD within labels, using 1 component(s)
First 5 singular values: [15630.02296497 7418.15820631 5346.56712701 4258.90971316
1958.40295249]
(This tells you something about variability of estimators in sub-inverse for label)
Your 1 component(s) explain(s) 69.4% variance in label.
Computing SVD within labels, using 1 component(s)
First 5 singular values: [18096.44764144 8773.30811442 4831.2396142 3456.55903612
3129.60231085]
(This tells you something about variability of estimators in sub-inverse for label)
Your 1 component(s) explain(s) 71.5% variance in label.
Average patch normals will be employed in the rotation to the local surface coordinates....
Converting to surface-based source orientations...
[done]
About to process 4 labels
Preparing the inverse operator for use...
Scaled noise and source covariance from nave = 1 to nave = 1
Created the regularized inverter
Created an SSP operator (subspace dimension = 3)
Created the whitener using a full noise covariance matrix (3 small eigenvalues omitted)
Computing noise-normalization factors (dSPM)...
[done]
Applying inverse operator to ""...
Picked 305 channels from the data
Computing inverse...
Eigenleads need to be weighted ...
dSPM...
[done]
Dimension of inverse matrix: (7498, 306)
Computing SVD within labels, using 1 component(s)
First 5 singular values: [7.55262104e+13 5.83910239e+13 3.44075225e+13 2.36505439e+13
1.94336945e+13]
(This tells you something about variability of estimators in sub-inverse for label)
Your 1 component(s) explain(s) 48.7% variance in label.
Computing SVD within labels, using 1 component(s)
First 5 singular values: [9.07577774e+13 7.61818100e+13 5.75087046e+13 3.39598529e+13
2.66587446e+13]
(This tells you something about variability of estimators in sub-inverse for label)
Your 1 component(s) explain(s) 41.4% variance in label.
Computing SVD within labels, using 1 component(s)
First 5 singular values: [5.31303675e+13 4.01608741e+13 2.99674179e+13 2.09348683e+13
1.16746740e+13]
(This tells you something about variability of estimators in sub-inverse for label)
Your 1 component(s) explain(s) 47.2% variance in label.
Computing SVD within labels, using 1 component(s)
First 5 singular values: [9.06302929e+13 5.13491534e+13 3.33843084e+13 3.13749745e+13
1.90838680e+13]
(This tells you something about variability of estimators in sub-inverse for label)
Your 1 component(s) explain(s) 59.3% variance in label.
# Author: Olaf Hauk <olaf.hauk@mrc-cbu.cam.ac.uk>
#
# License: BSD (3-clause)
from mayavi import mlab
import mne
from mne.datasets import sample
from mne.minimum_norm import cross_talk_function, read_inverse_operator
print(__doc__)
data_path = sample.data_path()
subjects_dir = data_path + '/subjects/'
fname_fwd = data_path + '/MEG/sample/sample_audvis-meg-eeg-oct-6-fwd.fif'
fname_inv = data_path + '/MEG/sample/sample_audvis-meg-oct-6-meg-inv.fif'
fname_evoked = data_path + '/MEG/sample/sample_audvis-ave.fif'
fname_label = [data_path + '/MEG/sample/labels/Aud-rh.label',
data_path + '/MEG/sample/labels/Aud-lh.label',
data_path + '/MEG/sample/labels/Vis-rh.label',
data_path + '/MEG/sample/labels/Vis-lh.label']
# read forward solution
forward = mne.read_forward_solution(fname_fwd)
# read label(s)
labels = [mne.read_label(ss) for ss in fname_label]
inverse_operator = read_inverse_operator(fname_inv)
# regularisation parameter
snr = 3.0
lambda2 = 1.0 / snr ** 2
mode = 'svd'
n_svd_comp = 1
method = 'MNE' # can be 'MNE', 'dSPM', or 'sLORETA'
stc_ctf_mne = cross_talk_function(
inverse_operator, forward, labels, method=method, lambda2=lambda2,
signed=False, mode=mode, n_svd_comp=n_svd_comp)
method = 'dSPM'
stc_ctf_dspm = cross_talk_function(
inverse_operator, forward, labels, method=method, lambda2=lambda2,
signed=False, mode=mode, n_svd_comp=n_svd_comp)
time_label = "MNE %d"
brain_mne = stc_ctf_mne.plot(hemi='rh', subjects_dir=subjects_dir,
time_label=time_label,
figure=mlab.figure(size=(500, 500)))
time_label = "dSPM %d"
brain_dspm = stc_ctf_dspm.plot(hemi='rh', subjects_dir=subjects_dir,
time_label=time_label,
figure=mlab.figure(size=(500, 500)))
# Cross-talk functions for MNE and dSPM (and sLORETA) have the same shapes
# (they may still differ in overall amplitude).
# Point-spread functions (PSfs) usually differ significantly.
Total running time of the script: ( 0 minutes 15.649 seconds)