PennLINC / qsiprep

Preprocessing of diffusion MRI
http://qsiprep.readthedocs.io
BSD 3-Clause "New" or "Revised" License
141 stars 58 forks source link

error encountered at eddy step when no T1w data are available #792

Open jhauneuro opened 4 months ago

jhauneuro commented 4 months ago

Summary

I am getting an error when preprocessing dwi data with no T1w data using the latest qsiprep version. I was able to successfully preprocess this dataset using qsiprep v0.19.1 but get an error using the latest version.

Additional details

What were you trying to do?

I am trying to preprocess my dwi data.

What did you expect to happen?

I was expecting the preprocessing to complete successfully.

What actually happened?

I first got an error saying that no T1w images were found. Then I added --anat-modality none to my command and got a different error (see below).

Reproducing the bug

Traceback (most recent call last):
  File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/nipype/pipeline/plugins/multiproc.py", line 67, in run_node
    result["result"] = node.run(updatehash=updatehash)
  File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/nipype/pipeline/engine/nodes.py", line 527, in run
    result = self._run_interface(execute=True)
  File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/nipype/pipeline/engine/nodes.py", line 645, in _run_interface
    return self._run_command(execute)
  File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/nipype/pipeline/engine/nodes.py", line 771, in _run_command
    raise NodeExecutionError(msg)
nipype.pipeline.engine.nodes.NodeExecutionError: Exception raised while executing Node eddy.

Cmdline:
    eddy_cuda10.2 --cnr_maps --estimate_move_by_susceptibility --field=/scratch/qsiprep_wf/single_subject_NDARAA932XZU_wf/dwi_preproc_dir_AP_wf/hmc_sdc_wf/topup/fieldmap_HZ --field_mat=/scratch/qsiprep_wf/single_subject_NDARAA932XZU_wf/dwi_preproc_dir_AP_wf/hmc_sdc_wf/topup_to_eddy_reg/topup_reg_image_flirt.mat --flm=quadratic --ff=10.0 --acqp=/scratch/qsiprep_wf/single_subject_NDARAA932XZU_wf/dwi_preproc_dir_AP_wf/hmc_sdc_wf/gather_inputs/eddy_acqp.txt --bvals=/data/sub-NDARAA932XZU/dwi/sub-NDARAA932XZU_dir-AP_dwi.bval --bvecs=/scratch/qsiprep_wf/single_subject_NDARAA932XZU_wf/dwi_preproc_dir_AP_wf/pre_hmc_wf/merge_and_denoise_wf/conform_dwis01/sub-NDARAA932XZU_dir-AP_dwi_LAS.bvec --imain=/scratch/qsiprep_wf/single_subject_NDARAA932XZU_wf/dwi_preproc_dir_AP_wf/pre_hmc_wf/merge_and_denoise_wf/dwi_denoise_dir_AP_dwi_wf/denoiser/sub-NDARAA932XZU_dir-AP_dwi_LAS_denoised.nii.gz --index=/scratch/qsiprep_wf/single_subject_NDARAA932XZU_wf/dwi_preproc_dir_AP_wf/hmc_sdc_wf/gather_inputs/eddy_index.txt --mask=/scratch/qsiprep_wf/single_subject_NDARAA932XZU_wf/dwi_preproc_dir_AP_wf/hmc_sdc_wf/transform_mask_to_eddy/topup_imain_corrected_avg_trans_mask_trans_flirt.nii.gz --interp=spline --data_is_shelled --json=/scratch/qsiprep_wf/single_subject_NDARAA932XZU_wf/dwi_preproc_dir_AP_wf/pre_hmc_wf/merge_and_denoise_wf/merge_dwis/merged_metadata.json --resamp=jac --mporder=20 --niter=5 --nthr=1 --nvoxhp=1000 --out=/scratch/qsiprep_wf/single_subject_NDARAA932XZU_wf/dwi_preproc_dir_AP_wf/hmc_sdc_wf/eddy/eddy_corrected --repol --residuals --slm=linear
Stdout:

    Warning: In a future release the first argument will have to be "diffusion" when using eddy on diffusion data, i.e.
    eddy diffusion --imain='my_ima' --acqp='my_acqp' ...

    Warning: Writing of individual text files will be discontinued in favour of a single .json file in future versions

    EddyInputError:  --imain and --mask images must have the same dimensions
    Terminating program
Stderr:

