Summary of what happened:
I am trying to diagnose an error in sdcflows that’s preventing fMRIprep from detecting pepolar estimators for my data. Going off of a previous thread, I verified that all metadata was correctly specified. (details in last section)
Command used (and if a helper script was used, a link to the helper script or the command generated):
sdcflows was invoked via the python interpreter from an fmriprep 21.0.4 singularity container.
Version:
sdcflows: 2.0.11
fmriprep: 21.0.4
Environment (Docker, Singularity, custom installation):
fmriprep singularity image based off of official docker image.
Data formatted according to a validatable standard? Please provide the output of the validator:
BIDS only outputted warnings about inconsistent scan parameters (piloting, so parameters are changing).
Relevant log outputs (up to 20 lines):
>>> find_estimators(layout, subject="Pat01")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/conda/lib/python3.8/site-packages/sdcflows/utils/wrangler.py", line 271, in find_estimators
_e = fm.FieldmapEstimation([
File "<attrs generated init sdcflows.fieldmaps.FieldmapEstimation>", line 7, in __init__
File "/opt/conda/lib/python3.8/site-packages/sdcflows/fieldmaps.py", line 398, in __attrs_post_init__
raise ValueError("Insufficient sources to estimate a fieldmap.")
Screenshots / relevant information:
Pat01 Files
| sub-Pat01/
| | ses-1/
| | | anat/
| | | dwi/
| | | fmap/
| | | | sub-Pat01_ses-1_acq-dmri_dir-AP_epi.json
| | | | sub-Pat01_ses-1_acq-dmri_dir-AP_epi.nii.gz
| | | | sub-Pat01_ses-1_acq-fmri_dir-AP_epi.json
| | | | sub-Pat01_ses-1_acq-fmri_dir-AP_epi.nii.gz
| | | | sub-Pat01_ses-1_acq-fmri_dir-PA_epi.json
| | | | sub-Pat01_ses-1_acq-fmri_dir-PA_epi.nii.gz
| | | func/
| | | | sub-Pat01_ses-1_task-facename_dir-PA_run-1_bold.json
| | | | sub-Pat01_ses-1_task-facename_dir-PA_run-1_bold.nii.gz
| | | | sub-Pat01_ses-1_task-facename_dir-PA_run-1_sbref.json
| | | | sub-Pat01_ses-1_task-facename_dir-PA_run-1_sbref.nii.gz
| | | | sub-Pat01_ses-1_task-facename_dir-PA_run-2_bold.json
| | | | sub-Pat01_ses-1_task-facename_dir-PA_run-2_bold.nii.gz
| | | | sub-Pat01_ses-1_task-facename_dir-PA_run-2_sbref.json
| | | | sub-Pat01_ses-1_task-facename_dir-PA_run-2_sbref.nii.gz
| | | | sub-Pat01_ses-1_task-rest_dir-PA_bold.json
| | | | sub-Pat01_ses-1_task-rest_dir-PA_bold.nii.gz
| | | | sub-Pat01_ses-1_task-rest_dir-PA_sbref.json
| | | | sub-Pat01_ses-1_task-rest_dir-PA_sbref.nii.gz
Metadata for fieldmaps
$ grep 'B0Field' sub-Pat01/ses-1/func/*json
sub-Pat01/ses-1/fmap/sub-Pat01_ses-1_acq-dmri_dir-AP_epi.json: "B0FieldIdentifier": "pepolar_dmri"
sub-Pat01/ses-1/fmap/sub-Pat01_ses-1_acq-fmri_dir-AP_epi.json: "B0FieldIdentifier": "pepolar_facename"
sub-Pat01/ses-1/fmap/sub-Pat01_ses-1_acq-fmri_dir-PA_epi.json: "B0FieldIdentifier": "pepolar_facename"
$ grep 'PhaseEncodingDirection\"' sub-Pat01/ses-1/fmap/*json
sub-Pat01/ses-1/fmap/sub-Pat01_ses-1_acq-dmri_dir-AP_epi.json: "PhaseEncodingDirection": "j-",
sub-Pat01/ses-1/fmap/sub-Pat01_ses-1_acq-fmri_dir-AP_epi.json: "PhaseEncodingDirection": "j-",
sub-Pat01/ses-1/fmap/sub-Pat01_ses-1_acq-fmri_dir-PA_epi.json: "PhaseEncodingDirection": "j",
IntendedFor
is set for all fieldmaps and points to either a single diffusion or all bold + sbref runs.
Metadata for bold + sbref
$ grep 'B0Field' sub-Pat01/ses-1/func/*json
sub-Pat01/ses-1/func/sub-Pat01_ses-1_task-facename_dir-PA_run-1_bold.json: "B0FieldSource": "pepolar_facename"
sub-Pat01/ses-1/func/sub-Pat01_ses-1_task-facename_dir-PA_run-1_sbref.json: "B0FieldSource": "pepolar_facename"
sub-Pat01/ses-1/func/sub-Pat01_ses-1_task-facename_dir-PA_run-2_bold.json: "B0FieldSource": "pepolar_facename"
sub-Pat01/ses-1/func/sub-Pat01_ses-1_task-facename_dir-PA_run-2_sbref.json: "B0FieldSource": "pepolar_facename"
sub-Pat01/ses-1/func/sub-Pat01_ses-1_task-rest_dir-PA_bold.json: "B0FieldSource": "pepolar_facename"
sub-Pat01/ses-1/func/sub-Pat01_ses-1_task-rest_dir-PA_sbref.json: "B0FieldSource": "pepolar_facename"
$ grep 'PhaseEncodingDirection\"' sub-Pat01/ses-1/func/*json
sub-Pat01/ses-1/func/sub-Pat01_ses-1_task-facename_dir-PA_run-1_bold.json: "PhaseEncodingDirection": "j",
sub-Pat01/ses-1/func/sub-Pat01_ses-1_task-facename_dir-PA_run-1_sbref.json: "PhaseEncodingDirection": "j",
sub-Pat01/ses-1/func/sub-Pat01_ses-1_task-facename_dir-PA_run-2_bold.json: "PhaseEncodingDirection": "j",
sub-Pat01/ses-1/func/sub-Pat01_ses-1_task-facename_dir-PA_run-2_sbref.json: "PhaseEncodingDirection": "j",
sub-Pat01/ses-1/func/sub-Pat01_ses-1_task-rest_dir-PA_bold.json: "PhaseEncodingDirection": "j",
sub-Pat01/ses-1/func/sub-Pat01_ses-1_task-rest_dir-PA_sbref.json: "PhaseEncodingDirection": "j",
N.B. IntendedFor points to bold + sbref; B0FieldSource is also set for both bold + sbref.