[Eeglablist] Fieldtrip Source-localization issues

Bruzadin Nunes, Ugo ugob at siu.edu
Sat Apr 1 14:18:05 PDT 2023


Dear EEGLAB community,

I know this is a fieldtrip problem, but I’m using the dipfit settings to source-localize frequency activity. I hope anyone can help me! I have two issues and one question.

  1.  When I plot the source localization, the orientation is 90 degrees wrong. When using dipfit, the activity is correctly localized, but after doing all the dipfit processes – altered to plot frequency – frontal activity is being plot in the right ear. I thought something was wrong, so I artificially increased the activity at channel 12 (the anterior-most channel in my channel model, and the activity is coming from the ear in the eloreta.
  2.  For some reason, fieldtrip won’t accept the atlas. The error says my axis are 10mm in diameter, and the atlas is 150mm in each direction. I’m reading the ROI_MNI_V4 atlas in.
  3.  I am not sure the following code is localizing and plotting the correct frequencies. I don’t think it’s working, but I haven’t tested the frequencies yet since I haven’t fixed the headmodel orientation issue.

Below is my code! Any feedback is welcome. Thank you so much in advance,

Ugo



Ugo Bruzadin Nunes, Ph.D. Candidate (he/him)

Visiting Assistant Professor, Psychology

Webster University




Script/Code:

EEG = pop_dipfit_settings( EEG, 'hdmfile',...
    'C:\\GitHub\\eeglab\\plugins\\dipfit3.7\\standard_BEM\\standard_vol.mat','coordformat','MNI','mrifile',...
    'C:\\GitHub\\eeglab\\plugins\\dipfit3.7\\standard_BEM\\standard_mri.mat','chanfile',...
    ['C:\\GitHub\\eeglab\\plugins\\dipfit3.7\\standard_BEM\\elec\\standard_1005.elc ' ],...
    'coord_transform',...
    [0.05476 -17.3653 -8.1318 0.075502 0.0031836 -1.5696 11.7138 12.7933 12.213] ,'chansel',[1:EEG.nbchan] );


atlas = ft_read_atlas('ROI_MNI_V4.nii');
%% compute spectral params (only need to be done once to get the right structures)

EEGdata = eeglab2fieldtrip(EEG, 'preprocessing', 'none');

cfg = [];
cfg.method    = 'mtmfft';
cfg.output    = 'powandcsd';
cfg.tapsmofrq = 10;
cfg.foilim    = range;
cfg.pad = 'nextpow2';
cfg.gpu = 'yes';
fftdata = ft_freqanalysis(cfg, EEGdata);

if ~isfield(EEG,'lor')
    EEG.lor = struct();
end

EEG.fftdata = fftdata;
%% read headmodel

p = fileparts(which('eeglab'));
if ~isfield(EEG.lor,'HM')
    headmodel = load('-mat', EEG.dipfit.hdmfile);
    headmodel = headmodel.vol;
    EEG.lor.HM = headmodel;
else
    headmodel  = EEG.lor.HM;
end

    cfg                 = [];
    cfg.elec            = fftdata.elec;
    cfg.headmodel       = headmodel;
    cfg.reducerank      = 2;
    cfg.grid.resolution = 10;   % use a 3-D grid with a 1 cm resolution
    cfg.grid.unit       = 'mm';
    cfg.channel         = { 'all' };
    cfg.parallel = 'yes';
    cfg.solver = 'cg';

    [grid] = ft_prepare_leadfield(cfg);
    EEG.lor.grid = grid;


    mri = load('-mat', EEG.dipfit.mrifile);
    mri = ft_volumereslice([], mri.mri);
    EEG.lor.mri = mri;

%% loops per frequency then plots
counter = 0;

numfreq = size(frequencies,2);

EEGlor = EEG;

vol = load('-mat', EEG.dipfit.hdmfile);

for i = 1:numfreq

    atlas = ft_read_atlas('ROI_MNI_V4.nii');

    freq = frequencies(i);

    cfg              = struct(g.ft_sourceanalysis_params{:});
    cfg.frequency    = freq;
    cfg.grid         = grid;
    cfg.headmodel    = headmodel;
    cfg.method       = 'eloreta';
    cfg.atlas        = atlas;
    cfg.roi          = atlas.tissuelabel;
    cfg.eloreta.projectnoise = 'yes';
    cfg.eloreta.lambda   = 5;
    cfg.gpu           = 'yes';

    sourcemodel = ft_sourceanalysis(cfg, fftdata);

    EEGlor.lor.cfg(numfreq) = cfg;
    EEGlor.lor.freq(numfreq) = fftdata;
    EEGlor.lor.source(numfreq) = sourcemodel;
%% load MRI and INTERPOLATE

    cfg                 = [];
    cfg.downsample      = 2;
    cfg.parameter       = 'avg.pow';
    sourcemodel.oridimord = 'pos';
    sourcemodel.momdimord = 'pos';
    sourcemodel_int        = ft_sourceinterpolate(cfg2, sourcemodel , mri);
    EEGlor.lor.source_int(numfreq) = sourcemodel_int;

%% plot
    cfg                 = [];
    cfg.method          = 'ortho';
    cfg.funparameter    = 'pow';
    ft_sourceplot(cfg2,sourcemodel_int);
    textsc(sprintf('eLoreta source localization of %d frequency power',freq), 'title');

%
end







More information about the eeglablist mailing list