= Processing ROIs = ROIs in MNE are defined as "label" files. Freesurfer already creates a parcellation of the cortical surface in various regions of interest (see subdirectory "label" in your subjects' MRI directory). These can be converted to label files for MNE. You can then use [http://imaging.mrc-cbu.cam.ac.uk/meg/AnalyzingData/MNE_ComputeEstimates mne_make_movie] in order to extract amplitudes for these ROIs, e.g. for statistical analysis. You can also [#ownlabels define your own ROIs]. You can morph ROIs between different brains (e.g. from average brain to individual brains) using mne_morph_labels. The resulting amp-files can be [#processampfiles processed in Matlab]. The parameters below are reasonable choices for standard analyses. However, these Wiki pages are not supposed to substitute the [http://www.nmr.mgh.harvard.edu/meg/manuals/MNE-manual-2.6.pdf MNE manual], [http://imaging.mrc-cbu.cam.ac.uk/meg/MEGpapers reading papers], and [http://imaging.mrc-cbu.cam.ac.uk/imaging/ImagersInterestGroup discussions] with more experienced researchers. == Using Pre-defined Labels == If you've morphed all your individual STC-files to an average brain (called "average" in the example), you can create MNE-labels from these: {{{ #!/bin/sh mne_annot2labels --subject average --parc aparc }}} This will result in files such as "fusiform-lh.label" in the MRI label subdirectory. These are text files that you can read into a text editor etc. Then you can extract ROI information using mne_make_movie. The following script does it for multiple subjects, conditions, labels and both hemispheres. The resulting *.amp-files are text files that you can [#processampfiles read into Excel, Matlab] etc. {{{ #!/bin/sh # ## Your variables: MRIpath='/myMRIdirectory/' # where your MRI subdirectories are STCpath='/mySTCpath/' # where your STC files are outpath='/myoutputdirectory' # where the results should go #condition names as used in file names conds=('cond1' 'cond2' 'cond3') # subjects names used for MRI data subjects=(\ 'Subject1' \ 'Subject2' \ 'Subject3' \ ) # MEG IDs (your directory structure may differ) subj_pre=(\ 'meg10_0001' \ 'meg10_0002' \ 'meg10_0003' \ ) # MEG subdirectories (your directory structure may differ) subj_dir=(\ '100001' \ '100002' \ '100003' \ ) # labels to be processed labels=(\ 'fusiform'\ 'inferiorparietal'\ 'parsopercularis'\ 'parsorbitalis'\ 'supramarginal'\ 'temporalpole'\ ) hemispheres=(\ 'lh' \ 'rh' \ ) # Processing: nsubjects=${#subjects[*]} lastsubj=`expr $nsubjects - 1` nconds=${#conds[*]} lastcond=`expr $nconds - 1` nlabels=${#labels[*]} lastlabel=`expr $nlabels - 1` nhemispheres=${#hemispheres[*]} lasthemisphere=`expr $nhemispheres - 1` # Processing: for ss in `seq 0 ${lastsubj}` do echo " " echo " Computing movies for SUBJECT ${subjects[m]}" echo " " for cc in `seq 0 ${lastcond}` do echo " " echo " Computing movies for condition ${conds[c]}" echo " " for bb in `seq 0 ${lastlabel}` do echo " " echo " Computing movies for label ${labels[b]}" echo " " for hh in `seq 0 ${lasthemisphere}` do echo " " echo " Computing movies for hemisphere ${hemispheres[h]}" echo " " mne_make_movie \ --subject ${subjects[ss]} \ --stcin ${STCpath}/${subj_pre[ss]}_0${subjects[ss]}_${conds[cc]}-${hemispheres[hh]}.stc \ --label ${MRIpath}/average/label/${labels[bb]}-${hemispheres[hh]}.label \ --labelverts \ --labeltag -${subjects[ss]}_${conds[cc]}.amp \ --labeloutdir ${outpath} done # hemispheres done # labels done # conditions done # subjects }}} [[Anchor(ownlabels)]] == Create your own labels == If you create your own labels, the path name for the label files (--label) should be changed accordingly. 1) Display a cortical surface (and e.g. an STC file) in mne_analyze. 2) Define the borders of your ROI by defining points using your right mouse button. 3) Hold the "CTRL" key and click into the centre of your points with your right mouse button. 4) Save the label. 5) Use mne_make_movie to extract information for this label. Note that you can use mne_morph_labels to morph labels between subjects, for example to the average brain. [[Anchor(processampfiles)]] == Processing Amp-files in Matlab == The following Matlab script reads amp-files, and averages across vertices and within latency ranges. The output will be written to an Excel file or separate text files. As usual, there is not copyright but also no guarantee... {{{ % Reads output of MNE label (ROI) analysis (i.e. amp-files) % Computes averages across all vertices within amp-file, and for pre-defined latency ranges % Output in Excel file (one worksheet per latency range) and text files (one file per latency range) % output format: conditions fastest within labels % OH, Dec 2010 % Latency ranges latranges(1,:) = [150 200]; % ms latranges(2,:) = [400 500]; % ms nr_rgs = size(latranges, 1); baseline = [-100 0]; % baseline correction (leave empty [] if not needed) AMPpath = '/PathOfAmpFiles/'; % input path for amp-files resultpath = '/PathOfResults/'; % output path resultfilestem = 'ResultFileStem'; % stem for output txt/xls-files % Names of different condition names (if exist) conds={'cond1', 'cond2'}; nr_conds = length(conds); subjects={ 's1', ... 's2', ... 's3', ... }; nr_sbs = length(subjects); % Namels of label files (specify -lh and -rh separately) labels = { 'Angular-lh', ... 'Angular-lh', ... 'AntMidTemp-lh', ... 'PostMidTemp-lh', ... }; nr_lbls = length(labels); %% Reading data from amp-files; computing mean across vertices and for separate latency ranges clear alldata; for rr = 1:nr_lbls, % for all labels fprintf(1, '%s\n', labels{rr}); for ss = 1:nr_sbs, % for all subjects fprintf(1, '%s\n', subjects{ss}); for cc = 1:nr_conds, % for all conditions fprintf(1, '%s\n', conds{cc}); amp_in_file = fullfile( AMPpath, [labels{rr} '-' subjects{ss} '_' conds{cc} '.amp'] ); fprintf(1, 'File: %s\n', amp_in_file); % read current amp-file datain = dlmread( amp_in_file ); lats = datain(1,2:end-1); % latencies (ms in amp-file) data = datain(2:end,2:end-1); % actual data for all vertices in file % only if baseline interval specified: baseline correction if ~isempty(baseline), [tmp, b1] = min ( abs( lats-baseline(1) ) ); [tmp, b2] = min ( abs( lats-baseline(2) ) ); meanbase = mean( data(:,b1:b2) , 2); [m,n] = size(data); repmeanbase = repmat(meanbase, 1, n); data = data - repmeanbase; end; meandata = mean( data ); % mean across vertices for tt = 1:nr_rgs, % averages for time ranges [tmp, t1] = min ( abs( lats-latranges(tt,1) ) ); [tmp, t2] = min ( abs( lats-latranges(tt,2) ) ); alldata(tt,cc,rr,ss) = mean( meandata(t1:t2) ); % alldata contains all data values (lat ranges, conditions, labels, subjects) end; % tt end; % cc end; % ss end; % rr %% Output result to Excel-file and text-files % File name of Excel-file that will contain the output xls_out = fullfile( resultpath, [resultfilestem '.xls']); % Excel file, one spread sheet per latency range for tt = 1:nr_rgs, % for all latency ranges file_out = fullfile( resultpath, [resultfilestem '_' num2str(latranges(tt,1)) '_' num2str(latranges(tt,2)) '.txt']); % reorganise data matrix for output for rr = 1:nr_lbls, for cc = 1:nr_conds, index = (rr-1)*nr_conds + cc; outmat(:,index) = squeeze( alldata(tt,cc,rr,:) ); outlabel{index} = [labels{rr} '_' conds{cc}]; % text label for first line in output file (one label per column) end; % cc end; % rr % Write to different worksheets in Excel-file (one worksheet per latency range) xlswrite(xls_out, outmat, [num2str(latranges(tt,1)) '_' num2str(latranges(tt,2))]); % Write to text files (one file per latency range) fprintf(1, 'Output: %s\n', file_out); fid = fopen( file_out, 'w' ); for i = 1:index, fprintf( fid, '%s ', outlabel{i} ); % labels in first line end; fprintf(fid, '\n'); for i = 1:nr_sbs, for j = 1:index, fprintf(fid, '%f ', outmat(i,j)); end; fprintf(fid, '\n'); end; fclose(fid); end; % tt }}}