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 + Wenxi 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.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file midas_fit_grain-0.5.6.tar.gz.
File metadata
- Download URL: midas_fit_grain-0.5.6.tar.gz
- Upload date:
- Size: 156.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
23672644f58a4b9aa77768e2d017f39950e758b1aa5a6bd371ff8f0b1b581e39
|
|
| MD5 |
c7de7f06af30afaf0b7c353f74247f4b
|
|
| BLAKE2b-256 |
91f67fe8d520c2c998c96595afb11778db0923d5100cc22e6d6e299d3f587723
|
Provenance
The following attestation bundles were made for midas_fit_grain-0.5.6.tar.gz:
Publisher:
python-packages.yml on marinerhemant/MIDAS
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
midas_fit_grain-0.5.6.tar.gz -
Subject digest:
23672644f58a4b9aa77768e2d017f39950e758b1aa5a6bd371ff8f0b1b581e39 - Sigstore transparency entry: 2282300299
- Sigstore integration time:
-
Permalink:
marinerhemant/MIDAS@195fec29ce286a0bddcdf65747234186d1f06a5e -
Branch / Tag:
refs/tags/midas-fit-grain-v0.5.6 - Owner: https://github.com/marinerhemant
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-packages.yml@195fec29ce286a0bddcdf65747234186d1f06a5e -
Trigger Event:
release
-
Statement type: