DEV Community

Cover image for cryoval: CPU-only validator for cryo-EM/ET maps
Fenix
Fenix

Posted on

cryoval: CPU-only validator for cryo-EM/ET maps

cryoval: CPU-only validator for cryo-EM/ET maps

A reconstructor-agnostic linter that checks cryo-EM/ET maps for overfitting, particle-picking bias, and local map-noise hallucination — before you trust a deposited or generated map.

The gap

Reconstruction ecosystems (RELION, Scipion, Topaz, IsoNet) are plentiful; an open-source, reproducible layer that audits a produced map against the data is not. As of the 2026-07-11 batch scan, the GitHub count for a "cryo-EM map validation tool" was 0.

What it does

cryoval reads the JSON you produce with your reconstrucor and applies four rules:

  • R1 — Cross-validation (FSC): reported resolution vs FSC=0.143 between half-maps inconsistent => FAIL.
  • R2 — Benchmark correlation (POPSICLE): low IoU/precision vs a standardized cryo-ET benchmark => FAIL (skipped without benchmark data).
  • R3 — Particle-picking bias: measurable confirmation bias in mask/signal correlation => FAIL.
  • H1 — Local map-noise hallucination (DERIVED): confidence collapses where synthetic-noise SNR is high => signals probable overfitting to noise.

Transparency note

H1 is a DERIVED rule (risk R5), proposed by the author and not extracted from a single paper. It needs experimental validation against a gold-standard FSC on real EMDB maps before promotion to a hard rule. Thresholds (FSC=0.143, POPSICLE IoU) are documented physics, not tuned to the fixtures. Fixtures use synthetic controlled maps (external-validity, not circular).

Results

  • 31 tests passing, 96.00% coverage (gate 80%)
  • CPU-only, 0 external reconstrucor invocations (AC-7)
  • AGPL-3.0-or-later

Try it

pip install -e .
cryoval check --in fixtures/ --format md
Enter fullscreen mode Exit fullscreen mode

Stack

  • Python 3.11+, Typer, NumPy
  • pytest + pytest-cov for the suite

Links


License: AGPL-3.0-or-later (c) 2026 Pedro Sordo Martinez — amurlaniakea@gmail.com

Top comments (0)