Summary of what happened:
I’m trying to use nifreeze to do eddy motion correction on a DWI data set. The documentation is a bit sparse so there’s a lot of guesswork involved - if anyone who has used nifreeze would be very grateful for some pointers!
Command used (and if a helper script was used, a link to the helper script or the command generated):
from nifreeze.data import dmri
from nifreeze.estimator import Estimator
dwi_data = dmri.from_nii(
dti.fpath,
brainmask_file=os.path.dirname(dti.fpath) + "/mask.nii.gz",
bvec_file=dti.fpath.replace(".nii.gz", ".bvec"),
bval_file=dti.fpath.replace(".nii.gz", ".bval"),
)
estimator = Estimator("dti")
estimated_affine = estimator.run(
dwi_data,
omp_nthreads=1,
n_jobs=1,
seed=42,
)
Version:
nifreeze 25.0.0.dev442
nipype 1.11.0.dev0
Environment (Docker, Singularity / Apptainer, custom installation):
Installed in conda environment, python 3.11
Relevant log outputs (up to 20 lines):
DWI(dataobj=<116x116x81x114 (int16)>, affine=<4x4 (float64)>, brainmask=<116x116x81 (bool)>, motion_affines=None, datahdr=None, bzero=<116x116x81 (float64)>, gradients=<4x114 (float32)>, eddy_xfms=None)
Dataset size: 195548x114.
Parallel execution: {'n_jobs': 1, 'omp_nthreads': 1, 'step': 1000000}.
Model: <nifreeze.model.dmri.DTIModel object at 0x14faa7158ad0>.
Processing in </tmp/tmpl46bc4ky>
Realign vol. <70>: 0%| | 0/114 [00:07<?, ?vols./s]
ERROR: ERROR EDDYCORR - MODULE NOT COMPLETED
Traceback (most recent call last):
File "/gpfs01/home/bbzmsc/code/fproc/fproc/pipeline.py", line 93, in run
module.run(self)
File "/gpfs01/home/bbzmsc/code/fproc/fproc/module.py", line 47, in run
self.process()
File "/gpfs01/home/bbzmsc/code/fproc/pipelines/diffad.py", line 667, in process
estimated_affine = estimator.run(
^^^^^^^^^^^^^^
File "/gpfs01/software/imaging/miniconda3/envs/fproc/lib/python3.11/site-packages/nifreeze/estimator.py", line 204, in run
xform = _run_registration(
^^^^^^^^^^^^^^^^^^
File "/gpfs01/software/imaging/miniconda3/envs/fproc/lib/python3.11/site-packages/nifreeze/registration/ants.py", line 488, in _run_registration
result = registration.run(cwd=str(dirname)).outputs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/gpfs01/software/imaging/miniconda3/envs/fproc/lib/python3.11/site-packages/nipype/interfaces/base/core.py", line 393, in run
self._check_version_requirements(self.inputs)
File "/gpfs01/software/imaging/miniconda3/envs/fproc/lib/python3.11/site-packages/nipype/interfaces/base/core.py", line 318, in _check_version_requirements
raise Exception(
Exception: Trait fixed_image_masks (Registration) (version 0.0.0.0 < required 2.2.0)
My initial guess is that this was an issue with it not finding Ants, but ants is installed and present in the path, also antspyx is also installed and working (I am using Ants independently in other parts of the pipeline).
If I leave out the brain mask I get a completely different error:
ERROR: ERROR EDDYCORR - MODULE NOT COMPLETED
Traceback (most recent call last):
File "/gpfs01/home/bbzmsc/code/fproc/fproc/pipeline.py", line 93, in run
module.run(self)
File "/gpfs01/home/bbzmsc/code/fproc/fproc/module.py", line 47, in run
self.process()
File "/gpfs01/home/bbzmsc/code/fproc/pipelines/diffad.py", line 666, in process
estimated_affine = estimator.run(
^^^^^^^^^^^^^^
File "/gpfs01/software/imaging/miniconda3/envs/fproc/lib/python3.11/site-packages/nifreeze/estimator.py", line 187, in run
predicted = model.fit_predict( # type: ignore[union-attr]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/gpfs01/software/imaging/miniconda3/envs/fproc/lib/python3.11/site-packages/nifreeze/model/dmri.py", line 197, in fit_predict
predicted, _ = _exec_predict(
^^^^^^^^^^^^^^
File "/gpfs01/software/imaging/miniconda3/envs/fproc/lib/python3.11/site-packages/nifreeze/model/dmri.py", line 45, in _exec_predict
return np.squeeze(model.predict(**kwargs)), chunk
^^^^^^^^^^^^^^^^^^^^^^^
File "/gpfs01/software/imaging/miniconda3/envs/fproc/lib/python3.11/site-packages/dipy/testing/decorators.py", line 201, in wrapper
return convert_positional_to_keyword(func, args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/gpfs01/software/imaging/miniconda3/envs/fproc/lib/python3.11/site-packages/dipy/testing/decorators.py", line 192, in convert_positional_to_keyword
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/gpfs01/software/imaging/miniconda3/envs/fproc/lib/python3.11/site-packages/dipy/reconst/dti.py", line 1255, in predict
predict[i : i + step] = tensor_prediction(
^^^^^^^^^^^^^^^^^^
File "/gpfs01/software/imaging/miniconda3/envs/fproc/lib/python3.11/site-packages/dipy/reconst/dti.py", line 690, in tensor_prediction
lower_tri = lower_triangular(qform, b0=S0)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/gpfs01/software/imaging/miniconda3/envs/fproc/lib/python3.11/site-packages/dipy/testing/decorators.py", line 201, in wrapper
return convert_positional_to_keyword(func, args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/gpfs01/software/imaging/miniconda3/envs/fproc/lib/python3.11/site-packages/dipy/testing/decorators.py", line 192, in convert_positional_to_keyword
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/gpfs01/software/imaging/miniconda3/envs/fproc/lib/python3.11/site-packages/dipy/reconst/dti.py", line 2372, in lower_triangular
D[..., 6] = -np.log(b0)
~^^^^^^^^
ValueError: could not broadcast input array from shape (6751,) into shape (89936,)
This looks like I am getting my data in the wrong format, but not clear what the problem is.
Any help very welcome!