Nipype workflow m0scan recognition for calibration in ASLPrep

Summary of what happened:

Hi,

I’m running ASLPrep (v25.1.0) within an Apptainer container on a cluster. During processing, I noticed the following message in the log:

251109-17:42:03,20 nipype.workflow INFO:
     Collected run data for /data/sub-XX/ses-V1/perf/sub-XX_ses-V1_asl.nii.gz:
     aslcontext: /data/sub-XX/ses-V1/perf/sub-XX_ses-V1_aslcontext.tsv
     m0scan: null
     sbref: null

Later in the log it reads:

251109-17:42:22,588 nipype.workflow INFO:
	 [Node] Setting-up "aslprep_25_1_wf.sub_XX_wf.asl_preproc_ses_V1_wf.asl_fit_wf.hmc_aslref_wf.select_highest_contrast_volumes" in "/work/aslprep_25_1_wf/sub_XX_wf/asl_preproc_ses_V1_wf/asl_fit_wf/hmc_aslref_wf/select_highest_contrast_volumes".
251109-17:42:22,610 nipype.workflow INFO:
	 [Node] Executing "select_highest_contrast_volumes" <aslprep.interfaces.reference.SelectHighestContrastVolumes>
251109-17:42:22,640 nipype.interface INFO:
	 Selecting m0scan as highest-contrast volume type for reference volume generation.

The .aslcontext.tsv file includes both noRF and m0scan entries, and the ASL sequence’s JSON file defines "M0Type": "Included". So I expected ASLPrep to recognize some of the volumes in the ASL sequence as M0 scans.

Could you please confirm whether m0scan: null means ASLPrep is not using the included M0 volumes, or if this message only reflects that no separate M0 file was found?

I want to make sure the workflow is applying the included M0 volumes for calibration, rather than defaulting to something else (averaging control images to create a reference image).

Note: file paths and subject ID have been anonymized for privacy.

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

# Environment variables
export FS_LICENSE= /FreeSurferLicense/license.txt
export TEMPLATEFLOW_HOME=/analysis/templateflow
export APPTAINERENV_FS_LICENSE=/freesurfer_license/license.txt
export APPTAINERENV_TEMPLATEFLOW_HOME=/templateflow

#  Paths
ASLPREP_IMG=/analysis/ASLprep/aslprep-25.1.0.sif
BIDS_DIR=/analysis/ASLprep/test
OUT_DIR=${BIDS_DIR}/output
WORK_DIR=${BIDS_DIR}/work

# Run ASLPrep
apptainer run --cleanenv \
  --env TEMPLATEFLOW_HOME=/templateflow \
  --bind ${BIDS_DIR}:/data:ro \
  --bind ${OUT_DIR}:/out \
  --bind ${WORK_DIR}:/work \
  --bind /analysis/ASLprep/FreeSurferLicense:/freesurfer_license \
  --bind /analysis/templateflow:/templateflow \
  ${ASLPREP_IMG} \
  /data /out participant \
  --participant-label XX \
  --skip_bids_validation \
  --output-spaces T1w \
  --basil \
  --n_cpus 16 \
  --fs-license-file /freesurfer_license/license.txt \
  --work-dir /work \
  --clean-workdir

Version:

ASLPrep (v25.1.0)

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

Apptainer

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

PASTE VALIDATOR OUTPUT HERE

Relevant log outputs (up to 20 lines):

251109-17:42:02,637 nipype.workflow INFO:
	 ANAT Stage 9: Creating fsLR registration sphere
251109-17:42:02,639 nipype.workflow INFO:
	 ANAT Stage 10: MSM-Sulc disabled
251109-17:42:02,639 nipype.workflow INFO:
	 ANAT Stage 11: Creating cortical surface mask
251109-17:42:03,20 nipype.workflow INFO:
	 Collected run data for /data/sub-XX/ses-V1/perf/sub-XX_ses-V1_asl.nii.gz:
aslcontext: /data/sub-XX/ses-V1/perf/sub-XX_ses-V1_aslcontext.tsv
m0scan: null
sbref: null

251109-17:42:03,153 nipype.workflow INFO:
	 No single-band-reference found for sub-XX_ses-V1_asl.nii.gz.
251109-17:42:03,241 nipype.workflow INFO:
	 Stage 1: Adding HMC aslref workflow
251109-17:42:03,244 nipype.workflow INFO:
	 Stage 2: Adding motion correction workflow
251109-17:42:03,248 nipype.workflow INFO:
	 No fieldmap correction - skipping Stage 3
251109-17:42:03,248 nipype.workflow INFO:
	 Stage 4: Adding coregistration aslref workflow
251109-17:42:03,266 nipype.workflow INFO:
	 Stage 5: Adding coregistration workflow
251109-17:42:03,309 nipype.utils WARNING:
	 Slice times are not ascending. They will be ignored in the BASIL call.
251109-17:42:05,255 nipype.workflow INFO:
	 ASLPrep workflow graph with 493 nodes built successfully.

Screenshots / relevant information:

aslcontext.tsv:

volume_type
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
label
control
noRF
noRF
m0scan
m0scan

The “collected run data” message only applies to files that are collected. It will only find an m0scan file if it’s a separate file. If a separate file isn’t found, ASLPrep will still look for included M0 scans within the ASL file, which is why you see the “Selecting m0scan as highest-contrast volume type” message.

It just means that a separate file wasn’t found. ASLPrep will still load the M0 volumes from the ASL file.

1 Like

Thank you very much,

-Cindy