Skip to main content

Pure-Python/PyTorch FF-HEDM transforms (drop-in for MergeOverlappingPeaksAllZarr / CalcRadiusAllZarr / FitSetupZarr / SaveBinData)

Project description

midas-transforms

Pure-Python / PyTorch FF-HEDM intermediate transforms — the four stages between peak-fitting and indexing in the MIDAS workflow.

Drop-in replacement for these C binaries:

C binary Python entry point
MergeOverlappingPeaksAllZarr midas-merge-peaks
CalcRadiusAllZarr midas-calc-radius
FitSetupZarr midas-fit-setup
SaveBinData midas-bin-data

Plus an end-to-end midas-transforms pipeline <zarr> that runs all four on GPU with no CSV / binary disk round-trips between stages.

Why

  • Speed. Vectorised PyTorch kernels target ≥ 1× C on CPU and 5–50× on GPU at production scale. Binning and merge are the workflow's longest tails; both are now broadcast + scatter operations.
  • Bit-matching with C. Every deterministic stage targets byte-exact output at float64. The geometry refine (DoFit==1) targets physics-meaningful tolerance via midas-calibrate.refine_geometry (LM with ADAM fallback — no NLopt, no Nelder-Mead).
  • Differentiable. All geometry parameters that flow through detector projection (Lsd, BC_y, BC_z, tx/ty/tz, p0..p14, wedge, dLsd, dP2, residual-correction map values) carry full autograd through apply_tilt_distortion — useful for joint calibration with downstream grain mapping.
  • CPU/GPU portable. Single device= switch (cpu / cuda / mps). No separate .cu codebase. No C extensions, no cibuildwheel.

Install

pip install -e packages/midas_transforms

(Until uploaded to PyPI; once released, pip install midas-transforms.)

Notebooks

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

Quick start

Per-stage CLI (drop-in for the C binaries)

midas-merge-peaks scan.zip
midas-calc-radius scan.zip
midas-fit-setup scan.zip
midas-bin-data --result-folder .

End-to-end Pipeline (intermediates stay on GPU)

midas-transforms pipeline scan.zip --device cuda --out-dir /scratch/run42

Library

from midas_transforms import Pipeline

pipe = Pipeline.from_zarr("scan.zip", device="cuda")
result = pipe.run()
result.merge        # (N, 17) on GPU
result.radius       # (N, 24) on GPU
result.fit_setup    # InputAll/Extra tensors on GPU
result.bins         # Spots/ExtraInfo/Data/nData tensors on GPU
pipe.dump("/scratch/run42")

Or use stages individually:

from midas_transforms import merge_overlapping_peaks, calc_radius, fit_setup, bin_data

merge_overlapping_peaks(zarr_path="scan.zip", device="cuda")
calc_radius(result_folder=".", zarr_params=..., device="cuda")
fit_setup(result_folder=".", zarr_params=..., device="cuda")
bin_data(result_folder=".", device="cuda")

Wiring into ff_MIDAS.py

ff_MIDAS.py accepts a --useTorchTransforms 1 flag (mirrors the existing --useTorchIndexer / --peakFitGPU flags). When set, the workflow's merge_overlaps, calc_radius, data_transform, and binning stages dispatch to the Python entry points instead of the C binaries. Outputs are byte-compatible (or numerically equivalent for the DoFit geometry refine).

Limits

  • Scanning workflows (SaveBinDataScanning, MergeMultipleScans) are out of scope here; they belong with the broader scanning pipeline.
  • ResidualCorrectionMap filename is parsed from Zarr but the per-pixel ΔR map isn't yet sampled in apply_tilt_distortion (the bilinear sampler exists; the np.fromfile(...).reshape(NrPixelsZ, NrPixelsY) load is a TODO in fit_setup/core.py).

See also

  • dev/implementation_plan.md — full design, scope, and risk register.
  • midas-peakfit — upstream peak-fitting (writes the consolidated HDF5).
  • midas-index — downstream indexer (consumes Spots.bin/Data.bin).
  • midas-calibrate — provides geometry_torch.pixel_to_REta_torch and refine_geometry (LM solver) used by fit_setup.
  • midas-hkls — upstream hkls.csv generation.

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_transforms-0.7.2.tar.gz (119.0 kB view details)

Uploaded Source

Built Distribution

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

midas_transforms-0.7.2-py3-none-any.whl (92.7 kB view details)

Uploaded Python 3

File details

Details for the file midas_transforms-0.7.2.tar.gz.

File metadata

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

File hashes

Hashes for midas_transforms-0.7.2.tar.gz
Algorithm Hash digest
SHA256 d133cf860923f996f9d21d85a56cd7ef17fcdda8318d0da177bb18314914b0ea
MD5 5c52e077bede47f0bfcb00ef2fc0d63b
BLAKE2b-256 378e457344d44846070afdbb8f264e333afae19ce27cead0b73ef19a63508c7b

See more details on using hashes here.

Provenance

The following attestation bundles were made for midas_transforms-0.7.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_transforms-0.7.2-py3-none-any.whl.

File metadata

File hashes

Hashes for midas_transforms-0.7.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8d068c03ac00e705435fa63403770ddcc4227e024584f36843e8d0ac0ae92338
MD5 4e1d6990f28b8f0ef63cc0c6c15277c0
BLAKE2b-256 e3a1a24af0d0364595a093938308f8c00c05628a8ffa7b6d6e61f7d730ec56f1

See more details on using hashes here.

Provenance

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