Fmriprep Not Applying Fieldmap

Summary of what happened:

Hi all,
I am using fmriprep to preprocess resting state and task functional images, but I cannot seem to get the field mapping images to apply for distortion correction.
We are using a short 2 volume reverse-direction “TOPUP” type scan to correct the full-length images.
The fmap images are in proper bids format and bound to the fmriprep /data/input variable, and the “IntendedFor” and “RawSources” fields are added to the associated .json file but when I run the fmriprep workflow, this shows in the log and the images are visually not field-map corrected:

nipype.interface INFO:
         No "fmap" images found for sub-P124

Any recommendations or solutions?

Command used (and if a helper script was used, a link to the helper script or the command generated):

inputdir=/project/oathes_analysis2/R61/bids
outputdir=/project/oathes_analysis2/R61/fmriprep/prerun_output/$1

singularity run --cleanenv \
  --no-home \
  -B ${jobTmpDir}:/tmp \
  -B "/project/oathes_analysis2/templateflow:/templateflow" \
  -B "/appl/freesurfer-7.1.1:/freesurfer" \
  -B ${inputdir}:/data/input \
  -B ${outputdir}:/data/output \
  -B /project/oathes_analysis2/R61/fmriprep/prerun_output/$1:/fssubdir \
  -B /project/oathes_analysis2/individual_projects/jess/R61_tmsfmri_fmriprep_test:/basepath \
/project/oathes_analysis2/singularity_containers/fmriprep-23.2.3.simg \
/data/input /data/output participant --skull-strip-template OASIS30ANTs --fs-license-file /freesurfer/license.txt \
--bids-filter-file /basepath/bids_filter_file_tmsfmri.json \
--fs-subjects-dir /fssubdir/sourcedata/freesurfer \
--output-spaces fsaverage T1w fsnative fsLR MNI152NLin6Asym:res-2 --cifti-output 91k \
--bold2t1w-dof 6 \
--dvars-spike-threshold 1.5 \
--fd-spike-threshold 0.5 \
--ignore slicetiming \
--notrack --nthreads 16 --omp-nthreads 15 --work-dir ${SINGULARITYENV_TMPDIR} --verbose --participant-label $1

IntendedFor & RawSources example:

"IntendedFor": ["ses-tms1/func/sub-P124_ses-tms1_task-rest_acq-PreTargetA_dir-AP_bold.nii.gz", "ses-tms1/func/sub-P124_ses-tms1_task-SP120_acq-PostTargetA_dir-AP_bold.nii.gz","ses-tms1/func/sub-P124_ses-tms1_task-SP120_acq-PreTargetA_dir-AP_bold.nii.gz", "ses-tms1/func/sub-P124_ses-tms1_task-iTBS_acq-TargetA_dir-AP_bold.nii.gz"],
"RawSources": ["data/input/sub-P124/ses-tms1/fmap/sub-P124_ses-tms1_acq-TargetA_dir-PA_run-01_epi.nii.gz"]

Version:

fmriprep-23.2.3
(I know that this is not the most up-to-date version, but we are using this version for baseline processing, and would prefer to keep it consistent if possible for now)

Environment (Docker, Singularity / Apptainer, custom installation):

Singularity/Apptainer

Data formatted according to a validatable standard? Please provide the output of the validator:


bids-validator@1.14.6
1: [WARN] The recommended file /README is missing. See Section 03 (Modality agnostic files) of the BIDS specification. (code: 101 - README_FILE_MISSING)
2: [WARN] The Authors field of dataset_description.json should contain an array of fields - with one author per field. This was triggered because there are no authors, which will make DOI registration from dataset metadata impossible. (code: 113 - NO_AUTHORS)

├── ses-tms1
│   ├── anat
│   ├── fmap
│   │   ├── sub-P124_ses-tms1_acq-TargetA_dir-PA_run-01_epi.json
│   │   ├── sub-P124_ses-tms1_acq-TargetA_dir-PA_run-01_epi.nii.gz
│   │   ├── sub-P124_ses-tms1_acq-TargetB_dir-PA_run-01_epi.json
│   │   ├── sub-P124_ses-tms1_acq-TargetB_dir-PA_run-01_epi.nii.gz
│   │   ├── sub-P124_ses-tms1_acq-Vertex_dir-PA_run-01_epi.json
│   │   └── sub-P124_ses-tms1_acq-Vertex_dir-PA_run-01_epi.nii.gz
│   └── func
│       ├── sub-P124_ses-tms1_task-iTBS_acq-TargetA_dir-AP_bold.json
│       ├── sub-P124_ses-tms1_task-iTBS_acq-TargetA_dir-AP_bold.nii.gz
│       ├── sub-P124_ses-tms1_task-iTBS_acq-TargetB_dir-AP_bold.json
│       ├── sub-P124_ses-tms1_task-iTBS_acq-TargetB_dir-AP_bold.nii.gz
│       ├── sub-P124_ses-tms1_task-rest_acq-PreTargetA_dir-AP_bold.json
│       ├── sub-P124_ses-tms1_task-rest_acq-PreTargetA_dir-AP_bold.nii.gz
│       ├── sub-P124_ses-tms1_task-SP120_acq-PostTargetA_dir-AP_bold.json
│       ├── sub-P124_ses-tms1_task-SP120_acq-PostTargetA_dir-AP_bold.nii.gz
│       ├── sub-P124_ses-tms1_task-SP120_acq-PostTargetB_dir-AP_bold.json
│       ├── sub-P124_ses-tms1_task-SP120_acq-PostTargetB_dir-AP_bold.nii.gz
│       ├── sub-P124_ses-tms1_task-SP120_acq-PreTargetA_dir-AP_bold.json
│       ├── sub-P124_ses-tms1_task-SP120_acq-PreTargetA_dir-AP_bold.nii.gz
│       ├── sub-P124_ses-tms1_task-SP120_acq-PreTargetB_dir-AP_bold.json
│       ├── sub-P124_ses-tms1_task-SP120_acq-PreTargetB_dir-AP_bold.nii.gz
│       ├── sub-P124_ses-tms1_task-SP120_acq-Vertex_dir-AP_bold.json
│       └── sub-P124_ses-tms1_task-SP120_acq-Vertex_dir-AP_bold.nii.gz

Relevant log outputs (up to 20 lines):

nipype.interface INFO:
         No "fmap" images found for sub-P124

Hi @jdickson14,

Does this error persist for the most recent fmriprep version? Can you confirm that the bold/fmap have opposing PhaseEncodingDirections, and that the TotalReadoutTime metadata is present? What did you put as your --bids-filter-file?

Best,
Steven

Hi Steven,
I’m not sure if this issue persists in the most updated version, but I also use this version for baseline processing and the correction does successfully apply.

As for the TotalReadoutTime and PhaseEncodingDirection, here is the metadata for the fmap json:
image

And for the bold image:
image

And here is the bids-filter-file:

bids_filter_file_tmsfmri.json 
{
	"fmap": {"datatype": "fmap", "session": "01"},
	"bold": {"datatype": "func", "task": ["rest","sptms","SP120","itbs","iTBS"], "session": ["tms1","tms2","tms3"], "suffix": "bold"}
}

Now that I’m looking at it - would the “session”: “01” be the problem? Should that be “run”: “01”?

Hi @jdickson14,

The session part of your fmap listing in the BIDS filter file does not match with the names in your dataset.

Best,
Steven