[Neuroimaging] 回复: Fwd: [Freesurfer] negative header afterpreproc-sess

Bai Haohao 744652457 at qq.com
Fri Jul 28 12:55:42 EDT 2017


Hi,


Thank you for your reply in email and github, I will try the newest version of nibabel to see if this problem can be fixed. 


It really helps me a lot, thank you:)


Best,


Bai Haohao




------------------ 原始邮件 ------------------
发件人: "Christopher Markiewicz";<effigies at bu.edu>;
发送时间: 2017年7月28日(星期五) 晚上11:18
收件人: "Neuroimaging analysis in Python"<neuroimaging at python.org>; 

主题: Re: [Neuroimaging] Fwd: [Freesurfer] negative header afterpreproc-sess



Hi Bai,


You can try setting the FSF_OUTPUT_FORMAT environment variable to 'mgz' (in $FREESURFER_HOME/FreeSurferEnv.sh).

I haven't tried this, and there may be code that presumes NIfTI inputs, but I would assume it would be fine with MGH/MGZ formats.

Chris


On Fri, Jul 28, 2017 at 10:59 AM, Bai Haohao <jarblank1200 at gmail.com> wrote:
Hello,

Thanks for your replies, and I agree with your idea that Nifti1 standard should be replaced by Nifti2, or do not save file into Nifti1 format.


However, I have tried convert input data format from "*.nii.gz" to "*.mgz", and delete origin *.nii.gz file, then running "preproc-sess", and I found freesurfer would detect the format of the input, and convert "*.mgz" to "*.nii.gz", finally I got Nifti1 data, with negative dim. 


Maybe there has an argument that could specify output format and convert output file format manually could solve it, but I think it would be helpful for other people who meet the same situation as me if nibabel could support reading these kind of data. 


Thanks for your opinions again, and I believe we hold the same view:)


Best,


Bai Haohao


On Thu, Jul 27, 2017 at 11:59 PM, Christopher Markiewicz <effigies at bu.edu> wrote:
I agree with this viewpoint from a user/standards perspective. AFAIK only FreeSurfer and nibabel support the surface hacks, and both also support the .mgh format, so there's no real advantage to using NIfTI here. For interoperability, other formats are more appropriate. I also think it's reasonable to encourage FreeSurfer to move toward writing NIfTI-2 when hacks are necessary to generate NIfTI-1 files.

From a nibabel-as-multitool perspective, while I understand the concern about propagating broken formats, I also think we should be able to read images as created by existing packages, as long as doing so doesn't harm our ability to read standard-conforming files.



Chris

On Thu, Jul 27, 2017 at 10:18 AM, Reynolds, Richard C. (NIH/NIMH) [E] <reynoldr at mail.nih.gov> wrote:


   
This seems like an appropriate case to be using the
 
NIFTI-2 standard, which uses 64-bit values rather than
 
the 16-bits for NIFTI-1 (which was done just to keep it
 
similar to ANALYZE).
 

 
 
For that matter, GIFTI was made to be the surface
 
alternative to NIFTI, and FreeSurfer supports it, as does
 
nibabel, it seems.
 

 
 
Even without those options, it seems like FreeSurfer
 
can still output what you want in a useful format.   
 
 

 
 
Breaking the NIFTI-1 standard is causing you trouble.
 
Maybe propagating that is not necessary.
 
 
 
- rick
 

 
 
 
 From: Bai Haohao <jarblank1200 at gmail.com>
 Sent: Thursday, July 27, 2017 9:41:13 AM
 To: neuroimaging at python.org
 Subject: [Neuroimaging] Fwd: [Freesurfer] negative header after preproc-sess  
 
  Dear nibabel experts, 
 
 I forward this email to nibabel mailing list because I think it is related to nibabel, even this problem is caused by nifti standard and freesurfer.
 
 
 I am using nibabel to load data after freesurfer "preproc-sess -suface self" and I get negative dim(-1 1 1, see origin email for detail), which makes nibabel.get_data() failed, but freesurfer first level analysis can be done successfully, in my view it means freesurfer can get data from this bad header.
 
 
 I find a way to solve it is by using "mri_convert *.nii.gz *.mgz", then nibabel could get data from *.mgz. But I think if nibabel could support getting data from negative header file would be more helpful.
 
 
 Just some undevelopped thoughts, I hope I express it clearly.
 
 
 Best,
 
 
 Bai Haohao
 
 
 
 
 
 ---------- Forwarded message ----------
 From: Douglas Greve <greve at nmr.mgh.harvard.edu>
 Date: Thu, Jul 6, 2017 at 7:07 AM
 Subject: Re: [Freesurfer] negative header after preproc-sess
 To: freesurfer at nmr.mgh.harvard.edu
 
 
  
