How to add new bundles into pyAFQ (SLF 1/2/3 Example)#
pyAFQ is designed to be customizable and extensible. This example shows how you can customize it to define a new bundle based on a definition of waypoint and endpoint ROIs of your design.
In this case, we add sub-bundles of the superior longitudinal fasciculus, based on work by Sagi et al [1]_.
We start by importing some of the components that we need for this example and fixing the random seed for reproducibility
import os.path as op
import numpy as np
from AFQ.api.group import GroupAFQ
import AFQ.api.bundle_dict as abd
import AFQ.data.fetch as afd
from AFQ.definitions.image import RoiImage
import wget
import os
np.random.seed(1234)
2026-05-19 00:55:04,115 INFO util.py:154 -- Missing packages: ['ipywidgets']. Run `pip install -U ipywidgets`, then restart the notebook server for rich notebook output.
Get dMRI data#
We will analyze eight subject from the Healthy Brain Network Processed Open
Diffusion Derivatives dataset (HBN-POD2) [2], [3]. We’ll use a fetcher to
get preprocessed dMRI data for eight of the >2,000 subjects in that study. The
data gets organized into a BIDS-compatible format in the ~/AFQ_data/HBN
folder. These 12 subjects have very high quality data.
The fether returns this directory as study_dir:
_, study_dir = afd.fetch_hbn_preproc([
'NDARKP893TWU',
'NDAREP505XAD',
'NDARKT540ZW0',
'NDARAG340ERT',
'NDAREM757NBG',
'NDARLL894HC3',
'NDARFY525TL2',
'NDARKV461KGZ',
'NDARUC851WHU',
'NDARMJ333WJM',
'NDARJG687YYX',
'NDARJA157YB3',
])
0%| | 0/436 [00:00<?, ?it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_desc-brain_mask.nii.gz: 0%| | 0/436 [00:00<?, ?it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_desc-brain_mask.nii.gz: 0%| | 1/436 [00:00<02:31, 2.88it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_desc-preproc_T1w.nii.gz: 0%| | 1/436 [00:00<02:31, 2.88it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_desc-preproc_T1w.nii.gz: 0%| | 2/436 [00:01<06:06, 1.18it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_dseg.nii.gz: 0%| | 2/436 [00:01<06:06, 1.18it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_dseg.nii.gz: 1%| | 3/436 [00:01<04:17, 1.68it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_from-MNI152NLin2009cAsym_to-T1w_mode-image_xfm.h5: 1%| | 3/436 [00:01<04:17, 1.68it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_from-MNI152NLin2009cAsym_to-T1w_mode-image_xfm.h5: 1%| | 4/436 [00:03<06:04, 1.18it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_from-T1w_to-MNI152NLin2009cAsym_mode-image_xfm.h5: 1%| | 4/436 [00:03<06:04, 1.18it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_from-T1w_to-MNI152NLin2009cAsym_mode-image_xfm.h5: 1%| | 5/436 [00:03<05:21, 1.34it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_label-CSF_probseg.nii.gz: 1%| | 5/436 [00:03<05:21, 1.34it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_label-CSF_probseg.nii.gz: 1%|▏ | 6/436 [00:03<04:16, 1.67it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_label-GM_probseg.nii.gz: 1%|▏ | 6/436 [00:03<04:16, 1.67it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_label-GM_probseg.nii.gz: 2%|▏ | 7/436 [00:04<03:34, 2.00it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_label-WM_probseg.nii.gz: 2%|▏ | 7/436 [00:04<03:34, 2.00it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_label-WM_probseg.nii.gz: 2%|▏ | 8/436 [00:04<03:08, 2.27it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_space-MNI152NLin2009cAsym_desc-brain_mask.nii.gz: 2%|▏ | 8/436 [00:04<03:08, 2.27it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_space-MNI152NLin2009cAsym_desc-brain_mask.nii.gz: 2%|▏ | 9/436 [00:04<02:36, 2.74it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_space-MNI152NLin2009cAsym_desc-preproc_T1w.nii.gz: 2%|▏ | 9/436 [00:04<02:36, 2.74it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_space-MNI152NLin2009cAsym_desc-preproc_T1w.nii.gz: 2%|▏ | 10/436 [00:05<02:29, 2.84it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_space-MNI152NLin2009cAsym_dseg.nii.gz: 2%|▏ | 10/436 [00:05<02:29, 2.84it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_space-MNI152NLin2009cAsym_dseg.nii.gz: 3%|▎ | 11/436 [00:05<02:13, 3.18it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_space-MNI152NLin2009cAsym_label-CSF_probseg.nii.gz: 3%|▎ | 11/436 [00:05<02:13, 3.18it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_space-MNI152NLin2009cAsym_label-CSF_probseg.nii.gz: 3%|▎ | 12/436 [00:05<02:13, 3.18it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_space-MNI152NLin2009cAsym_label-GM_probseg.nii.gz: 3%|▎ | 12/436 [00:05<02:13, 3.18it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_space-MNI152NLin2009cAsym_label-GM_probseg.nii.gz: 3%|▎ | 13/436 [00:06<02:24, 2.93it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_space-MNI152NLin2009cAsym_label-WM_probseg.nii.gz: 3%|▎ | 13/436 [00:06<02:24, 2.93it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/anat/sub-NDARKP893TWU_space-MNI152NLin2009cAsym_label-WM_probseg.nii.gz: 3%|▎ | 14/436 [00:06<03:10, 2.22it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_seg_brainmask.svg: 3%|▎ | 14/436 [00:06<03:10, 2.22it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_seg_brainmask.svg: 3%|▎ | 15/436 [00:07<02:53, 2.42it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_carpetplot.svg: 3%|▎ | 15/436 [00:07<02:53, 2.42it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_carpetplot.svg: 4%|▎ | 16/436 [00:07<02:18, 3.03it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_coreg.svg: 4%|▎ | 16/436 [00:07<02:18, 3.03it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_coreg.svg: 4%|▍ | 17/436 [00:07<02:01, 3.44it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_desc-resampled_b0ref.svg: 4%|▍ | 17/436 [00:07<02:01, 3.44it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_desc-resampled_b0ref.svg: 4%|▍ | 18/436 [00:07<01:48, 3.83it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_desc-sdc_b0.svg: 4%|▍ | 18/436 [00:07<01:48, 3.83it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_desc-sdc_b0.svg: 4%|▍ | 19/436 [00:07<01:43, 4.02it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_dwi_denoise_ses_HBNsiteRU_acq_64dir_dwi_wf_biascorr.svg: 4%|▍ | 19/436 [00:07<01:43, 4.02it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_dwi_denoise_ses_HBNsiteRU_acq_64dir_dwi_wf_biascorr.svg: 5%|▍ | 20/436 [00:08<01:53, 3.67it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_dwi_denoise_ses_HBNsiteRU_acq_64dir_dwi_wf_denoising.svg: 5%|▍ | 20/436 [00:08<01:53, 3.67it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_dwi_denoise_ses_HBNsiteRU_acq_64dir_dwi_wf_denoising.svg: 5%|▍ | 21/436 [00:08<02:08, 3.22it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_dwi_denoise_ses_HBNsiteRU_acq_64dir_dwi_wf_unringing.svg: 5%|▍ | 21/436 [00:08<02:08, 3.22it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_dwi_denoise_ses_HBNsiteRU_acq_64dir_dwi_wf_unringing.svg: 5%|▌ | 22/436 [00:08<01:58, 3.50it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_sampling_scheme.gif: 5%|▌ | 22/436 [00:08<01:58, 3.50it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_sampling_scheme.gif: 5%|▌ | 23/436 [00:09<01:57, 3.51it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_t1_2_mni.svg: 5%|▌ | 23/436 [00:09<01:57, 3.51it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/figures/sub-NDARKP893TWU_t1_2_mni.svg: 6%|▌ | 24/436 [00:09<01:52, 3.67it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/anat/sub-NDARKP893TWU_ses-HBNsiteRU_acq-HCP_from-orig_to-T1w_mode-image_xfm.txt: 6%|▌ | 24/436 [00:09<01:52, 3.67it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/anat/sub-NDARKP893TWU_ses-HBNsiteRU_acq-HCP_from-orig_to-T1w_mode-image_xfm.txt: 6%|▌ | 25/436 [00:09<01:35, 4.31it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_confounds.tsv: 6%|▌ | 25/436 [00:09<01:35, 4.31it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_confounds.tsv: 6%|▌ | 26/436 [00:09<01:26, 4.73it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_desc-ImageQC_dwi.csv: 6%|▌ | 26/436 [00:09<01:26, 4.73it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_desc-ImageQC_dwi.csv: 6%|▌ | 27/436 [00:09<01:24, 4.82it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_desc-SliceQC_dwi.json: 6%|▌ | 27/436 [00:09<01:24, 4.82it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_desc-SliceQC_dwi.json: 6%|▋ | 28/436 [00:10<01:31, 4.48it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_dwiqc.json: 6%|▋ | 28/436 [00:10<01:31, 4.48it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_dwiqc.json: 7%|▋ | 29/436 [00:10<01:39, 4.11it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_space-T1w_desc-brain_mask.nii.gz: 7%|▋ | 29/436 [00:10<01:39, 4.11it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_space-T1w_desc-brain_mask.nii.gz: 7%|▋ | 30/436 [00:10<01:27, 4.64it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_space-T1w_desc-eddy_cnr.nii.gz: 7%|▋ | 30/436 [00:10<01:27, 4.64it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_space-T1w_desc-eddy_cnr.nii.gz: 7%|▋ | 31/436 [00:10<01:21, 5.00it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_space-T1w_desc-preproc_dwi.b: 7%|▋ | 31/436 [00:10<01:21, 5.00it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_space-T1w_desc-preproc_dwi.b: 7%|▋ | 32/436 [00:10<01:15, 5.33it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_space-T1w_desc-preproc_dwi.bval: 7%|▋ | 32/436 [00:10<01:15, 5.33it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_space-T1w_desc-preproc_dwi.bval: 8%|▊ | 33/436 [00:10<01:14, 5.40it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_space-T1w_desc-preproc_dwi.bvec: 8%|▊ | 33/436 [00:10<01:14, 5.40it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_space-T1w_desc-preproc_dwi.bvec: 8%|▊ | 34/436 [00:11<01:16, 5.25it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_space-T1w_desc-preproc_dwi.nii.gz: 8%|▊ | 34/436 [00:11<01:16, 5.25it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_space-T1w_desc-preproc_dwi.nii.gz: 8%|▊ | 35/436 [00:13<05:30, 1.21it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_space-T1w_dwiref.nii.gz: 8%|▊ | 35/436 [00:13<05:30, 1.21it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKP893TWU/ses-HBNsiteRU/dwi/sub-NDARKP893TWU_ses-HBNsiteRU_acq-64dir_space-T1w_dwiref.nii.gz: 8%|▊ | 36/436 [00:13<04:27, 1.49it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_desc-brain_mask.nii.gz: 8%|▊ | 36/436 [00:13<04:27, 1.49it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_desc-brain_mask.nii.gz: 8%|▊ | 37/436 [00:14<03:34, 1.86it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_desc-preproc_T1w.nii.gz: 8%|▊ | 37/436 [00:14<03:34, 1.86it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_desc-preproc_T1w.nii.gz: 9%|▊ | 38/436 [00:14<03:17, 2.01it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_dseg.nii.gz: 9%|▊ | 38/436 [00:14<03:17, 2.01it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_dseg.nii.gz: 9%|▉ | 39/436 [00:14<02:42, 2.44it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_from-MNI152NLin2009cAsym_to-T1w_mode-image_xfm.h5: 9%|▉ | 39/436 [00:14<02:42, 2.44it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_from-MNI152NLin2009cAsym_to-T1w_mode-image_xfm.h5: 9%|▉ | 40/436 [00:15<03:20, 1.98it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_from-T1w_to-MNI152NLin2009cAsym_mode-image_xfm.h5: 9%|▉ | 40/436 [00:15<03:20, 1.98it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_from-T1w_to-MNI152NLin2009cAsym_mode-image_xfm.h5: 9%|▉ | 41/436 [00:16<03:43, 1.77it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_label-CSF_probseg.nii.gz: 9%|▉ | 41/436 [00:16<03:43, 1.77it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_label-CSF_probseg.nii.gz: 10%|▉ | 42/436 [00:16<03:06, 2.11it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_label-GM_probseg.nii.gz: 10%|▉ | 42/436 [00:16<03:06, 2.11it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_label-GM_probseg.nii.gz: 10%|▉ | 43/436 [00:16<02:39, 2.46it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_label-WM_probseg.nii.gz: 10%|▉ | 43/436 [00:16<02:39, 2.46it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_label-WM_probseg.nii.gz: 10%|█ | 44/436 [00:16<02:30, 2.61it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_space-MNI152NLin2009cAsym_desc-brain_mask.nii.gz: 10%|█ | 44/436 [00:16<02:30, 2.61it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_space-MNI152NLin2009cAsym_desc-brain_mask.nii.gz: 10%|█ | 45/436 [00:17<02:12, 2.95it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_space-MNI152NLin2009cAsym_desc-preproc_T1w.nii.gz: 10%|█ | 45/436 [00:17<02:12, 2.95it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_space-MNI152NLin2009cAsym_desc-preproc_T1w.nii.gz: 11%|█ | 46/436 [00:17<02:11, 2.96it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_space-MNI152NLin2009cAsym_dseg.nii.gz: 11%|█ | 46/436 [00:17<02:11, 2.96it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_space-MNI152NLin2009cAsym_dseg.nii.gz: 11%|█ | 47/436 [00:17<02:07, 3.05it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_space-MNI152NLin2009cAsym_label-CSF_probseg.nii.gz: 11%|█ | 47/436 [00:17<02:07, 3.05it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_space-MNI152NLin2009cAsym_label-CSF_probseg.nii.gz: 11%|█ | 48/436 [00:18<02:25, 2.66it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_space-MNI152NLin2009cAsym_label-GM_probseg.nii.gz: 11%|█ | 48/436 [00:18<02:25, 2.66it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_space-MNI152NLin2009cAsym_label-GM_probseg.nii.gz: 11%|█ | 49/436 [00:18<02:16, 2.84it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_space-MNI152NLin2009cAsym_label-WM_probseg.nii.gz: 11%|█ | 49/436 [00:18<02:16, 2.84it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/anat/sub-NDAREP505XAD_space-MNI152NLin2009cAsym_label-WM_probseg.nii.gz: 11%|█▏ | 50/436 [00:18<02:11, 2.94it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_seg_brainmask.svg: 11%|█▏ | 50/436 [00:18<02:11, 2.94it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_seg_brainmask.svg: 12%|█▏ | 51/436 [00:19<02:07, 3.01it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_carpetplot.svg: 12%|█▏ | 51/436 [00:19<02:07, 3.01it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_carpetplot.svg: 12%|█▏ | 52/436 [00:19<01:52, 3.42it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_coreg.svg: 12%|█▏ | 52/436 [00:19<01:52, 3.42it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_coreg.svg: 12%|█▏ | 53/436 [00:19<02:05, 3.05it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_desc-resampled_b0ref.svg: 12%|█▏ | 53/436 [00:19<02:05, 3.05it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_desc-resampled_b0ref.svg: 12%|█▏ | 54/436 [00:20<01:53, 3.37it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_desc-sdc_b0.svg: 12%|█▏ | 54/436 [00:20<01:53, 3.37it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_desc-sdc_b0.svg: 13%|█▎ | 55/436 [00:20<01:45, 3.61it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_dwi_denoise_ses_HBNsiteRU_acq_64dir_dwi_wf_biascorr.svg: 13%|█▎ | 55/436 [00:20<01:45, 3.61it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_dwi_denoise_ses_HBNsiteRU_acq_64dir_dwi_wf_biascorr.svg: 13%|█▎ | 56/436 [00:20<01:53, 3.35it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_dwi_denoise_ses_HBNsiteRU_acq_64dir_dwi_wf_denoising.svg: 13%|█▎ | 56/436 [00:20<01:53, 3.35it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_dwi_denoise_ses_HBNsiteRU_acq_64dir_dwi_wf_denoising.svg: 13%|█▎ | 57/436 [00:20<01:56, 3.27it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_dwi_denoise_ses_HBNsiteRU_acq_64dir_dwi_wf_unringing.svg: 13%|█▎ | 57/436 [00:20<01:56, 3.27it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_dwi_denoise_ses_HBNsiteRU_acq_64dir_dwi_wf_unringing.svg: 13%|█▎ | 58/436 [00:21<01:50, 3.41it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_sampling_scheme.gif: 13%|█▎ | 58/436 [00:21<01:50, 3.41it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_sampling_scheme.gif: 14%|█▎ | 59/436 [00:21<01:43, 3.63it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_t1_2_mni.svg: 14%|█▎ | 59/436 [00:21<01:43, 3.63it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/figures/sub-NDAREP505XAD_t1_2_mni.svg: 14%|█▍ | 60/436 [00:21<01:36, 3.90it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/anat/sub-NDAREP505XAD_ses-HBNsiteRU_acq-HCP_from-orig_to-T1w_mode-image_xfm.txt: 14%|█▍ | 60/436 [00:21<01:36, 3.90it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/anat/sub-NDAREP505XAD_ses-HBNsiteRU_acq-HCP_from-orig_to-T1w_mode-image_xfm.txt: 14%|█▍ | 61/436 [00:21<01:25, 4.40it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_confounds.tsv: 14%|█▍ | 61/436 [00:21<01:25, 4.40it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_confounds.tsv: 14%|█▍ | 62/436 [00:21<01:20, 4.66it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_desc-ImageQC_dwi.csv: 14%|█▍ | 62/436 [00:21<01:20, 4.66it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_desc-ImageQC_dwi.csv: 14%|█▍ | 63/436 [00:22<01:16, 4.85it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_desc-SliceQC_dwi.json: 14%|█▍ | 63/436 [00:22<01:16, 4.85it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_desc-SliceQC_dwi.json: 15%|█▍ | 64/436 [00:22<01:16, 4.89it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_dwiqc.json: 15%|█▍ | 64/436 [00:22<01:16, 4.89it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_dwiqc.json: 15%|█▍ | 65/436 [00:22<01:29, 4.13it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_space-T1w_desc-brain_mask.nii.gz: 15%|█▍ | 65/436 [00:22<01:29, 4.13it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_space-T1w_desc-brain_mask.nii.gz: 15%|█▌ | 66/436 [00:22<01:18, 4.70it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_space-T1w_desc-eddy_cnr.nii.gz: 15%|█▌ | 66/436 [00:22<01:18, 4.70it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_space-T1w_desc-eddy_cnr.nii.gz: 15%|█▌ | 67/436 [00:23<01:14, 4.93it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_space-T1w_desc-preproc_dwi.b: 15%|█▌ | 67/436 [00:23<01:14, 4.93it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_space-T1w_desc-preproc_dwi.b: 16%|█▌ | 68/436 [00:23<01:10, 5.19it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_space-T1w_desc-preproc_dwi.bval: 16%|█▌ | 68/436 [00:23<01:10, 5.19it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_space-T1w_desc-preproc_dwi.bval: 16%|█▌ | 69/436 [00:23<01:07, 5.40it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_space-T1w_desc-preproc_dwi.bvec: 16%|█▌ | 69/436 [00:23<01:07, 5.40it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_space-T1w_desc-preproc_dwi.bvec: 16%|█▌ | 70/436 [00:23<01:02, 5.82it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_space-T1w_desc-preproc_dwi.nii.gz: 16%|█▌ | 70/436 [00:23<01:02, 5.82it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_space-T1w_desc-preproc_dwi.nii.gz: 16%|█▋ | 71/436 [00:26<06:34, 1.08s/it]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_space-T1w_dwiref.nii.gz: 16%|█▋ | 71/436 [00:26<06:34, 1.08s/it]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDAREP505XAD/ses-HBNsiteRU/dwi/sub-NDAREP505XAD_ses-HBNsiteRU_acq-64dir_space-T1w_dwiref.nii.gz: 17%|█▋ | 72/436 [00:26<05:01, 1.21it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKT540ZW0/anat/sub-NDARKT540ZW0_desc-brain_mask.nii.gz: 17%|█▋ | 72/436 [00:26<05:01, 1.21it/s]
Downloading /home/runner/AFQ_data/HBN/derivatives/qsiprep/sub-NDARKT540ZW0/anat/sub-NDARKT540ZW0_desc-brain_mask.nii.gz: 17%|█▋ | 72/436 [00:27<02:17, 2.65it/s]
---------------------------------------------------------------------------
KeyboardInterrupt Traceback (most recent call last)
Cell In[2], line 1
----> 1 _, study_dir = afd.fetch_hbn_preproc([
2 'NDARKP893TWU',
3 'NDAREP505XAD',
4 'NDARKT540ZW0',
File /opt/hostedtoolcache/Python/3.13.13/x64/lib/python3.13/site-packages/AFQ/data/fetch.py:2430, in fetch_hbn_preproc(subjects, path, clear_previous_afq)
2428 for k in download_files.keys():
2429 pbar.set_description_str(f"Downloading {k}")
-> 2430 client.download_file("fcp-indi", download_files[k], k)
2431 pbar.update()
2433 afq_folder = op.join(my_path, "HBN", "derivatives", "afq")
File /opt/hostedtoolcache/Python/3.13.13/x64/lib/python3.13/site-packages/botocore/context.py:123, in with_current_context.<locals>.decorator.<locals>.wrapper(*args, **kwargs)
121 if hook:
122 hook()
--> 123 return func(*args, **kwargs)
File /opt/hostedtoolcache/Python/3.13.13/x64/lib/python3.13/site-packages/boto3/s3/inject.py:223, in download_file(self, Bucket, Key, Filename, ExtraArgs, Callback, Config)
188 """Download an S3 object to a file.
189
190 Usage::
(...) 220 transfer.
221 """
222 with S3Transfer(self, Config) as transfer:
--> 223 return transfer.download_file(
224 bucket=Bucket,
225 key=Key,
226 filename=Filename,
227 extra_args=ExtraArgs,
228 callback=Callback,
229 )
File /opt/hostedtoolcache/Python/3.13.13/x64/lib/python3.13/site-packages/boto3/s3/transfer.py:484, in S3Transfer.download_file(self, bucket, key, filename, extra_args, callback)
480 future = self._manager.download(
481 bucket, key, filename, extra_args, subscribers
482 )
483 try:
--> 484 future.result()
485 # This is for backwards compatibility where when retries are
486 # exceeded we need to throw the same error from boto3 instead of
487 # s3transfer's built in RetriesExceededError as current users are
488 # catching the boto3 one instead of the s3transfer exception to do
489 # their own retries.
490 except S3TransferRetriesExceededError as e:
File /opt/hostedtoolcache/Python/3.13.13/x64/lib/python3.13/site-packages/s3transfer/futures.py:114, in TransferFuture.result(self)
112 except KeyboardInterrupt as e:
113 self.cancel()
--> 114 raise e
File /opt/hostedtoolcache/Python/3.13.13/x64/lib/python3.13/site-packages/s3transfer/futures.py:111, in TransferFuture.result(self)
106 def result(self):
107 try:
108 # Usually the result() method blocks until the transfer is done,
109 # however if a KeyboardInterrupt is raised we want want to exit
110 # out of this and propagate the exception.
--> 111 return self._coordinator.result()
112 except KeyboardInterrupt as e:
113 self.cancel()
File /opt/hostedtoolcache/Python/3.13.13/x64/lib/python3.13/site-packages/s3transfer/futures.py:282, in TransferCoordinator.result(self)
272 """Waits until TransferFuture is done and returns the result
273
274 If the TransferFuture succeeded, it will return the result. If the
275 TransferFuture failed, it will raise the exception associated to the
276 failure.
277 """
278 # Doing a wait() with no timeout cannot be interrupted in python2 but
279 # can be interrupted in python3 so we just wait with the largest
280 # possible value integer value, which is on the scale of billions of
281 # years...
--> 282 self._done_event.wait(MAXINT)
284 # Once done waiting, raise an exception if present or return the
285 # final result.
286 if self._exception:
File /opt/hostedtoolcache/Python/3.13.13/x64/lib/python3.13/threading.py:660, in Event.wait(self, timeout)
658 signaled = self._flag
659 if not signaled:
--> 660 signaled = self._cond.wait(timeout)
661 return signaled
File /opt/hostedtoolcache/Python/3.13.13/x64/lib/python3.13/threading.py:359, in Condition.wait(self, timeout)
357 try: # restore state no matter what (e.g., KeyboardInterrupt)
358 if timeout is None:
--> 359 waiter.acquire()
360 gotit = True
361 else:
KeyboardInterrupt:
Get ROIs and save to disk#
The goal of this tutorial is to demonstrate how to segment new pathways based on ROIs that are saved to disk. In principle, ROIs can be a) files created by the user and saved to the local disk, b) files stored somewhere on the internet (as is the case here) or c) Files that are accessed with a fetcher. In this example we download these files from the MATLAB AFQ website, but this code could be commented out and paths could be used to local ROIs on disk
roi_urls = ['https://github.com/yeatmanlab/AFQ/raw/c762ca4c393f2105d4f444c44d9e4b4702f0a646/SLF123/ROIs/MFgL.nii.gz',
'https://github.com/yeatmanlab/AFQ/raw/c762ca4c393f2105d4f444c44d9e4b4702f0a646/SLF123/ROIs/MFgR.nii.gz',
'https://github.com/yeatmanlab/AFQ/raw/c762ca4c393f2105d4f444c44d9e4b4702f0a646/SLF123/ROIs/PaL.nii.gz',
'https://github.com/yeatmanlab/AFQ/raw/c762ca4c393f2105d4f444c44d9e4b4702f0a646/SLF123/ROIs/PaR.nii.gz',
'https://github.com/yeatmanlab/AFQ/raw/c762ca4c393f2105d4f444c44d9e4b4702f0a646/SLF123/ROIs/PrgL.nii.gz',
'https://github.com/yeatmanlab/AFQ/raw/c762ca4c393f2105d4f444c44d9e4b4702f0a646/SLF123/ROIs/PrgR.nii.gz',
'https://github.com/yeatmanlab/AFQ/raw/c762ca4c393f2105d4f444c44d9e4b4702f0a646/SLF123/ROIs/SFgL.nii.gz',
'https://github.com/yeatmanlab/AFQ/raw/c762ca4c393f2105d4f444c44d9e4b4702f0a646/SLF123/ROIs/SFgR.nii.gz',
'https://github.com/yeatmanlab/AFQ/raw/c762ca4c393f2105d4f444c44d9e4b4702f0a646/SLF123/ROIs/SLFt_roi2_L.nii.gz',
'https://github.com/yeatmanlab/AFQ/raw/c762ca4c393f2105d4f444c44d9e4b4702f0a646/SLF123/ROIs/SLFt_roi2_R.nii.gz']
# We proceed to download the files. First, we define and create the directory
# for the template ROIs. In the code below, ``op.expanduser("~")`` expands the
# user's home directory into the full path and ``op.join`` joins these paths,
# to make the path `~/AFQ_data/SLF_ROIs/`
template_dir = op.join(
op.expanduser("~"),
'AFQ_data/SLF_ROIs/')
os.makedirs(template_dir, exist_ok=True)
# The `wget` Python library works like the `wget` unix command and downloads
# each file into the directory created just above.
for roi_url in roi_urls:
wget.download(roi_url, template_dir)
Define custom BundleDict object#
A BundleDict is a custom object that holds information about “include” and
“exclude” ROIs, as well as endpoint ROIs, and whether the bundle crosses the
midline. In this case, the ROIs are all defined in the MNI template space that
is used as the default template space in pyAFQ, but, in principle, other
template spaces could be used. In this example, we provide paths to the ROIs
to populate the BundleDict, but we could also provide already-loaded nifti
objects, as demonstrated in other examples.
bundles = abd.BundleDict({
"L_SLF1": {
"include": [
template_dir + 'SFgL.nii.gz',
template_dir + 'PaL.nii.gz'],
"exclude": [
template_dir + 'SLFt_roi2_L.nii.gz'],
"cross_midline": False,
"mahal": {
"clean_rounds": 20,
"length_threshold": 4,
"distance_threshold": 2}
},
"L_SLF2": {
"include": [
template_dir + 'MFgL.nii.gz',
template_dir + 'PaL.nii.gz'],
"exclude": [
template_dir + 'SLFt_roi2_L.nii.gz'],
"cross_midline": False,
"mahal": {
"clean_rounds": 20,
"length_threshold": 4,
"distance_threshold": 2}
},
"L_SLF3": {
"include": [
template_dir + 'PrgL.nii.gz',
template_dir + 'PaL.nii.gz'],
"exclude": [
template_dir + 'SLFt_roi2_L.nii.gz'],
"cross_midline": False,
"mahal": {
"clean_rounds": 20,
"length_threshold": 4,
"distance_threshold": 2}
}
})
Custom bundle definitions such as the SLF or OR, and the standard BundleDict can be combined through addition. To get both the SLF and the standard bundles, we would execute the following code::
bundles = bundles + abd.default_bd()
In this case, we will skip this and generate just the SLF.
Define GroupAFQ object#
HBN POD2 have been processed with qsiprep [4]_. This means that a brain mask has already been computed for them.
For tractography, we use CSD-based probabilistic tractography,
seeding 200,000 seeds but only within the ROIs
and not throughout the white matter. This is controlled by passing
"seed_mask": RoiImage() in the tracking_params dict. The custom bundles
are passed as bundle_info=bundles. The call to my_afq.export_all()
initiates the pipeline.
my_afq = GroupAFQ(
bids_path=study_dir,
dwi_preproc_pipeline="qsiprep",
output_dir=op.join(study_dir, "derivatives", "afq_slf"),
tracking_params={"n_seeds": 200000,
"directions": "pft",
"odf_model": "CSD",
"seed_mask": RoiImage()},
bundle_info=bundles)
# If you want to redo different stages you can use the `clobber` method.
# The options for dependent_on are 'track' (to start over from tractography)
# or 'recog' to start over from bundle recognition. For example, to redo everying
# related to bundle recognition: `my_afq.clobber(dependent_on='recog')`.
# This is useful when changing something about how the bundles are recognized.
# For example, the cleaning parameters.
my_afq.clobber(dependent_on='recog')
my_afq.export_all()
Visualize a montage#
One way to examine the output of the pyAFQ pipeline is by creating a montage of images of a particular bundle across a group of participants. In the montage function the first input refers to a key in the bundlediect and the second gives the layout of the figure (eg. 3 rows 4 columns) and finally is the view.
montage = my_afq.group_montage(
"L_SLF1", (3, 4), "Sagittal", "left", slice_pos=0.5)
montage = my_afq.group_montage(
"L_SLF2", (3, 4), "Sagittal", "left", slice_pos=0.5)
montage = my_afq.group_montage(
"L_SLF3", (3, 4), "Sagittal", "left", slice_pos=0.5)
Interactive bundle visualization#
Another way to examine the outputs is to export the individual bundle figures, which show the streamlines, as well as the ROIs used to define the bundle. This is an html file, which contains an interactive figure that can be navigated, zoomed, rotated, etc.
bundle_html = my_afq.export("all_bundles_figure")
References#
.. [1] Romi Sagi, J.S.H. Taylor, Kyriaki Neophytou, Tamar Cohen, Brenda Rapp, Kathleen Rastle, Michal Ben-Shachar. White matter associations with spelling performance. Brain Struct Funct 229, 2115–2135 (2024). https://doi.org/10.1007/s00429-024-02775-7
.. [2] Alexander LM, Escalera J, Ai L, et al. An open resource for transdiagnostic research in pediatric mental health and learning disorders. Sci Data. 2017;4:170181.
.. [3] Richie-Halford A, Cieslak M, Ai L, et al. An analysis-ready and quality controlled resource for pediatric brain white-matter research. Scientific Data. 2022;9(1):1-27.
.. [4] Cieslak M, Cook PA, He X, et al. QSIPrep: an integrative platform for preprocessing and reconstructing diffusion MRI data. Nat Methods. 2021;18(7):775-778.