[FieldTrip] issues with ft_connectivityanalysis, interpolation, and parcellation in EEG
Christian Mista
cmista at ingenieria.uner.edu.ar
Wed May 22 16:34:22 CEST 2019
Hi Jan-Mathijs,
Thank you for your replay. I tried to describe the problem as clear as
possible, but it seems I ended omitting information in the process. Here is
all my code so far. I still can't find what i'm doing wrong.
My data is a preprocessed continuous eeg recording.
% prepare layout
cfg = [];
%I have to rotate the axis layout
aux_elec = chanloc.elec;
aux_elec.pnt(:,1) = -chanloc.elec.pnt(:,2);
aux_elec.pnt(:,2) = chanloc.elec.pnt(:,1);
%update direction
chanloc.elec.pnt = aux_elec.pnt;
%layout for plotting
cfg.elec = chanloc.elec;
layout = ft_prepare_layout(cfg);
% subdivide into trials of 1 seconds 10% overlap
cfg = [];
% single number (in unit of time, typically seconds) of the required
snippets
cfg.length = 1;
% single number (between 0 and 1 (exclusive)) specifying the fraction of
overlap between snippets (0 = no overlap)
cfg.overlap = 0.1;
%cut
data = ft_redefinetrial(cfg, data);
%% calculate cross-spectrum
cfg = [];
cfg.method = 'mtmfft';
cfg.taper = 'hanning';
%For connectivity analysis we need power and phase -> 'fourier'
cfg.output = 'fourier';
cfg.keeptrials = 'yes';
%frequency of interest foilim at 10 Hz +/- 1 Hz
cfg.foi = 10;
cfg.tapsmofrq = 1;
%frequency analysis
freq1 = ft_freqanalysis(cfg, data);
%% Calculate source model
[headmodel sourcemodel] = read_custom_head_source_model(freq1); *%function
at the end of the email*
%% do the source reconstruction
cfg = [];
cfg.frequency = freq1.freq;
cfg.method = 'pcc'; % Dynamic Imaging of
Coherent Sources
cfg.headmodel = headmodel;
cfg.grid = sourcemodel; % Our grid and the
leadfield
cfg.pcc.projectnoise = 'yes'; % estimate noise
cfg.pcc.lambda = '10%'; % how to regularise
cfg.pcc.keepfilter = 'yes'; % keep the spatial
filter in the output
cfg.pcc.realfilter = 'yes'; % retain the real
values
cfg.keeptrials = 'yes';
cfg.senstype = 'eeg';
SourceData = ft_sourceanalysis(cfg, freq1);
[SourceData] = ft_sourcedescriptives([], SourceData);
* %% connectivity (this is the code I posted before)*
cfg = [];
cfg.method = 'coh';
cfg.complex = 'absimag';
source_conn = ft_connectivityanalysis(cfg, SourceData);
%The conectome
figure;imagesc(source_conn.cohspctrm);
%Parcellation
atlas =
ft_read_atlas('/fieldtrip-master/template/atlas/aal/ROI_MNI_V4.nii');
cfg = [];
cfg.interpmethod='nearest';
cfg.parameter='tissue';
[int_atlas] = ft_sourceinterpolate(cfg, atlas, source_conn);
int_atlas.pos = source_conn.pos; % otherwise the parcellation won't work
% and call ft_sourceparcellate:
cfg = [];
cfg.parcellation = 'tissue';
cfg.parameter = 'cohspctrm';
parc_conn = ft_sourceparcellate(cfg, source_conn, int_atlas);
figure;imagesc(parc_conn.cohspctrm);
+++ continue code
function [hdm lf] = read_custom_head_source_model(data)
%% read labels and search positions in template
elec = ft_read_sens('standard_1020.elc');
% Change unit for visivility
data.elec.unit = 'mm';
for labelindex = 1:length(data.label)
%position of my electrodes in the template standard_1020
Index = find(strcmpi(elec.label, data.label{labelindex}));
%writing the real position of the electrodes in my data
data.elec.chanpos(labelindex,:) = elec.chanpos(Index,:);
data.elec.elecpos(labelindex,:) = elec.elecpos(Index,:);
end
% Load template head model
load('/fieldtrip-master/template/headmodel/symetric_headmodel.mat')
headmodel = ft_convert_units(headmodel, data.elec.unit);
%% compute the leadfield
cfg = [];
cfg.elec = data.elec;
cfg.elec.unit = 'mm';
cfg.headmodel = headmodel;
cfg.grid.resolution = 20; % use a 3-D grid with a 20 mm
resolution
[lf] = ft_prepare_leadfield(cfg);
end
I attached a figure how the source nai index looks in a sourceplot. Thanks
for your help.
All the best,
Christian
El mar., 21 may. 2019 a las 15:44, Schoffelen, J.M. (Jan Mathijs) (<
jan.schoffelen at donders.ru.nl>) escribió:
> Hi Christian,
>
> I guess you need to figure out why the dimension of the coherence matrix
> does not match the expectations.
> Based on the information you provide (i.e. the lack thereof: it’s not
> clear how you compute SourceData, and how you spectrally transformed your
> sensor data that goes into the source reconstruction step) there is lottle
> to go on.
>
> Best wishes,
> Jan-Mathijs
>
>
>
>
> On 21 May 2019, at 19:27, Christian Mista <cmista at ingenieria.uner.edu.ar>
> wrote:
>
> Hi FieldTrip community,
>
> I've been trying to perform a connectivity analysis using a 66 eeg
> recording database. So far, I've being able to solve the sourceanalysis
> (following the tutorial
> http://www.fieldtriptoolbox.org/tutorial/networkanalysis/) and plot the
> source activity. However, the problem starts when I'm trying the
> connectivity analysis. Any grid dimension lower than 20 mm in the
> sourcemodel calculation results in a matlab error (Out of memory) in the
> connectivity analysis. I guess that a grid dimension lower than 20 mm
> conveys to huge matrix sizes, not manageable by my OS (linux + Matlab).
>
> %% This is how I compute the sourcemodel (run ok)
> cfg = [];
> cfg.elec = data.elec;
> cfg.elec.unit = 'mm'; % unit in cm
> cfg.headmodel = headmodel;
> cfg.grid.resolution = 20; % use a 3-D grid with a 20 mm resolution
> [lf] = ft_prepare_leadfield(cfg);
>
>
> After computing the sourcemodel using the 20 mm grid, I have issues to
> parcellate my data. My main concern is about the mismatch size between the
> connectivity matrix and the atlas.
>
> source_conn =
> dim: [7 9 8]
> inside: [504×1 logical]
> pos: [504×3 double]
> cohspctrm: [5544×5544 double]
> dimord: 'pos_pos_freq'
> freq: 10
> cfg: [1×1 struct]
>
>
> atlas =
> dim: [91 109 91]
> hdr: [1×1 struct]
> transform: [4×4 double]
> unit: 'mm'
> tissue: [91×109×91 double]
> tissuelabel: {1×116 cell}
> coordsys: 'mni'
>
> I'd tried to interpolate and parcellate the matrix, but I must be missing
> or confusing something... Below is the code to calculate the connectivity
> and the parcellation.
>
> %% connectivity
> cfg = [];
> cfg.method = 'coh';
> cfg.complex = 'absimag';
> source_conn = ft_connectivityanalysis(cfg, SourceData);
>
> %The conectome
> figure;imagesc(source_conn.cohspctrm); %5544x5544 double
>
> %Parcellation
> atlas =
> ft_read_atlas('/fieldtrip-master/template/atlas/aal/ROI_MNI_V4.nii');
>
> cfg = [];
> cfg.interpmethod='nearest';
> cfg.parameter='tissue';
> [int_atlas] = ft_sourceinterpolate(cfg, atlas, source_conn);
> int_atlas.pos = source_conn.pos; % otherwise the parcellation won't
> work
>
> % and call ft_sourceparcellate:
> cfg = [];
> cfg.parcellation = 'tissue';
> cfg.parameter = 'cohspctrm';
> parc_conn = ft_sourceparcellate(cfg, source_conn, int_atlas);
>
> figure;imagesc(parc_conn.cohspctrm);
>
> ++Error in command windows matlab
>
> there are in total 504 positions, 230 positions are inside the brain, 181
> positions have a label
> 168 of the positions inside the brain have a label
> 168 of the labeled positions are inside the brain
> 62 of the positions inside the brain do not have a label
> Error using ft_notification (line 340)
> unsupported dimord unknown_unknown_freq
>
> Error in ft_error (line 39)
> ft_notification(varargin{:});
>
> Error in ft_sourceparcellate (line 309)
> ft_error('unsupported dimord %s', dimord{i})
>
> Two questions
> -Is 20 mm the min grid size to calculate connectivity?
> -What I'm missing in the parcellation process?
>
> I would really appreciate any advice, I've been scratching my head for a
> while on this one.
>
> Best,
> Christian
> _______________________________________________
> fieldtrip mailing list
> https://mailman.science.ru.nl/mailman/listinfo/fieldtrip
> https://doi.org/10.1371/journal.pcbi.1002202
>
>
> _______________________________________________
> fieldtrip mailing list
> https://mailman.science.ru.nl/mailman/listinfo/fieldtrip
> https://doi.org/10.1371/journal.pcbi.1002202
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.science.ru.nl/pipermail/fieldtrip/attachments/20190522/7598c99b/attachment-0002.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: sourceNAI.jpg
Type: image/jpeg
Size: 18998 bytes
Desc: not available
URL: <http://mailman.science.ru.nl/pipermail/fieldtrip/attachments/20190522/7598c99b/attachment-0002.jpg>
-------------- next part --------------
_______________________________________________
fieldtrip mailing list
https://mailman.science.ru.nl/mailman/listinfo/fieldtrip
https://doi.org/10.1371/journal.pcbi.1002202
More information about the fieldtrip
mailing list