MIDAS parameter-file registry, validator, and wizard for FF/NF/PF/RI pipelines
Project description
midas-params
Parameter-file registry, validator, and (coming soon) wizard for MIDAS FF-HEDM, NF-HEDM, PF-HEDM, and radial-integration pipelines.
Status
- Registry: FF + NF + PF + RI (~280 keys). Per-path scoping:
FF ≈ 205, NF ≈ 115, PF = FF ∪ {BeamSize}, RI ≈ 90.
(FF and PF share
MIDAS_ParamParser.c, so a key recognized by one is recognized by the other;BeamSizeis the one PF-exclusive key.) - Parser: MIDAS text format (single-entry, multi-entry, aliases, inline comments).
- Validator: 14 per-key validators, 11 cross-field rules, typo detection.
- Discovery: filename parsing, directory scan, HDF5/Zarr probing.
- Wizard: interactive + non-interactive, seeds from existing / calibration / dataset files.
- Rings: Bragg-ring geometry helper (λ + Lsd + lattice → visible ring list).
- Diagnose: LLM-ready payload (
format=json|prompt) with source + registry + pipeline context. - CLI:
validate,inspect,rings,wizard,diagnose.
Not in the registry yet
- TOMO (
TOMO/src/tomo_init.c): reconstruction-specific keys (rotation-center search, stripe removal, sinogram filters) are not modelled. Adding aPath.TOMOis a future expansion. - DT uses FF's parser byte-identically; no standalone keys to register.
Why
AutoCalibrateZarr emits a refined detector geometry file. Running a full
analysis from it requires ~25 additional parameters (sample material, rotation
scan, ring selection, indexing tolerances). Users typically copy an example
file, forget to change something, then file support tickets. This package is
the first step toward an interactive wizard + validator that catches most
common mistakes before they reach the pipeline.
Quick usage
CLI
# Check a param file
midas-params validate my_params.txt --path ff
# Same, as JSON (for CI / LLM / IDE integrations)
midas-params validate my_params.txt --path ff --json
# Auto-extract what we can from a dataset file
midas-params inspect /data/exp/sample_000042.ge3
# Non-interactive build: seed from calibration + dataset, write param file
midas-params wizard --path ff \
--out new_params.txt \
--from-calibration refined_MIDAS_params.txt \
--dataset /data/exp/sample_000001.ge3 \
--non-interactive
# Or run interactively
midas-params wizard --path ff --out new_params.txt \
--from-calibration refined_MIDAS_params.txt
# Figure out which rings fall on the detector
midas-params rings --from refined_MIDAS_params.txt --max-rings 10
# Or with CLI args
midas-params rings --wavelength 0.22291 --lsd 1000000 \
--lattice 4.08 4.08 4.08 90 90 90 --space-group 225 --rhod 200000
# Build an LLM-ready diagnosis of a broken param file
midas-params diagnose my_params.txt --path ff --format prompt > diagnosis.txt
# Paste diagnosis.txt into Claude / GPT to get explanations + proposed fixes
midas-params diagnose my_params.txt --path ff --format json > diagnosis.json
The wizard seeds values in priority order:
--from-existing file > --from-calibration file > --dataset probe > registry typical / default
Python
from midas_params import Path
from midas_params.validator import validate, format_report
report = validate("my_params.txt", Path.FF)
print(format_report(report))
if not report.ok:
for issue in report.errors:
print(f"line {issue.line}: {issue.message}")
# Structured output (every issue is a dataclass — JSON-serializable)
from dataclasses import asdict
payload = [asdict(i) for i in report.issues]
Discovery standalone
from midas_params import discover_from_file, discover_from_calibration_file, merge
# From a single raw frame
d1 = discover_from_file("/data/exp/sample_000042.ge3")
# From a refined_MIDAS_params.txt
d2 = discover_from_calibration_file("refined_MIDAS_params.txt")
# Merge with priority (earlier wins)
seeded = merge(d2, d1)
print(seeded.extracted) # e.g. {"Lsd": 1000000, "FileStem": "sample", ...}
print(seeded.confidence) # "high" / "medium" / "low"
print(seeded.source) # "param-file:refined.txt" / "dir-scan (20 files)" / ...
Architecture
registry.py — single source of truth: list[ParamSpec]
schema.py — dataclasses (ParamSpec, CrossFieldRule, ValidationIssue)
validators.py — per-key validation functions, looked up by name
crossfield.py — multi-key consistency rules
parser.py — MIDAS text format → typed dict with line numbers
validator.py — engine: walks registry + rules, produces ValidationReport
discovery.py — auto-extract from raw frame files / HDF5 / Zarr / param files
rings.py — Bragg ring enumeration + detector projection
wizard.py — interactive + non-interactive param-file builder
diagnose.py — LLM-ready payload builder (validator + registry + primer)
cli.py — `midas-params` entry point
Everything in the registry is JSON-serializable (no function objects), so external tools — including an LLM diagnosis layer — can consume it directly by reading the dataclasses as dicts.
Adding a parameter
- Add a
ParamSpec(...)entry inregistry.pyunder the appropriate category. - Reference validator names (strings) in
validators=(...)— resolved againstvalidators.VALIDATORSat load time. - For new cross-field rules, add a function to
crossfield.py, register it inRULES, and add aCrossFieldRule(...)declaration inRULE_SPECS.
Defaults MUST come from source, not guesses. For MIDAS_ParamParser.c the
authoritative defaults are in midas_config_defaults(). For NF inline
parsers, check the executable's C source.
Tests
cd packages/midas_params
pytest
Tests validate against real FF_HEDM/Example/Parameters.txt and
NF_HEDM/Example/ps_au.txt, so changes to those files can surface here.
Related docs
- manuals/FF_Parameters_Reference.md — full FF parameter reference (source-verified).
- manuals/NF_Parameters_Reference.md — full NF parameter reference.
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
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_params-0.3.0.tar.gz.
File metadata
- Download URL: midas_params-0.3.0.tar.gz
- Upload date:
- Size: 77.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e8890c5c8f1acc1954b51f176874199d63b918ec7f7ba3755c394f247920c2c2
|
|
| MD5 |
906e0a61d20c6ab2fe3f0685b1948545
|
|
| BLAKE2b-256 |
1934ca9a6f2f1040cc8bdbbea8be4ba63716c53859bcd1adb51c7ef714f2adde
|
Provenance
The following attestation bundles were made for midas_params-0.3.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_params-0.3.0.tar.gz -
Subject digest:
e8890c5c8f1acc1954b51f176874199d63b918ec7f7ba3755c394f247920c2c2 - Sigstore transparency entry: 1364827867
- Sigstore integration time:
-
Permalink:
marinerhemant/MIDAS@c0d4bee3d903d73fb580be4f40287938dcc91987 -
Branch / Tag:
refs/tags/midas-params-v0.3.0 - Owner: https://github.com/marinerhemant
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-packages.yml@c0d4bee3d903d73fb580be4f40287938dcc91987 -
Trigger Event:
release
-
Statement type:
File details
Details for the file midas_params-0.3.0-py3-none-any.whl.
File metadata
- Download URL: midas_params-0.3.0-py3-none-any.whl
- Upload date:
- Size: 85.3 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 |
7bf9c898d94bb8031e00488b19cfb0b21cad1b9f8d21d0d4bcb59192ed7f1877
|
|
| MD5 |
811b4365acd225c376c1e3e88437f49f
|
|
| BLAKE2b-256 |
e8619a6e5c60302a28cf4e636b8d4762187c50e87cd0323a3db77c9f15517408
|
Provenance
The following attestation bundles were made for midas_params-0.3.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_params-0.3.0-py3-none-any.whl -
Subject digest:
7bf9c898d94bb8031e00488b19cfb0b21cad1b9f8d21d0d4bcb59192ed7f1877 - Sigstore transparency entry: 1364827878
- Sigstore integration time:
-
Permalink:
marinerhemant/MIDAS@c0d4bee3d903d73fb580be4f40287938dcc91987 -
Branch / Tag:
refs/tags/midas-params-v0.3.0 - Owner: https://github.com/marinerhemant
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-packages.yml@c0d4bee3d903d73fb580be4f40287938dcc91987 -
Trigger Event:
release
-
Statement type: