Files
aare/RELEASE.md
T
Khalil Ferjaoui a6afa45b3b
Build on RHEL8 / build (push) Successful in 3m6s
Build on RHEL9 / build (push) Successful in 3m20s
Run tests using data on local RHEL8 / build (push) Successful in 3m36s
Build on local RHEL8 / build (push) Successful in 2m21s
Feature/minuit2 wrapper (#279)
## Unified Minuit2 fitting framework with FitModel API

### Models (`Models.hpp`)
Consolidate all model structs (Gaussian, RisingScurve, FallingScurve)
into a
single header. Each model provides: `eval`, `eval_and_grad`, `is_valid`,
`estimate_par`, `compute_steps`, and `param_info` metadata. No Minuit2
dependency.

### Chi2 functors (`Chi2.hpp`)
Generic `Chi2Model1DGrad` (analytic gradient) templated on the model
struct.
Replaces the separate Chi2Gaussian, Chi2GaussianGradient,
Chi2Scurves, and Chi2ScurvesGradient headers.

### FitModel (`FitModel.hpp`)
Configuration object wrapping `MnUserParameters`, strategy, tolerance,
and
user-override tracking. User constraints (fixed parameters, start
values, limits)
always take precedence over automatic data-driven estimates.

### Fit functions (`Fit.hpp`)
- `fit_pixel<Model, FCN>(model, x, y, y_err)` -> single-pixel,
self-contained
- `fit_pixel<Model, FCN>(model, upar_local, x, y, y_err)` -> pre-cloned
upar for hot loops
- `fit_3d<Model, FCN>(model, x, y, y_err, ..., n_threads)` ->
row-parallel over pixel grid

### Python bindings
- `Pol1`, `Pol2`, `Gaussian`, `RisingScurve`, `FallingScurve` model
classes with
  `FixParameter`, `SetParLimits`, `SetParameter`, and properties for
  `max_calls`, `tolerance`, `compute_errors`
- Single `fit(model, x, y, y_err, n_threads)` dispatch replacing the old
`fit_gaus_minuit`, `fit_gaus_minuit_grad`, `fit_scurve_minuit_grad`,
etc.

### Benchmarks
- Updated `fit_benchmark.cpp` (Google Benchmark) to use the new FitModel
API
- Jupyter notebooks for 1D and 3D S-curve fitting (lmfit vs Minuit2
analytic)
- ~1.8x speedup over lmfit, near-linear thread scaling up to physical
core count

---------

Co-authored-by: Erik Fröjdh <erik.frojdh@psi.ch>
2026-03-30 09:12:23 +02:00

4.4 KiB

Release notes

HEAD

New Features:

  • Added a new Minuit2-based fitting framework for Gaussian, RisingScurve, FallingScurve, Pol1 and Pol2 models.
  • setter and getter for nSigma for ClusterFinder aare.ClusterFinder().nSigma = 2, aare.ClusterFinderMT().set_nSigma(2)

Bugfixes:

  • Fixed split_task(first, last, n_threads) so task ranges now correctly respect the first offset. Previously, non-zero starting indices could generate incorrect subranges.

2026.3.17

New Features:

  • Decoding transceiver data from Matterhorn10 transformed_data = aare.transform.Matterhorn10Transform(num_counters=2, dynamic_range=16)(data)
  • Expanding 24 to 32 bit data aare._aare.expand24to32bit(data, offset=4)
  • Decoding digital data from Mythen 302 transformed_data = aare.transform.Mythen302Transform(offset=4)(data)
  • added aare.Interpolator.transform_eta_values. Function transforms \eta-values to uniform spatial coordinates. Should only be used for easier debugging.
  • New to_string, string_to
  • Added exptime and period members to RawMasterFile including decoding
  • Removed redundant arr.value(ix,iy...) on NDArray use arr(ix,iy...)
  • Removed Print/Print_some/Print_all form NDArray (operator << still works)
  • Added const* version of .data()
  • reading multiple ROI's supported for aare.
    • Use aare.RawFile.read_roi(roi_index=0) to read a specific ROI for the current frame
    • Use aare.RawFile.read_rois() to read multiple ROIs for the current frame
    • Use aare.RawFile.read_n_with_roi(num_frames = 2, roi_index = 0) to read multiple frames for a specific ROI.
    • Note read_frame and read_n is not supported for multiple ROI's.
  • Building conda/pypi pkgs for python 3.14. Removing 3.11 builds.

Bugfixes:

  • multi threaded cluster finder doesnt drop frames if queues are full
  • Round before casting in the cluster finder to avoid biasing clusters by truncating

2025.11.21

New Features:

  • Added SPDX-License-Identifier: MPL-2.0 to source files

  • Calculate Eta3 supports all cluster types

  • interpolation class supports using cross eta3x3 and eta3x3 on full cluster as well as eta2x2 on full cluster

  • interpolation class has option to calculate the rosenblatt transform

  • reduction operations to reduce Clusters of general size to 2x2 or 3x3 clusters

  • max_sum_2x2 including index of subcluster with highest energy is now available from Python API

  • interpolation supports bilinear interpolation of eta values for more fine grained transformed uniform coordinates

  • Interpolation is documented

  • Added tell to ClusterFile. Returns position in bytes for debugging

Resolved Features:

  • calculate_eta coincides with theoretical definition

Bugfixes:

  • eta calculation assumes correct photon center
  • eta transformation to uniform coordinates starts at 0
  • Bug in interpolation
  • File supports reading new master json file format (multiple ROI's not supported yet)

API Changes:

  • ClusterFinder for 2x2 Cluster disabled
  • eta stores corner as enum class cTopLeft, cTopRight, BottomLeft, cBottomRight indicating 2x2 subcluster with largest energy relative to cluster center
  • max_sum_2x2 returns corner as index

2025.8.22

Features:

  • Apply calibration works in G0 if passes a 2D calibration and pedestal
  • count pixels that switch
  • calculate pedestal (also g0 version)
  • NDArray::view() needs an lvalue to reduce issues with the view outliving the array

Bugfixes:

  • Now using glibc 2.17 in conda builds (was using the host)
  • Fixed shifted pixels in clusters close to the edge of a frame

2025.7.18

Features:

  • Cluster finder now works with 5x5, 7x7 and 9x9 clusters
  • Added ClusterVector::empty() member
  • Added apply_calibration function for Jungfrau data

Bugfixes:

  • Fixed reading RawFiles with ROI fully excluding some sub files.
  • Decoding of MH02 files placed the pixels in wrong position
  • Removed unused file: ClusterFile.cpp

2025.5.22

Features:

  • Added scurve fitting

Bugfixes:

  • Fixed crash when opening raw files with large number of data files

Download, Documentation & Support

Download

The Source Code: https://github.com/slsdetectorgroup/aare

Documentation

Documentation including installation details: https://github.com/slsdetectorgroup/aare

Support

erik.frojdh@psi.ch
alice.mazzoleni@psi.ch
dhanya.thattil@psi.ch