[FieldTrip] difficulty with nifti format and ft_write_volume
jan-mathijs schoffelen
jan.schoffelen at donders.ru.nl
Thu Mar 3 14:33:16 CET 2011
Dear Jen,
You still did not manage to convince me that this is a file-format
writing issue.
I am willing to believe that this is the case if you have done the
following:
Perform source analysis.
Interpolate the results onto the corresponding anatomy.
Write the resulting file to disk, either using spm2, or using spm8.
Importantly, you need to use the same matlab-variable, i.e. the output
of ft_sourceinterpolate and not two results which may have come from
two slightly different processing pipelines.
From the e-mail conversation so far, I did not yet get the impression
that you made this critical comparison. You may have done so, but in
that case you did not manage to communicate that clearly enough (at
least not to me).
One other possible cause for your problem could be that Mricro is
treating the different file-formats in a different way. When I read in
the different file formats in fieldtrip I don't find a difference.
Best wishes,
Jan-Mathijs
On Mar 3, 2011, at 2:17 AM, Jen Whitman wrote:
> Hi Jan,
>
> While I now have the segmented volumes lining up properly using the
> spm8 template, the final beamformed images are still not producing
> the expected results (i.e. those I obtained when writing to spm2-
> analyze format). I've been using the new 'nifti_img' filetype for
> ft_volumewrite, so maybe that's the source of the problem. Is it
> possible that the coordinates are off for the new nifti_img format?
>
> As for the coordinates specified in the cfg, I first tried
> specifying 'ctf' as the input for ft_volumenormalise and 'spm' as
> the coordinates to be used by ft_volumewrite when writing images
> (also with cfg.spmversion='SPM8'). When that didn't work, I started
> changing whether coordinates were 'ctf' or 'spm' for ft_volumewrite,
> ft_volumenormalise, and even ft_sourceinterpolate, but still fail to
> produce the expected results previously found with spm2 analyze
> format images. Perhaps a tutorial analogous to this one (http://fieldtrip.fcdonders.nl/tutorial/beamformer
> ) but writing beamformed images to nifti_img format would be useful?
>
> Thanks for all your help so far,
>
> 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
>
> _______________________________________________
> 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/20110303/87fc8381/attachment-0002.html>
More information about the fieldtrip
mailing list