Changelog¶
Notable changes to this project are documented here.
v0.6.1¶
(2026-05-22)
Extends the calibration pipeline with a unified entry point, parametric model store, and HPC dispatch. Introduces async multi-transducer simulations, a sequential simulation dispatcher, PlanTUS-based automated placement, and RAS as the canonical coordinate space. Drops the Image Processing Toolbox requirement.
Core / Config¶
- MATLAB Image Processing Toolbox no longer required — morphological ops and resampling use base-MATLAB equivalents
transducer.target_isppa_wcm2migrated from calibration struct to transducer struct- Optional
transducer.namefield added to transducer config
Calibration¶
- Unified
calibrate_transducerentry point with HPC dispatch, multi-intensity mode, and parametric model store - Geometric steering mode with per-element hardware correction
- Multiple analytical forward models — O'Neil and Rayleigh
- Transducer library (draft)
- Free-water correction moved post-analytical to make optional
- Free-water validation can be deactivated or limited to first/last target ISPPA
- Pluggable analytical forward model interface
- Option to use manufacturer phases to initiate global search (
opt_use_initial_phases) - ⚠️ Fixed: amplitude scaling bug present since early PRESTUS versions — correction factor is the square root of intensity ratios, not the ratio itself
Placement¶
- PlanTUS placement mode wraps the external PlanTUS optimiser for automated transducer targeting — experimental (see doc_placement_plantus.md)
- T1 overlay plot auto-generated after heuristic and PlanTUS placement
- Browser-based transducer alignment viewer (experimental)
Acoustic/Thermal¶
- Async multi-transducer pipeline — experimental (see doc_async_transducer.md)
- Sequential simulation dispatcher: runs multiple parameter configurations in series, chains thermal simulations, and produces a consolidated multi-run report (see doc_advanced.md)
- ⚠️ Fixed: sequential simulation produced incorrect outputs prior to this release due to mismatching grid->T1w transforms and back of the adopted heatmaps; the heatmaps were not interpolated with the baseline free-water value leading to interpolation artefacts
- Uncertainty pipeline produces uncertainty bands across sequential multi-run parameter sweeps
- Complex pressure field optionally saved (
save_p_complex) (experimental)
Head pipeline¶
- RAS established as canonical entry-point coordinate space; RAS+ orientation enforced at NIfTI load time;
ras_plusgrid mode rescales without rotation tissuemask_binaryexposes awatermask fieldsmooth_imggains anoffmethod (no smoothing); exposed in GUI
Phantom¶
trans_pos_mm/focus_pos_mmconfig fields allow resolution-independent transducer and focus position specification- ⚠️ Fixed: phantom NIfTI outputs used incorrect voxel dimensions and inconsistent world-space orientation across pipeline stages
NIfTI / Transform¶
- Batched
tformarraywith optional parallel workers for MNI transforms - Explicit FOV mask used in MNI outputs instead of zero sentinel (unreliable for pCT Hounsfield values)
- ⚠️ Fixed: pCT path layout corrected; NaN padding used instead of zero fill
Telemetry¶
- System resources reported at run start: OS, CPU model/cores, RAM, GPU, CUDA version
Reporting¶
- Public usage statistics (see doc_usage_statistics.md)
v0.6.0¶
(2026-04-30)
Introduces matrix transducer support, an uncertainty quantification pipeline, and a rudimentary GUI. The pipeline is further integrated with automated pCT generation, placement dispatch, multi-ISPPA targeting, and a BIDS-inspired output structure. Parameter names and output paths have changed throughout.
⚠️ Migration note: Several parameter names and all output paths have changed in this release. Existing configs and post-processing scripts will need updating.
Parameters: -
parameters.submit_mediumrenamed toparameters.platform- Segmentation smoothing now specified in FWHM mm (parameter name changed) - Transducer field suffixes renamed consistently — check transducer config fields - Further parameter renames throughout — consultconfig_default.yamlfor current namesOutput paths: -
parameters.iofields renamed:*_dir→dir_*,*_filename→filename_*- Preprocessing cache files follow a consistentres_N_descriptornaming scheme -space-prefix removed from all NIfTI output filenames -output_affixnow appended at the end of all output filenames - HPC log directory renamed:hpc_log/→log_hpc/- Outputs reorganised into BIDS-inspired typed subdirectories (acoustic/,thermal/,cache/,debug/, etc.)Directory and config naming: -
toolboxes/directory renamed toexternal/- Config files consistently prefixed withconfig_
Added¶
- [feature] Uncertainty quantification pipeline (see doc_uncertainty.md)
- Three-variant simulation workflow (default / liberal / conservative medium properties) producing a unified HTML report with per-metric safety cards colour-coded against ITRUSST non-significant risk limits, acoustic and thermal range tables, side-by-side intensity and temperature maps, and an SVG temperature timeseries with uncertainty band
- Supports MATLAB (sequential) and HPC (parallel, scheduler-dependent) execution with automatic resumption from partial runs
- [feature] Matrix transducer support (see doc_transducer.md, PR #117)
- Flexible element layout options: rectangular grid, Fibonacci, Fermat spiral, and Clover multi-array configuration
- Element positions can be defined inline or loaded from file
- [pCT] pCT generation fully automated inside the pipeline; a T1w image, UTE image, and mapping algorithm are sufficient — pre-generation remains possible for debugging; pCT section included in HTML report when used
- [calibration] In-pipeline amplitude calibration to target ISPPA
- [feature] Multi-ISPPA targeting — run acoustics once, scale to N independent thermal targets via post-hoc pressure scaling (see doc_multi_isppa.md)
- [thermal] Dual CEM43 output: both kWave and ISO formulations propagated through pipeline, CSV, NIfTIs, and report
- [report] ISO CEM43 shown in Exposure Dashboard and methods section when enabled
- [feature] Placement dispatch — unified entry point for manual, Localite, and heuristic transducer positioning (see doc_placement.md)
- [feature]
prestus_config_init— bootstraps a project-specific config directory andconfig_default.yaml;load_parametersnow resolves the project config automatically so PRESTUS can be called from any working directory - [neuronav] Unified Localite pipeline via
localite_matrix_to_positions;InstrumentMarkersupport added;tracker_to_bowl_mmparameter - [feature] PRESTUS GUI — tabbed parameter editor and simulation launcher (see doc_gui.md)
- [feature]
prestus_group_start— new entry point for group-level MNI-space analysis - [feature]
segmentation_onlypipeline mode - [report] MItc (mechanical index transcranial) reported across all intracranial tissues
- [thermal]
simulation.log_thermal_updates— suppress verbose per-step k-Wave progress output (default: off) - [refactor]
simulation_niftisplit into per-pipeline-stage calls; bone mask separated from pseudoCT NIfTIs - [telemetry] Opt-in anonymous usage telemetry (disabled by default; see doc_telemetry.md)
Changed¶
- [I/O] Subject-specific output subfolders enforced
- [output] Intensity output naming cleaned up: redundant
maxlabels removed; naming aligned with standardised pressure and intensity metric conventions - [grid]
pml_sizedefaults to'auto'; effective PML size resolved and tracked in log - [config]
simulation.debugdefaults to0; property-map and MNI NIfTI export flags added toconfig_default.yaml - [validation] Function inputs consistently validated via MATLAB
argumentsblocks;help <function>exposes header information inline - [report] Safety Dashboard renamed to Exposure Dashboard; water-medium limits now populated; pressure units corrected; dynamic pressure display added; CEM and temperature removed from water-medium report
Fixed¶
- [paths]
load_parametersresolvesconfig_default.yamlvia an absolute path, preventing stray output folders - [paths] Cross-platform SimNIBS path compatibility
- [transducer] Annular array element format and default thickness corrected
- [nifti] Property map export: corrected datatype mismatch, scalar
alpha_powerhandling, andFillValueassignment - [hpc] Transducer index suffix omitted from positioning filenames for single-transducer runs
- [plots] T1 intensity overlay orientation corrected using NIfTI sform; deprecated
LineSmoothingproperty removed - [logging] Post-hoc water simulation writes to its own independent log file; PPW warning no longer emits a backtrace
- [debug] Debug directory creation and plots skipped when
simulation.debug = 0
v0.5.0¶
(2026-02-27)
Major restructuring of the pipeline into discrete processing stages. Adds parallel multi-transducer support, an HTML simulation report, C++ backend, skull rubber-wrap, and heuristic transducer placement. Parameter names have changed and existing configs will need updating.
⚠️ Migration note — configs from v0.4.x will need updating: -
layer_labelsrenamed tolayers- Transducer and focus position fields renamed totrans_pos/focus_posconsistently -grid_step_manddefault_grid_sizeremoved - Grid expansion parameter renamed - Attenuation parameters renamed — consultconfig_default.yaml- Layer indexing field migrated fromlayerstomediumthroughout - Pipeline refactored into discrete processing stages — consult the documentation for current function entry points
Added¶
- [feature] C++ backend CPU & GPU support by @jkosciessa
- [feature] Parallel multi-transducer support for layered simulations by @dreamstimlab (see PR #100)
- [feature] HTML simulation report — self-contained per-subject summary of acoustic and thermal outputs by @sirmrmarty
- [feature] Heuristic transducer placement — automated skull-surface search with configurable positioning criteria and ear exclusion (see PR #109)
- [skull] Rubber-wrap skull mask inflation by @meijer-s (see PR #103)
- [thermal] Flexible and standardised protocol timing specification aligned with TUSCalculator; protocol plot output
- [thermal] Additional thermal timeseries outputs (max per tissue, heating at focus)
- [feature] Per-step pipeline benchmarking: wall time, peak RAM, and disk usage logged at each stage
- [grid] Minimum PPW validation at source setup (
grid.min_ppw, default 6); warns with the maximumresolution_mmthat would satisfy the requirement - [calibration]
calibration.opt_phase_precession— optional constraint on element phases during amplitude/phase optimisation - [neuronav] Updated Localite GUMMarkers parsing
- [doc] GitHub Pages documentation — parameters, functions, installation, quick start, and processing steps
Changed¶
- [refactor] Pipeline and core processing steps refactored; functions organised by processing stage
- [axisymmetric] Axisymmetric acoustic simulations now default to 3D thermal output
Fixed¶
- [pCT] kPlan skull density and sound speed regularised to water minimum
- [acoustic] GPU array correctly moved to CPU before NIfTI export
- [calibration] Unoptimized parameters no longer passed to Oneil recomputation
- [savemat] k-Wave source matrix saving can now be correctly deactivated; water simulations force-save matrix outputs
Deprecated/Removed¶
- [feature] Explicit
skull-only simulation mode removed; equivalent behaviour is achieved by removing layers from the simulation setup
v0.4.2¶
(2025-12-04)
Refactors the calibration and acoustic profiling pipeline and introduces multi-element axisymmetry support.
Added¶
- [calibration] Acoustic profiling refactor with documented standalone calibration pipeline (see doc_calibration.md)
- [calibration] Multi-element axisymmetry support (experimental)
Changed¶
- [default] kWaveArray used by default
v0.4.1¶
(2025-08-26)
Post-release additions to v0.4.0: heat trace outputs, Localite neuronavigation integration, and 3D thermal as the default for axisymmetric runs.
Added¶
- [thermal] Heat trace saving
- [logging] MATLAB log written to output directory
- [neuronav] Localite coordinate processing
Changed¶
- [axisymmetric] 3D thermal simulation is now the default for axisymmetric acoustic runs
v0.4.0¶
(2025-06-04)
This release features major updates. Please consult the documentation for current parameter choices. Some features remain unstable and new bugs may pop up. Let's remain vigilant and try to quickly introduce hotfixes in those cases.
- [Feature] Acoustic profiling (beta) @MaCuinea
- [Feature] pCT->acoustic skull medium incl. multiple mapping algorithms (beta, doc) @eleonoracarpino @jkosciessa
- [Feature] Run consecutive simulations @KTZ228
- [Feature] GPU updates (doc) @jkosciessa
- [Feature] CEM43 ISO definition, see doc @jkosciessa
- [Feature] Modeling of absorption (as fraction of attenuation) and perfusion @jkosciessa. Be advised that this renders the heating estimates more liberal than in the past. See the documentation. Also see some comments in the issue.
- [Feature] axisymmetry simulations with 2D input grids (doc) @jkosciessa
- [Feature] simulations with computational phantoms (doc) @jkosciessa
- [Documentation] Initial draft of documentation (e.g., parameters) (see links above and here) @jkosciessa
- Many smaller bug fixes and QOL improvements (e.g., ability to disable .mat saving, more debugging outputs)
- DOC: minor typo in README.md by @mekman in #58
- Run simnibs segmentation code also supports SLURM by @MaCuinea in #62
- Prepare acoustic_profiling for merge by @MaCuinea in #69
- Semi-automated acoustic profiling by @MaCuinea in #71
- Added note to default config regarding ld_library_path in slurm by @KTZ228 in #70
- Merge pull request #70 from KTZ228/development by @MaCuinea in #77
- Fixed tutorial by @MaCuinea in #73
- Feature: consecutive simulations by @KTZ228 in #79
- Documentation, pCT, HCP updates & more, see above by @jkosciessa in #59
- The last one summarizes more than half a year of updates to code and documentation.
v0.3.0¶
- PseudoCT feature by @eleonoracarpino and @jkosciessa
- Clean-up repository by @jkosciessa
- Incorrect allocation of attenuation values bug fix by @jkosciessa
- Improve correct labeling of tissue by @jkosciessa
- Improvement of 3D plots by @jkosciessa
- Check simulation stability and adjust time step accordingly by @MaCuinea and @jkosciessa
- Enable tissue-specific temp_0 specification by @jkosciessa
- Fix heating plot bug by @jkosciessa
v0.2.0¶
- DOC: add GNU license by @mekman in #17
- Documentation changes and bug fixes by @KTZ228 in #14
- Disabled masking of neural tissue in skin in smooth_and_crop_layered by @KTZ228 in #19
- Adjusted create_Group_MNI_plots by @KTZ228 in #22
- Documentation changes by @KTZ228 in #24
- Minor changes to comments for heating setup by @jkosciessa in #29
- Figure saving updates, some bug fixes by @jkosciessa in #8
- Kenneth master by @KTZ228 in #33
- Group plots fixes and improvements by @KTZ228 in #26
- FIX: revert to working version by @mekman in #35
- DOC: reworked installation instructions by @mekman in #36
v0.1.0¶
Initial in-house development version by @achetverikov
- Dedicated segmentation path option, minor bug fixes, updated simnibs call by @jkosciessa in #2
- fix small errors by @jkosciessa in #3
- adjusted skull values by @eleonoracarpino in #4
- Bug fixes and documentation changes by @KTZ228 in #6
- DOC: simplify readme.md wording regarding requirements by @mekman in #7