<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>AnalyzingData/MNE_CovarianceMatrix</title><revhistory><revision><revnumber>31</revnumber><date>2013-03-08 10:02:15</date><authorinitials>localhost</authorinitials><revremark>converted to 1.6 markup</revremark></revision><revision><revnumber>30</revnumber><date>2012-11-27 23:21:17</date><authorinitials>cpc6-cmbg14-2-0-cust458.5-4.cable.virginmedia.com</authorinitials></revision><revision><revnumber>29</revnumber><date>2012-04-16 16:57:28</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>28</revnumber><date>2012-02-16 18:37:13</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>27</revnumber><date>2011-02-07 18:43:03</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>26</revnumber><date>2011-02-07 18:37:42</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>25</revnumber><date>2011-02-07 18:36:48</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>24</revnumber><date>2011-01-27 10:32:44</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>23</revnumber><date>2010-11-19 15:50:36</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>22</revnumber><date>2010-11-19 15:50:12</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>21</revnumber><date>2010-11-19 15:45:19</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>20</revnumber><date>2010-11-19 15:28:28</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>19</revnumber><date>2010-11-19 15:27:59</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>18</revnumber><date>2010-11-19 15:22:01</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>17</revnumber><date>2010-11-09 14:29:33</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>16</revnumber><date>2010-07-22 15:29:07</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>15</revnumber><date>2010-07-22 14:35:50</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>14</revnumber><date>2010-07-22 14:34:20</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>13</revnumber><date>2010-07-22 14:28:51</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>12</revnumber><date>2010-07-06 11:09:19</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>11</revnumber><date>2010-06-16 12:09:30</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>10</revnumber><date>2010-06-10 13:12:06</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>9</revnumber><date>2010-06-10 13:08:59</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>8</revnumber><date>2010-06-10 13:07:54</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>7</revnumber><date>2010-06-10 13:04:30</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>6</revnumber><date>2010-06-10 12:05:47</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>5</revnumber><date>2010-06-09 16:36:50</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>4</revnumber><date>2010-06-09 16:34:30</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>3</revnumber><date>2010-06-09 16:32:15</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>2</revnumber><date>2010-06-09 16:29:19</date><authorinitials>YaaraErez</authorinitials></revision><revision><revnumber>1</revnumber><date>2010-06-09 16:27:20</date><authorinitials>YaaraErez</authorinitials></revision></revhistory></articleinfo><section><title>Computing the Noise Covariance Matrix</title><para>The noise covariance matrix is needed for the computation of the inverse operator. </para><para>Ingredients for this script are </para><para>* raw MEG data files (e.g. those used for averaging, after maxfilter) </para><para>* <emphasis role="strong"><link linkend="covdescription">a description file</link></emphasis> (see below) </para><para>You can <emphasis role="strong"><link linkend="visualisecov">visualise the covariance matrices</link></emphasis> in Matlab. </para><para>The end result is a fiff-file containing the noise covariance matrix, which can be read into Matlab using mne_read_noise_cov. </para><para>Note: For some applications, for example <ulink url="http://imaging.mrc-cbu.cam.ac.uk/meg/AnalyzingData/MNE_singletrial">single-trial analysis</ulink>, you should use a covariance matrix computed on empty-room data. Pre-processing for these data should be as similar as possible to the raw data files used for analysis. </para><para>The parameters below are reasonable choices for standard analyses. However, these Wiki pages are not supposed to substitute the <ulink url="http://www.nmr.mgh.harvard.edu/meg/manuals/MNE-manual-2.6.pdf">MNE manual</ulink>, <ulink url="http://imaging.mrc-cbu.cam.ac.uk/meg/MEGpapers">reading papers</ulink>, and <ulink url="http://wiki.mrc-cbu.cam.ac.uk/imaging/ImagersInterestGroup#">discussions</ulink> with more experienced researchers. </para><screen><![CDATA[#
## Your variables:
datapath='<myrawMEGdatapath>'    # 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`
for m in `seq 0 ${lastsubj}`
do
  echo " "
  echo " Computing covariance matrix for SUBJECT  ${subj_pre[m]}"
  echo " "
  mne_process_raw  \
                --raw ${datapath}/${subj_pre[m]}/${subj_dir[m]}/rawMEGfile_raw1.fif \
                --raw ${datapath}/${subj_pre[m]}/${subj_dir[m]}/rawMEGfile_raw2.fif \
                --raw ${datapath}/${subj_pre[m]}/${subj_dir[m]}/rawMEGfile_raw3.fif \
                --eventsout ${datapath}/${subj_pre[m]}/${subj_dir[m]}/rawMEGfile_raw1-eve.txt \
                --eventsout ${datapath}/${subj_pre[m]}/${subj_dir[m]}/rawMEGfile_raw2-eve.txt \
                --eventsout ${datapath}/${subj_pre[m]}/${subj_dir[m]}/rawMEGfile_raw3-eve.txt \
                --projon \
                --cov cov_desc1.cov \
                --cov cov_desc2.cov \
                --cov cov_desc3.cov \
                --savecovtag -cov \
                --gcov ${datapath}/${subj_pre[m]}/${subj_dir[m]}/covmat-cov.fif
done # subjects]]></screen><para><anchor id="covdescription"/> </para><section><title>Covariance Matrix Description File</title><para>where the <emphasis role="strong">covariance description files</emphasis> cov_desc?.cov are of the form </para><screen><![CDATA[cov {
        gradReject      200e-12               # artefact rejection thresholds
        magReject       3e-12
        eegReject       120e-6
        eogReject       150e-6
        logfile         YourLogFileName.txt  # logfile that will contain some useful information
        fixSkew                              # Fixes problems with trigger onsets on different bits
]]><![CDATA[
        def {
                event   1        # trigger code
                tmin    -0.2     # interval used for covariance computation
                tmax    0
                basemin -0.2     # interval used for baseline correction
                basemax 0.0
        }
        def {
                event   2
                tmin    -0.2
                tmax    0
                basemin -0.2
                basemax 0.0
        }
        def {
                event   3
                tmin    -0.2
                tmax    0
                basemin -0.2
                basemax 0.0
        }
}]]></screen><para>If the parameters are the same for all input files, you only have to specify one description file. For more details and options see the MNE manual. </para><para><anchor id="visualisecov"/> </para></section><section><title>Visualise Covariance Matrices</title><para>The following script allows you to <emphasis role="strong">visualise covariance matrices</emphasis> for EEG (if used), magnetometers and gradiometers separately: </para><screen><![CDATA[% Will read MNE covariance matrix files (*.fif)
% and visualised them separately for magnetometers, gradiometers and EEG
% EEG will be average-referenced
% Olaf Hauk, Nov 2010
]]><![CDATA[
covpath = '/YourPathToData/';  % root directory for data
covname = 'YourFilename.fif'; % filename for MNE covariance matrix files in subject directories
]]><![CDATA[
% Specify subject information: MEG ID 1, MEG ID2 (may depend on your experiment)
% the script will look for covpath/subject{x}{1}/subject{x}{2}/covname as covariance matrix
cnt = 1;
subject{cnt} = {'meg10_0005', '123456'};
cnt = cnt+1;
subject{cnt} = {'meg10_0006', '654321'};
cnt = cnt+1;
subject{cnt} = {'meg10_0007', '162534'};
cnt = cnt+1;
]]><![CDATA[
nr_subs = length(subject);  % number of subjects specified
]]><![CDATA[
for ss = 1:nr_subs, % for all subjects...
]]><![CDATA[
  filein = fullfile( covpath, subject{ss}{1}, subject{ss}{2}, covname );    % input filename of covariance matrix file
  fprintf(1, '\nReading covariance matrix from %s\n', filein);
]]><![CDATA[
  covmat = mne_read_noise_cov( filein )    % read noise covariance matrix using MNE Matlab tool
]]><![CDATA[
  channames = covmat.names; % names of channels
  indices_EEG = strmatch('EEG', channames); % indices for EEG channels
  indices_MEG = strmatch('MEG', channames); % indices for MEG channels (grads+mags)
  for i=1:length(indices_MEG),
      lastnum(i) = str2num( channames{indices_MEG(i)}(end) );   % get last number of MEG channel names
  end;  % i
]]><![CDATA[
  indices_mags = indices_MEG( find ( lastnum == 1 ) );  % find magnetometer indices
  indices_grads = indices_MEG( find ( (lastnum==2)+(lastnum==3) ) );   % find gradiometer indices
]]><![CDATA[
  fprintf(1, 'There are %d magnetometers and %d gradiometers.\n', length(indices_mags), length(indices_grads));
]]><![CDATA[
  figure;   % create new figure
]]><![CDATA[
  if ~isempty(indices_EEG), % if file contains EEG...
    nr_EEG = length(indices_EEG); % number of electrodes
    fprintf(1, '...oh, and %d EEG electrodes.\n Average referencing EEG.\n\n', nr_EEG);
    covmatEEG = covmat.data(indices_EEG, indices_EEG);  % separate EEG covariance matrix
    avgop = eye(nr_EEG) - ones(nr_EEG)/nr_EEG;  % average reference operator
    covmatEEG = avgop*covmatEEG*avgop;  % apply average reference to EEG covariance matrix
    nr_plots = 3;   % plot mags, grads and EEG
    subplot(1,nr_plots,1);
    imagesc( covmatEEG );
    axis( 'square' );
    colorbar;
    th = title(['EEG ' subject{ss}{1}]); set(th, 'Interpreter', 'none');
  else,
      nr_plots = 2;
  end;  % plot mags and grads (no EEG)
]]><![CDATA[
  covmatmag = covmat.data(indices_mags, indices_mags);  % separate mags covariance matrix
  subplot(1,nr_plots,2);
  imagesc( covmatmag );
  axis( 'square' );
  colorbar;
  th = title(['Mags ' subject{ss}{1}]); set(th, 'Interpreter', 'none');
]]><![CDATA[
  covmatgrad = covmat.data(indices_grads, indices_grads);  % separate grads covariance matrix
  subplot(1,nr_plots,3);
  imagesc( covmatgrad );
  axis( 'square' );
  colorbar;
  th = title(['Grads ' subject{ss}{1}]); set(th, 'Interpreter', 'none');
]]><![CDATA[
end;    % ss]]></screen><para>The result may look something like this: </para><para><inlinemediaobject><imageobject><imagedata fileref="https://imaging.mrc-cbu.cam.ac.uk/meg/AnalyzingData/MNE_CovarianceMatrix?action=AttachFile&amp;do=get&amp;target=Covariance.jpg"/></imageobject><textobject><phrase>Covariance.jpg</phrase></textobject></inlinemediaobject> </para><para>Note: The patterns in these images are due to the spatial arrangements of electrodes and sensors. They may therefore vary for different sensor configurations. The main thing to look out for are channels with huge covariances, or flat channels, or patterns that suggest that all electrodes measured the same signal (indicating a problem with the reference etc.). The EEG in this example was average-referenced, and the MEG data maxfiltered. </para></section></section></article>