Skip to main content

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.

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.8.tar.gz (24.8 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.8-py3-none-any.whl (24.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: midas_calibrate-0.2.8.tar.gz
  • Upload date:
  • Size: 24.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for midas_calibrate-0.2.8.tar.gz
Algorithm Hash digest
SHA256 4adab437219cb26a38609309a7ca8708ca7955d769a49435cfc083832fb74a66
MD5 7ff0dc0fcbefd030ee6f43e59eac2c3f
BLAKE2b-256 6d995e7def39115a217cd19060b477a8a67cee9f15cd213e5ac8ddee3af733d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for midas_calibrate-0.2.8.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.8-py3-none-any.whl.

File metadata

  • Download URL: midas_calibrate-0.2.8-py3-none-any.whl
  • Upload date:
  • Size: 24.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for midas_calibrate-0.2.8-py3-none-any.whl
Algorithm Hash digest
SHA256 e405eb74db4a13fa95d0b8a79f20a241e04765202e9c4cab893e415c9144cce5
MD5 ce5d29e5383f1df70e51b3ac7da2f592
BLAKE2b-256 fde656cbfb4f51c11eeb698aed465d49876ee70491e6622efebfbeb7bee47471

See more details on using hashes here.

Provenance

The following attestation bundles were made for midas_calibrate-0.2.8-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.

Release history Release notifications | RSS feed

0.4.3

2 files

0.4.2

2 files

0.4.1

2 files

0.4.0

2 files

0.3.0

2 files

0.2.10

2 files

0.2.9

2 files

This release

0.2.8 This release

2 files

0.2.7

2 files

0.2.6

2 files

0.2.5

2 files

0.2.4

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

Supported by

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