fMRIPrep SDC help

Summary of what happened:

Hi all, I applied SDC, both synb0 and pe-polar , on my data but it doesn’t fix the distortion that much. Is there something I am doing wrong, or is there another method I can try out? Our functional data contains both AP and PA.

For the pe-polar case I took the average of the first 4 volumes (after x amount of dummy volumes) of the AP and PA, and used those as references for SDC. I created a JSON file for each average that looked like this:

{
    "PhaseEncodingDirection": "j", (or j-)
    "TotalReadoutTime": 0.0392704,
    "EffectiveEchoSpacing": 0.000510005,
    "EchoTime": 0.03,
    "IntendedFor": [
        "ses-1/func/sub-01_ses-1_task-rest_run-001_bold.nii.gz",
        "ses-1/func/sub-01_ses-1_task-rest_dir-PA_run-001_bold.nii.gz"
    ],
    "B0FieldIdentifier": "pepolar_fmap0"
}

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

fMRIPrep (averaged AP/PA vols):

/app/.pixi/envs/fmriprep/bin/fmriprep \
{root_dir}/BIDS/Nifti {root_dir}/fMRI/fmriprep_output participant \
--participant-label 01 \
--fs-license-file /opt/freesurfer/license.txt \
--omp-nthreads 8 --dummy-scans 4 \
--bids-filter-file {root_dir}/BIDS/Nifti/bids_filter.json \
--skip-bids-validation \
-w {root_dir}/fMRI/fmriprep_work

fMRIPrep (synb0):

/app/.pixi/envs/fmriprep/bin/fmriprep \
{root_dir}/BIDS/Nifti {root_dir}/fMRI_synb0/fmriprep_output participant \
--participant-label 01 \
--fs-license-file /opt/freesurfer/license.txt \
--omp-nthreads 8 --dummy-scans 4 \
--use-syn-sdc --ignore fieldmaps --force syn-sdc \
--bids-filter-file {root_dir}/BIDS/Nifti/bids_filter.json \
--skip-bids-validation \
 -w {root_dir}/fMRI_synb0/fmriprep_work

Version:

25.2.5

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

Apptainer

Screenshots / relevant information:

Average AP/PA vols

AP - Distorted

AP - Corrected


PA - Distorted

PA - Corrected

synb0
AP - Distorted

AP - Corrected

PA - Distorted

PA - Corrected

Hi @scchung,

The syn-sdc in fMRIPrep is different than SynBOLD. See the related thread: Using synthetic field map from synbold-disco with fmriprep - #18 by Steven

Also it is possible that there wasn’t much distortion to begin with. The coregistration plots of BOLD-to-Anat will be a better judge of how SDC performed.

Best,
Steven