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.6.tar.gz (23.3 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.6-py3-none-any.whl (23.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: midas_calibrate-0.2.6.tar.gz
  • Upload date:
  • Size: 23.3 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.6.tar.gz
Algorithm Hash digest
SHA256 f539bd2250b88415c1fc58d0a7fa5d81d8ca2735f538c157f91d3abc66a4b846
MD5 44d7e1225e2ea541bccc0d5f79ba5dcb
BLAKE2b-256 55cd2d6d6d87645b4ac47f8206d405373933f5314389e90a25d656b2841681d5

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: midas_calibrate-0.2.6-py3-none-any.whl
  • Upload date:
  • Size: 23.0 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.6-py3-none-any.whl
Algorithm Hash digest
SHA256 d6be0c15f94aaca29bf5f80468e11a55472406a16b7ed465a3c2e759caa70003
MD5 fa54f0c4495a986dd043cbd0afbf30ab
BLAKE2b-256 d7478200c779f80ad2d60d8612b29d8c9fe40b7a0191cd23f5210f5e9cfae5dd

See more details on using hashes here.

Provenance

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