End-to-end differentiable forward model for High-Energy Diffraction Microscopy (FF, NF, pf-HEDM)
Project description
midas-diffract
End-to-end differentiable forward model for High-Energy Diffraction Microscopy (HEDM), covering far-field (FF), near-field (NF), and point-focused (pf-HEDM) geometries. Pixel-exact agreement with the canonical C reference simulators in MIDAS.
Companion paper: Sharma, Zhang, Andrejevic & Cherukara, An End-to-End Differentiable Forward Model for High-Energy Diffraction Microscopy, IUCrJ (in preparation, 2026).
Installation
pip install midas-diffract # core forward model + losses + optimizer
pip install midas-diffract[hkls] # also installs midas-hkls for the
# pure-Python reflection-list helper
Optional PyTorch CUDA or MPS back-ends are used automatically if available.
Quick start
import torch
import midas_diffract as md
from midas_hkls import Lattice, SpaceGroup # optional, see [hkls]
# Detector + scan geometry
geom = md.HEDMGeometry(
Lsd=1_000_000.0, # um
y_BC=1024.0, z_BC=1024.0,
px=200.0,
omega_start=0.0, omega_step=0.25, n_frames=1440,
n_pixels_y=2048, n_pixels_z=2048,
min_eta=6.0,
wavelength=0.172979, # Angstroms
)
# Reflection list: either compute from a SpaceGroup + Lattice via the
# midas-hkls helper, or supply (hkls_cart, thetas, hkls_int) yourself
# (e.g. parsed from MIDAS GetHKLList output).
sg = SpaceGroup.from_number(225) # FCC
lat = Lattice.for_system("cubic", a=4.08) # Au
hkls_cart, thetas, hkls_int = md.hkls_for_forward_model(
sg, lat, wavelength_A=geom.wavelength, two_theta_max_deg=15.0,
)
model = md.HEDMForwardModel(
hkls=hkls_cart, thetas=thetas, geometry=geom, hkls_int=hkls_int,
)
# Forward pass: grain state -> predicted spots. All inputs are leaves
# of the autograd graph.
euler = torch.tensor([[45.0, 30.0, 60.0]], requires_grad=True) * (3.14159 / 180)
pos = torch.tensor([[0.0, 0.0, 0.0]], requires_grad=True)
latc = torch.tensor([4.08, 4.08, 4.08, 90.0, 90.0, 90.0], requires_grad=True)
spots = model(euler, pos, lattice_params=latc)
# Scalar loss -> gradients w.r.t. orientation, position, lattice
loss = ((spots.omega * spots.valid) ** 2).sum()
loss.backward()
Output modes
md.HEDMForwardModel.predict_spot_coords(spots, space="angular")— returns(2θ, η, ω)in radians for each valid reflection (FF and pf-HEDM).md.HEDMForwardModel.predict_spot_coords(spots, space="detector")— returns(y_pixel, z_pixel, frame_nr)in fractional units (FF and pf-HEDM).md.HEDMForwardModel.predict_images(spots, ...)— renders a differentiable 3D detector volume via Gaussian splatting (NF-HEDM output mode).
Validation
The forward model has been validated to pixel-exact agreement against the
canonical C simulators ForwardSimulationCompressed and simulateNF in the
MIDAS distribution. See the companion paper and the MIDAS repository
fwd_sim/paper/ directory for reproducibility scripts.
Scope
midas-diffract v0.1.0 is deliberately focused on the forward model and its
gradient chain. The following capabilities build on this substrate and are
released separately as they mature:
- Sub-voxel grain mixtures
- Physics-informed regularisation
- Bayesian uncertainty quantification via HMC / variational inference
- Temporal 4D-HEDM tracking
- Coupling to differentiable crystal plasticity (JAX-FEM)
- EM spot ownership for ambiguous FF patterns
Citation
If you use midas-diffract in published work, please cite the companion paper.
Licence
BSD-3-Clause.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file midas_diffract-0.1.0.tar.gz.
File metadata
- Download URL: midas_diffract-0.1.0.tar.gz
- Upload date:
- Size: 56.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
42b5ae804286e43916ff6a6a8a658f0cf458668d70cb51c62b62066c2a079d72
|
|
| MD5 |
56f9ac2e3a00cd119f61cbb1f0c80235
|
|
| BLAKE2b-256 |
09a20ad73b70ce00f1a0b7c7bbbf538ca5d6d0d474ccbea1e61d068aaf7d3c38
|
Provenance
The following attestation bundles were made for midas_diffract-0.1.0.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_diffract-0.1.0.tar.gz -
Subject digest:
42b5ae804286e43916ff6a6a8a658f0cf458668d70cb51c62b62066c2a079d72 - Sigstore transparency entry: 1397479048
- Sigstore integration time:
-
Permalink:
marinerhemant/MIDAS@c6828f52154681a30609088c27370d7ddddc19e3 -
Branch / Tag:
refs/tags/midas-diffract-v0.1.0 - Owner: https://github.com/marinerhemant
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-packages.yml@c6828f52154681a30609088c27370d7ddddc19e3 -
Trigger Event:
release
-
Statement type:
File details
Details for the file midas_diffract-0.1.0-py3-none-any.whl.
File metadata
- Download URL: midas_diffract-0.1.0-py3-none-any.whl
- Upload date:
- Size: 32.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f1e4e303febaed6f9fa6909f1c0856b3be71ed09e3cd164e27c656a370cb07d
|
|
| MD5 |
6f2026ca4d5c9121641071883a8d19fd
|
|
| BLAKE2b-256 |
fa090fa79cb3cfef8cb215a9d797b8f49727255cebee271988b3d0d32c34cda0
|
Provenance
The following attestation bundles were made for midas_diffract-0.1.0-py3-none-any.whl:
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_diffract-0.1.0-py3-none-any.whl -
Subject digest:
1f1e4e303febaed6f9fa6909f1c0856b3be71ed09e3cd164e27c656a370cb07d - Sigstore transparency entry: 1397479052
- Sigstore integration time:
-
Permalink:
marinerhemant/MIDAS@c6828f52154681a30609088c27370d7ddddc19e3 -
Branch / Tag:
refs/tags/midas-diffract-v0.1.0 - Owner: https://github.com/marinerhemant
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-packages.yml@c6828f52154681a30609088c27370d7ddddc19e3 -
Trigger Event:
release
-
Statement type: