Note
Go to the end to download the full example code.
VBM¶
Simple example.
Example on how to run the VBM pre-processing using BrainPrep. See user guide for details.
Data¶
Let’s first get some anatomical data.
from pathlib import Path
from brainprep.datasets import OpenMSDataset
from brainprep.utils import Bunch
datadir = Path("/tmp/brainprep-data")
datadir.mkdir(parents=True, exist_ok=True)
dataset = OpenMSDataset(datadir)
data = Bunch(
sub01=dataset.fetch(
subject="01",
modality="T1w",
dtype="longitudinal",
),
sub02=dataset.fetch(
subject="02",
modality="T1w",
dtype="longitudinal",
),
)
print(data)
Bunch(
sub01: Bunch(
description: PosixPath('/tmp/brainprep-data/rawdata/dataset_description.json')
anat1: PosixPath('/tmp/brainprep-data/rawdata/sub-01/ses-study1/anat/sub-01_ses-study1_T1w.nii.gz')
anat2: PosixPath('/tmp/brainprep-data/rawdata/sub-01/ses-study2/anat/sub-01_ses-study2_T1w.nii.gz')
)
sub02: Bunch(
description: PosixPath('/tmp/brainprep-data/rawdata/dataset_description.json')
anat1: PosixPath('/tmp/brainprep-data/rawdata/sub-02/ses-study1/anat/sub-02_ses-study1_T1w.nii.gz')
anat2: PosixPath('/tmp/brainprep-data/rawdata/sub-02/ses-study2/anat/sub-02_ses-study2_T1w.nii.gz')
)
)
Analysis¶
Let’s now perform the preprocessing using BrainPrep. As with many tutorials, we won’t execute the code directly here. However, feel free to set the ‘dryrun’ configuration to False to actually run each step and generate results on disk.
from brainprep.workflow import (
brainprep_group_vbm,
brainprep_longitudinal_vbm,
brainprep_vbm,
)
from brainprep.config import Config
from brainprep.reporting import RSTReport
outdir = Path("/tmp/brainprep-vbm")
outdir.mkdir(parents=True, exist_ok=True)
with Config(dryrun=True, verbose=True):
for subject_data in data.values():
report = RSTReport()
outputs = brainprep_vbm(
t1_file=subject_data.anat1,
output_dir=outdir,
)
# print(report)
outputs = brainprep_longitudinal_vbm(
t1_files=[data.sub01.anat1, data.sub01.anat2],
model=1,
output_dir=outdir,
)
outputs = brainprep_group_vbm(
output_dir=outdir,
)
outputs = brainprep_group_vbm(
output_dir=outdir,
longitudinal=True,
)
[warn] - BIDS file name does not contain run key: sub-01_ses-study1_T1w.nii.gz
[title] - Subject Level VBM...
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/subjects/sub-01/ses-study1/sub-01_ses-study1_
T1w.nii
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/subjects/sub-01/ses-study1/cat12vbm_matlabbat
ch_run-15456.m
[command] - /opt/cat12/standalone/cat_standalone.sh -s /opt/cat12 -m
/opt/MCR-2017b/v93 -b
/tmp/brainprep-vbm/derivatives/vbm/subjects/sub-01/ses-study1/cat12vbm_matlabbat
ch_run-15456.m
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/subjects/sub-01/ses-study1/mri/mwp1sub-01_ses
-study1_T1w.nii
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/subjects/sub-01/ses-study1/report/catreport_s
ub-01_ses-study1_T1w.nii
[command] - sed -e 's/\/tmp\/brainprep-vbm\/derivatives/DERIVATIVES/g' -e
's/\/tmp\/brainprep-data\/rawdata/RAWDATA/g' -e 's/runnervmrg6be/HOSTNAME/g' -e
's/10.1.0.253/X.X.X.X/g' -e 's/runner/USER/g' -i
/tmp/brainprep-vbm/derivatives/vbm/subjects/sub-01/ses-study1/cat12vbm_matlabbat
ch_run-15456.m
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/subjects/sub-01/ses-study1/cat12vbm_matlabbat
ch_run-15456.m
[title] - Subject Level VBM done.
[warn] - BIDS file name does not contain run key: sub-02_ses-study1_T1w.nii.gz
[title] - Subject Level VBM...
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/subjects/sub-02/ses-study1/sub-02_ses-study1_
T1w.nii
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/subjects/sub-02/ses-study1/cat12vbm_matlabbat
ch_run-38141.m
[command] - /opt/cat12/standalone/cat_standalone.sh -s /opt/cat12 -m
/opt/MCR-2017b/v93 -b
/tmp/brainprep-vbm/derivatives/vbm/subjects/sub-02/ses-study1/cat12vbm_matlabbat
ch_run-38141.m
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/subjects/sub-02/ses-study1/mri/mwp1sub-02_ses
-study1_T1w.nii
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/subjects/sub-02/ses-study1/report/catreport_s
ub-02_ses-study1_T1w.nii
[command] - sed -e 's/\/tmp\/brainprep-vbm\/derivatives/DERIVATIVES/g' -e
's/\/tmp\/brainprep-data\/rawdata/RAWDATA/g' -e 's/runnervmrg6be/HOSTNAME/g' -e
's/10.1.0.253/X.X.X.X/g' -e 's/runner/USER/g' -i
/tmp/brainprep-vbm/derivatives/vbm/subjects/sub-02/ses-study1/cat12vbm_matlabbat
ch_run-38141.m
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/subjects/sub-02/ses-study1/cat12vbm_matlabbat
ch_run-38141.m
[title] - Subject Level VBM done.
[warn] - BIDS file name does not contain run key: sub-01_ses-study1_T1w.nii.gz
[warn] - BIDS file name does not contain run key: sub-01_ses-study2_T1w.nii.gz
[title] - Longitudinal VBM...
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/subjects/sub-01/ses-study1/sub-0
1_ses-study1_T1w.nii
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/subjects/sub-01/ses-study2/sub-0
1_ses-study2_T1w.nii
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/subjects/sub-01/cat12vbm_matlabb
atch.m
[command] - /opt/cat12/standalone/cat_standalone.sh -s /opt/cat12 -m
/opt/MCR-2017b/v93 -b
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/subjects/sub-01/cat12vbm_matlabb
atch.m
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/subjects/sub-01/ses-study1/mri/m
wp1sub-01_ses-study1_T1w.nii
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/subjects/sub-01/ses-study2/mri/m
wp1sub-01_ses-study2_T1w.nii
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/subjects/sub-01/ses-study1/repor
t/catreport_sub-01_ses-study1_T1w.nii
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/subjects/sub-01/ses-study2/repor
t/catreport_sub-01_ses-study2_T1w.nii
[command] - sed -e 's/\/tmp\/brainprep-vbm\/derivatives/DERIVATIVES/g' -e
's/\/tmp\/brainprep-data\/rawdata/RAWDATA/g' -e 's/runnervmrg6be/HOSTNAME/g' -e
's/10.1.0.253/X.X.X.X/g' -e 's/runner/USER/g' -i
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/subjects/sub-01/cat12vbm_matlabb
atch.m
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/subjects/sub-01/cat12vbm_matlabb
atch.m
[title] - Longitudinal VBM done.
[title] - Group Leve VBM...
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/morphometry/Schaefer2018_100Parcels_17Network
s_order_cat12_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/morphometry/Schaefer2018_200Parcels_17Network
s_order_cat12_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/morphometry/Schaefer2018_400Parcels_17Network
s_order_cat12_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/morphometry/Schaefer2018_600Parcels_17Network
s_order_cat12_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/morphometry/aal3_cat12_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/morphometry/cobra_cat12_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/morphometry/hammers_cat12_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/morphometry/ibsr_cat12_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/morphometry/julichbrain_cat12_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/morphometry/lpba40_cat12_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/morphometry/mori_cat12_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/morphometry/neuromorphometrics_cat12_vbm_roi.
tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/morphometry/suit_cat12_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/morphometry/thalamic_nuclei_cat12_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/morphometry/thalamus_cat12_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/quality_check/mean_correlations.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/quality_check/group_stats.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/figures/histogram_mean_correlation.png
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/figures/histogram_NCR.png
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/figures/histogram_IQR.png
[title] - Group Leve VBM done.
[title] - Group Leve VBM...
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/morphometry/Schaefer2018_100Parc
els_17Networks_order_cat12_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/morphometry/Schaefer2018_200Parc
els_17Networks_order_cat12_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/morphometry/Schaefer2018_400Parc
els_17Networks_order_cat12_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/morphometry/Schaefer2018_600Parc
els_17Networks_order_cat12_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/morphometry/aal3_cat12_vbm_roi.t
sv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/morphometry/cobra_cat12_vbm_roi.
tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/morphometry/hammers_cat12_vbm_ro
i.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/morphometry/ibsr_cat12_vbm_roi.t
sv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/morphometry/julichbrain_cat12_vb
m_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/morphometry/lpba40_cat12_vbm_roi
.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/morphometry/mori_cat12_vbm_roi.t
sv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/morphometry/neuromorphometrics_c
at12_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/morphometry/suit_cat12_vbm_roi.t
sv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/morphometry/thalamic_nuclei_cat1
2_vbm_roi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/morphometry/thalamus_cat12_vbm_r
oi.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/quality_check/mean_correlations.
tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/quality_check/group_stats.tsv
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/figures/histogram_mean_correlati
on.png
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/figures/histogram_NCR.png
[info] - checking output:
/tmp/brainprep-vbm/derivatives/vbm/longitudinal/figures/histogram_IQR.png
[title] - Group Leve VBM done.
CLI¶
Let’s now generate the same analysis using the CLI. The goal here is to translate the workflow calls into explicit shell commands. See user guide for details.
from pprint import pprint
commands = []
commands.append(
[
[
"brainprep", "subject-level-vbm",
"--t1_file", str(subject_data.anat1),
"--output-dir", str(outdir),
"--keep-intermediate",
] for subject_data in data.values()
]
)
commands.append(
[
[
"brainprep", "longitudinal-vbm",
"--t1_files", f"{subject_data.anat1},{subject_data.anat2}",
"--model", "1",
"--output-dir", str(outdir),
"--keep-intermediate",
] for subject_data in data.values()
]
)
commands.append(
[
[
"brainprep", "group-level-vbm",
"--output-dir", str(outdir),
],
[
"brainprep", "group-level-vbm",
"--output-dir", str(outdir),
"--longitudinal",
],
]
)
pprint(commands)
[[['brainprep',
'subject-level-vbm',
'--t1_file',
'/tmp/brainprep-data/rawdata/sub-01/ses-study1/anat/sub-01_ses-study1_T1w.nii.gz',
'--output-dir',
'/tmp/brainprep-vbm',
'--keep-intermediate'],
['brainprep',
'subject-level-vbm',
'--t1_file',
'/tmp/brainprep-data/rawdata/sub-02/ses-study1/anat/sub-02_ses-study1_T1w.nii.gz',
'--output-dir',
'/tmp/brainprep-vbm',
'--keep-intermediate']],
[['brainprep',
'longitudinal-vbm',
'--t1_files',
'/tmp/brainprep-data/rawdata/sub-01/ses-study1/anat/sub-01_ses-study1_T1w.nii.gz,/tmp/brainprep-data/rawdata/sub-01/ses-study2/anat/sub-01_ses-study2_T1w.nii.gz',
'--model',
'1',
'--output-dir',
'/tmp/brainprep-vbm',
'--keep-intermediate'],
['brainprep',
'longitudinal-vbm',
'--t1_files',
'/tmp/brainprep-data/rawdata/sub-02/ses-study1/anat/sub-02_ses-study1_T1w.nii.gz,/tmp/brainprep-data/rawdata/sub-02/ses-study2/anat/sub-02_ses-study2_T1w.nii.gz',
'--model',
'1',
'--output-dir',
'/tmp/brainprep-vbm',
'--keep-intermediate']],
[['brainprep', 'group-level-vbm', '--output-dir', '/tmp/brainprep-vbm'],
['brainprep',
'group-level-vbm',
'--output-dir',
'/tmp/brainprep-vbm',
'--longitudinal']]]
Container¶
Note that the commands generated by the CLI are not limited to being displayed for reference; they can also be executed directly within the workflow‑dedicated container. By running the commands inside the container, you benefit from a controlled runtime context where all necessary dependencies, libraries, and configuration files are already available. In practice, this means that once the CLI has produced the appropriate instructions, you can simply copy and run them inside the container to achieve the intended results. You can find the BrainPrep images on Docker Hub: Neurospin Docker Hub.
Total running time of the script: (0 minutes 0.511 seconds)
Estimated memory usage: 114 MB