Two F432 crystals (a~70.2 A) that diffract only to ~4-4.5 A on a detector
reaching ~1.5 A failed to process de-novo. Three independent, physically
motivated fixes, validated on the 24-crystal rotation_test battery with zero
regressions (every other crystal keeps its cell, indexing rate and space group):
1. Per-frame indexing gate (AnalyzeIndexing): the indexed-fraction denominator
counted every found spot, but for these crystals ~85% of spots are
unindexable sub-diffraction ice/noise, making the 20% floor unreachable so
every frame was rejected (0% indexed). Count only spots within the resolution
range the lattice actually diffracts to (out to the highest-resolution indexed
spot). This can only shrink the denominator, so it never rejects a frame that
passes today. Fixes Benas_3 (0 -> 40%, correct F-cubic -> H32).
2. First-pass rotation indexing now runs multiple sampling schemes and selects
the one that indexes the most frames on the real per-image path (spread over
the whole rotation vs a consecutive wedge from the clean start). The
long-standing spread scheme wins for typical crystals (unchanged), while the
consecutive wedge keeps a reflection's rocking curve continuous across frames
so the FFT can trace a long axis whose fine reciprocal spacing the coarse
spread cannot resolve. Fixes Benas_7 (garbage cell 0.06% -> correct hex 69%).
Scheme selection reuses ProcessImage's indexing path (extracted as
DetermineRefineAnalyze / IndexFrameOnly) so validation cannot diverge from
production.
3. Space-group-search resolution gate (Rugnux): the <I/sigma> >= 1 cut collapsed
to ~the cell dimension when every shell is below the threshold (I/sigma floored
by the error model though CC1/2 is high), leaving the re-merge with no
reflections -> "resolution calculation failed" crash. Only cut when a good
low-res region exists above the cutoff.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>