Skip to main content

Native Python/Torch detector calibration for MIDAS — replaces AutoCalibrateZarr → CalibrantIntegratorOMP. CPU & GPU; LM-based refinement.

Project description

midas-calibrate

Native Python/Torch detector geometry calibration for MIDAS. Replaces AutoCalibrateZarr → CalibrantIntegratorOMP → CalibrationCore. Same input parameter file format, byte-compatible output, runs on CPU or GPU.

Notebooks

Worked-example Jupyter notebooks live in notebooks/. They are not shipped with pip install — get them by cloning the MIDAS repository.

Quick start

import tifffile
from midas_calibrate import CalibrationParams, autocalibrate

params = CalibrationParams.from_file("calib.txt")
image = tifffile.imread("ceo2_calibrant.tif")
result = autocalibrate(params, image)

result.params.write("calib_refined.txt")
print(f"final mean strain: {result.history[-1].mean_strain_uE:.1f} μϵ")

CLI:

midas-autocalibrate calib.txt --image ceo2.tif --output calib_refined.txt

How it works

  • E-stepmidas-integrate builds a CSR pixel→bin map from the current geometry and integrates the image into a 2D (R, η) cake. Per (ring × η-bin) the radial peak position is extracted via weighted centroid.
  • M-step — fit detector geometry to the (Y_pix, Z_pix, ring) data using a custom batched Levenberg-Marquardt solver (midas_peakfit.lm_solve_generic) with sigmoid-bounded reparameterisation, Cholesky_ex, and optional Huber loss reshaping.
  • Orchestrator — alternating E↔M iterations with optional σ-clip outlier rejection between iterations.

The geometry forward model in geometry_torch.py is a byte-for-byte port of midas_integrate.geometry.pixel_to_REta — verified to fp64 epsilon by parity tests.

Dependencies

Synthetic-data parity test

The end-to-end synthetic test forward-simulates a CeO₂ calibrant image at known geometry, perturbs the seed (Lsd ±300μm, BC ±1.5px, tilts ±0.06°), and verifies recovery:

[iter 0] n_fits= 176  rc=0  strain=  105.2μϵ  Lsd=1000219.4  BC=(512.20,511.91)  ty=0.343  tz=0.180
[iter 1] n_fits= 176  rc=0  strain=   25.7μϵ  Lsd= 999973.5  BC=(512.01,512.00)  ty=0.403  tz=0.250
[iter 2] n_fits= 176  rc=0  strain=   19.4μϵ  Lsd= 999946.1  BC=(511.99,512.00)  ty=0.400  tz=0.267
[iter 3] n_fits= 176  rc=0  strain=   21.6μϵ  Lsd= 999918.1  BC=(511.99,512.00)  ty=0.392  tz=0.285

Final recovery: Lsd within 82μm of truth, BC within 0.01 px, tilts within 0.04°. Mean strain 21.6μϵ, well under the 50μϵ MIDAS calibration target.

Engines

autocalibrate is the alternating E↔M engine (default).

autocalibrate_joint will be the fully differentiable engine — geometry + per-(ring × η-bin) peak-shape parameters jointly refined in one batched Schur-complement-reduced LM (see §13 of the design doc). v0.1 ships with a working stub that delegates to the alternating engine; the arrowhead-LM infrastructure (midas_peakfit.lm_solve_arrowhead) is in place and tested.

Status

v0.2.x — alternating engine production-ready, joint engine scaffolded. For the torch-native, fully differentiable next-generation calibration stack see midas-calibrate-v2.

See AutoCalibrate.md for the manual.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

midas_calibrate-0.2.4.tar.gz (21.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

midas_calibrate-0.2.4-py3-none-any.whl (21.2 kB view details)

Uploaded Python 3

File details

Details for the file midas_calibrate-0.2.4.tar.gz.

File metadata

  • Download URL: midas_calibrate-0.2.4.tar.gz
  • Upload date:
  • Size: 21.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for midas_calibrate-0.2.4.tar.gz
Algorithm Hash digest
SHA256 e9314d586355a5db968d56e19a31ecb6337c33a9f25b1a8eafec97c912a5ab26
MD5 28df19c22fd0101edd5c6aeb52f3b2eb
BLAKE2b-256 9de8cfdb235199fe5de76ad27738279c4132282478cfbd47972b6f7915fbcccb

See more details on using hashes here.

Provenance

The following attestation bundles were made for midas_calibrate-0.2.4.tar.gz:

Publisher: python-packages.yml on marinerhemant/MIDAS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file midas_calibrate-0.2.4-py3-none-any.whl.

File metadata

  • Download URL: midas_calibrate-0.2.4-py3-none-any.whl
  • Upload date:
  • Size: 21.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for midas_calibrate-0.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 8a8f876649adebb81f5b06e0239d5f2190a0a6718c33ac388db75c3b22cfff6d
MD5 82fac4ad6c06726cbbfafa31420a546a
BLAKE2b-256 92a92c0daefbe749b2d5771c96ed9103b96907cbf90a56db3e5920d15dcd5c48

See more details on using hashes here.

Provenance

The following attestation bundles were made for midas_calibrate-0.2.4-py3-none-any.whl:

Publisher: python-packages.yml on marinerhemant/MIDAS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page