Space-group search: raise the twin-law H bound from 1.70 to 1.85

Re-measured over ~780 reports - three batteries and four de-novo
integration-radius arms - H is the only Stage-A guard that ever fires: 14
refusals on three crystals, and not one chi-squared-ratio refusal or b veto
anywhere.

Two of the three are the genuine trigonal twins, reading 1.90 and 1.91 on
every arm and 3.61-4.80. The third is a weak tetragonal crystal reading
1.73-1.80 that is not twinned: its 422 is confirmed by every operator
correlation, and three independent tests agree - our own L test on the
P2(1)2(1)2(1) merge it was demoted into, xtriage on that same merge ("no
twinning is suspected... most likely due to an NCS axis parallel to the twin
axis"), and the arithmetic that a twin at the implied fraction caps twin-pair
correlation at 0.55 while the four added operators score 0.84-0.90.

Its excess is the coverage limit the comment above the bound already names:
the added 422 operators exchange h and k, so they carry a systematic floor
the parent's sign-flipping 2-folds do not. The two populations therefore
collide at 1.80 and 1.90, not at 1.70, and the bound now sits at the midpoint
of that window.

Degrading the data - 4x sigma inflation, or an eighth of the sweep - drives
the ratio towards 1 and never up, and the estimator is precise (bootstrap
standard error 0.2-3.7% of the ratio), so the collision is a genuine
population overlap rather than sampling noise. That also rules out scaling
the bound by its own error, which at any useful multiple refuses half the
battery.

Inert on the shipped defaults: no crystal in the battery reads between 1.70
and 1.85 there. It changes one assignment on an experimental integration
radius, from wrong to right. The committed twin test is unaffected - genuine
promotions in that harness read 0.959-1.016 against 4.23-5.36 for its twin,
so nothing lies in the interval that moved.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CHMmeM1d489zvNFT7ZMN2P
This commit is contained in:
2026-08-25 19:17:16 +02:00
co-authored by Claude Opus 5
parent 80e10f51b3
commit 3ea1206775
+15 -1
View File
@@ -185,7 +185,21 @@ struct SearchSpaceGroupOptions {
// real merohedral twins 1.82 and 4.01. 1.25 sat INSIDE the genuine range - four genuine promotions
// already exceeded it and survived only because the two-arm rule happened to cover them, and one
// cubic case with no such cover was refused outright by a margin of 0.4%.
double max_operator_h_ratio = 1.70;
//
// Re-measured over ~780 reports (three batteries and four de-novo integration-radius arms), H is the
// only Stage-A guard that ever fires: 14 refusals on three crystals, no chi-squared-ratio refusal and
// no b veto anywhere. Two of the three are the genuine trigonal twins, reading 1.90/1.91 on every arm
// and 3.61-4.80; the third is a weak tetragonal crystal reading 1.73-1.80 whose 422 is confirmed by
// every operator correlation and which three independent tests - our own L test on the merge it was
// demoted into, xtriage on the same merge ("most likely due to an NCS axis parallel to the twin
// axis"), and the arithmetic that a twin at the implied fraction caps pair correlation at 0.55 while
// the added operators score 0.84-0.90 - agree is not twinned. Its excess is the coverage limit named
// above: the added 422 operators exchange h and k and carry a systematic floor the parent's
// sign-flipping 2-folds do not. So the populations collide at 1.80 and 1.90 rather than at 1.70, and
// the bound sits at the midpoint. Degrading the data drives the ratio towards 1, never up, and the
// estimator is precise (bootstrap standard error 0.2-3.7% of the ratio), so the collision is a real
// overlap and not sampling noise - which is also why scaling the bound by that error cannot work.
double max_operator_h_ratio = 1.85;
// The H test needs at least this many pairs on both sides to mean anything.
int min_pairs_for_h = 200;