Tedana Kundu cannot convert float NaN to integer

Hi all,

I am using Tedana to denoise a multi-echo run (3 echoes) acquired with a 3T Siemens Prisma. I ran tedana in the following format:

tedana -d e1.nii.gz e2.nii.gz e3.nii.gz -e 13.6 30.84 48.08 --tedpca kundu --verbose --debug

However, I received the following output:

INFO tedana:tedana_workflow:454 Using output directory: /Users/erizor1/Gdrive/Documents/grafton_lab/asap/liz_multi_echo/liz_multiecho_sess2/ses2_denoise_loglin
INFO tedana:tedana_workflow:467 Loading input data: [‘liz_multiecho_test_epi_mb_3x3x3_3000TR_multi-echo_20220317145041_14_e1_mcf_brain_st.nii.gz’, ‘liz_multiecho_test_epi_mb_3x3x3_3000TR_multi-echo_20220317145041_14_e2_mcf_brain_st.nii.gz’, ‘liz_multiecho_test_epi_mb_3x3x3_3000TR_multi-echo_20220317145041_14_e3_mcf_brain_st.nii.gz’]
DEBUG tedana:tedana_workflow:479 Resulting data shape: (196608, 3, 1)
INFO tedana:tedana_workflow:536 Using user-defined mask
WARNING utils:make_adaptive_mask:110 1889 voxels in user-defined mask do not have good signal. Removing voxels from mask.
DEBUG tedana:tedana_workflow:567 Retaining 58895/196608 samples for denoising
DEBUG tedana:tedana_workflow:581 Retaining 46021/196608 samples for classification
INFO tedana:tedana_workflow:584 Computing T2* map
/opt/anaconda3/lib/python3.7/site-packages/tedana/decay.py:283: RuntimeWarning: divide by zero encountered in true_divide
t2s = 1.0 / betas[1, :].T
DEBUG decay:fit_decay:404 Setting cap on T2* map at 2525.53424
DEBUG tedana:tedana_workflow:592 Setting cap on T2* map at 0.25798s
INFO combine:make_optcom:242 Optimally combining data with voxel-wise T2* estimates
INFO tedana:tedana_workflow:609 Writing optimally combined data set: /Users/erizor1/Gdrive/Documents/grafton_lab/asap/liz_multi_echo/liz_multiecho_sess2/ses2_denoise_loglin/desc-optcom_bold.nii.gz
INFO pca:tedpca:227 Computing PCA of optimally combined multi-echo data
/opt/anaconda3/lib/python3.7/site-packages/tedana/decomposition/pca.py:230: RuntimeWarning: invalid value encountered in true_divide
data_z = ((data.T - data.T.mean(axis=0)) / data.T.std(axis=0)).T # var normalize ts
Traceback (most recent call last):
File “/opt/anaconda3/bin/tedana”, line 8, in
sys.exit(_main())
File “/opt/anaconda3/lib/python3.7/site-packages/tedana/workflows/tedana.py”, line 905, in _main
tedana_workflow(**kwargs)
File “/opt/anaconda3/lib/python3.7/site-packages/tedana/workflows/tedana.py”, line 626, in tedana_workflow
low_mem=low_mem,
File “/opt/anaconda3/lib/python3.7/site-packages/tedana/decomposition/pca.py”, line 251, in tedpca
ppca.fit(data_z)
File “/opt/anaconda3/lib/python3.7/site-packages/sklearn/decomposition/_pca.py”, line 359, in fit
self._fit(X)
File “/opt/anaconda3/lib/python3.7/site-packages/sklearn/decomposition/_pca.py”, line 405, in _fit
ensure_2d=True, copy=self.copy)
File “/opt/anaconda3/lib/python3.7/site-packages/sklearn/base.py”, line 421, in _validate_data
X = check_array(X, **check_params)
File “/opt/anaconda3/lib/python3.7/site-packages/sklearn/utils/validation.py”, line 63, in inner_f
return f(*args, **kwargs)
File “/opt/anaconda3/lib/python3.7/site-packages/sklearn/utils/validation.py”, line 721, in check_array
allow_nan=force_all_finite == ‘allow-nan’)
File “/opt/anaconda3/lib/python3.7/site-packages/sklearn/utils/validation.py”, line 106, in _assert_all_finite
msg_dtype if msg_dtype is not None else X.dtype)
ValueError: Input contains NaN, infinity or a value too large for dtype(‘float64’).

