Skip to main content

BCBlib

PyPI version Python 3.9+ License: BSD 3-Clause

A collection of neuroimaging utilities for MRI data analysis, developed by Chris Foulon at the BCBlab. The library covers NIfTI image processing, FSL workflow integration, and research-grade statistical tools — several of which have been used in published studies on structural connectivity, lesion-symptom mapping, and stroke outcome prediction.

pip install bcblib

Quick Start

# Load and inspect a NIfTI image
from bcblib.imaging import load_nifti, image_stats
nii = load_nifti("subject01_lesion.nii.gz")
stats = image_stats(nii)

# Balanced dataset splitting for cross-validation
from bcblib.tools.dataset_splitting import permutation_balanced_splits
folds, score, report = permutation_balanced_splits(
    groups=has_chronic,
    covariates={"acute_vol": acute_volumes, "chronic_vol": chronic_volumes},
    n_splits=5,
    n_permutations=50000,
    seed=42,
)

# Prepare FSL randomise inputs from a spreadsheet
from bcblib.tools.randomise_helper import spreadsheet_to_mat_and_file_list
spreadsheet_to_mat_and_file_list(
    "subjects.csv", columns=["age", "score"],
    output_dir="randomise_inputs/", filenames_column="image_path"
)

Modules

Imaging (bcblib.imaging)

A modern FSL-equivalent API for NIfTI image processing. All functions accept either a file path or an already-loaded Nifti1Image.

Module Description
bcblib.imaging.io Load, save, resave NIfTI images; format detection
bcblib.imaging.info Header inspection — equivalent to fslinfo
bcblib.imaging.stats Centre of gravity, volume, histogram, laterality
bcblib.imaging.math Binarize, dilate, erode, apply/invert masks
bcblib.imaging.orient Get and reorient image orientation
bcblib.imaging.manipulate Extract ROI, merge, split 4-D images
bcblib.imaging.convert Convert between .nii and .nii.gz

Backward compatibility: bcblib.tools.nifti_utils, bcblib.tools.images_utils, and bcblib.tools.nii_stats are kept as shims. New code should import from bcblib.imaging directly.

Research Tools (bcblib.tools)

lesion_features — End-to-end pipeline for extracting atlas-based overlap profiles from patient lesion masks and disconnectome maps. See docs/lesion_features_pipeline.md for full usage.

damage_profile Compute overlap statistics between a subject map (lesion or disconnectome) and one or more brain atlases. Returns a DataFrame per atlas with per-region voxel counts, coverage fraction, mean overlap, and percentiles.

best_overlap Compute preserved structural connectivity from patient and cluster disconnectome maps using Bayesian modelling (PyMC). Outputs latent connectivity scores with uncertainty estimates per brain region.

dataset_splitting Monte Carlo permutation search for the most balanced k-way dataset split. Balances group counts (round-robin hard constraint) and continuous covariate distributions (Kruskal-Wallis minimax score). Returns fold indices, best score, and a full JSON report including convergence history and per-fold descriptive stats. See Publications.

randomise_helper Build FSL randomise inputs from a spreadsheet: generates .mat design files, concatenates 4-D NIfTI stacks, and manages file lists. See Publications.

split_clusters — Split a multi-label NIfTI atlas into one file per label value.

divide_mask — Cluster a binary mask into spatially separate components by proximity.

shapes — Generate geometric shapes (hyperspheres, arbitrary forms) as NIfTI arrays, useful for creating synthetic phantom data.

constants — Pre-computed MNI 1 mm and 2 mm affines and shapes; empty_MNI1MM() / empty_MNI2MM() convenience constructors.

general_utils — JSON I/O with support for NumPy arrays, UUIDs, and datetime objects.

spreadsheet_io_utils — Load CSV and Excel files with column selection helpers.

dataframe_filtering — Remove constant columns, filter by completeness threshold, handle datetime columns for ML pipelines.

mat_transform — Connectivity matrix preprocessing: log₂ transform, z-score normalisation, rank transform.

