[FieldTrip] Help with beamformer localizing tremor-coherence peaks

Alexandra Kathrin Steina Alexandra.Steina at uni-duesseldorf.de
Mon Dec 18 20:22:57 CET 2023


Dear Fieldtrip community,

I am working with MEG and LFP data from patients with Parkinson’s 
disease/essential tremor.
I want to compare how coherence between DBS-targets and cortex changes 
between tremor and tremor-free epochs at tremor frequency.
For this, I’ve calculated coherence between LFPs and MEG and used a 
dics-beamformer to localize coherent sources.
I have encountered something that I find weird/confusing when localizing 
the tremor-coherence peaks (LFP-MEG coherence at tremor frequency) of 
most of the subjects.
I've uploaded images of one example on WeTransfer under the following 
link: https://we.tl/t-B6dw2hF4aT On sensor-level there is a clear peak 
visible at tremor frequency which is absent during no-tremor (figure 1). 
 From what I see on sensor-level I would expect to also see much higher 
activity on source-level and a clear localization. However, when I apply 
dics-beamformer the maximal coherence value for the tremor-epochs is 
much lower, than for the tremor-free epochs (figure 2).
In addition, the localization seems a bit strange to me, especially when 
compared with the sensor image.
I’ve also applied a common filter, because I thought that it might solve 
the problem, but it did not.
I’ve used the exact same pipeline and exact same script to localize 
coherence between LFP and MEG at eg. high-beta or alpha frequencies and 
it gives me “good” results (see image 3, data from a different subject 
which did not have tremor).
I have used ‘fieldtrip-20201214‘ to generate the images, but have also 
tried fieldtrip versions from 2018 to the most recent one, all yielding 
similar results.

I would be grateful for advice on why this is happening!

Best,
Alex

Code-snippet I've used:

     refchannel = 'LFP-right-2B-3B';
     freqs = 1:35;

     cfg=[];
     cfg.method='mtmfft';
     cfg.output='powandcsd';
     cfg.taper= 'hanning';
     cfg.foi = freqs;
     cfg.keeptrials = 'no';
     pow_csd_tremor =ft_freqanalysis(cfg,data_seg_tremor);
     pow_csd_notremor =ft_freqanalysis(cfg,data_seg_notremor);

     cfg = [];
     cfg.method = 'coh';
     coh_tremor = ft_connectivityanalysis(cfg,pow_csd_tremor);
     coh_notremor = ft_connectivityanalysis(cfg,pow_csd_notremor);

     cfg = [];
     cfg.interactive = 'yes';
     cfg.parameter = 'cohspctrm';
     cfg.refchannel = refchannel;
     cfg.layout = 'neuromag306planar.lay';
     ft_multiplotER(cfg,coh_tremor,coh_notremor);

     %% dics beamformer

     common_filter_dics = 1;

     for f = 1:length(freqs)

         dat_appended = 
ft_appenddata([],data_seg_tremor,data_seg_notremor);

         cfg = [];
         cfg.method = 'mtmfft';
         cfg.output = 'powandcsd';
         cfg.foi = freqs(f);
         cfg.taper = 'hanning';
         cfg.keeptrials = 'yes';
         freq_tremor = ft_freqanalysis(cfg,data_seg_tremor);
         freq_notremor = ft_freqanalysis(cfg,data_seg_notremor);
         freq_appended = ft_freqanalysis(cfg,dat_appended);

         cfg=[];
         cfg.method='dics';
         cfg.dics.lambda='5%';
         cfg.dics.keepcsd = 'yes';
         cfg.dics.keepfilter = 'yes';
         cfg.dics.reafilter = 'yes';
         cfg.frequency = freqs(f);
         cfg.channel = 'MEG';
         cfg.headmodel=hdm;
         cfg.sourcemodel=grid;
         cfg.reducerank=2;
         cfg.refchan = refchannel;
         source_appended_forfilter = ft_sourceanalysis(cfg, 
freq_appended);


         cfg=[];
         cfg.method='dics';
         cfg.dics.lambda='5%';
         cfg.dics.keepcsd = 'yes';
         cfg.headmodel=hdm;
         cfg.sourcemodel=grid;
         cfg.frequency = freqs(f);
         cfg.channel = 'MEG';
         cfg.reducerank=2;
         cfg.refchan = refchannel;
         if common_filter_dics == 1
             cfg.sourcemodel.filter = 
source_appended_forfilter.avg.filter;
             cfg.sourcemodel.label = source_appended_forfilter.avg.label;
         end
         source_tremor_dics{f}= ft_sourceanalysis(cfg, freq_tremor);
         source_tremor_dics{f}.pos = template_grid.pos;
         source_tremor_dics{f}.dim = template_grid.dim;
         source_notremor_dics{f}= ft_sourceanalysis(cfg, freq_notremor);
         source_notremor_dics{f}.pos = template_grid.pos;
         source_notremor_dics{f}.dim = template_grid.dim;

     end

     %% plot all results

     freq_to_plot = 4;

     cfg = [];
     cfg.parameter = 'coh';
     cfg.interpmethod        = 'cubic';
     it_tremor_dics = 
ft_sourceinterpolate(cfg,source_tremor_dics{freq_to_plot},t1);
     it_notremor_dics = 
ft_sourceinterpolate(cfg,source_notremor_dics{freq_to_plot},t1);

     cfg =  [];
     cfg.method = 'ortho';
     cfg.funparameter = 'coh';
     cfg.maskparameter = 'coh';
     cfg.interactive = 'yes';
     figure;
     cfg.funcolorlim = [0 max(it_tremor_dics.coh)];
     ft_sourceplot(cfg,it_tremor_dics);
     cfg.funcolorlim = [0 max(it_notremor_dics.coh)];
     ft_sourceplot(cfg,it_notremor_dics);


More information about the fieldtrip mailing list