I am wondering if this has to do with masking, but I also tried the above command with my own mask and it gave the same output. Before trying --tedpca kundu, I tried --tedpca mdl it gave me the following:

INFO pca:tedpca:227 Computing PCA of optimally combined multi-echo data
/opt/anaconda3/lib/python3.7/site-packages/tedana/decomposition/pca.py:230: RuntimeWarning: invalid value encountered in true_divide
data_z = ((data.T - data.T.mean(axis=0)) / data.T.std(axis=0)).T # var normalize ts
/opt/anaconda3/lib/python3.7/site-packages/mapca/utils.py:264: RuntimeWarning: invalid value encountered in double_scalars
retained = (sumUsed / sumAll) * 100
/opt/anaconda3/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3420: RuntimeWarning: Mean of empty slice.
out=out, **kwargs)
/opt/anaconda3/lib/python3.7/site-packages/numpy/core/_methods.py:188: RuntimeWarning: invalid value encountered in double_scalars
ret = ret.dtype.type(ret / rcount)
Traceback (most recent call last):
File “/opt/anaconda3/bin/tedana”, line 8, in
sys.exit(_main())
File “/opt/anaconda3/lib/python3.7/site-packages/tedana/workflows/tedana.py”, line 905, in _main
tedana_workflow(**kwargs)
File “/opt/anaconda3/lib/python3.7/site-packages/tedana/workflows/tedana.py”, line 626, in tedana_workflow
low_mem=low_mem,
File “/opt/anaconda3/lib/python3.7/site-packages/tedana/decomposition/pca.py”, line 237, in tedpca
data_img, mask_img, algorithm, normalize=True
File “/opt/anaconda3/lib/python3.7/site-packages/mapca/mapca.py”, line 501, in ma_pca
_ = pca.fit_transform(img, mask)
File “/opt/anaconda3/lib/python3.7/site-packages/mapca/mapca.py”, line 398, in fit_transform
self._fit(img, mask)
File “/opt/anaconda3/lib/python3.7/site-packages/mapca/mapca.py”, line 207, in _fit
sub_iid_sp_median = int(np.round(np.median(sub_iid_sp)))
ValueError: cannot convert float NaN to integer

I am running this on Python 3.7 and tedana v0.0.11. Any help would be appreciated. Thanks!

pinging @tsalo and @handwerkerd here just in case they have some insight. My first thought whenever I see NaN is to wonder if MatLab got involved somehow. Can you give a few details about preprocessing this data as well? This is a new error, so not sure what to think - but a few questions: Assuming whole brain data? How many timepoints do the runs have? Is it just one subject/run that is doing this or multiple?

Hopefully we can sort it out.

Hi dowdlelt,

Your Matlab comment helped me find the issue. I preprocessed the images with FSL MCFLIRT (motion correction), which applies matrix transformations using Matlab files. When I ran the Tedana code on data that was not preprocessed, it worked. FSL users should be aware of this issue!

Do you have any recommendations for how best to do pre-Tedana motion correction/slice timing correction with software that is compatible with Tedana? fMRIprep + Tedana seems to be popular.

Sincerely,
erizor

fmriprep is popular. I personally use AFNI, via afni_proc.py for everything, and it integrates nicely with tedana (including using your own version if preferred). Details are here at the afni_proc.py page - see the various example 12 variants and especially note the use my own install options lower in the page here.

I’m not sure what is going on with FSL, but it doesn’t have native support for multi echo files so I tend to avoid it. SPM does not either, but @StephanHeunis has done some incredible work here that makes everything place nicely (as far as I can tell)

2 Likes

I have encountered similar issue in the past using using another program (fsl-topup). You can replace the nans in your inputs with 0s by using fslmath with -nan flag:

-nan   : replace NaNs (improper numbers) with 0

e.g.:

fslmaths /path/to/my_file.nii.gz -nan /path/to/my_file_nonan.nii.gz 
3 Likes