OptiConn Steps & CLI Reference¶
What is OptiConn?¶
OptiConn is an unbiased, modality-agnostic connectomics optimization and analysis toolkit. It automates (1) discovery of robust tractography parameters via systematic evaluation (Bayesian or cross-validated grid/random), then (2) applies those parameters to generate analysis-ready brain connectivity datasets.
OptiConn is built around DSI Studio for tractography and connectivity extraction.
Installation (macOS / Linux only)¶
Windows is not supported in this release.
Prerequisites¶
- Python 3.10+
- Git + build tools (Xcode CLT on macOS,
build-essentialon Linux) - DSI Studio installed locally (required)
Install (curated virtual environment)¶
git clone https://github.com/MRI-Lab-Graz/opticonn.git
cd opticonn
# macOS example
bash install.sh --dsi-path /Applications/dsi_studio.app/Contents/MacOS/dsi_studio
# Linux example
# bash install.sh --dsi-path /usr/local/bin/dsi_studio
source braingraph_pipeline/bin/activate
What the installer does (high-level):
- Creates a virtual environment at
braingraph_pipeline/usinguv - Installs OptiConn in editable mode with extras
- Persists
DSI_STUDIO_PATHinto the venv activation script so all pipeline steps can find DSI Studio
Verify the setup¶
source braingraph_pipeline/bin/activate
python scripts/validate_setup.py --config configs/ braingraph_default_config.json
Running OptiConn¶
OptiConn is exposed through the repository entrypoint:
python opticonn.py --help
python opticonn.py <command> --help
Global options¶
These flags are accepted by the main CLI parser:
--version: print the OptiConn version--dry-run: currently defined but not executed by the hub (no-op at the moment)
Environment variables¶
DSI_STUDIO_PATH: set byinstall.sh; used to resolvedsi_studio_cmdwhen configs use the genericdsi_studioOPTICONN_SKIP_VENV=1: disables the venv auto-bootstrap inopticonn.py(advanced; normally you want the curated venv)
The standard 3-step OptiConn workflow¶
Most users follow:
- Step 1:
tune-bayes(recommended) ortune-grid - Step 2:
select - Step 3:
apply
The sections below document every opticonn command and flag.
Step 1A (recommended): tune-bayes¶
Bayesian optimization searches tractography parameters efficiently (typically 20–50 evaluations instead of large grids).
Command¶
python opticonn.py tune-bayes -i <pilot_data_dir> -o <output_dir> --config <base_config.json> --modalities <qa|fa|...>
Required arguments¶
-i, --data-dir: directory containing.fzor.fib.gzfiles-o, --output-dir: output directory for optimization results--config: base configuration JSON file
Options¶
--n-iterations <int>: number of Bayesian iterations (default:30)--n-bootstrap <int>: number of bootstrap samples per evaluation (default:3)--max-workers <int>: parallel workers (default:1= sequential)--modalities <m1> [m2 ...]: one or more modalities to optimize separately (e.g.qa fa). Hereqarefers to Quantitative Anisotropy (not “quality assurance”). If omitted, OptiConn infers a single default modality from the config (prefersqaif present).--sample-subjects: sample a different subject each iteration (recommended for quick pilot runs)--verbose: more detailed optimization logging
Outputs¶
<output_dir>/bayesian_optimization_manifest.json(index of modality-specific runs)- For each selected modality
<m>: <output_dir>/<m>/bayesian_optimization_results.json<output_dir>/<m>/iterations/(logs and per-iteration artifacts)
Demo mapping¶
- Run just Step 1:
python scripts/opticonn_demo.py --step 1 --n-iterations 4 - Full demo workflow (Steps 1–3):
python scripts/opticonn_demo.py --step all - See also: Demos
Step 1B (cross-validated baseline): tune-grid¶
Grid/random tuning runs a two-wave cross-validation bootstrap optimizer to evaluate parameter combinations more exhaustively.
Command¶
python opticonn.py tune-grid -i <pilot_data_dir> -o <output_dir>
Required arguments¶
-i, --data-dir: directory containing.fzor.fib.gzfiles for tuning-o, --output-dir: base output directory (asweep-<uuid>/folder is created under it)
Options¶
--quick: tiny demo sweep (usesconfigs/sweep_micro.json)--subjects <int>: subjects per wave (default:3)--max-parallel <int>: max combinations to run in parallel per wave--extraction-config <path>: override extraction config used in auto-generated waves--config <path>: optional config; can be either an extraction-like config or a master optimizer config--no-validation: skipscripts/validate_setup.pybefore running--no-report: skip quick quality and Pareto reports after tuning--verbose: show DSI Studio commands and detailed progress per combination--auto-select: deprecated legacy behavior (selection now happens viaopticonn select)
Outputs¶
<output_dir>/sweep-<uuid>/optimize/(wave outputs + logs)
Demo mapping¶
- Quick grid demo:
python opticonn.py tune-grid -i demo_workspace_cv/data -o demo_workspace_cv/results/grid --quick - Cross-validation demo driver:
python scripts/opticonn_cv_demo.py --workspace demo_workspace_cv - See also: Demos
Step 2: select¶
Selects the best candidate from either:
bayesian_optimization_results.jsonfor a specific modality (Bayesian; e.g.<output>/<modality>/bayesian_optimization_results.json)- An
optimize/directory produced by cross-validated tuning (grid/random)
Command¶
python opticonn.py select -i <path>
If your Step 1 Bayesian tuning was run per-modality (via --modalities), you can also point select at the base output directory and pick a modality:
python opticonn.py select -i <bayes_output_dir> --modality <qa|fa|...>
Required arguments¶
-i, --input-path: path to Bayesian results JSON or an optimize directory- For per-modality Bayesian tuning you can pass the base output directory and add
--modality <qa|fa|...>.
Options¶
--prune-nonbest: for grid outputs, delete non-optimal combo results after selection to save disk space
Outputs¶
- For grid outputs:
<optimize_dir>/selected_candidate.json - For Bayesian outputs: prints the best parameters and a suggested next
applycommand
Demo mapping¶
- Run just Step 2 (expects Step 1 outputs in the demo workspace):
python scripts/opticonn_demo.py --step 2
Step 3: apply¶
Applies optimal parameters to a dataset and runs the full analysis pipeline (connectivity extraction + optimization + selection).
Command¶
python opticonn.py apply -i <full_data_dir> --optimal-config <selected_candidate.json|bayes_results.json> -o <output_dir>
Required arguments¶
-i, --data-dir: directory containing the full dataset (.fzor.fib.gz)--optimal-config: either:selected_candidate.jsonproduced byopticonn selecton grid outputs, orbayesian_optimization_results.jsonproduced bytune-bayes
Options¶
-o, --output-dir: output directory (default:analysis_results)--analysis-only: skip connectivity extraction and re-run analysis on existing outputs--candidate-index <int>: if the optimal config contains multiple candidates, choose by 1-based index (default:1)--verbose: show detailed progress and DSI Studio commands--quiet: reduce console output--skip-extraction: deprecated alias for--analysis-only
Outputs¶
<output_dir>/selected/01_connectivity/<output_dir>/selected/02_optimization/<output_dir>/selected/03_selection/
Demo mapping¶
- Run just Step 3 (expects Step 1 outputs in the demo workspace):
python scripts/opticonn_demo.py --step 3 - Full demo workflow (Steps 1–3):
python scripts/opticonn_demo.py --step all
Cross-validation (advanced)¶
If you want cross-validation with Bayesian seeding (not currently surfaced by opticonn tune-grid), run the underlying optimizer directly.
Script: cross_validation_bootstrap_optimizer.py¶
python scripts/cross_validation_bootstrap_optimizer.py \
-i <pilot_data_dir> \
-o <output_dir> \
--extraction-config <extraction_config.json> \
--from-bayes <bayesian_optimization_results.json> \
--subjects 3 \
--max-parallel 1 \
--verbose
Notable flags:
--from-bayes <path>: seed best parameters from Bayesian results--candidates-from-bayes <path>: evaluate top-K Bayes candidates (no sweep sampling)--bayes-top-k <int>: number of Bayes candidates to evaluate (default:3)--random-baseline-k <int>: optionally add K random candidates fromsweep_parametersfor comparison--single-wave: run one comprehensive wave instead of 2-wave cross-validation--dry-run: generate configs and summarize actions without executing
Demo mapping¶
python scripts/opticonn_cv_demo.py --workspace demo_workspace_cv(defaults to--modalities qa fa)
Other OptiConn commands¶
sensitivity¶
Analyzes which parameters have the strongest impact on quality scores.
python opticonn.py sensitivity -i <data_dir> -o <output_dir> --config <baseline_config.json>
Flags:
--parameters <p1> <p2> ...: analyze a subset of parameters (default: all)--perturbation <float>: fractional perturbation size (default:0.1= 10%)--verbose: more detailed output
Outputs:
sensitivity_analysis_results.jsonsensitivity_analysis_plot.png
pipeline¶
Advanced wrapper around the 3-step orchestrator (scripts/run_pipeline.py).
python opticonn.py pipeline --step all --data-dir <data_dir> -o <output_dir> --config <extraction_config.json>
Flags:
--step {01,02,03,all,analysis}-i, --input: alias/compat input path-o, --output: output directory--config: extraction config (defaults toconfigs/braingraph_default_config.json)--data-dir: same as in Step 01--cross-validated-config: optional; converted into an extraction config for Step 01--quiet: reduce output