<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Dear Hanneke,<div><br></div><div>Actually I do this kind of analysis using the MNE solution from the Brainstrom pipeline. I do the following. First you have to determine a connectivity matrix that determines which vertices of your cortical mesh are neighbors. I do that with a brainstrom script called tess_vertices_connectivity.m. You can download brainstrom for free. Let's call the connectivity matrix C. If C(i,j) = 1 then vertices i and j are connected, if C(i,j) = 0, then not.</div><div>Later I changed the clusterstat.m of FT a little bit:</div><div><br></div><div>lines 38 to 48 I changed:</div><div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; "><span style="color: #223cfb">if</span> isfield(cfg, <span style="color: #b14bf0">'neighbours'</span>) && ~isempty(cfg.neighbours) && ~isfield(cfg,<span style="color: #b14bf0">'connectivity'</span>)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; ">  channeighbstructmat = makechanneighbstructmat(cfg);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; ">  issource = 0;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; "><span style="color: #223cfb">elseif</span> isfield(cfg, <span style="color: #b14bf0">'connectivity'</span>)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; color: rgb(177, 75, 240); "><span style="color: #000000">  disp(</span>'Using precomputed connectivity matrix !'<span style="color: #000000">);</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; ">  channeighbstructmat = cfg.connectivity; <span style="color: #2c9833">% connectivity has been already computed this is what I introduced</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; ">  issource = 0;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; color: rgb(34, 60, 251); ">else</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; ">  issource = 1;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; color: rgb(44, 152, 51); "><span style="color: #000000">  </span>% cfg contains dim and inside that are needed for reshaping the data to a volume, and inside should behave as a index vector</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; ">  cfg = fixinside(cfg, <span style="color: #b14bf0">'index'</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; color: rgb(34, 60, 251); ">end</div></div><div><br></div><div>By doing so, FT does not calculate a connectivity matrix based on distance, but using directly your connectivity matrix C (see below):</div><div><br></div><div>The next trick is to create a FT data structure from your MNE data, so that you can use ft_timelockstatistics.m. As a cortical mesh has the same 3d coordinates as a sensor helmet, I "press" my MNE surface data in a sensor data structure that I can use later with ft_timelockstatistic.m. This could look like this:</div><div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; "> </div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; ">MneERF1.grad.pnt=brain.vert; %brain.vert contains the vertices of my cortical mesh; be sure that the unit is cm</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; "><span style="color: #223cfb">for</span> i = 1:7000</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; "> MneERF1.label{i}=sprintf(<span style="color: #b14bf0">'A%g'</span>,i);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; color: rgb(34, 60, 251); ">end</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; ">MneERF1.grad.label = MneERF1.label;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; ">MneERF1.grad.tra = eye(7000);</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Courier; min-height: 22.0px">MneERF1.cfg.channel = UmneERF1.label;</p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; ">MneERF1.grad.ori = zeros(7000,3);</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Courier; min-height: 22.0px"><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; "><span style="color: #223cfb">for</span> i = 1:23</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; ">    MneERF1.individual(i,:,:) = squeeze(MNEsolution(:,i,:)); % Here I put the individual MNE solutions if I have 23 subjects; this depends a little bit of your data matrix</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; color: rgb(34, 60, 251); ">end</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; color: rgb(34, 60, 251); "><span class="Apple-style-span" style="color: rgb(0, 0, 0); ">MneERF1.dimord= 'subj_chan_time;</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 18px/normal Courier; color: rgb(34, 60, 251); "><div><br></div><div><font class="Apple-style-span" color="#000000" face="Helvetica"><span class="Apple-style-span" style="font-size: medium;">Now you can use timelockstatistic.m as described in the FT tutorial on sensor space data to calculate a non-parametric cluster based permutation statistic on your MNE surface data (for example MneERF1, MneERF2 are two conditions that you want to compare). The only difference is that you would introduce cfg.connectivity = C;, so that later</span></font></div><div><font class="Apple-style-span" color="#000000" face="Helvetica"><span class="Apple-style-span" style="font-size: medium;">clusterstat.m uses your C matrix to determine your neighbours. </span></font></div><div><font class="Apple-style-span" color="#000000" face="Helvetica"><span class="Apple-style-span" style="font-size: medium;"><br></span></font></div><div><font class="Apple-style-span" color="#000000" face="Helvetica"><span class="Apple-style-span" style="font-size: medium;">I hope that helps,</span></font></div><div><font class="Apple-style-span" color="#000000" face="Helvetica"><span class="Apple-style-span" style="font-size: medium;"><br></span></font></div><div><font class="Apple-style-span" color="#000000" face="Helvetica"><span class="Apple-style-span" style="font-size: medium;">Best,</span></font></div><div><font class="Apple-style-span" color="#000000" face="Helvetica"><span class="Apple-style-span" style="font-size: medium;"><br></span></font></div><div><font class="Apple-style-span" color="#000000" face="Helvetica"><span class="Apple-style-span" style="font-size: medium;">Stephan</span></font></div><div><font class="Apple-style-span" color="#000000" face="Helvetica"><span class="Apple-style-span" style="font-size: medium;"><br></span></font></div></div><div><br></div></p></div><div><div><div>El 30/12/2010, a las 00:18, Meeren.H.K.M. escribió:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Dear Jan-Mathijs, <br><br>Thank you for your quick answer. I have used the MNE/mne_analyze stream developed by Matti Hamalainen which implements the anatomically-constrained noise-normalized MNE <br>(Dale et al.2000). The spatial structure of the data is indeed the cortical sheet segmented and reconstructed using Freesurfer. The individual cortical sheets were morphed onto each other using Matti's mne-stream which performs intersubject alignment of cortical landmarks based on a spherical surface-based coordinate system according to the method of  Fischl et al. (1999, Hum. Brain Mapping 8:272–284). I it makes use of a Freesurfer algorithm.   <br><br>Although the cortical sheet can functionally be considered as a folded 2D-sheet, computation-wise it is a 3D-patch of vertices, with each vertex having an x, y and z-coordinate, being the positions of the dipoles. I presume FT_SOURCESTATISTICS uses a 3D-voxel-grid, with the neighbors of each voxel being automatically defined on the basis of this grid (?). The trick would be then to translate the 3D-patch into a 3D-grid..., or not? No, I haven't thought of it yet how to do this. Also I don't know in which field and which format I should put the spatial info..<br><br>Alternatively, I was wondering whether I could work my way around it by using FT_TIMELOCKSTATISTICS instead and to consider the vertices as a set of (intracranial) electrodes with their x,y,z coordinates (and their time-course!). For the spatial clustering I would need to generate a neighborhood-structure. I don't know, however, how I should exactly pass the vertex positions info to the function. Using cfg.elec or cfg.elecfile, or data.elec, but it is not clear to me what should be the exact format of the structure. It is also not clear to me whether it is necessary to give each vertex a label (in which field should I put this?), or whether only setting cfg.neigbourdist would do the trick. <br><br>It would be very helpful to have an example EEG input dataset for FT_TIMELOCKSTATISTICS and an example input dataset for FT_SOURCESTATISTICS to see what the exact format of the data should be! I couldn't find either of them in the tutorial.   <br><br>Best regards, <br><br>Hanneke<br><br><br>-----Original Message-----<br>From: jan-mathijs schoffelen <<a href="mailto:jm.schoffelen@gmail.com">jm.schoffelen@gmail.com</a>><br>To: <a href="mailto:hanneke.meeren@uvt.nl">hanneke.meeren@uvt.nl</a><br>Date: Wed, 29 Dec 2010 16:43:42 +0100<br>Subject: Re: [FieldTrip] cluster-based permutation tests on MNE-surface data<br><br>Hi Hanneke,<br><br>Performing cluster based statistics on source reconstructed data based  <br>on a cortical sheet is as of yet not supported (I assume at least that  <br>you do the standard MNE cortical sheet reconstruction). At the moment,  <br>we are actually working on implementing an MNE-like pipeline in  <br>FieldTrip.Our first strategy would be to interpolate the 2D sheets  <br>onto a 3D volume, and use the standard machinery for statistics. Yet,  <br>another viable approach indeed would be to build in support for 2D- <br>neighbourhood structures. Do you have any clear ideas on that? I would  <br>also be interested to see your recipe to warp the individual cortical  <br>sheets to a template.<br><br>Regarding the mailing list: the list is hosted on a new server since  <br>the beginning of December. Apparently the archives have not been moved  <br>along, or at least are not accessible. We'll look into this.<br><br>Best wishes,<br><br>Jan-Mathijs<br><br>PS: could you forward this message to the list; I am at home and  <br>cannot send mails from my regular account.<br><br><br><br>On Dec 29, 2010, at 4:25 PM, Meeren.H.K.M. wrote:<br><br><blockquote type="cite">Hi,<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">I would like to perform cluster-based permutation tests on MNE- <br></blockquote><blockquote type="cite">surface data, which I obtained using the MNE/Freesurfer pipeline. So  <br></blockquote><blockquote type="cite">rather than use the whole FT pipeline and start from scratch, I  <br></blockquote><blockquote type="cite">would like to import my existing source data into FieldTrip, and  <br></blockquote><blockquote type="cite">export the resulting stats to my own matlab visualization tools.  <br></blockquote><blockquote type="cite">Reading the tutorial and reference documentation I understand that I  <br></blockquote><blockquote type="cite">could directly call ft_sourcestatistics, but it is not clear to me  <br></blockquote><blockquote type="cite">what the exact data structure should be for the source data and  <br></blockquote><blockquote type="cite">which fields the cfg should contain. I could not find a tutorial- or  <br></blockquote><blockquote type="cite">example dataset for ft_sourcestatistics.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">For each condition I have the source data in a (subjects x vertices  <br></blockquote><blockquote type="cite">x time) 3d-array for each condition. Is it possible to have a time- <br></blockquote><blockquote type="cite">dimension in the source-data, or should I first convert to a two- <br></blockquote><blockquote type="cite">dimensional array subjects x vertices? In addition I have generated  <br></blockquote><blockquote type="cite">a location matrix which contains the x, y, z - coordinates of the  <br></blockquote><blockquote type="cite">vertices of my surface, which I presume is necessary to define  <br></blockquote><blockquote type="cite">neighbors. It is however not clear to me how to pass the location  <br></blockquote><blockquote type="cite">matrix to the function (should it be defined in a cfg field?). I  <br></blockquote><blockquote type="cite">have also tried to search the archives of the discussion list but  <br></blockquote><blockquote type="cite">was unable to find any messages before December 2010.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Does anyone have an example dataset available that can be used as  <br></blockquote><blockquote type="cite">input dataset for sourcestatistics, so I can see what the structure  <br></blockquote><blockquote type="cite">of the data should be? Could someone clarify how I should define the  <br></blockquote><blockquote type="cite">location data? Could someone help me out on how to search through  <br></blockquote><blockquote type="cite">the old messages in the discussion list archives.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Any help is greatly appreciated,<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Thanks a lot in advance,<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Hanneke<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">----------------------------------<br></blockquote><blockquote type="cite">Hanneke K.M. Meeren, PhD.<br></blockquote><blockquote type="cite">Research Fellow and Instructor<br></blockquote><blockquote type="cite">Medical Psychology and Cognitive Neuroscience<br></blockquote><blockquote type="cite">Tilburg University<br></blockquote><blockquote type="cite">P.O. Box 90153<br></blockquote><blockquote type="cite">5000 LE Tilburg<br></blockquote><blockquote type="cite">The Netherlands<br></blockquote><blockquote type="cite">email: <a href="mailto:hanneke.meeren@uvt.nl">hanneke.meeren@uvt.nl</a><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">_______________________________________________<br></blockquote><blockquote type="cite">fieldtrip mailing list<br></blockquote><blockquote type="cite"><a href="mailto:fieldtrip@donders.ru.nl">fieldtrip@donders.ru.nl</a><br></blockquote><blockquote type="cite"><a href="http://mailman.science.ru.nl/mailman/listinfo/fieldtrip">http://mailman.science.ru.nl/mailman/listinfo/fieldtrip</a><br></blockquote><br><br><br>----------------------------------<br>Hanneke K.M. Meeren, PhD.<br>Research Fellow and Instructor<br>Medical Psychology and Cognitive Neuroscience<br>Tilburg University<br>P.O. Box 90153<br>5000 LE Tilburg<br>The Netherlands<br>email: <a href="mailto:hanneke.meeren@uvt.nl">hanneke.meeren@uvt.nl</a><br><br><br>_______________________________________________<br>fieldtrip mailing list<br><a href="mailto:fieldtrip@donders.ru.nl">fieldtrip@donders.ru.nl</a><br>http://mailman.science.ru.nl/mailman/listinfo/fieldtrip</div></blockquote></div><br><div>
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div><br class="Apple-interchange-newline">________________________________________________________</div><div>Stephan Moratti, PhD<br><br></div><div>see also: <a href="http://web.me.com/smoratti/">http://web.me.com/smoratti/</a><br><br></div><div>Department of Basic Psychology</div><div>Universidad Complutense de Madrid</div><div><br></div><div>Centro de Tecnología Biomédica CBT,<br>Universidad Politécnica de Madrid,<br><br>en la actualidad (currently at) en el<br>Centro de Magnetoencefalografía Dr. Perez Modrego,<br>Universidad Complutense de Madrid,<br>Faculdad de Medicina,<br>Pabellón 8,<br>Avda. Complutense, s/n,<br>28040 Madrid,<br>Spain,<br><br>email: <a href="mailto:smoratti@psi.ucm.es">smoratti@psi.ucm.es</a><br>Tel.:    +34 91 394 2186<br>Fax.:   +34 91 394 2294</div></span></div></div></div>
</div>
<br></div></body></html>