Traceback:
    Traceback (most recent call last):
      File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/nipype/interfaces/base/core.py", line 453, in aggregate_outputs
        setattr(outputs, key, val)
      File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/nipype/interfaces/base/traits_extension.py", line 330, in validate
        value = super(File, self).validate(objekt, name, value, return_pathlike=True)
      File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/nipype/interfaces/base/traits_extension.py", line 135, in validate
        self.error(objekt, name, str(value))
      File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/traits/base_trait_handler.py", line 74, in error
        raise TraitError(
    traits.trait_errors.TraitError: The 'out_corrected' trait of an ExtendedEddyOutputSpec instance must be a pathlike object or string representing an existing file, but a value of '/scratch/qsiprep_wf/single_subject_NDARAA932XZU_wf/dwi_preproc_dir_AP_wf/hmc_sdc_wf/eddy/eddy_corrected.nii.gz' <class 'str'> was specified.

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/nipype/interfaces/base/core.py", line 400, in run
        outputs = self.aggregate_outputs(runtime)
      File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/nipype/interfaces/base/core.py", line 460, in aggregate_outputs
        raise FileNotFoundError(msg)
    FileNotFoundError: No such file or directory '/scratch/qsiprep_wf/single_subject_NDARAA932XZU_wf/dwi_preproc_dir_AP_wf/hmc_sdc_wf/eddy/eddy_corrected.nii.gz' for output 'out_corrected' of a ExtendedEddy interface

I also tried using --dwi-only and get a very similar error as above.

jhauneuro commented 3 months ago

Here is what the error looks like in qsiprep 0.22.0:

        EddyInputError:  Mismatch between no of slices in multi-band structure and in image file.
        Terminating program
Stderr:

Traceback:
        Traceback (most recent call last):
          File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/nipype/interfaces/base/core.py", line 453, in aggregate_outputs
            setattr(outputs, key, val)
          File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/nipype/interfaces/base/traits_extension.py", line 330, in validate   
            value = super(File, self).validate(objekt, name, value, return_pathlike=True)
          File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/nipype/interfaces/base/traits_extension.py", line 135, in validate   
            self.error(objekt, name, str(value))
          File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/traits/base_trait_handler.py", line 74, in error
            raise TraitError(
        traits.trait_errors.TraitError: The 'out_corrected' trait of an ExtendedEddyOutputSpec instance must be a pathlike object or string representing an existing file, but a value of '/scratch/qsiprep_0_22_wf/sub_NDARAA932XZU_wf/dwi_preproc_dir_AP_wf/hmc_sdc_wf/eddy/eddy_corrected.nii.gz' <class 'str'> was specified.

        During handling of the above exception, another exception occurred:

        Traceback (most recent call last):
          File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/nipype/interfaces/base/core.py", line 400, in run
            outputs = self.aggregate_outputs(runtime)
          File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/nipype/interfaces/base/core.py", line 460, in aggregate_outputs
            raise FileNotFoundError(msg)
        FileNotFoundError: No such file or directory '/scratch/qsiprep_0_22_wf/sub_NDARAA932XZU_wf/dwi_preproc_dir_AP_wf/hmc_sdc_wf/eddy/eddy_corrected.nii.gz' for output 'out_corrected' of a ExtendedEddy interface

240801-21:39:50,724 cli WARNING:
         Errors occurred while generating reports for participants: NDARAA932XZU (1).
1

I re-ran this participant using qsiprep 0.19.1 and it completed successfully. I don't why I am getting a mismatch error in the later versions.

mattcieslak commented 3 months ago

Hi @jhauneuro are you sure your data is bids valid and does it contain SliceTiming? We added the slice-to-volume correction in these recent versions, which will look at your slice timings from the json sidecars. These will have to match the number of slices or there will be an issue with slice to volume.

jhauneuro commented 3 months ago

@mattcieslak yes, the json files were generated from the dicoms using dcm2niix. They show 82 slice times and the image dimensions are 128x128x82.

The data are also not multi-band so the error message doesn't make much sense to me.

jhauneuro commented 3 months ago

I realized I had run 0.19.1 without intra-volume correction (eddy --mporder option). I reran 0.22.0 without intra-volume correction and this time it completed without error. The issue is likely related to the different image orientation of this dataset – It was acquired on a GE scanner with a sagittal slice acquisition and oriented PSR+.

For some reason qsiprep sometimes has difficulties with non-LAS+ oriented data (e.g., see issue #800 that I reported for this dataset, and also issue #793.

It would be nice to run intra-volume correction on this data since there is a lot of motion in this data.