Changelog¶
0.5.0.dev0¶
Current development version for the next ConfUSIus release.
Breaking changes¶
- Registration now takes a single
initializationparameter in place ofcentering_initializationandinitial_transform.initializationaccepts"center_geometry","center_moments", a homogeneous affine matrix orNonefor an identity initialization. Affectsregister_volume,register_volumewise, and thedata.fusi.registeraccessor (#215).
Enhancements¶
- [Napari plugin] Added Events panel to annotate temporal events within Napari.
Events shade the signal plot; active event names appear in the time overlay; load
from / save to a BIDS
.tsv(#176). confusius.bidsmodule is now public with newread_eventsandwrite_events(#176).- Added a
datasetsCLI namespace, listed inconfusius --help:confusius datasets --listprints the table of available datasets, their sizes, and whether each is cached on disk. A bareconfusius PATH...still launches the viewer (#234). - Added
NMFfor non-negative matrix factorization of fUSI time series, wrappingsklearn.decomposition.NMFwith the same xarray-awarefit/transform/inverse_transforminterface asPCAandFastICA. Bothmode='temporal'andmode='spatial'are supported (#211). - Added
adjust_pvaluesfor generic multiple-comparison correction of p-value maps, andapply_statistical_thresholdto threshold z-scaled statistical DataArrays with the same family-wise-error (Bonferroni, ล idรกk, Holm, Holm-ล idรกk, Simes-Hochberg, Hommel) or false-discovery-rate (Benjamini-Hochberg, Benjamini-Yekutieli) corrections, plus an optional cluster-extent threshold (#204). - Added
fetch_landemard_2026for downloading the Landemard et al. (2026) fUSI-BIDS dataset from OSF, withdatasets,subjects,acqs, anddatatypesfilters (#228).
Fixes¶
signal.cleannow supportsensure_finite=Trueto repair non-finitesignalsandconfoundsby interpolating along time, fills censored boundary samples from the nearest kept sample before filtering, and acceptsinterpolate_kwargsfor pre-scrubbing interpolation (#239).- Image plotting functions now leave
alphaunset by default (None), so a colormap's built-in alpha channel is respected (#225). load_niftino longer drops affines loaded from the JSON sidecar (e.g.bspline_initializationwritten by the registration pipeline) when merging in the NIfTI qform/sform affines (#222).save_niftino longer maps non-time additional axes to the NIfTI 4th slot. When additional axes are present in the DataArray, a degenerate length-1timeaxis is inserted at NIfTI axis 4 (NIfTI's conventional time slot) so non-time additional axes always land at NIfTI axes 5, 6, 7. The original dim name for each additional axis is always written to the sidecar asConfUSIusDim{N}Name(withNin 4, 5, 6, matching the 0-based NIfTI axis of the extra dim). The matchingConfUSIusDim{N}Coordinatesentry is only written when the coord cannot be reconstructed frompixdim(i.e. when the coord does not start at 0 with regular spacing); otherwise the spacing is stored inpixdimand the coord is rebuilt asstep * arange(size)on load. Attributes are preserved inConfUSIusDim{N}Attributesentries. (#223).
Documentation¶
- Add an NMF example to the gallery, demonstrating the z-score + absolute-value standardization that makes signed fUSI signals NMF-compatible.
0.4.0¶
Released 2026-06-25.
Enhancements¶
- The
confusiusCLI now accepts multiple fUSI data files in a single invocation (e.g.confusius fixed.nii moving.nii). Each file is added as its own image layer, named after the file's basename (#206). data.fusi.affine.applynow accepts affines with rotation and shear. The axis-aligned part updates the 1Dz/y/xcoordinates and the method returns the residual orientation as a 4x4 affine (the identity for diagonal affines) for the caller to use as they wish (#188).- Add
smoothing_fwhmparameter toFirstLevelModel. Smoothing is applied to each run before model fitting (#201).
Performance¶
process_iq_blocksnow usesdask.array.map_blocksfor non-overlapping outer IQ windows and batches overlapping windows with explicit overlap before mapping blocks, reducing Dask overhead in common blockwise processing workflows (#190).
Fixes¶
- Masks are now coerced to boolean by
validate_mask(addedreturn_dtype_as_boolparameter that defaults toTrue) to avoid DataArrays using positional indexing. Previously these masks could select the wrong voxels or, forregister_volume, silently disable the metric mask (#197). process_iq_blocksnow handles strongly overlapping IQ windows without corrupting the output time dimension, so power Doppler and related IQ reducers work whenwindow_stride < window_width / 2(#192).load_niftinow anchorsphysical_to_qformto the same physical frame as the primary (sform) coordinates, so the stored qform affine maps the array's physical coordinates to qform world space (#187).save_niftinow preserves each affine's own translation, so a NIfTI file with sform and qform round-trips throughload_nifti/save_niftiwithout corrupting the qform (#187).- [Napari plugin] Fixed the Signals plot x-axis for volumes without a time dimension. It now follows the slider axis world coordinates, with a matching label and dropdown option (#180).
0.3.0¶
Released 2026-05-27.
Breaking changes¶
register_volumenow also returns aRegistrationDiagnosticsdataclass with the per-iteration metric values, final metric value, iteration count, optimizer stop condition, and the metric name.register_volumewisealways adds per-framefinal_metric_valueandn_iterationscolumns tomotion_params, and exposes the full per-frame diagnostics list underattrs["registration_diagnostics"]only when called withkeep_diagnostics=Trueto avoid retaining the full optimizer metric trace by default (#139).- Renamed
validate_iqtovalidate_iq_dataarray(#153).
Enhancements¶
- Added a
maskargument to thePCA,FastICA,SeedBasedMaps, andFirstLevelModelestimators, restricting fitting and projection to the selected voxels. Output maps retain the full spatial geometry, with voxels outside the mask set to0(#155). - Added
plot_composite,VolumePlotter.add_composite, and a matchingdata.fusi.plot.compositeaccessor that render two volumes as a red/cyan RGB overlay (#145). - Added
datatypesfilter tofetch_cybis_pereira_2026, allowing downloads to be scoped to specific BIDS datatype directories ("fusi","angio","motion") (#141). - Added
fetch_template_huang_2025for downloading and loading the Huang et al. vascular mouse template from OSF, with cache/refresh behavior matching existing template fetchers (#162). - Added
show_progressto volumewise registration so joblib progress output can be disabled in scripted or quiet workflows (#126). - Added a reusable
validate_fusi_dataarrayvalidator and refactored IQ/registration validation to use it. Core dimension coordinates are now validated as 1D, numeric, finite, and strictly increasing, while extra/non-dimension coordinates remain allowed (#153). - Added shared
fontsizeparameter toplot_volume,plot_contours, and carpet plotting entry points so text sizing is consistent across all plotting APIs (#128). - Replaced plotting
black_bgwith explicitbg_colorandfg_colorcontrols for clearer visual customization (#124). - Added
FastICAtransformer for independent component analysis of fUSI recordings, with the same xarray-awarefit/transform/inverse_transformAPI asPCA(#118). - Added example gallery helper utilities to streamline writing and maintaining docs examples (#102).
Performance¶
- Top-level
confusiusandconfusius.xarraynamespaces now use SPEC-0001 PEP 562 lazy loading. Submodules and exported functions are only imported on first access, reducingimport confusiusoverhead for workflows that use a subset of the package.
Fixes¶
- Fixed
resample_likeandresample_volumefilling out-of-FOV voxels with0.0when resampling onto a larger grid. This caused a bright background artifact for dB-scaled data (where 0 is maximum intensity). Thedefault_valueparameter now defaults tofloat(moving.min())instead of0.0.register_volumegains afill_valueparameter that overrides the default for both the final resampled output and the live progress composite overlay (#138). - Fixed plotting hover information silently disappearing when the returned
VolumePlotterwas not held in a variable (e.g.obj.fusi.plot.volume().show()). The hover manager is now kept alive until the figure is closed (#148). - Fixed napari x-axis extent computation to ignore the interactive cursor guide line, preventing incorrect plot bounds (#111).
Documentation¶
- Added a Registration of two sessions from the same
subject example
demonstrating
register_volume, the new diagnostics, and confusius'splot_compositeoverlay pattern for inspecting alignment before and after registration (#139).
Maintenance¶
- Switched documentation hosting to GitHub Pages with
mikeversioning and automatic PR preview deployments (#134).
0.2.0¶
Released 2026-05-05.
First official public beta release of ConfUSIus.
Highlights¶
- ConfUSIus now covers the core alpha roadmap, including I/O, beamformed IQ processing, registration, quality control, atlas integration, signal processing, decomposition, functional connectivity, and general linear model workflows.
- The package provides both a Python API and a napari plugin for interactive data loading, visualization, signal inspection, and quality control.
Notes¶
0.1.0was used only to reserve theconfusiusproject name on PyPI and is not a supported public release.0.2.0is therefore the first official public release series for ConfUSIus.