[FieldTrip] Issue plotting Brainnetome aligned EEG source data

Jack Fogarty jf752 at uowmail.edu.au
Mon Jul 5 13:11:53 CEST 2021


Hi Jan-Mathijs,

Thank you for the pointers. I've been practicing your suggestions and just had two follow-up questions regarding ft_virtualchannels.

As mentioned, I am applying this to source-level EEG data to calculate virtual channel data for the Brainnetome atlas ROIs (so there should ultimately be 246 virtual channels/ROIs). The original data has 30 scalp channels. I am currently using eLORETA for source reconstruction.

How I apply the function:
cfg = [];
cfg.parcellation = 'tissue';
vcdata = ft_virtualchannel(cfg, cln_data, source, atlas_grid);

My questions:
Q1) Is this function currently only setup for MEG data? When I ran the ft_virtualchannel function I received this error:
...
applying the montage to the elec structure
...
Reference to non-existent field 'grad'.
...
Error in ft_virtualchannel (line 381)
data_vc.(sensfields{k}) = ft_apply_montage(data.grad, montage, 'feedback', 'none', 'keepunused', 'yes', 'balancename', bname);

(Q1) continued... 
ft_virtualchannel does run without error if I change "data.grad" so that it is also "data.(sensfields{k})" in line 381. This is so the code it isn't forced to look for the 'data.grad' field, and it can instead use 'data.elec' for EEG, but I am not sure if the output is sensible after my change as I don't have anything to compare. I have put the output structures for vcdata and vcdata.elec below if you, or others, don't mind having a look.

Q2) My source-level EEG trial amplitudes using ft_virtualchannel can be much larger than the scalp-level amplitudes. Is this expected? It makes me wonder whether the units have changed or if this variance is a typical product of the svd method in virtualchannel function (or simply a lack of averaging the mom across many dipoles).

For example, using the virtualchannel function the standard deviation for Virtual Channel (ROI) 1 amplitudes, in trial 1, is 221.96; whereas, if I calculate the mean across dipole mom in the same Virtual Channel and trial, using my previous code that you have seen (which is far far slower), the standard deviation in amplitude is ~9.49. In the original scalp level data the standard deviation in trial 1 is ~9.55 per channel. Does something seem amiss here?

Here is my output virtual channel data for one subject with 66 EEG trials. Trials are 2 seconds each, recorded at 500 Hz srate.

vcdata = struct with fields:
  
fsample: 500
elec: [1×1 struct]
hdr: [1×1 struct]
sampleinfo: [66×2 double]
trial: {1×66 cell}
time: {1×66 cell}
label: {246×1 cell}
cfg: [1×1 struct]
brainordinate: [1×1 struct]

vcdata.elec = struct with fields:

cfg: [1×1 struct]
chanpos: [246×3 double]
elecpos: [30×3 double]
homogeneous: [4×4 double]
label: {246×1 cell}
tra: [246×30 double]
type: 'eeg1010'
unit: 'mm'
chanposold: [30×3 double]
labelold: {30×1 cell}

Any insight on these will be much appreciated. 

Thanks,
Jack



More information about the fieldtrip mailing list