= Averaging data in MNE = The following script is an example for a standard averaging procedure. Obviously, you may want to use different parameters - have a look at the manual for details and more options. You should have processed your raw data using [http://imaging.mrc-cbu.cam.ac.uk/meg/Maxfilter Maxfilter]. Note that MNE will not process EEG data from the CBU correctly unless you apply "mne_check_eeg_locations" to your files ([#checkeeglocs see below]). You can [#markbadchannels mark bad channels] in your fif-files using mne_mark_bad_channels. These bad channels will be excluded from further MNE operations (forward solution, inverse operator etc.). The end result will be fiff-files with averages for each condition defined in the specification file (see below). They can be [#readwritesubtract read into Matlab] using fiff_read_evoked. The following script requires a [#avgspecfile specification file] with averaging parameters (thresholds etc.). {{{ #!/bin/sh ## Your variables datapath='' # root directory for your MEG data # 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' \ ) ## Processing: nsubjects=${#subj_pre[*]} lastsubj=`expr $nsubjects - 1` # REPORT number of files to be processed: for m in `seq 0 ${lastsubj}` do echo " " echo " Averaging SUBJECT ${subjects[m]}" echo " " inpath=${path}'/'${subj_dir[m]}'/'${subjects[m]} echo ${inpath} mne_process_raw \ --raw ${datapath}/${subj_pre[m]}/${subj_dir[m]}/yourrawMEGfile1.fif \ --raw ${datapath}/${subj_pre[m]}/${subj_dir[m]}/yourrawMEGfile2.fif \ --raw ${datapath}/${subj_pre[m]}/${subj_dir[m]}/yourrawMEGfile3.fif \ --eventsout ${datapath}/${subj_pre[m]}/${subj_dir[m]}/yourrawMEGfile1-eve.txt \ --eventsout ${datapath}/${subj_pre[m]}/${subj_dir[m]}/yourrawMEGfile2-eve.txt \ --eventsout ${datapath}/${subj_pre[m]}/${subj_dir[m]}/yourrawMEGfile3-eve.txt \ --ave YourSpecificationFile.ave \ --gave ${datapath}/${subj_pre[m]}/${subj_dir[m]}/gave.fif \ --saveavetag _avg \ --highpass 0.1 \ --projon # applies average reference to EEG (and SSP to MEG if projector present in file) done # subjects }}} Note: You can modify the event information in the eve.txt-files, and read the modified information later using the --events option. This is useful when you want to average with respect to trigger combinations (e.g. correct responses only) etc. [[Anchor(avgspecfile)]] The specification file '''!YourSpecificationFile.ave''' should be of the form: {{{ average { # Rejection values # gradReject 200e-12 # artefact rejection thresholds magReject 3e-12 eegReject 120e-6 eogReject 150e-6 logfile ave_logfile.txt # log-file for some useful information fixSkew # Fixes problems with trigger onsets on different bits # Category specifications # category { name "Cond1" # name of condition event 1 # trigger/event code for condition tmin -0.1 # duration of epochs with respect to trigger tmax 1.0 bmin -0.1 # interval for baseline correction bmax 0.0 } category { name "Cond2" event 2 tmin -0.1 tmax 1.0 bmin -0.1 bmax 0.0 } } }}} '''Important''': If your stimuli are delayed with respect to your triggers, you should use the "delay" option for each condition in the description file. For example, at the CBU the visual projector delays stimuli by 2 refresh rates (i.e. 34 ms), so you should add "delay 0.034". [[Anchor(checkeeglocs)]] = Fixing EEG electrode positions = Unless you apply mne_check_eeg_locations to your data, MNE will get confused with the EEG electrode digitisation used at the CBU, and e.g. the creation of the forward solution for EEG will fail. {{{ #!/bin/sh # Your variables datapath='' # root directory for your MEG data # 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' \ ) #condition names as used in file names conds=('cond1' 'cond2' 'cond3') # Processing: nsubjects=${#subj_pre[*]} lastsubj=`expr $nsubjects - 1` nconds=${#conds[*]} lastcond=`expr $nconds - 1` for m in `seq 0 ${lastsubj}` do echo " " echo " Fixing electrodes for SUBJECT ${subjects[m]}" echo " " for c in `seq 0 ${lastcond}` do mne_check_eeg_locations \ --file ${datapath}/${subj_pre[m]}/${subj_dir[m]}/${conds[c]}.fif \ --fix done # conditions done # subjects }}} [[Anchor(markbadchannels)]] = Marking Bad Channels = You can mark channels already for raw MEG data files - these channels will then be excluded from artefact rejection during averaging. {{{ #!/bin/sh datapath='' # root directory for your MEG data mne_mark_bad_channels \ --bad yoursubjectbads.txt \ # File with bad channel information ${datapath}/YourSubjectDir/YourSubjectFile1.fif \ ${datapath}/YourSubjectDir/YourSubjectFile2.fif \ ${datapath}/YourSubjectDir/YourSubjectFile3.fif \ }}} where yoursubjectbads.txt could look like this {{{ EEG001 EEG044 }}} if EEG channels 1 and 44 are bad. I had problems when I created these text files in Windows - if in doubt, open the file under Linux (e.g. using nedit), use "save as" and make sure it's in Linux (not Dos) format. Or use the "dos2unix" command. [[Anchor(readwritesubtract)]] == Reading, Writing, Subtracting Fiff-files == This is a simple example of how you can read and write fiff-files, e.g. for subtracting conditions etc. Note that if you apply an inverse operator with the --dSPM option to subtracted data, you may have to adjust the number of effective averages (see manual). {{{ data1 = fiff_read_evoked( fiff_file1 ); % Read file 1 data2 = fiff_read_evoked( fiff_file2 ); % Read file 2 data3 = data2; % data3 will contain the subtracted data, plus other information from file 2 data3.evoked.epochs = data2.evoked.epochs - data1.evoked.epochs; % subtract file 1 from file 2 fiff_write_evoked(out_fiff_file, data3); % write subtracted data to fiff-file }}}