When the nifti standard was adopted, they used a short int to represent the dimensions. Unfortunately, this only allows for a maximum dimension of 32k, which is not big enough for surfaces. So I hacked the FS nifti format to put a -1 as the first dim at  which point the FS code will go to another place in the header to get the spatial dimensions. It is possible to reshape the spatial dimensions as long as the largest prime factor is less than 32k (see mri_surf2surf with --reshape option). Other than that,  you might ask the nibabel people to program the same hack.
 
  
 On 6/25/17 6:48 AM, Bai Haohao wrote:
 
 
 
     Hello Freesurfer experts,
 
 
 I am running my data with preproc-sess to project my func data to individual anatomy file, and the command shows as below:
 
 
  preproc-sess -sf ${Sesslist} -fsd "bold" -surface self lhrh -fwhm 0 -per-run -force 
 
 And the subjectname point to the subject dir that created after recon-all.
 
 
 After the running completed, I try to load data from fmcpr.sm0.self.lh.nii.gz with nibabel, and I get this error info:
 
 
  >>> f.get_data()
 Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "/usr/lib/pymodules/python2.7/nibabel/spatialimages.py", line 341, in get_data
     return np.asanyarray(self._data)
   File "/usr/lib/python2.7/dist-packages/numpy/core/numeric.py", line 512, in asanyarray
     return array(a, dtype, copy=False, order=order, subok=True)
   File "/usr/lib/pymodules/python2.7/nibabel/arrayproxy.py", line 55, in __array__
     self._data = self._read_data()
   File "/usr/lib/pymodules/python2.7/nibabel/arrayproxy.py", line 60, in _read_data
     data = self.header.data_from_fileobj(fileobj)
   File "/usr/lib/pymodules/python2.7/nibabel/analyze.py", line 486, in data_from_fileobj
     data = self.raw_data_from_fileobj(fileobj)
   File "/usr/lib/pymodules/python2.7/nibabel/analyze.py", line 458, in raw_data_from_fileobj
     return array_from_file(shape, dtype, fileobj, offset)
   File "/usr/lib/pymodules/python2.7/nibabel/volumeutils.py", line 493, in array_from_file
     raise IOError(msg)
 IOError: Expected -1804 bytes, got 264809160 bytes from file "fmcpr.vol2surf.lh.nii.gz"
  - could the file be damaged?
  
 
 Then I check the file header by nibabel, and I get this:
   
 
 >>> print(f.get_header())
 <class 'nibabel.nifti1.Nifti1Header'> object, endian='<'
 sizeof_hdr      : 348
 data_type       :
 db_name         :
 extents         : 0
 session_error   : 0
 regular         :
 dim_info        : 0
 dim             : [  4  -1   1   1 451   1   1   1]
 intent_p1       : 0.0
 intent_p2       : 0.0
 intent_p3       : 0.0
 intent_code     : none
 datatype        : float32
 bitpix          : 32
 slice_start     : 0
 pixdim          : [-1.          1.          1.          1.          2.00000072  1.          1.
   1.        ]
 vox_offset      : 352.0
 scl_slope       : 0.0
 scl_inter       : 0.0
 slice_end       : 0
 slice_code      : unknown
 xyzt_units      : 10
 cal_max         : 0.0
 cal_min         : 0.0
 slice_duration  : 0.0
 toffset         : 0.0
 glmax           : 0
 glmin           : 146790
 descrip         : FreeSurfer May 13 2013
 aux_file        :
 qform_code      : scanner
 sform_code      : scanner
 quatern_b       : -0.0115927606821
 quatern_c       : -0.996071338654
 quatern_d       : -0.0864994972944
 qoffset_x       : 73344.5546875
 qoffset_y       : -1492.14978027
 qoffset_z       : -2311.28955078
 srow_x          : [ -9.99280393e-01   2.56918129e-02   2.79041883e-02   7.33445547e+04]
 srow_y          : [  2.04970520e-02   9.84766901e-01  -1.72667429e-01  -1.49214978e+03]
 srow_z          : [  3.19152586e-02   1.71971247e-01   9.84584868e-01  -2.31128955e+03]
 intent_name     :
 magic           : n+1
  
 
 
 
 
 
 
 Note that the dim has value -1, but when I use -surface fsaverage, the dim is correct(show as below):
 
 
  dim             : [    4 27307     1     6   451     1     1     1] 
 
 And I read the source code, the difference between self and fsaverage is appeared when running rawfunc2surf-sess, and log files are attached.
 
 
 I have tried many commands to load data from fmcpr.sm0.self.lh.nii.gz, such as fslview, freeview, mri_convert, mri_surf2surf, ...
 
 
 and only tksurfer could read this file by -timecourse fmcpr.sm0.self.lh.nii.gz.
 
 
 I want to figure out how could I fix it, and any suggestion would be helpful.
 
 
 Thanks in advance,
 
 
 Bai Haohao
 
 
 
 
 Version info:
 System: ubuntu-16.04.1-server-amd64
 Freesurfer: freesurfer-Linux-centos4_x86_64-stable-pub-v5.3.0-HCP
 nibabel: python-nibabel  1.2.2-1  
 
 
 
 
  
 
 
 _______________________________________________ Freesurfer mailing list Freesurfer at nmr.mgh.harvard.edu https://mail.nmr.mgh.harvard.edu/mailman/listinfo/freesurfer  
 
 
 _______________________________________________
 Freesurfer mailing list
 Freesurfer at nmr.mgh.harvard.edu
 https://mail.nmr.mgh.harvard.edu/mailman/listinfo/freesurfer
 
 
 The information in this e-mail is intended only for the person to whom it is
 addressed. If you believe this e-mail was sent to you in error and the e-mail
 contains patient information, please contact the Partners Compliance HelpLine at
 http://www.partners.org/complianceline . If the e-mail was sent to you in error
 but does not contain patient information, please contact the sender and properly
 dispose of the e-mail.
 
 
 
 
 
 
 


 


_______________________________________________
 Neuroimaging mailing list
 Neuroimaging at python.org
 https://mail.python.org/mailman/listinfo/neuroimaging
 




 
_______________________________________________
 Neuroimaging mailing list
 Neuroimaging at python.org
 https://mail.python.org/mailman/listinfo/neuroimaging
 



 


_______________________________________________
 Neuroimaging mailing list
 Neuroimaging at python.org
 https://mail.python.org/mailman/listinfo/neuroimaging
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/neuroimaging/attachments/20170729/12a793dc/attachment.html>


More information about the Neuroimaging mailing list