function extract = spm_cfg_eeg_inv_extract % configuration file for extracting source data from imaging source % reconstruction %_______________________________________________________________________ % Copyright (C) 2011 Wellcome Trust Centre for Neuroimaging % Vladimir Litvak % $Id: spm_cfg_eeg_inv_extract.m 6924 2016-11-09 11:38:00Z guillaume $ D = cfg_files; D.tag = 'D'; D.name = 'M/EEG datasets'; D.filter = 'mat'; D.num = [1 Inf]; D.help = {'Select the M/EEG mat files.'}; val = cfg_entry; val.tag = 'val'; val.name = 'Inversion index'; val.strtype = 'n'; val.help = {'Index of the cell in D.inv where the inversion results are be stored.'}; val.val = {1}; xyz = cfg_entry; xyz.tag = 'xyz'; xyz.name = 'Source location'; xyz.strtype = 'r'; xyz.num = [1 3]; xyz.help = {'Source location (in MNI coordinates)'}; label = cfg_entry; label.tag = 'label'; label.name = 'Source label'; label.strtype = 's'; label.num = [1 Inf]; label.help = {'Label for the source channel in the output file'}; source = cfg_branch; source.tag = 'source'; source.name = 'Source'; source.val = {label, xyz}; sources = cfg_repeat; sources.tag = 'sources'; sources.name = 'Sources to extract'; sources.values = {source}; sources.num = [1 Inf]; sources.help = {'Specify sources to extract data from'}; rad = cfg_entry; rad.tag = 'rad'; rad.name = 'VOI radius'; rad.strtype = 'r'; rad.num = [1 1]; rad.val = {5}; rad.help = {'Radius around each location to extract an eigenvariate from (mm).'}; type = cfg_menu; type.tag = 'type'; type.name = 'What to extract'; type.help = {'What to extract: evoked activity or single trials.'}; type.labels = {'Evoked', 'Single trials'}; type.values = {'evoked', 'trials'}; type.val = {'trials'}; fname = cfg_entry; fname.tag = 'fname'; fname.name = 'Output dataset name'; fname.strtype = 's'; fname.num = [0 Inf]; fname.val = {''}; fname.help = {'Output file name (empty for default)'}; extract = cfg_exbranch; extract.tag = 'extract'; extract.name = 'Source extraction'; extract.val = {D, val, sources, rad, type, fname}; extract.help = {'Extract source data from the results of inverse source reconstruction'}; extract.prog = @run_extract; extract.vout = @vout_extract; extract.modality = {'EEG'}; function out = run_extract(job) source = []; source.XYZ = cat(1, job.source.xyz); source.label = {job.source.label}; source.rad = job.rad; source.type = job.type; if ~isempty(job.fname) source.fname = job.fname; end out.D = {}; for i = 1:numel(job.D) D = spm_eeg_load(job.D{i}); D.val = job.val; if ~isfield(D.inv{D.val}, 'inverse') || ~isfield(D.inv{D.val}.inverse, 'J') error('Imaging source reconstruction is missing for subject %d.', i); end D.inv{D.val}.source = source; Ds = spm_eeg_inv_extract(D); out.D{i, 1} = fullfile(Ds.path, Ds.fname); end function dep = vout_extract(job) % Output is always in field "D", no matter how job is structured % Output is always in field "D", no matter how job is structured dep = cfg_dep; dep.sname = 'M/EEG dataset(s) extracted source data'; % reference field "D" from output dep.src_output = substruct('.','D'); % this can be entered into any evaluated input dep.tgt_spec = cfg_findspec({{'filter','mat'}});