Files
Jungfraujoch/image_analysis
jungfrauandClaude Opus 5 b380da2a91 Judge the refined pass against the pre-pass on the same footing
The two-pass guard rolls back to the header geometry when the refined pass looks worse than the
pre-pass, and one of its three tests is a drop of more than 0.05 in CC1/2. Since the pre-pass stopped
fitting its correction surfaces - it exists to pick a space group and post-refine the geometry, and
its intensities are discarded - the two sides of that test were no longer measuring the same thing:
the pre-pass's CC1/2 came out uncorrected and the refined pass's corrected. On one crystal here that
flattered the refined pass by 0.008, and it is the wrong direction to be careless in, because it
makes the guard slower to fire on a pass that really is bad.

So measure the refined pass's CC1/2 before its surfaces are applied as well, and compare that. It
cannot be had from the half-set accumulate alone, which was the cheap thing to hope for: CC1/2
correlates half-set means built on the error model's sigmas over the reflections the automatic
resolution cutoff kept, so an accumulate on its own is a different quantity - and one biased low,
which would make the guard fire too eagerly. It takes the same merge the pre-pass now does, without
the statistics tail, before the surfaces run.

That is one extra merge on the one pass that has surfaces, so a caller asks for it explicitly rather
than paying for it by default: the two-pass driver does, --mode scale does not, because there is no
other pass to compare against. Where the caller wants it but nothing was corrected anyway, the merge
that already ran IS the uncorrected one and is reported as such; where nobody asked, the field stays
absent rather than being filled in from the statistic that reads almost the same and is not.

Also make the final in-symmetry merge unconditional, with P1 when no group was determined. The
comment there has always said P1 stands in that case and the condition did the opposite, which
would have written a search merge - zeta-filtered, ice-excluded, uncorrected - as the result. It
turns out to be unreachable: with any reflections at all the search returns a group, because no
symmetry leaves the identity point group whose representative is P1, a group with no screws or
centering leaves a symmorphic candidate that has no absences to contradict and so is always
eligible, and an empty merge throws in both engines before the search sees it. The two lines keep
that promise here instead of resting on eligibility gates in another file that a later change could
tighten without noticing what leaned on them; the reasoning is written at the site.

Battery unchanged on all 24 crystals - same space group, reflection count and R_meas as the run
before it - and the merged output is byte-identical on three crystals spanning the regimes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011n8riB6X59oRjkrSHzNPAU
2026-08-23 14:53:39 -04:00
..
2026-06-08 08:30:35 +02:00
2026-08-13 17:03:10 +02:00
2026-08-13 17:03:10 +02:00
2026-07-19 09:39:28 +02:00
2026-07-13 13:54:03 +02:00
2026-07-03 19:18:56 +02:00
2026-07-03 19:18:56 +02:00
2026-08-13 17:03:10 +02:00
2026-08-13 17:03:10 +02:00