arrays_utils — Coordinate validation and centroid calculations for NumPy arrays.

umap_utils — UMAP dimensionality reduction wrappers tuned for neuroimaging data.

visualisation — Wrappers for MRIcron, matplotlib, and TensorBoard visualisation.

Requires external tools (MRIcron, TensorBoard) installed separately depending on which functions are used.

CLI Tools

Command Example Description
bcb-info bcb-info brain.nii.gz NIfTI header summary (fslinfo equivalent)
bcb-header bcb-header brain.nii.gz Full NIfTI header inspection
bcb-stats bcb-stats lesion.nii.gz Image statistics (fslstats equivalent)
bcb-orient bcb-orient -g brain.nii.gz Get or set image orientation
bcb-roi bcb-roi brain.nii.gz mask.nii.gz Extract a region of interest
bcb-merge bcb-merge -o 4d.nii.gz *.nii.gz Merge NIfTI images along a dimension
bcb-split bcb-split 4d.nii.gz -o out/ Split a 4-D NIfTI along the volume axis
bcb-convert bcb-convert brain.nii Convert between .nii and .nii.gz
bcb-dataset-split see below Balanced dataset splitting from a CSV file
bcb-lf-preprocess see below Stage 1: normalise lesions to MNI6 1mm + compute disconnectomes
bcb-lesion-features see below Stage 2: extract atlas overlap features from prep output
bcb-damage-profile see below Overlap statistics between a subject map and brain atlases
randomise_helper Build FSL randomise design files from a spreadsheet
pick_up_matched_synth_lesions Select synthetic lesions matching a size distribution
# Stage 1: normalise lesions to MNI152NLin6Asym 1mm and compute disconnectomes
bcb-lf-preprocess \
    --bids-dir /data/stroke_cohort \
    --output-dir /data/stroke_cohort_prep \
    --bcbtoolkit /opt/BCBToolKit \
    --tracks-dir /opt/BCBToolKit/Tools/extraFiles/tracks_1mm \
    --ncores 8 \
    --tmpdir /scratch/disco_tmp   # set on JupyterHub/HPC if /tmp is restricted

# Stage 2: extract atlas overlap features (downloads atlases on first run)
bcb-lesion-features \
    --prep-dir /data/stroke_cohort_prep \
    --output-dir /data/stroke_cohort_features \
    --ebrains --assume-yes

# Balanced dataset split — writes splits.csv and splits_report.json
bcb-dataset-split \
    --input subjects.csv \
    --group-col has_chronic \
    --covariate-cols acute_volume chronic_volume \
    --n-splits 5 --n-permutations 50000 --seed 42 \
    --output splits.csv

# Damage profile — overlap between a lesion map and the Rojkova WM atlas
bcb-damage-profile \
    --map lesion.nii.gz \
    --preset rojkova \
    --output-dir ./results

# Custom atlas directory, explicit threshold
bcb-damage-profile \
    --map disconnectome.nii.gz \
    --atlas /path/to/atlas_dir --name my_atlas --threshold 0.2 \
    --output-dir ./results

Dependencies

Core dependencies installed automatically:

  • nibabel, numpy, scipy, nilearn, scikit-learn
  • pandas, openpyxl
  • tqdm, joblib, statsmodels
  • matplotlib, rich
  • pymc >= 5, arviz (required for best_overlap)
  • umap-learn (required for umap_utils)
  • mne
  • templateflow, nitransforms (required for damage_profile cross-template resampling)

Optional extras

A plain pip install bcblib runs the standard lesion_features / damage_profile pipeline. For best cross-template warping accuracy, install the ants extra:

pip install "bcblib[ants]"   # recommended for the lesion-features pipeline
Install Adds Enables
pip install "bcblib[ants]" antspy ANTs genericLabel warping of binary masks — better cross-template accuracy (nearest-neighbour fallback otherwise)
pip install "bcblib[dipy]" dipy Streamline-ratio feature (opt-in — see note)
pip install "bcblib[ebrains]" antspy + dipy EBRAINS deployment: the ants warping plus the opt-in streamline-ratio feature

