Automated ALPS App
Automated DTI-ALPS (Diffusion Tensor Imaging Along the Perivascular Space) analysis tool. Uses template-based registration to place ROIs in projection and association fiber regions, then calculates the DTI-ALPS index from diffusion tensor imaging data.
In: a folder of DWI subjects: NIfTI + .bvec / .bval, optionally a reverse phase-encode image for distortion correction.
Out: an alps_results.csv with one row per subject (left, right, and combined ALPS index), the ROI masks each number came from, and a timestamped run log.
The app can run in two ways:
- GUI for setting up and inspecting a study,
- CLI for headless batch processing on a cluster.
Quick start
pipx install dti-alps # or grab the AppImage
dti-alps # launch the GUI
dti-alps run --subjects /data/cohort --output /data/out # or process a cohort headless
MRtrix3 and FSL are not bundled — see Requirements.
Installation
Four routes. Pick by what you already have:
- pipx — you have Python 3.10+ and want
dti-alpson yourPATH - AppImage — you want a double-click file and no Python setup
- conda — you already manage environments with conda
- From source
Whichever you choose, MRtrix3 and FSL must be installed separately and on your
PATH (see External neuroimaging software).
Install with pipx — isolated environment, dti-alps on your PATH
If you have Python 3.10+, pipx installs the app into
an isolated environment and puts the dti-alps command on your PATH:
pipx install dti-alps
dti-alps # launch the GUI
Update with pipx upgrade dti-alps.
Plain pip install dti-alps inside a virtualenv works too and provides the
same dti-alps command.
Download the AppImage — no Python needed
For a double-click file with no Python setup, grab the latest Linux AppImage from the Releases page:
chmod +x dti-alps-*-x86_64.AppImage
./dti-alps-*-x86_64.AppImage
The AppImage bundles the app and its Python dependencies. To update, download the newer AppImage and replace the old file.
All CLI arguments are forwarded, so substitute ./dti-alps-*.AppImage anywhere
this README says dti-alps (e.g. ./dti-alps-*.AppImage view /path).
Qt runtime note: the GUI uses Qt 6, which needs
libxcb-cursor0on the host. See Troubleshooting if it fails to start.
Install into a conda environment
Take Qt (and the other compiled dependencies) from conda-forge, then let pip add the app itself:
conda install -c conda-forge pyside6 numpy scipy nibabel
pip install dti-alps
pip recognises the conda-provided packages as satisfying its requirements and
installs only dti-alps on top, so Qt and its C libraries stay under conda's
control as one consistent set. Keeping the environment on a single channel
avoids mismatches between those libraries:
conda config --add channels conda-forge
conda config --set channel_priority strict
If the GUI fails to start with an undefined symbol error, see
Troubleshooting.
From source — development
pip install -e ".[gui]"
Requirements
Python 3.10+, plus MRtrix3 and FSL on your PATH.
Python dependencies — installed automatically
The engine (dti_alps.processing.*) is Qt-free and imports PySide6 lazily, so
headless CLI use (run, reanalyze, report) and library use never load Qt.
External neuroimaging software
These third-party programs must be installed and available on your system PATH.
dti-alps run checks for them before starting and exits with code 3 if any
are missing.
| Package | Install | Provides |
|---|---|---|
| MRtrix3 (required) | https://www.mrtrix.org/download/ | Preprocessing, tensor fitting, brain masking |
| FSL (required) | https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FslInstallation | Registration, warping, eddy/topup |
MRtrix3 commands used, by pipeline stage
| Command | Pipeline Stage | Purpose |
|---|---|---|
dwidenoise |
Denoising | Marchenko-Pastur PCA thermal noise removal |
mrdegibbs |
Gibbs Removal | Gibbs ringing artifact correction |
dwifslpreproc |
Preprocessing | Eddy current, motion, and distortion correction |
dwi2tensor |
Tensor Fitting | Fit diffusion tensor model to DWI data |
tensor2metric |
Metric Extraction | Extract FA, eigenvectors (V1-V3), and eigenvalues (L1-L3) |
dwi2mask |
Preprocessing | Brain mask generation from DWI |
dwiextract |
B0 Extraction | Extract b=0 volumes from DWI |
mrmath |
B0 Extraction | Average multiple b=0 volumes |
mrconvert |
Format Conversion | Image format conversion and header manipulation |
FSL commands used, by pipeline stage
| Command | Pipeline Stage | Purpose |
|---|---|---|
flirt |
Registration | Linear (affine) FA-to-template registration |
fnirt |
Registration | Non-linear FA-to-template registration |
invwarp |
Registration | Generate inverse warp field for ROI transformation |
applywarp |
ROI Placement | Transform ROI templates from standard to native space |
fslmaths |
Masking | Apply brain mask to FA image |
eddy |
Preprocessing | Eddy current and motion correction |
topup |
Preprocessing | Susceptibility-induced distortion field estimation |
applytopup |
Preprocessing | Apply topup distortion correction |
Usage
dti-alps # Launch GUI (default)
dti-alps run --subjects /data/cohort --output /data/out # Process a cohort
dti-alps view # Launch Results Viewer
dti-alps view /path # Launch viewer with specific output folder
dti-alps report /path # Generate quality reports
dti-alps reanalyze /path --sphere 3 # Reanalyze with different ROI shapes
dti-alps VERB --help lists the flags for any one verb.
Headless processing
dti-alps run executes the whole pipeline with no display attached.
# The simplest complete run: discovery, defaults, one command
dti-alps run --subjects /data/cohort --output /data/out
# A BIDS cohort, a protocol exported from the GUI, tuned ROIs
dti-alps run --subjects /bids/sub-*/ses-1/dwi --output /data/out \
--config study-protocol.json --id-depth 3 --sphere 2,3 --nthreads 8
# Check what would happen before committing to a long run
dti-alps run --subjects /bids/sub-*/ses-1/dwi --output /data/out --dry-run
# Pick up where a preempted node left off
dti-alps run --subjects /data/cohort --output /data/out --resume
Protocol files
Rather than retyping long argument lists, save the analysis settings once and pass the file. Export a config file from the GUI's Output Setup page, then hand it to any run:
dti-alps run --subjects /data/cohort --output /data/out --config study-protocol.json
A protocol file holds what the analysis is; it is portable and shareable across machines. Where the results land is never part of it, which is why --output is always required.
--opt STAGE:NAME=VALUE sets any tool option inline, so you are never blocked on authoring a file:
dti-alps run --subjects /data/cohort --output /data/out \
--opt dwifslpreproc:-eddy_options='--repol --slm=linear'
Subject discovery and IDs — --subjects, --id-depth
Discovery scans a folder and, failing that, its immediate
subdirectories. Deeper trees are reached with a shell glob. If filenames
are similar (e.g. a scan protocol named all subfolders + subfiles for each
subject identically), use --id-depth or the "ID Depth" spinner in the GUI
to disambiguate. For example: --id-depth 3 files sub-01/ses-1/dwi as sub-01_ses-1_dwi.
A run refuses to start if two subjects would resolve to the same identifier.
Exit codes — 0 success, 1 partial failure, 2 usage, 3 preflight, 130 interrupted
For branching in a job script:
| Code | Meaning |
|---|---|
0 |
Every subject completed |
1 |
Finished with at least one failure |
2 |
Usage or configuration error |
3 |
Preflight failure — a required MRtrix3/FSL command is missing |
130 |
Interrupted with Ctrl-C (the results CSV is still written) |
Console output and logging — --quiet
Raw MRtrix3 and FSL output is shown by default, so an eddy failure can be
diagnosed without re-running; --quiet reduces it to stage- and subject-level
lines. Either way the run leaves a timestamped dti_alps_*.log in the output
directory, the same record the GUI console produces.
Output
A run fills --output with one directory per subject plus the cohort-level results:
/data/out/
├── alps_results.csv # one row per subject: left, right, combined ALPS
├── alps_results_sphere2.csv # one more CSV per extra ROI shape
├── dti_alps_20260803_141200.log # the full run log
└── sub-01/
├── alps_result.json # per-subject completion marker; --resume reads this
├── registration/ # brain mask, skull-stripped FA, transforms
├── rois/ # the four masks: sub-01_left_proj.nii.gz, ...
└── ... # intermediate NIfTIs (denoised, tensor, FA)
dti-alps view /data/outopens this folder in the results viewerdti-alps report /data/outadds aquality_report_{shape}.csvalongside the results.
Troubleshooting
GUI fails to start with an xcb platform-plugin error
The GUI uses Qt 6, which needs libxcb-cursor0 on the host:
sudo apt install libxcb-cursor0 # Debian/Ubuntu
GUI fails to start with an undefined symbol error naming libharfbuzz or libfreetype
In a conda environment, this means the environment's font libraries disagree with each other:
conda install -c conda-forge freetype harfbuzz --update-deps
The headless verbs (run, reanalyze, report) never load Qt, so they keep working regardless.
A run exits immediately with code 3
Preflight found a required MRtrix3 or FSL command missing from your PATH. The message names the command; see
External neuroimaging software for which package provides it.
Metadata
Release files for dti-alps 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| dti_alps-0.2.1.tar.gz | 263.8 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dti_alps-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 458.3 kB
Release files / dti_alps-0.2.1.tar.gz
| Download URL | dti_alps-0.2.1.tar.gz |
|---|---|
| Size | 263.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3b7936a6988484bde9f87976138eda1c81f2fc83e9e863beaa5ab087402c147a
|
|
BLAKE2b-256 checksum How to use checksums |
e186ed3d049d4b98d1d3eee0861dee9ab9f878d18f58499a135d21a2d157c96b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / dti_alps-0.2.1-py3-none-any.whl
| Download URL | dti_alps-0.2.1-py3-none-any.whl |
|---|---|
| Size | 194.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ef3dec61da75bbffa6adfa5d2f09440c006e93972ef0b6074f3df42374e1f9ef
|
|
BLAKE2b-256 checksum How to use checksums |
36e09d97cf3734d1c9fc29e0119c845296dc37d3e914150a1ff451231458cfb3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logSecurity for dti-alps 0.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for dti_alps-0.2.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.