midas-peakfit
Differentiable PyTorch peak-fitting for FF-HEDM Zarr archives. A drop-in
replacement for PeaksFittingOMPZarrRefactor (C/OpenMP/NLopt) with the
following changes:
- Optimizer: Nelder-Mead → batched Levenberg-Marquardt on CPU/CUDA
- Backend: OpenMP → PyTorch (autograd, batched linear algebra)
- Precision: fp64 default;
--dtype float32available for speed - Output: identical binary format (
AllPeaks_PS.bin,AllPeaks_PX.bin) - CLI: drop-in compatible
The C tool is kept as the validation oracle. Output is scientifically equivalent to the C tool, not bit-exact (LM and Nelder-Mead converge to slightly different minima within the same basin).
Installation
pip install -e packages/midas_peakfit[dev]
or once published:
pip install midas-peakfit
PyTorch with CUDA support must be installed separately if GPU acceleration is desired. Follow the PyTorch install guide for the right wheel for your CUDA version.
Notebooks
Worked-example Jupyter notebooks live in notebooks/. They are not shipped with pip install — get them by cloning the MIDAS repository.
Usage
peakfit_torch DataFile.MIDAS.zip 0 1 8 # CPU/CUDA auto
peakfit_torch DataFile.MIDAS.zip 0 1 8 --device cuda --dtype float32
peakfit_torch DataFile.MIDAS.zip 0 1 8 OutputFolder 1 # explicit ResultFolder + fitPeaks
peakfit_torch DataFile.MIDAS.zip 0 1 8 \
--validate-against /path/to/c_AllPeaks_PS.bin # parity check
Positional args mirror the C tool exactly: DataFile blockNr nBlocks numProcs [ResultFolder] [fitPeaks].
New flags:
| Flag | Default | Meaning |
|---|---|---|
--device {cpu,cuda} |
cuda if available else cpu |
Compute device |
--dtype {float32,float64} |
float64 |
Numeric precision |
--batch-size N |
4096 |
Cross-frame region batch threshold |
--validate-against PATH |
— | Compare to C-produced AllPeaks_PS.bin and emit parity report |
--deterministic |
off | Force deterministic algorithms (fp64 only) |
Parity tolerances
| Field | Tolerance |
|---|---|
nPeaks per frame, pixel sets, maxY/maxZ, returnCode, maskTouched |
exact |
YCen, ZCen, Radius, diffY, diffZ |
≤ 0.05 px |
Eta |
≤ 0.02° |
IMax, IntegratedIntensity, RawSumIntensity |
≤ 1% relative |
BG, SigmaR, SigmaEta, σGR, σLR, σGEta, σLEta, MU, FitRMSE |
≤ 5% relative |
Downstream gate: indexer (IndexerOMP) on both outputs must produce identical
grain orientations within 0.05° misorientation.
Output
Two binary files in {ResultFolder}/Temp/:
AllPeaks_PS.bin— peak summary (29 columns × nPeaks per frame; seeFF_HEDM/src/PeaksFittingConsolidatedIO.hfor layout).AllPeaks_PX.bin— pixel coordinates for each peak.
These files are byte-compatible with the C tool's output and readable by
ConsolidatedPeakReader/ConsolidatedPixelReader in that header.
Tests
cd packages/midas_peakfit
pytest tests/ -v # unit tests (fast)
pytest tests/ -v -m slow # full pipeline parity (~3 min)
pytest tests/ -v -m gpu # CUDA-only tests (skip on CPU)
License
BSD-3-Clause.
Metadata
Release files for midas-peakfit 0.8.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| midas_peakfit-0.8.0.tar.gz | 174.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| midas_peakfit-0.8.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 323.0 kB
Release files / midas_peakfit-0.8.0.tar.gz
| Download URL | midas_peakfit-0.8.0.tar.gz |
|---|---|
| Size | 174.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3b17c2762c9726fff8c578676e8040cbdbd124ec6cf0592bc7f49ba70740f1be
|
|
BLAKE2b-256 checksum How to use checksums |
82aa001bb6a60c0a1a78b55a567584bd2a42afbbf3dec0265c6b925b2926a072
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.
Transparency logRelease files / midas_peakfit-0.8.0-py3-none-any.whl
| Download URL | midas_peakfit-0.8.0-py3-none-any.whl |
|---|---|
| Size | 148.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
081f9fae8efa19266cc3c4093d2c341c55f4e9ee85adde5c5826d1fa0b12f6cb
|
|
BLAKE2b-256 checksum How to use checksums |
4dde7177ef664f50690955e3ed110710be85dbe7fb091d41201328dd6a7d7c33
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.
Transparency log