midas-fit-grain
PyTorch single- and multi-grain refiner. Drop-in replacement for the C executables
FitPosOrStrainsOMP / FitPosOrStrainsGPU in MIDAS FF-HEDM.
Status: 0.2.x — sparse-output pre-allocation fix (trailing-skipped seeds
no longer truncate OrientPosFit / FitBest / ProcessKey) and
vectorized pixel-residual fast path (~N_g× fewer kernel launches per LM
iteration vs the per-grain Python loop). Park22 + datasetC CP-Ti real-data
validated. The C path remains the ff_MIDAS default;
this package is opt-in via --refine-backend python.
Notebooks
Worked-example Jupyter notebooks live in notebooks/. They are not shipped with pip install — get them by cloning the MIDAS repository.
What it does
For each grain in SpotsToIndex.csv:
- Reads matched spots from
ExtraInfo.binand the seed orientation fromBestPos_*.csv(the indexer's per-spot output). - Refines 12 parameters: position (3) + Bunge Euler (3) + lattice (6).
- Writes byte-identical
OrientPosFit.bin/FitBest.bin/Key.binconsumed by the existingff_MIDAS.pymerge stage.
Solvers
--solver {lbfgs,adam,lm,nelder_mead} — default lbfgs.
Loss functions
--loss {pixel,angular,internal_angle} — default pixel.
| Loss | Residual | Equivalent C function |
|---|---|---|
pixel |
(y, z) pixel positions on detector |
FitErrorsPosT (FitPosOrStrainsOMP) |
angular |
(2θ, η, ω) in radians |
optimize_single_grain (midas-diffract) |
internal_angle |
angle between ĝ_pred and ĝ_obs (rad) |
CalcInternalAngle (FitOrientationOMP) |
Fit modes
--mode {iterative,all_at_once} — default iterative.
iterative: position → re-match → orientation → re-match → strain → re-match → joint polish (matchesFitPosOrStrainsOMPdefault behavior).all_at_once: 12 params jointly, association computed once at entry, no mid-fit re-match.
Backends
MIDAS_FIT_GRAIN_DEVICE and MIDAS_FIT_GRAIN_DTYPE follow the same precedence
contract as midas-index (cuda > mps > cpu auto-detect; f64 on CPU,
f32 on accelerators). Per-grain refinement is batched into a single forward
call across the block, so scaling depends on B × S (grains × spots/grain),
not per-grain Python overhead.
CLI
midas-fit-grain paramstest.txt <blockNr> <numBlocks> <numLines> <numProcs> \
[--solver lbfgs] [--loss pixel] [--mode iterative]
Argv shape mirrors the C binary so the ff_MIDAS subprocess line is one-for-one.
Metadata
Release files for midas-fit-grain 0.10.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_fit_grain-0.10.0.tar.gz | 220.1 kB | Details |
Release files / midas_fit_grain-0.10.0.tar.gz
| Download URL | midas_fit_grain-0.10.0.tar.gz |
|---|---|
| Size | 220.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b453780583aa46c6fab8d194279d0e40086426fac46101f233262d1a468459c1
|
|
BLAKE2b-256 checksum How to use checksums |
b05e3b30cf503187649bb4263aecacdb985baad7e4d5f0eedbbfdf6f032eb99e
|
| 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 Aug 30, 2026.
Transparency log