Streamline ratio is opt-in, not a default. It counts deterministic streamlines intersecting the lesion; without SIFT2-type correction that is not a quantitatively meaningful measure, and it ships only because the EBRAINS deployment requested it. Most users want bcblib[ants], not bcblib[ebrains].

Atlas cache and TemplateFlow locations are set through environment variables (BCBLIB_ATLAS_DIR, TEMPLATEFLOW_HOME, …), independent of the install — see the pipeline configuration table.

External tools (not installed by pip):

  • FSL — required for randomise_helper to call randomise itself, and for the JHU white-matter atlases ($FSLDIR/data/atlases/JHU/)
  • MRIcron — required for visualisation MRIcron wrappers
  • TensorBoard — required for visualisation TensorBoard integration

Publications

Tools from BCBlib have been used in the following publications:

  • randomise_helper — Giampiccolo D, Binding LP, Caciagli L, Rodionov R, Foulon C, et al. (2023). Thalamostriatal disconnection underpins long-term seizure freedom in frontal lobe epilepsy surgery. Brain, 146(6):2377–2388. https://doi.org/10.1093/brain/awad085

  • pick_up_matched_synth_lesions — Thiebaut de Schotten M, Foulon C, Nachev P. (2020). Brain disconnections link structural connectivity with function and behaviour. Nature Communications, 11:5094. https://doi.org/10.1038/s41467-020-18920-9

  • dataset_splitting — Foulon C, Gray R, Ruffle JK, et al. (2025). Generalizable automated ischaemic stroke lesion segmentation with vision transformers. arXiv:2502.06939. https://arxiv.org/abs/2502.06939

  • BCBlib was used to participate in the Neural-CUP benchmark — Matsulevits A, Alvez P, Atzori M, et al. (2024). A global effort to benchmark predictive models and reveal mechanistic diversity in long-term stroke outcomes. bioRxiv. https://doi.org/10.1101/2024.10.17.618691

  • BCBlib is used in — Foulon C, Ovando-Tellez M, Talozzi L, Corbetta M, Matsulevits A, Thiebaut de Schotten M. (2024). Emerging-properties Mapping Using Spatial Embedding Statistics: EMUSES. arXiv:2406.14309 (preprint). https://arxiv.org/abs/2406.14309

Links

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bcblib-0.7.1.tar.gz (159.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bcblib-0.7.1-py3-none-any.whl (186.1 kB view details)

Uploaded Python 3

File details

Details for the file bcblib-0.7.1.tar.gz.

File metadata

  • Download URL: bcblib-0.7.1.tar.gz
  • Upload date:
  • Size: 159.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for bcblib-0.7.1.tar.gz
Algorithm Hash digest
SHA256 430c4191a91a84f42957c10600ff8b5c5ac5d1112946e7576230e60202d4a16b
MD5 d45104f91838bca7e388c57b235889b8
BLAKE2b-256 9637e0d74600da11cd5aa82818e23395b188e4d19841a3e63b14ce72de72b1a1

See more details on using hashes here.

Provenance

The following attestation bundles were made for bcblib-0.7.1.tar.gz:

Publisher: publish.yml on chrisfoulon/BCBlib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bcblib-0.7.1-py3-none-any.whl.

File metadata

  • Download URL: bcblib-0.7.1-py3-none-any.whl
  • Upload date:
  • Size: 186.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for bcblib-0.7.1-py3-none-any.whl
Algorithm Hash digest
SHA256 077342c37bd9ed214325a8f7bc20e3c5e01657c27af078528c4c5be2121c533e
MD5 ab8eed7ecf144c60e7d80c732a7cb36b
BLAKE2b-256 390647190ab01b33ef7ae8e982d92c055c1d5eda4abc7ec8877f06ad0363f9a1

See more details on using hashes here.

Provenance

The following attestation bundles were made for bcblib-0.7.1-py3-none-any.whl:

Publisher: publish.yml on chrisfoulon/BCBlib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page