This repository contains the ASL processing pipeline scripts for the Human Connectome Project.
The HCP list some prerequisites for their pipelines: https://github.com/Washington-University/HCPpipelines/wiki/Installation-and-Usage-Instructions.
The prerequisites specific to this pipeline, along with links to their installation pages, are listed below:
- FSL (version >= 6.0.5.1)
- Workbench (version >= 1.5.0)
- HCP Pipelines
- FreeSurfer
FSL version 6.0.5.1 is required to use new features in fabber
and oxford_asl_roi_stats.py
, which were added for this pipeline.
Workbench >= v1.5.0 is required. The -weighted
option in wb_command
's -volume-to-surface-mapping
introduced in version 1.5.0 is used in projections to the surface. The environment variable CARET7DIR
should point to directory containing the wb_command
executable.
The HCP Pipelines must be installed and the environment variable HCPPIPEDIR
set in order for the (Sub-)Cortical LUTs to be used in SE-based bias correction.
FreeSurfer must be installed to enable boundary-based registration (BBR). The environment variable FREESURFER_HOME
must be set.
It is advised that the pipeline is installed in a conda environment. Python >= 3.9 is required, for example following the steps below.
conda create -n hcpasl python=3.11
conda activate hcpasl
pip install git+https://github.com/physimals/hcp-asl.git
Once installed, the pipeline may be run as a command-line script as follows:
process_hcp_asl --subid ${Subjectid} --subdir ${SubDir} --mbpcasl ${mbpcasl} --fmap_ap ${SEFM_AP} --fmap_pa ${SEFM_PA} --grads ${GradientCoeffs}
The filepaths passed to the script may be relative or absolute. A more detailed explanation of the arguments, including optionals, can be found by running:
process_hcp_asl --help
To generate fully-corrected ASL data to use with other quantification tools besides oxford_asl
, the pipeline can be run up to stage 8 as follows:
process_hcp_asl \
--subid ${SubjectID} \
--subdir /path/to/study/dir/${SubjectID} \
--grads /path/to/coeff_AS82_Prisma.grad \
--mbpcasl /path/to/mbPCASLhr_PA.nii.gz \
--fmap_ap /path/to/PCASLhr_SpinEchoFieldMap_AP.nii.gz \
--fmap_pa /path/to/PCASLhr_SpinEchoFieldMap_PA.nii.gz \
--stages 0 1 2 3 4 5 6 7 8
The following outputs will be produced in /path/to/study/dir/${SubjectID}/T1w/ASL
:
asl_corr.nii.gz
fully corrected ASL timeseriesasl_corr_subtracted.nii.gz
motion-and-banding-aware subtracted ASL timeseriesTIs/timing_img_aslt1w.nii.gz
effective TI (including slice-time) for ASL timeseriescalib_corr.nii.gz
fully corrected calibration imageCalib/Calib0/calib_aslt1w_timing.nii.gz
effective TI (including slice-time) for calibration imagePVEs/
partial volume estimates for ASL timeseries
The pipeline can be run in stages via the --stages a b c
argument. The stages are numbered 0 to 13 inclusive and perform the following operations. Note, each stage assumes the previous stages have run successfully, and will raise various errors if the outputs of those stages cannot be found.
- Split mbPCASL sequence into ASL series and M0 images.
- Derive gradient and susceptibility distortion correction
- Correct M0 image
- Correct ASL image
- Label-control subtraction in ASL space
- Perfusion estimation in ASL space
- Registration and resampling of ASL/M0 into ASL-gridded T1w space
- Partial volume estimation in ASL-gridded T1w space
- Label-control subtraction in ASL-gridded T1w space
- Perfusion estimation in ASL-gridded T1w space
- Summary statistics within ROIs
- Volume to surface projection
- Copy key results into
$outdir/T1w/ASL
and$outdir/MNINonLinear/ASL
- Create QC report
Below is a directory tree within a subject's {SUBJID}_V1_MR
folder showing the location of final and intermediate pipeline outputs. The default output directory has been used, so outputs are stored within the {SUBJID}_V1_MR
folder.
SUBJECTID_V1_MR
ASL # Native acquisition space processing
βββ Calib # Intermediate calibration image processing
βΒ Β βββ Calib0
βΒ Β βΒ Β βββ bias_correction
βΒ Β βΒ Β βΒ Β βββ SEbased
βΒ Β βΒ Β βΒ Β βΒ Β βββ AllGreyMatter.nii.gz
βΒ Β βΒ Β βΒ Β βΒ Β βββ [ .... ]
βΒ Β βΒ Β βΒ Β βΒ Β βββ sebased_bias_dil.nii.gz
βΒ Β βΒ Β βΒ Β βββ gdc_sdc_calib0_bias.nii.gz
βΒ Β βΒ Β βΒ Β βββ gdc_sdc_calib0_restore.nii.gz
βΒ Β βΒ Β βββ distortion_correction
βΒ Β βΒ Β βΒ Β βββ asl2orig_mgz_initial_bbr.dat
βΒ Β βΒ Β βΒ Β βββ [ .... ]
βΒ Β βΒ Β βΒ Β βββ struct2asl.mat
βΒ Β βΒ Β βββ empirical_banding_correction
βΒ Β βΒ Β βΒ Β βββ eb_gdc_calib0.nii.gz
βΒ Β βΒ Β βΒ Β βββ eb_gdc_sdc_calib0_restore.nii.gz
βΒ Β βΒ Β βββ aslfs_mask.nii.gz
βΒ Β βΒ Β βββ calib0.nii.gz
βΒ Β βΒ Β βββ calib_timing.nii.gz
βΒ Β βββ Calib1
βΒ Β βββ bias_correction
βΒ Β βΒ Β βββ SEbased
βΒ Β βΒ Β βΒ Β βββ AllGreyMatter.nii.gz
βΒ Β βΒ Β βΒ Β βββ [ .... ]
βΒ Β βΒ Β βΒ Β βββ sebased_bias_dil.nii.gz
βΒ Β βΒ Β βββ gdc_sdc_calib1_bias.nii.gz
βΒ Β βΒ Β βββ gdc_sdc_calib1_restore.nii.gz
βΒ Β βββ distortion_correction
βΒ Β βΒ Β βββ asl2orig_mgz_initial_bbr.dat
βΒ Β βΒ Β βββ [ .... ]
βΒ Β βΒ Β βββ struct2asl.mat
βΒ Β βββ empirical_banding_correction
βΒ Β βΒ Β βββ eb_gdc_calib1.nii.gz
βΒ Β βΒ Β βββ eb_gdc_sdc_calib1_restore.nii.gz
βΒ Β βββ aslfs_mask.nii.gz
βΒ Β βββ calib1.nii.gz
βββ perfusion_estimation # Basic perfusion estimates for BBR registration
βΒ Β βββ logfile
βΒ Β βββ native_space
βΒ Β βΒ Β βββ aCBV.nii.gz
βΒ Β βΒ Β βββ arrival.nii.gz
βΒ Β βΒ Β βββ arrival_var.nii.gz
βΒ Β βΒ Β βββ mask.nii.gz
βΒ Β βΒ Β βββ perfusion.nii.gz
βΒ Β βΒ Β βββ perfusion_var.nii.gz
βΒ Β βββ oxford_asl_inputs
βΒ Β βββ beta_perf.nii.gz
βΒ Β βββ brain_fov_mask.nii.gz
βββ TIs # Intermediate ASL timeseries processing
βΒ Β βββ bias_correction
βΒ Β βΒ Β βββ tis_restore.nii.gz
βΒ Β βΒ Β βββ tis_dc_restore.nii.gz
βΒ Β βββ distortion_correction
βΒ Β βΒ Β βββ FirstPass
βΒ Β βΒ Β βββ dc_tis.nii.gz
βΒ Β βΒ Β βββ temp_reg_dc_tis.nii.gz
βΒ Β βΒ Β βββ tis_gdc.nii.gz
βΒ Β βββ empirical_banding_correction
βΒ Β βΒ Β βββ tis_dc_restore_eb.nii.gz
βΒ Β βΒ Β βββ tis_eb.nii.gz
βΒ Β βΒ Β βββ tis_eb_even.nii.gz
βΒ Β βΒ Β βββ tis_eb_odd.nii.gz
βΒ Β βββ MoCo
βΒ Β βΒ Β βββ asln2m0.mat
βΒ Β βΒ Β βΒ Β βββ MAT_0000
βΒ Β βΒ Β βΒ Β βββ [ .... ]
βΒ Β βΒ Β βΒ Β βββ MAT_0085
βΒ Β βΒ Β βββ asln2calibration_final.mat
βΒ Β βΒ Β βΒ Β βββ MAT_0000
βΒ Β βΒ Β βΒ Β βββ [ .... ]
βΒ Β βΒ Β βΒ Β βββ MAT_0085
βΒ Β βΒ Β βββ final_registration_TIs.nii.gz
βΒ Β βΒ Β βββ final_registration_TIs.nii.gz.par
βΒ Β βΒ Β βββ fov_mask.nii.gz # Final motion-FoV mask
βΒ Β βΒ Β βββ fov_mask_initial.nii.gz
βΒ Β βΒ Β βββ temp_reg_dc_tis_eb_odd.nii.gz
βΒ Β βΒ Β βββ tis_dc_moco.nii.gz
βΒ Β βββ MotionSubtraction
βΒ Β βΒ Β βββ beta_baseline.nii.gz
βΒ Β βΒ Β βββ beta_perf.nii.gz
βΒ Β βΒ Β βββ combined_mask.nii.gz
βΒ Β βΒ Β βββ difference_mask.nii.gz
βΒ Β βββ slicetime_correction
βΒ Β βΒ Β βββ st_scaling_factors.nii.gz
βΒ Β βΒ Β βββ tis_stcorr.nii.gz
βΒ Β βββ slicetime_correction2
βΒ Β βΒ Β βββ combined_scaling_factors_asln.nii.gz
βΒ Β βΒ Β βββ st_scaling_factors.nii.gz
βΒ Β βΒ Β βββ tis_dc_restore_eb_stcorr.nii.gz
βΒ Β βββ saturation_recovery
βΒ Β βΒ Β βββ nospatial
βΒ Β βΒ Β βΒ Β βββ finalMVN.nii.gz
βΒ Β βΒ Β βΒ Β βββ logfile
βΒ Β βΒ Β βΒ Β βββ mean_A.nii.gz
βΒ Β βΒ Β βΒ Β βββ mean_M0t.nii.gz
βΒ Β βΒ Β βΒ Β βββ mean_T1t.nii.gz
βΒ Β βΒ Β βββ spatial
βΒ Β βΒ Β βββ logfile
βΒ Β βΒ Β βββ mean_A.nii.gz
βΒ Β βΒ Β βββ mean_M0t.nii.gz
βΒ Β βΒ Β βββ mean_T1t.nii.gz
βΒ Β βΒ Β βββ mean_T1t_filt.nii.gz
βΒ Β βββ saturation_recovery2
βΒ Β βΒ Β βββ nospatial
βΒ Β βΒ Β βΒ Β βββ finalMVN.nii.gz
βΒ Β βΒ Β βΒ Β βββ logfile
βΒ Β βΒ Β βΒ Β βββ mean_A.nii.gz
βΒ Β βΒ Β βΒ Β βββ mean_M0t.nii.gz
βΒ Β βΒ Β βΒ Β βββ mean_T1t.nii.gz
βΒ Β βΒ Β βββ spatial
βΒ Β βΒ Β βββ logfile
βΒ Β βΒ Β βββ mean_A.nii.gz
βΒ Β βΒ Β βββ mean_M0t.nii.gz
βΒ Β βΒ Β βββ mean_T1t.nii.gz
βΒ Β βΒ Β βββ mean_T1t_filt.nii.gz
βΒ Β βΒ Β βββ mean_T1t_filt_asln.nii.gz
βΒ Β βββ brain_fov_mask.nii.gz # Combined brain and motion-FoV mask
βΒ Β βββ brain_fov_mask_initial.nii.gz
βΒ Β βββ brain_mask.nii.gz
βΒ Β βββ combined_scaling_factors.nii.gz
βΒ Β βββ tis.nii.gz # Raw ASL timeseries
βΒ Β βββ tis_dc_moco_restore.nii.gz
βΒ Β βββ tis_dc_moco_restore_bandcorr.nii.gz # Fully corrected timeseries
βββ gradient_unwarp
βΒ Β βββ fullWarp_abs.nii.gz
βΒ Β βββ gdc_corr_vol1.nii.gz
βββ topup
β βββ Jacobian_01.nii.gz
βΒ βββ [ .... ]
βΒ βββ fmap_struct_reg
βΒ βΒ Β βββ asl2orig_mgz_initial_bbr.dat
βΒ βΒ Β βββ [ .... ]
βΒ βΒ Β βββ asl2struct.mat
βΒ βββ topup_params.txt
MNINonLinear # MNI space results
βββ ASL
β βββ CIFTIPrepare
β βΒ Β βββ arrival_Atlas.dscalar.nii
β βΒ Β βββ [ .... ]
β βΒ Β βββ perfusion_var_calib_MNI.nii.gz
β βΒ Β βββ pvcorr
β βΒ Β βββ arrival_Atlas.dscalar.nii
β βΒ Β βββ [ .... ]
β βΒ Β βββ perfusion_var_calib_MNI.nii.gz
β βββ perfusion_estimation # Oxford ASL outputs (in MNI)
β βΒ Β βββ std_space
β βΒ Β βββ arrival.nii.gz
β βΒ Β βββ arrival_var.nii.gz
β βΒ Β βββ perfusion_calib.nii.gz
β βΒ Β βββ perfusion_var_calib.nii.gz
β βΒ Β βββ pvcorr
β βΒ Β βββ arrival_gm_masked.nii.gz
β βΒ Β βββ arrival_gm_var_masked.nii.gz
β βΒ Β βββ arrival_wm_masked.nii.gz
β βΒ Β βββ arrival_wm_var_masked.nii.gz
β βΒ Β βββ perfusion_gm_calib_masked.nii.gz
β βΒ Β βββ perfusion_gm_var_calib_masked.nii.gz
β βΒ Β βββ perfusion_wm_calib_masked.nii.gz
β βΒ Β βββ perfusion_wm_var_calib_masked.nii.gz
β βββ arrival.nii.gz # MNI NIFTI, ATT, non-PVEc
β βββ arrival_Atlas.dscalar.nii # MNI CIFTI, ATT, non-PVEc
β βββ arrival_cifti_mean_nonzero.txt # ROI calculation
β βββ perfusion_calib.nii.gz # MNI NIFTI, perfusion, non-PVEc
β βββ perfusion_calib_Atlas.dscalar.nii # MNI CIFTI, perfusion, non-PVEc
β βββ perfusion_calib_cifti_mean_nonzero.txt # ROI calculation
β βββ pvcorr_arrival_Atlas.dscalar.nii # MNI CIFTI, ATT, PVEc
β βββ pvcorr_arrival_cifti_mean_nonzero.txt # ROI calculation
β βββ pvcorr_arrival_gm_masked.nii.gz # MNI NIFTI, ATT, PVEc GM
β βββ pvcorr_arrival_wm_masked.nii.gz # MNI NIFTI, ATT, PVEc WM
β βββ pvcorr_perfusion_calib_Atlas.dscalar.nii # MNI CIFTI, perfusion, PVEc
β βββ pvcorr_perfusion_calib_cifti_mean_nonzero.txt # ROI calculation
β βββ pvcorr_perfusion_gm_calib_masked.nii.gz # MNI NIFTI, perfusion, PVEc GM
β βββ pvcorr_perfusion_wm_calib_masked.nii.gz # MNI NIFTI, perfusion, PVEc WM
T1w # T1w aligned space
βββ ASL # T1w aligned at ASL resolution, used for final processing of all data.
βββ ASLQC # WB scene file and jupyter notebook for visual QC.
βΒ Β βββ HCD0378150_V1_MR_hcp_asl_qc.scene
βΒ Β βββ HCD0378150_V1_MR_hcp_asl_qc_scene_1.png
βΒ Β βββ HCD0378150_V1_MR_hcp_asl_qc_scene_2.png
βΒ Β βββ HCD0378150_V1_MR_hcp_asl_qc_scene_3.png
βΒ Β βββ HCD0378150_V1_MR_hcp_asl_qc_scene_4.png
βΒ Β βββ HCD0378150_V1_MR_hcp_asl_qc_scene_5.png
βΒ Β βββ HCD0378150_V1_MR_hcp_asl_qc_scene_6.png
βΒ Β βββ HCD0378150_V1_MR_hcp_asl_qc_scene_7.png
βΒ Β βββ HCD0378150_V1_MR_hcp_asl_report.ipynb
βββ CIFTIPrepare
βΒ Β βββ arrival.L.badvert_ribbonroi.native.func.gii
βΒ Β βββ [ .... ]
βΒ Β βββ perfusion_var_calib_s2.atlasroi.R.32k_fs_LR.func.gii
βΒ Β βββ pvcorr
βΒ Β βββ arrival.L.badvert_ribbonroi.native.func.gii
βΒ Β βββ [ .... ]
βΒ Β βββ perfusion_var_calib_s2.atlasroi.R.32k_fs_LR.func.gii
βββ Calib
βΒ Β βββ Calib0
βΒ Β βββ distortion_correction
βΒ Β βΒ Β βββ calib0_dc.nii.gz
βΒ Β βΒ Β βββ calib_mt_scaling_factors.nii.gz
βΒ Β βββ SEbased
βΒ Β βΒ Β βββ AllGreyMatter.nii.gz
βΒ Β βΒ Β βββ [ .... ]
βΒ Β βΒ Β βββ sebased_bias_dilall.nii.gz
βΒ Β βββ calib0_corrected.nii.gz
βΒ Β βββ calib0_noncorr.nii.gz
βΒ Β βββ calib_aslt1w_stcorr_factors.nii.gz
βΒ Β βββ calib_aslt1w_timing.nii.gz
βββ HCD0378150_V1_MR_hcp_asl.log # HCP-ASL pipeline logfile
βββ perfusion_estimation
βΒ Β βββ calib
βΒ Β βΒ Β βββ M0.txt
βΒ Β βΒ Β βββ logfile
βΒ Β βΒ Β βββ refmask.nii.gz
βΒ Β βββ logfile
βΒ Β βββ native_space
βΒ Β βΒ Β βββ aCBV.nii.gz
βΒ Β βΒ Β βββ [ .... ]
βΒ Β βΒ Β βββ perfusion_wm_mean.txt
βΒ Β βΒ Β βββ pvcorr
βΒ Β βΒ Β βΒ Β βββ aCBV.nii.gz
βΒ Β βΒ Β βΒ Β βββ [ .... ]
βΒ Β βΒ Β βΒ Β βββ perfusion_wm_wm_mean.txt
βΒ Β βΒ Β βββ wm_roi.nii.gz
βΒ Β βββ oxford_asl_inputs
βΒ Β βββ beta_perf.nii.gz
βΒ Β βββ brain_fov_mask.nii.gz
βΒ Β βββ calib0_corrected.nii.gz
βΒ Β βββ pve_GM.nii.gz
βΒ Β βββ pve_WM.nii.gz
βΒ Β βββ timing_img_aslt1w.nii.gz
βΒ Β βββ vent_csf_mask.nii.gz
βββ PVEs
βΒ Β βββ pve_GM.nii.gz
βΒ Β βββ pve_WM.nii.gz
βΒ Β βββ vent_csf_mask.nii.gz
βββ TIs
βΒ Β βββ distortion_correction
βΒ Β βΒ Β βββ tis_dc_moco.nii.gz
βΒ Β βββ MotionSubtraction
βΒ Β βΒ Β βββ beta_baseline.nii.gz
βΒ Β βΒ Β βββ beta_perf.nii.gz
βΒ Β βΒ Β βββ combined_mask.nii.gz
βΒ Β βΒ Β βββ difference_mask.nii.gz
βΒ Β βββ asl_corrected.nii.gz
βΒ Β βββ asl_noncorr.nii.gz
βΒ Β βββ combined_scaling_factors.nii.gz
βΒ Β βββ reg
βΒ Β βΒ Β βββ ASL_grid_T1w_brain_mask.nii.gz
βΒ Β βΒ Β βββ [ .... ]
βΒ Β βΒ Β βββ asl2struct.mat
βΒ Β βΒ Β βββ brain_fov_mask.nii.gz
βΒ Β βΒ Β βββ fmapmag_aslt1w.nii.gz
βΒ Β βΒ Β βββ fov_mask.nii.gz
βΒ Β βΒ Β βββ mean_T1t_filt_aslt1w.nii.gz
βΒ Β βββ timing_img_aslt1w.nii.gz
Β Β βββ aCBV_calib.nii.gz # T1w NIFTI, arterial cerebral blood volume, non-PVEc
Β Β βββ arrival.nii.gz # T1w NIFTI, ATT, non-PVEc
Β Β βββ arrival_gm_mean.txt # ROI calculation
Β Β βββ arrival_var.nii.gz
Β Β βββ arrival_wm_mean.txt # ROI calculation
βββ asl_corrected.nii.gz # Fully corrected ASL timeseries
βββ asl_corr_subtracted.nii.gz # Fully corrected and subtracted ASL timeseries
βββ calib_corrected.nii.gz # Fully corrected calibration image
βββ perfusion_calib.nii.gz
βββ perfusion_calib_gm_mean.txt
βββ perfusion_calib_wm_mean.txt
Β Β βββ perfusion_var_calib.nii.gz
Β Β βββ pvcorr_aCBV_calib.nii.gz # T1w NIFTI, arterial cerebral blood volume, PVEc
Β Β βββ pvcorr_arrival_gm_masked.nii.gz # T1w NIFTI, ATT, PVEc GM
Β Β βββ pvcorr_arrival_gm_mean.txt # ROI calculation
Β Β βββ pvcorr_arrival_gm_var_masked.nii.gz
Β Β βββ pvcorr_arrival_wm_masked.nii.gz # T1w NIFTI, ATT, PVEc WM
Β Β βββ pvcorr_arrival_wm_mean.txt # ROI calculation
Β Β βββ pvcorr_arrival_wm_var_masked.nii.gz
Β Β βββ pvcorr_perfusion_calib_gm_mean.txt # ROI calculation
Β Β βββ pvcorr_perfusion_calib_wm_mean.txt # ROI calculation
Β Β βββ pvcorr_perfusion_gm_calib_masked.nii.gz # T1w NIFTI, perfusion, PVEc GM
Β Β βββ pvcorr_perfusion_gm_var_calib_masked.nii.gz
Β Β βββ pvcorr_perfusion_wm_calib_masked.nii.gz # T1w NIFTI, perfusion, PVEc WM
Β Β βββ pvcorr_perfusion_wm_var_calib_masked.nii.gz
βββ reg
βΒ Β βββ ASL_grid_T1w_acpc_dc_restore.nii.gz
βΒ Β βββ wmmask.nii.gz
βββ roi_stats
βββ fsl_identity.txt
βββ roi_stats.csv
βββ roi_stats_gm.csv
βββ roi_stats_wm.csv