How to run ASLPrep with SDC for 3D pCASL opposite phase (AP and PA) runs

Summary of what happened:

I have two run of multi-delay 3D pCASL data, one AP and another PA. I am trying to run the data through aslprep with topup distortion correction, but it does not do SDC when I ran it. I tried to add intended for tags into the json files, but that did not work.
Is there something I am missing in order to have the two runs be used for SDC?
Thanks!
Jenya

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

ASLPrep command: /opt/conda/envs/aslprep/bin/aslprep --participant-label sub-DRTS0001 --skip_bids_validation --derivatives /N/project/Plawecki_DRTS/derivatives/DRTS --nthreads 8 --work-dir /N/scratch/echumin/aslprep-workingdir/sub-DRTS0001 --fs-license-file /opt/freesufer/license.txt --ignore t2w flair --output-spaces T1w MNI152NLin2009cAsym --asl2anat-init t1w --fs-subjects-dir /N/project/Plawecki_DRTS/derivatives/DRTS/freesurfer7/sub-DRTS0001_ses-1 --fs-no-reconall --basil -v /N/scratch/echumin/tmp_sub-DRTS0001_ses-1/ /N/project/Plawecki_DRTS/derivatives/DRTS/aslprep-5Delay-25.0.0rc1/ participant

Version:

aslprep-25.0.0.rc1

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

singularity build with apptainer

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

Here are the names of the asl data and the intended for bit of the json:

sub-DRTS0001/ses-1/perf/sub-DRTS0001_ses-1_acq-5delay_dir-AP_asl.json
sub-DRTS0001/ses-1/perf/sub-DRTS0001_ses-1_acq-5delay_dir-AP_asl.nii.gz
sub-DRTS0001/ses-1/perf/sub-DRTS0001_ses-1_acq-5delay_dir-PA_asl.json
sub-DRTS0001/ses-1/perf/sub-DRTS0001_ses-1_acq-5delay_dir-PA_asl.nii.gz

AP json snippet:

"PhaseEncodingDirection": "j-",
    "ImageOrientationPatientDICOM": [
        1,
        0,
        0,
        0,
        1,
        0
    ],
    "ImageOrientationText": "Tra",
    "InPlanePhaseEncodingDirectionDICOM": "COL",
    "BidsGuess": [
        "perf",
        "_acq-tgse3_run-19_asl"
    ],
    "ConversionSoftware": "dcm2niix",
    "ConversionSoftwareVersion": "v1.0.20240202",
    "Dcm2bidsVersion": "3.2.0",
    "M0Type": "Included",
    "PostLabelingDelay": [
        0,
        0,
        0.3,
        0.3,
        0.8,
        0.8,
        1.3,
        1.3,
        1.3,
        1.3,
        1.8,
        1.8,
        1.8,
        1.8,
        2.3,
        2.3
    ],
    "VascularCrushing": "false",
    "BolusCutOffFlag": "true",
    "BolusCutOffDelayTime": 1.79,
    "BolusCutOffTechnique": "Q2TIPS",
    "LabelingSlabThickness": 168,
    "intendedFor": [
        "bids::sub-DRTS0001/ses-1/perf/sub-DRTS0001_ses-1_acq-5delay_dir-AP_asl.nii.gz",
        "bids::sub-DRTS0001/ses-1/perf/sub-DRTS0001_ses-1_acq-5delay_dir-PA_asl.nii.gz"
    ]
}

PA json snippet:

"PhaseEncodingDirection": "j",
    "ImageOrientationPatientDICOM": [
        1,
        0,
        0,
        0,
        1,
        0
    ],
    "ImageOrientationText": "Tra",
    "InPlanePhaseEncodingDirectionDICOM": "COL",
    "BidsGuess": [
        "perf",
        "_acq-tgse3_run-21_asl"
    ],
    "ConversionSoftware": "dcm2niix",
    "ConversionSoftwareVersion": "v1.0.20240202",
    "Dcm2bidsVersion": "3.2.0",
    "M0Type": "Included",
    "PostLabelingDelay": [
        0,
        0,
        0.3,
        0.3,
        0.8,
        0.8,
        1.3,
        1.3,
        1.3,
        1.3,
        1.8,
        1.8,
        1.8,
        1.8,
        2.3,
        2.3
    ],
    "VascularCrushing": "false",
    "BolusCutOffFlag": "true",
    "BolusCutOffDelayTime": 1.79,
    "BolusCutOffTechnique": "Q2TIPS",
    "LabelingSlabThickness": 168,
    "intendedFor": [
        "bids::sub-DRTS0001/ses-1/perf/sub-DRTS0001_ses-1_acq-5delay_dir-AP_asl.nii.gz",
        "bids::sub-DRTS0001/ses-1/perf/sub-DRTS0001_ses-1_acq-5delay_dir-PA_asl.nii.gz"
    ]
}

Hi @echumin,

The “I” in “intended” needs to be capitalized. Also I am not sure if ASLPrep accepts the BIDS-URI version of IntendedFor (that is, you would need to remove the bids::sub-DRTS0001/ from each entry), or if it even accepts IntendedFor as a valid field for _asl file types. I believe the IntendedFor field is supposed to go in the M0 files, which appears to be included in your ASL sequence. Perhaps you should separate your whole ASL file into the M0 and the main sequence, and then add the fixed IntendedFor to the M0 metadata.

Pinging @tsalo who would know better.

Best,
Steven

1 Like

Hi @echumin,

ASLPrep does not have blip up / blip down SDC. You would need reverse phase encoded field map.

Best,
Steven

1 Like

Thanks!
I keep making the same mistake with that lower cate “i” over and over.

As for the BIDS-URI has worked for me before.

Thanks again!

Do you think I can get around it by having copies of the two opposite phase pcasl runs in the fmap folder, so that they can serve as their own fieldmaps?

It won’t use full runs as field maps. You can pop out the reverse phase-encoded M0 volumes (just one volume per direction) as field maps though.

1 Like