Susceptibility distortion failed

In brief, fMRIPrep 20.0.1 seems unable to associate fmap with func data during preprocessing.

I preprocessed my fMRI datasets with fMRIPrep. Susceptibility distortion correction for func runs was not done according to the output html file.

Susceptibility distortion correction: None

I am not sure what goes wrong and tried debugging on my own. I did the following checks:

  1. I have already included “IntendFor” field in sub-12lxz_phasediff.json.
    "IntendedFor":[
        "func/sub-12lxz_task-TEE_run-01_bold.nii.gz",
        "func/sub-12lxz_task-TEE_run-02_bold.nii.gz",
        "func/sub-12lxz_task-TEE_run-03_bold.nii.gz",
        "func/sub-12lxz_task-TEE_run-04_bold.nii.gz"
    ],
    "B0FieldIdentifier": "phasediff_fmap0",
  1. BIDS format was checked by bids-validator and passed. No error and only a few warning unrelated to current issue.
  2. fMRIPrep log file also indicated that “IntendedFor” field was not recognized, though fmap files was read and processed.
220216-02:10:22,821 nipype.workflow INFO:
	 B0 field inhomogeneity map will be estimated with  the following 1 estimators: [<EstimatorType.PHASEDIFF: 3>].
220216-02:10:22,887 nipype.workflow INFO:
	 No single-band-reference found for sub-12lxz_task-TEE_run-01_bold.nii.gz.
220216-02:10:22,887 nipype.workflow CRITICAL:
	 None of the available B0 fieldmaps are associated to </data/rawdata/sub-12lxz/func/sub-12lxz_task-TEE_run-01_bold.nii.gz>
220216-02:10:23,631 nipype.workflow IMPORTANT:
	 BOLD series will be slice-timing corrected to an offset of 0.959s.
220216-02:10:23,781 nipype.workflow INFO:
	 Setting-up fieldmap "phasediff_fmap0" (EstimatorType.PHASEDIFF) with <sub-12lxz_phasediff.nii.gz, sub-12lxz_magnitude1.nii.gz, sub-
12lxz_magnitude2.nii.gz>
220216-02:10:26,203 nipype.workflow INFO:
	 fMRIPrep workflow graph with 979 nodes built successfully.

File tree

sub-12lxz/
├── anat
│   ├── sub-12lxz_T1w.json
│   └── sub-12lxz_T1w.nii.gz
├── fmap
│   ├── sub-12lxz_magnitude1.json
│   ├── sub-12lxz_magnitude1.nii.gz
│   ├── sub-12lxz_magnitude2.json
│   ├── sub-12lxz_magnitude2.nii.gz
│   ├── sub-12lxz_phasediff.json
│   └── sub-12lxz_phasediff.nii.gz
└── func
    ├── sub-12lxz_task-TEE_run-01_bold.json
    ├── sub-12lxz_task-TEE_run-01_bold.nii.gz
    ├── sub-12lxz_task-TEE_run-02_bold.json
    ├── sub-12lxz_task-TEE_run-02_bold.nii.gz
    ├── sub-12lxz_task-TEE_run-03_bold.json
    ├── sub-12lxz_task-TEE_run-03_bold.nii.gz
    ├── sub-12lxz_task-TEE_run-04_bold.json
    └── sub-12lxz_task-TEE_run-04_bold.nii.gz

Thanks.

Did you put the “IntendedFor” field in all fmap json files?

You probably need B0FieldSource in your bold.json files. If a fieldmap has a B0FieldIdentifier, then it overrides the IntendedFor field (for fMRIPrep/SDCflows purposes; BIDS encourages the use of both), as it can be more precise in many cases.

1 Like

Yes. I included “IntendedFor” field in all fmap json files.

Adding B0FieldSource in func json worked!

Actually, I did not put B0FieldIdentifier in the json files at first. At the beginning, I only add “IntendedFor” field in fmap json files, following BIDS spec 1.6.0. Adding B0FieldIdentifier following BIDS 1.7.0 was my another attempt to solve the problem after the IntendedFor-only attempt failed.

Thanks!

I’m confused
Did you add “B0FieldIdentifier”: “phasediff_fmap0” to your func json sidecars when the name of your phasediff image is sub-12lxz_phasediff.nii.gz?

How exactly is the B0FieldIdentifier specified? I take it that, unlike the IntededFor field, you do not need to specify the relative path to the B0FieldIdentifier?

Thanks

Here’s how exactly I did it.
In all fmap/sub-12lxz-*.json files, I included IntendedFor and B0FieldIdentifier fields.

    "IntendedFor":[
	"func/sub-12lxz_task-TEE_run-01_bold.nii.gz",
	"func/sub-12lxz_task-TEE_run-02_bold.nii.gz",
	"func/sub-12lxz_task-TEE_run-03_bold.nii.gz",
	"func/sub-12lxz_task-TEE_run-04_bold.nii.gz"
    ],
    "B0FieldIdentifier": "phasediff_fmap0"

In all func/sub-12lxz_task-TEE_run-*_bold.json files, B0FieldSource was included. No fieldmap path was specified in these files.

"B0FieldSource": "phasediff_fmap0"

B0FieldIdentifier is a label of what kind of fieldmap you have. No need to specify path under this field.
Detailed explanation can be found in the documentations.

Hope this answers your questions.