[FieldTrip] Source fitting with template MRI/Headmodel

Tommy Wilson tommy.wilson at med.einstein.yu.edu
Tue Jan 24 17:36:20 CET 2017


Hi Julian,

Thank you so much for your reply.

I've pasted the commented code below (I apologize for the code dump). I've
also attached an m-file to this email if you'd prefer to download it that
way. If relevant, you can download the leadfield, headmodel and electrode
locations here
<https://www.dropbox.com/s/8w99ejwrzmwc5pt/Source_fitting_dump.mat?dl=0>
(that file also includes the raw data stored in variables A and U that I am
attempting to source-fit).

As per your questions: I do indeed have a contrast between attended (A) and
unattended (U) conditions. I've written the code below to source-fit both
conditions and create the contrast. However, despite that the raw
topographies (see attached images) are different, the source-fits are the
same (...?). As a consequence, the contrast has no non-zero values. If
instead, I normalize to noise (i.e. generate the Neural Activity Index
<http://www.fieldtriptoolbox.org/tutorial/beamformer#neural_activity_index>)
and look at a contrast there, we again see no non-zero values.

Outside of the contrast, I've implemented your other suggestions. I've
rescaled the original ft_sourceplot such that you can see the extent of it
(see attached image). To my mind, it shouldn't look like this, but having
never done this before, I'm not quite sure what to expect. I've also
included an image of the ft_sourceplot for the Neural Activity Index of
sourceA which also appears to me to be artefactual. More to the point, I'd
expect that since the topographies for A and U are different, the NAIs
should be different, which is not the case.

I'm sort of at a loss about how to proceed here. So, thank you very much
for taking the time to look into this. If I can supply anything else to
help, please don't hesitate to let me know.

Best,

Tommy Wilson

--- CODE ---

%% Source fitting protocol
% Fieldtrip path (to find template MRI)
ftdir = 'your\path\here\';

% Equate covariance matrices for now to rule out any differences in the
% source fit due to differences in covariances
U.cov = A.cov;

%%% Do the LCMV sourcefitting
cfg                     = [];
cfg.method              = 'lcmv';
cfg.grid                = leadfield;
cfg.vol                 = vol;
cfg.elec                = elec;
cfg.lcmv.lambda         = '15%';
cfg.lcmv.keepfilter     = 'yes';
cfg.lcmv.fixedori       = 'yes';
cfg.lcmv.projectnoise   = 'yes';

sourceA = ft_sourceanalysis(cfg,A);
sourceU = ft_sourceanalysis(cfg,U);


%%% Attempt a contrast
% Create the contrast
sourceContrast = sourceA;
sourceContrast.avg.pow = sourceA.avg.pow - sourceU.avg.pow;

% Check to see if any non-zero values exist in the contrast
if all(sourceContrast.avg.pow(sourceContrast.inside(:)) == 0)
    warning('No non-zero contast values exist. ft_sourceplot will give an
error. Do not plot.');
end


%%% Instead of a contrast, look at the Neural Activity Index (NAI)
% See:
http://www.fieldtriptoolbox.org/tutorial/beamformer#neural_activity_index
sourceA_NAI = sourceA;
sourceA_NAI.avg.pow = sourceA.avg.pow./sourceA.avg.noise;
sourceU_NAI = sourceU;
sourceU_NAI.avg.pow = sourceU.avg.pow./sourceU.avg.noise;

if all(sourceA_NAI.avg.pow(sourceA_NAI.inside(:)) -
sourceU_NAI.avg.pow(sourceU_NAI.inside(:))==0)
    warning('No non-zero contast values exist. ft_sourceplot will give an
error. Do not plot.')
end


%%% Visualize the output
% Load template MRI
mri = ft_read_mri([ftdir
'\fieldtrip-20160309\template\anatomy\single_subj_T1.nii']);

% Interpolate source onto MRI
cfg            = [];
cfg.parameter  = 'avg.pow';
sourceA_interp  = ft_sourceinterpolate(cfg, sourceA, mri);
sourceA_NAI_interp  = ft_sourceinterpolate(cfg, sourceA_NAI, mri);

% Visualize with ft_sourceplot
cfg = [];
cfg.method        = 'ortho';
cfg.funparameter  = 'avg.pow';
cfg.funcolorlim   = [0 3e3];
cfg.maskparameter = cfg.funparameter;
ft_sourceplot(cfg, sourceA_interp);

cfg = [];
cfg.method        = 'ortho';
cfg.funparameter  = 'avg.pow';
cfg.maskparameter = cfg.funparameter;
ft_sourceplot(cfg, sourceA_NAI_interp);

On Tue, Jan 24, 2017 at 3:42 AM Julian Keil <julian.keil at gmail.com> wrote:

> Hi Tommy,
>
> did you do some sort of contrast (e.g. with the noise estimate or a
> baseline) after your source analysis?
> Right now, it's not clear what you are looking at. Could you paste your
> code not only of the sourceanalysis, but the rest after which got you to
> the plot?
> It might also be the case that the automatic scaling in the source plot
> throws you off - maybe try setting it by hand.
>
> Good luck,
>
> Julian
>
> Am 23.01.2017 um 22:00 schrieb Tommy Wilson:
>
> > Hi all,
> >
> > I'm working with EEG data and I'm trying to get some basic source
> fitting up and running. Unfortunately, I don't have individual subject
> MRIs, so I'm using the templates provided by fieldtrip. I've co-registered
> my 160 Biosemi electrodes to the standard_bem template (see attached
> picture). For the sourcemodel, I'm using the standard_sourcemodel3d5mm grid
> (picture attached, overlaid on standard_bem). I can prepare the leadfield
> from there with ft_prepare_leadfield (cfg.normalize = 'yes'), as per the
> LCMV tutorial.
> >
> > To test this configuration, I've selected a time window in my data and
> averaged across it (the covariance matrix was also calculated); the
> topography of this averaged data is attached. I then attempted a source fit
> with the LCMV beamformer:
> >
> > cfg                     = [];
> > cfg.method              = 'lcmv';
> > cfg.grid                = leadfield;
> > cfg.vol                 = vol;
> > cfg.elec                = elec;
> > cfg.lcmv.lambda         = '15%';
> > cfg.lcmv.keepfilter     = 'yes';
> > cfg.lcmv.fixedori       = 'yes';
> > cfg.lcmv.projectnoise   = 'yes';
> >
> > sourceA = ft_sourceanalysis(cfg,A);
> >
> > After interpolating to the single_subj_T1.nii provided with
> ft_sourceinterpolate and plotting with ft_sourceplot, I am given a
> sourceplot that is highly focal in nature (see attached picture).
> >
> > I'd find it very surprising if this topography were generated primarily
> by a source that isn't even inside the brain (as the sourceplot indicates).
> So, I'm not sure exactly where/how I'm going wrong with this one, nor am I
> sure how to trouble shoot it. Any guidance you might provide would be
> greatly appreciated.
> >
> > Thanks so much,
> >
> > Tommy
> >
> > <Grid.PNG><Electrode
> localization.PNG><Topo.PNG><Source.PNG>_______________________________________________
> > fieldtrip mailing list
> > fieldtrip at donders.ru.nl
> > https://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>
> _______________________________________________
> fieldtrip mailing list
> fieldtrip at donders.ru.nl
> https://mailman.science.ru.nl/mailman/listinfo/fieldtrip
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.science.ru.nl/pipermail/fieldtrip/attachments/20170124/90af2f87/attachment.html>
-------------- next part --------------
%% Source fitting protocol
% Fieldtrip path (to find template MRI)
ftdir = 'your\path\here\';

% Equate covariance matrices for now to rule out any differences in the
% source fit due to differences in covariances
U.cov = A.cov;

%%% Do the LCMV sourcefitting
cfg                     = [];
cfg.method              = 'lcmv';
cfg.grid                = leadfield;
cfg.vol                 = vol;
cfg.elec                = elec;
cfg.lcmv.lambda         = '15%';
cfg.lcmv.keepfilter     = 'yes';
cfg.lcmv.fixedori       = 'yes';
cfg.lcmv.projectnoise   = 'yes';

sourceA = ft_sourceanalysis(cfg,A);
sourceU = ft_sourceanalysis(cfg,U);


%%% Attempt a contrast
% Create the contrast
sourceContrast = sourceA;
sourceContrast.avg.pow = sourceA.avg.pow - sourceU.avg.pow;

% Check to see if any non-zero values exist in the contrast
if all(sourceContrast.avg.pow(sourceContrast.inside(:)) == 0)
    warning('No non-zero contast values exist. ft_sourceplot will give an error. Do not plot.');
end


%%% Instead of a contrast, look at the Neural Activity Index (NAI)
% See: http://www.fieldtriptoolbox.org/tutorial/beamformer#neural_activity_index
sourceA_NAI = sourceA;
sourceA_NAI.avg.pow = sourceA.avg.pow./sourceA.avg.noise;
sourceU_NAI = sourceU;
sourceU_NAI.avg.pow = sourceU.avg.pow./sourceU.avg.noise;

if all(sourceA_NAI.avg.pow(sourceA_NAI.inside(:)) - sourceU_NAI.avg.pow(sourceU_NAI.inside(:))==0)
    warning('No non-zero contast values exist. ft_sourceplot will give an error. Do not plot.')
end


%%% Visualize the output
% Load template MRI
mri = ft_read_mri([ftdir '\fieldtrip-20160309\template\anatomy\single_subj_T1.nii']);

% Interpolate source onto MRI
cfg            = [];
cfg.parameter  = 'avg.pow';
sourceA_interp  = ft_sourceinterpolate(cfg, sourceA, mri);
sourceA_NAI_interp  = ft_sourceinterpolate(cfg, sourceA_NAI, mri);

% Visualize with ft_sourceplot
cfg = [];
cfg.method        = 'ortho';
cfg.funparameter  = 'avg.pow';
cfg.funcolorlim   = [0 3e3];
cfg.maskparameter = cfg.funparameter; 
ft_sourceplot(cfg, sourceA_interp);

cfg = [];
cfg.method        = 'ortho';
cfg.funparameter  = 'avg.pow';
cfg.maskparameter = cfg.funparameter; 
ft_sourceplot(cfg, sourceA_NAI_interp);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Topo_Attended.PNG
Type: image/png
Size: 92946 bytes
Desc: not available
URL: <http://mailman.science.ru.nl/pipermail/fieldtrip/attachments/20170124/90af2f87/attachment.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Topo_Unattended.PNG
Type: image/png
Size: 91677 bytes
Desc: not available
URL: <http://mailman.science.ru.nl/pipermail/fieldtrip/attachments/20170124/90af2f87/attachment-0001.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: sourceA_sourceplot.PNG
Type: image/png
Size: 143463 bytes
Desc: not available
URL: <http://mailman.science.ru.nl/pipermail/fieldtrip/attachments/20170124/90af2f87/attachment-0002.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: sourceA_NAI_sourceplot.PNG
Type: image/png
Size: 147302 bytes
Desc: not available
URL: <http://mailman.science.ru.nl/pipermail/fieldtrip/attachments/20170124/90af2f87/attachment-0003.png>


More information about the fieldtrip mailing list