[FieldTrip] I think you solved the problem

jan-mathijs schoffelen jan.schoffelen at donders.ru.nl
Tue Apr 12 12:10:47 CEST 2011


Dear Jan,

Apart from not being properly aligned, the segmentation looks a bit  
strange to me. I suspect that not everything went well here ;o).
Could you try the following:

specify cfg.coordsys = 'neuromag', both in your call to  
ft_volumerealign and in your call to ft_volumesegment. The  
cfg.coordinates for ft_volumesegment has to be removed (actually it is  
a deprecated option). The idea now is that mri-structures in fieldtrip  
can have a coordsys field, which allows for more transparent use of  
the different head coordinate system conventions. This takes away the  
need for intermediately coregistering the MRI in 'ctf'-convention, and  
would also take away your need to call headcoordinates later on.

Best wishes,

Jan-Mathijs


On Apr 12, 2011, at 11:07 AM, <Jan.Hirschmann at med.uni-duesseldorf.de> <Jan.Hirschmann at med.uni-duesseldorf.de 
 > wrote:

> Dear fieldtrip experts,
>
> I have two questions regarding head model creation. As noted on this  
> thread, the volumesegment function was updated and I tested it for  
> our Neuromag data. The segmentation is performed, but unfortunately  
> it is not aligned with the MRI in my case. Here is the code I am  
> using, the fieldtrip is from 9th April 2011.
>
> %read mri
> mri                = ft_read_mri(subject_files.fiff_mri);
> mri.anatomy=double(mri.anatomy);
>
> %these are the fiducials for this subject taken from the Neuromag  
> GUI for coregistration
> cfg=[];
> cfg.fiducial.rpa=[136.35   142.80    31.96];
> cfg.fiducial.nas=[47.84   101.80   100.10];
> cfg.fiducial.lpa=[139.22   146.17   162.69];
>
> %define the head coordinate system according to CTF conventions
> cfg.method='fiducial';
> real_mri=ft_volumerealign(cfg,mri);
>
> %segment
> cfg                = [];
> cfg.template       = '/data/apps/spm/spm8/templates/T1.nii';
> cfg.coordinates    = 'ctf';
> cfg.keepintermediate = 'no';
> segmentedmri     = ft_volumesegment(cfg, real_mri);
>
> %plot white matter
> test=segmentedmri;
> test.anatomy=real_mri.anatomy;
> cfg=[];
> cfg.funparameter='white';
> ft_sourceplot(cfg,test); %see attached picture
>
> The other issue regards back-transformation from CTF to Neuromag  
> coordinates, which is necessary to make the head model fit the  
> sensors. My idea was to create an appropriate transformation matrix  
> like this.
>
> cd /net/avidya/storage/home/jan/fieldtrip-20110409/private
> ctfmat=headcoordinates(nas,lpa,rpa,'ctf');
> nmmat=headcoordinates(nas,lpa,rpa,'neuromag');
> ctf_to_nm=nmmat/ctfmat;
>
>
> And then to use it on the head model to bring it back into Neuromag  
> coordinates:
>
> %create single shell, realistic headmodel
> cfg                = [];
> hdm                = ft_prepare_singleshell(cfg,segmentedmri);
>
> % transformation of headmodel into Neuromag space
> hdm.bnd.pnt=warp_apply(ctf_to_nm,hdm.bnd.pnt,'homogeneous');
>
> Does this survive a sanity check?
>
> Best regards and thanks a lot,
>
> Jan
>
>
> Von: fieldtrip-bounces at donders.ru.nl [mailto:fieldtrip-bounces at donders.ru.nl 
> ] Im Auftrag von Jen Whitman
> Gesendet: Montag, 28. Februar 2011 22:32
> An: Email discussion list for the FieldTrip project
> Betreff: [FieldTrip] I think you solved the problem
>
> I just checked, and when I re-ran my segmentation script with the  
> new Fieldtrip in order to use an spm8 template image, coordinates  
> got reversed. When I take out the calls to flipdim, they look fine  
> (see attached screenshots). That certainly explains the meaningless  
> results I was getting!
>
> Thanks for figuring that out,
>
> Jen
>
> On Mon, Feb 28, 2011 at 12:36 PM, jan-mathijs schoffelen <jan.schoffelen at donders.ru.nl 
> > wrote:
> Hi Jen,
>
> At first glance I have a comment on your script. You may need to  
> explicitly check the alignment of your segmented volume and the  
> original anatomy. A while a go some changes were made to  
> ft_volumesegment, taking away the need to do the flipdim(flipdim...   
> operations. I have posted this on the discussion list last January,  
> but you may not have noticed.
> Anyway, if you now have used a recent version of FieldTrip for your  
> segmentation both the location of your dipole grid, and the volume  
> conductor model will not be adequately coregistered with the data,  
> which may lead to funky results to begin with. That's most likely  
> not related to the filetype in which the volumes are saved for later  
> use.
>
> Best wishes,
>
> Jan-Mathijs
>
>
>
> On Feb 28, 2011, at 8:59 PM, Jen Whitman wrote:
>
>
> Hello Jan,
>
> When calling volumesegment, I specified 'ctf' as the coordinate  
> system. The function I wrote to call volumesegment and  
> prepare_singleshell for each subject and save the results is pasted  
> below, with a couple of  comments added for clarity.
> Over the weekend I tried specifying the coordinate system in the  
> call to ft_volumenormalise as 'ctf' rather than 'spm', and commented  
> out all the lines that said cfg.spmversion = 'spm8'; before calling  
> a function. However, that created worse results, as each plot  
> involved stripes of activation and empty voxels, suggesting that  
> 'ctf' was not the correct coordinate system to specify.
>
> Thanks for the attached script. Looking in that the comments in  
> that, I suspect that the solution to my problems will be to specify  
> my filetype as nifti_img rather than nifti. I'll let you know how  
> that goes.
>
> Jen
>
> ------------------------------------------------------------------------------------------------------------
> % the variable subj is simply a string consisting of a subject  
> number (e.g. 's05') which can be a folder name or part of a filename
> function [vol mri segmentedmri  
> segmentedmriF]=call_volume_segment_function_spm8(subj)
> cfg.spmversion = 'spm8';
> cfg.template   = '/home/woodwardlab/spm8/templates/EPI.nii';
> %cfg.template='/home/common/matlab/spm2/templates/T1.mnc';
> cfg.name=[subj '_volseg'];
> cfg.write='yes';
> cfg.smooth='no';
> cfg.coordinates='ctf';
> mri=read_mri([subj '/mri/' subj 'head.mri']); % made with CTF  
> mriConverter and mriViewer software, after fiducials were marked
> segmentedmri = volumesegment(cfg, mri);
> segmentedmriF = segmentedmri;
> segmentedmriF.gray  = flipdim(flipdim(flipdim(segmentedmriF.gray,3), 
> 2),1);
> segmentedmriF.white = flipdim(flipdim(flipdim(segmentedmriF.white,3), 
> 2),1);
> segmentedmriF.csf   = flipdim(flipdim(flipdim(segmentedmriF.csf,3), 
> 2),1);
> segmentedmriF.transform = mri.transform;
> segmentedmriF.anatomy   = mri.anatomy;
> cfg = [];
> cfg.spmversion = 'spm8';
> vol = prepare_singleshell(cfg, segmentedmriF);
> eval(['save ' subj '/meg/mrisegmented.mat mri segmentedmri  
> segmentedmriF vol'])
>
>
>
> On Sat, Feb 26, 2011 at 5:26 AM, jan-mathijs schoffelen <jan.schoffelen at donders.ru.nl 
> > wrote:
> Dear Jen,
>
> I do not manage to reproduce your issue, when only focussing on the  
> ft_volumewrite and visualization part of your pipeline. See attached  
> script, and yet an updated version of ft_volumewrite which you need  
> to (hopefully) draw the same conclusion as I did.
> Yet, I only now realize that your question may pertain to the entire  
> pipeline. It could be that something is going wrong there.
> I only see now that in the part of your script of which you reported  
> that it gave 'good' results, you specify cfg.coordinates = 'ctf'  
> before calling ft_volumenormalise. I assume this is correct, because  
> the coordinate system your source-reconstructed data lives in, is  
> according to the CTF-convention, and not according to the SPM- 
> convention. On the other hand, the template for the spatial  
> normalization lives in the SPM-coordinate system. In order for the  
> spatial normalization to work OK, Fieldtrip tries to convert from  
> one coordinate system to the other (once again, this is appropriate  
> behaviour), before doing the actual normalization. It seems that at  
> least in the script you sent along, in the final (not working  
> version), you specified cfg.coordinates = 'spm' prior to calling  
> ft_volumenormalise. This is probably wrong.
> Another important point that should be mentioned, is that the  
> coordinate systems in which the functional data and the anatomical  
> data live should be the same for the ft_sourceinterpolate to make  
> sense. In other words, if your source reconstructed images are  
> defined on a 3D grid of positions in CTF-space, the mri.transform of  
> your anatomy should describe a transformation from voxel to CTF-space.
> I think you may want to revisit step by step this part of the  
> pipeline; I don't think the problem lies in the writing.
> A final possibility of course is that Mricron is misbehaving...
>
> Best,
>
> Jan-Mathijs
>
>
>
>
>
>
> On Feb 25, 2011, at 9:44 PM, Jen Whitman wrote:
>
>
> Hi Jan,
>
> I tried re-running the analysis with the new script you sent me, and  
> the latest version of fieldtrip (since I needed ft_get_opt as well),  
> but the spm8 images being written are still producing flawed  
> results. It's the same problem as I mentioned briefly in my previous  
> post. I am not getting any error messages when writing these images.  
> Rather, my problem is that the spm8 and spm2 results from the same  
> data ought to be identical when viewed in mricron, but they're far  
> from it. When I use mricron to look at the results from the spm8- 
> format images, combined across participants to create a t-image, I  
> just get a single 'blob' spanning roughly half the brain. In  
> contrast, when I used spm2-format previously on the same data, the t- 
> image was much more meaningful; a posterior alpha power decrease in  
> a set of regions corresponding to the 'task-positive network' (a  
> network found in the results of an fMRI version of my experiment,  
> and widely reported in the fMRI literature).
>
> This failure to replicate the spm2 results when using spm8 images  
> from the same data leads me to suspect that something is wrong with  
> the coordinates for spm8 format. However, after experimenting  
> extensively with different cfg options I still haven't identified  
> the problem. If I my structural MRIs have been saved to .mri files  
> using CTF's MRIConverter program, which cfg options, particularly  
> for coordinates, template images, and filetypes, should I specify  
> before calling the ft_volumesegment, ft_prepare_singleshell,  
> ft_sourceinterpolate, ft_volumenormalise, and ft_volumewrite  
> functions? Or should I be calling a different set of functions now?
>
> Thanks again for your help,
>
> Jen
>
> On Thu, Feb 24, 2011 at 10:07 AM, Jen Whitman <jenwhitman at gmail.com>  
> wrote:
> Great, thanks!
>
> I'll start the analysis with your new script today and will let you  
> know how it works out.
>
> Jen
>
> On Thu, Feb 24, 2011 at 4:44 AM, jan-mathijs schoffelen <jan.schoffelen at donders.ru.nl 
> > wrote:
> Dear Jen,
>
> I managed to reproduce your problem. The code was rather buggy and  
> indeed ft_volumewrite did not behave as it should have. I now fixed  
> it in the code and it should run fine now. Please find the updated  
> file attached. It will be available on our ftp-server as of tonight.  
> Please note that I updated the documentation, and changed the names  
> of some of the options a bit. If you want to save your data in  
> analyze-format, you should specify cfg.filetype = 'analyze_spm'. If  
> you specify cfg.filetype = 'nifti', it should write out a volume to  
> nifti-format, using SPM8.
>
> Best wishes,
>
> Jan-Mathijs
>
>
>
>
>
> On Feb 23, 2011, at 7:44 PM, Jen Whitman wrote:
>
>>
>> Dear Jan,
>>
>> Thanks for the quick reply. Yes, I have tried it out quite a few  
>> times now, experimenting with different settings in the cfgs. Below  
>> I'll paste the code I've been using to write images - first the  
>> code that successfully created spm2 images that produced good  
>> results, then the code used for creating nifti format images from  
>> the same data. The comments in this second part are at this point a  
>> bit of a maze of cfg options I've been changing back & forth. Any  
>> insights/suggestions regarding how to set up my cfgs to make this  
>> work would be greatly appreciated.
>>
>> Jen
>>
>>
>> %%%%%%%% this code generated spm2-compatible images which did work  
>> (producing results that made sense).
>> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
>> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>>
>>     sourcetemp.avg.pow = (sourcetemp.avg.pow -  
>> sourcePre.avg.pow) ./ sourcePre.avg.pow;
>>
>>     cfg = [];
>>     cfg.downsample = 2;
>>     sourcetempInt = sourceinterpolate(cfg, sourcetemp , mri);
>>
>>     % projecting the plot onto a surface...
>>     cfg = [];
>>     cfg.coordinates  = 'ctf';
>>     cfg.template     = '/home/common/matlab/spm2/templates/T1.mnc';  
>> %this template is in MNI coordinates
>>     sourcetempIntN = volumenormalise(cfg, sourcetempInt);
>>
>>     filename=[subj 'run' int2str(r) 'cond' int2str(cond) '_'  
>> int2str(f) 'HzWin' int2str(win) 'width750ms'];
>>     cfg=[];
>>     cfg.parameter     = 'avg.pow'; % string, describing the  
>> functional data to be processed, e.g. 'pow', 'coh' or 'nai'
>>     cfg.filename      = [filename '.img'];  
>> %'testimageoutput_alphafreq'; % filename without the extension
>>     cfg.filetype      = 'spm'; %'analyze', 'spm', 'vmp' or 'vmr'
>>     cfg.coordinates   = 'spm'; %'spm, 'ctf' or empty for  
>> interactive (default = [])
>>     cfg.datatype = 'double'; %'float'; %'double'; %'bit1', 'uint8',  
>> 'int16', 'int32', 'float' or 'double'
>>
>>     volumewrite(cfg, sourcetempIntN)
>>
>>
>> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
>> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
>> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
>> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
>> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>> %%%%% this code below hasn't worked yet...
>>
>> % I added    cfg.spmversion = 'spm8';
>> % in the cfgs for the calls to ft_prepare_leadfield and  
>> ft_sourceanalysis,
>> % and in the call to prepare_singleshell after calling volumesegment
>>
>> % I've also ensured that spm8 is the only spm version in my path,  
>> even in
>> % the fieldtrip/external folder, and ensured that spm8 is installed  
>> properly
>> % (files compiled correctly, etc..)
>>
>>     sourcetemp.avg.pow = (sourcetemp.avg.pow -  
>> sourcePre.avg.pow) ./ sourcePre.avg.pow;
>>
>>     filename=[subj 'run' int2str(r) 'cond' int2str(cond) '_'  
>> int2str(f) 'Hzspm8_FIXv9_Win' int2str(win) 'width750ms.img'];
>>
>>     cfg = [];
>> %     cfg.coordinates  = 'spm'; % changed for version 5
>> %     cfg.spmversion = 'spm8'; % changed for version 5
>>     cfg.downsample = 4;
>>     sourcetempInt = ft_sourceinterpolate(cfg, sourcetemp , mri);
>>
>>
>>     % projecting the plot onto a surface...
>>     cfg = [];
>>     %cfg.coordinates  = 'spm'; % changed for version 5
>>     %cfg.coordinates  = 'ctf'; % changed for version 5
>>     cfg.coordinates = 'spm'; % changed back to spm for version 9
>>     cfg.downsample = 4;
>>     %cfg.spmversion = 'spm8'; % changed for version 6 (because this  
>> gets specified in volumewrite)
>>     cfg.template = 'Hmatrix/mask.nii.nii'; % basically equivalent  
>> to using spm8/templates/EPI.nii, except that mask.nii (produced  
>> from fmri data) has the desired voxel size
>>     % cfg.name = [filename]; % changed for version 6
>>     %cfg.write= 'yes'; % changed for version 6 (when this was set  
>> to 'yes' there was no subsequent call to volumewrite)
>>     cfg.write= 'no';   % changed for version 6
>>     sourcetempIntN = ft_volumenormalise(cfg, sourcetempInt);
>>
>>     % this whole cfg and function call added for version 6
>>     cfg=[];
>>     %   cfg.parameter     = string, describing the functional data  
>> to be processed, e.g. 'pow', 'coh' or 'nai'
>> %   cfg.filename      = filename without the extension
>> %   cfg.filetype      = 'analyze', 'spm', 'vmp' or 'vmr'
>> %   cfg.vmpversion    = 1 or 2 (default) version of the vmp-format  
>> to use
>> %   cfg.coordinates   = 'spm, 'ctf' or empty for interactive  
>> (default = [])
>>     cfg.parameter='pow';
>>     cfg.filename=filename;
>>     cfg.filetype = 'spm';
>>     cfg.spmversion = 'SPM8'; % capitalized after first error  
>> message from vers 6
>> %   cfg.dataformat='nifti';  % added after first error message from  
>> vers 6
>>                                  % commented out after 2nd error  
>> message from vers 6
>>     %cfg.vmpversion=2; % this is a filetype, like spm, so don't  
>> need to specify unless cfg.filetyp='vmp'
>>     cfg.coordinates='spm';
>>     ft_volumewrite(cfg,sourcetempIntN);
>>
>>
>>
>>
>>
>> On Wed, Feb 23, 2011 at 7:50 AM, jan-mathijs schoffelen <jan.schoffelen at donders.ru.nl 
>> > wrote:
>> Dear Jen,
>>
>> I notice that indeed in the documentation section of  
>> ft_write_volume there is a FIXME behind nifti. Yet, nifti format  
>> seems to be supported by ft_write_volume (at least in a recent  
>> version of fieldtrip). Did you try it at all (and ran into  
>> problems) or were you held back by the FIXME statement? Could you  
>> just try it out using a recent fieldtrip function?
>>
>> Thanks and best wishes
>>
>> Jan-Mathijs
>>
>>
>>
>> On Feb 23, 2011, at 2:21 AM, Jen Whitman wrote:
>>
>> Hello,
>>
>> While writing beamformed images to spm2 format in a previous  
>> version of fieldtrip (now lost due to a computer crash), I was able  
>> to get nice-looking results; networks of brain regions consistent  
>> with existing literature. When I try to write images from the same  
>> dataset and the same analysis to spm8 format, my results (t-images  
>> computed across subjects) end up being single clusters spanning  
>> large sections of the brain (e.g. a 'blob' spanning all of one  
>> hemisphere but not the other). Unfortunately, some aspects of my  
>> planned data analyses cannot be performed on spm2 images, so I have  
>> to find a way of writing to successfully to nifti format.
>>
>> I just noticed that in the comments in the ft_write_volume  
>> function, which I am calling via ft_volumewrite, it says 'FIXME'  
>> next to nifti under the list of supported dataformats. Is there by  
>> any chance a patch out there for writing nifti images?
>>
>> Thanks!
>>
>> _______________________________________________
>> fieldtrip mailing list
>> fieldtrip at donders.ru.nl
>> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>>
>> Dr. J.M. (Jan-Mathijs) Schoffelen
>> Donders Institute for Brain, Cognition and Behaviour,
>> Centre for Cognitive Neuroimaging,
>> Radboud University Nijmegen, The Netherlands
>> J.Schoffelen at donders.ru.nl
>> Telephone: 0031-24-3614793
>>
>> _______________________________________________
>> fieldtrip mailing list
>> fieldtrip at donders.ru.nl
>> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>>
>> _______________________________________________
>> fieldtrip mailing list
>> fieldtrip at donders.ru.nl
>> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>
>
> Dr. J.M. (Jan-Mathijs) Schoffelen
> Donders Institute for Brain, Cognition and Behaviour,
> Centre for Cognitive Neuroimaging,
> Radboud University Nijmegen, The Netherlands
> J.Schoffelen at donders.ru.nl
> Telephone: 0031-24-3614793
>
>
> _______________________________________________
> fieldtrip mailing list
> fieldtrip at donders.ru.nl
> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>
>
> _______________________________________________
> fieldtrip mailing list
> fieldtrip at donders.ru.nl
> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>
> Dr. J.M. (Jan-Mathijs) Schoffelen
> Donders Institute for Brain, Cognition and Behaviour,
> Centre for Cognitive Neuroimaging,
> Radboud University Nijmegen, The Netherlands
> J.Schoffelen at donders.ru.nl
> Telephone: 0031-24-3614793
>
>
> _______________________________________________
> fieldtrip mailing list
> fieldtrip at donders.ru.nl
> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>
> _______________________________________________
> fieldtrip mailing list
> fieldtrip at donders.ru.nl
> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>
> Dr. J.M. (Jan-Mathijs) Schoffelen
> Donders Institute for Brain, Cognition and Behaviour,
> Centre for Cognitive Neuroimaging,
> Radboud University Nijmegen, The Netherlands
> J.Schoffelen at donders.ru.nl
> Telephone: 0031-24-3614793
>
>
> _______________________________________________
> fieldtrip mailing list
> fieldtrip at donders.ru.nl
> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>
> <misalignment.png>
> _______________________________________________
> fieldtrip mailing list
> fieldtrip at donders.ru.nl
> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip

Dr. J.M. (Jan-Mathijs) Schoffelen
Donders Institute for Brain, Cognition and Behaviour,
Centre for Cognitive Neuroimaging,
Radboud University Nijmegen, The Netherlands
J.Schoffelen at donders.ru.nl
Telephone: 0031-24-3614793

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.science.ru.nl/pipermail/fieldtrip/attachments/20110412/27ac6890/attachment.html>


More information about the fieldtrip mailing list