Different data storage format in T1w niftis across functional runs


We have noticed that after processing w/ fmriprep, for the same session across different functional runs of the same sequence, some bold runs in T1w space are being output with the image stored as int and the scl_slope and scl_inter header fields set !=0 for conversion, while other images are being stored as float w/ scl_slope = 1 and scl_inter = 0.

Is there a reason this difference occurs, and is there any way (or any reason why not) to enforce consistency across runs (e.g. all output as float)?

I think most neuroimaging packages can handle this fine, but when using custom scripts this can lead to unexpected behavior if you’re not very careful.

We have confirmed that this is happening in the fmriprep pipeline and not in the conversion from dicom to nifti. We are using fmriprep 20.2.7.

Also, if there isn’t a solution w/in the pipeline, is there any reason for us not to make the data types consistent ourselves as a post-processing step, e.g.

if x.scl_slope~=0 && ~(x.scl_inter==0 && x.scl_slope==1)
       x.data = single(x.data) * x.scl_slope + x.scl_inter
       x.scl_slope = 1
       x.scl_inter = 0