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.

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.1.0 — alternating engine production-ready, joint engine scaffolded.

See AutoCalibrate.md for the manual and calibrate_torch_implementation_plan.md for the full design and roadmap.

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: midas_calibrate-0.2.2.tar.gz
  • Upload date:
  • Size: 21.1 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.2.tar.gz
Algorithm Hash digest
SHA256 3e908a935136e3224ff5d61fca0e64c71d2e363baf4e36bec0c668ab0bb6833c
MD5 c0b362576ca5fdc9bb064d7654312be4
BLAKE2b-256 0bbd46fa1b4e00653083e1fde29e7f6629f069e99aba6147d024a6eef721ccaa

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: midas_calibrate-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 21.1 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f0cc86b08e8ca43a44e8f32d3351f07188ee8fbc3f73235861c81a342520e58c
MD5 a5f5fe5c257e913749430beca244a0b2
BLAKE2b-256 3e6f3a1c4f9d1b45781a426e446daa26be80197b6192facd2a4514aa0583082d

See more details on using hashes here.

Provenance

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