TwinZoneVerdict: no verdict where the control is compressed beyond a perfect twin
RESULT-CHANGING.
AnalyzeTwinImmuneZones flags zones_ambiguous when the acentric control reads more compressed
than a perfect twin's 0.541 by three standard errors: no twin fraction can do that, so something
else (overlapping spots, neighbour correlation) averages reflections with unrelated ones, it
compresses the zones too, and a genuine centric zone then reads acentric. SearchSpaceGroup's own
zone gate already skips such a reading, and the struct documents that no verdict is read from it
either way - but Rugnux's TwinZoneVerdict still returned -1 on it, only noting the ambiguity in
its text, and so let a refusal stand on a zone it had just called uninformative.
9zmu (deposited P6522, c ~493 A, 95% of predicted spots overlap a neighbour) regressed in rc176
from P6122 (enantiomorph, pass) to P321: its P1 <|L|> of 0.394 (overlap, not twinning - second
moment 2.23; the model's twin fraction 0.08 and R-free 0.287 twinned or not) put it in the
partial-twin band, so since 7c1befd48 the search asks the zone of the holohedral 622 too. On the
Lorentz-filtered merge the control read 0.552 +- 0.002 (just inside the twin range) and the zone
-1378 nats, so that arm refused 622; the all-observation arm confirmed it, and the arbitration
read the zone on the all-observation merge: control 0.513 (ambiguous), zone -319 nats, verdict
-1, refusal stands, P321. Now that reading is undecided, the rule stays as before the zone was
asked, and the all-observation 622 is taken: P6122 again, R-free 0.2825 (as rc175).
Changed: 9zmu P321 -> P6122 (pass). Unchanged against rc176 run 20261017-1924 (space group,
verdict, ISa, R-free identical): 3r6o I41, 8c3e P321, 3mc4 R3, and every other open set whose
rc176 log has REFUSED / twin-immune / "Twinning indicators BEFORE" (2wnn 4bwl 5ebi 5j23 6fid
6iu6 6iu8 6iu9 6p8j 6pxb 6pxc 6vww 6z9g 6zqr 7k1l 7kcn 8xte 8xtg 9fcf 9hnc 9hs7 9i80 cuhf2),
20 random passing open sets (2wnz 3p85 5jvn 6cdl 6f3p 6u7g 6zr0 7n2s 7orr 7os3 7ou1 7tcd 8egn
8xbp 8y74 9min 9rp9 9t6s 9v16 9yzk) and the five in-house sets with a TWIN_ZONE_DECISION.
In rc176 9zmu was the only set whose decisive zone verdict was an ambiguous one.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4
This commit is contained in:
@@ -48,7 +48,7 @@ Both search merges also drop the **frames whose fitted per-frame scale came out
|
||||
|
||||
**Centering** is accepted when the systematically-absent class is weak relative to the present one by *either* of two floor-independent tests: its mean signed $I/\sigma$ well below the present mean, *or* its rate of individually-significant reflections well below the present class's own significant rate. The second test covers weak and low-energy data, where a positive intensity floor (background and profile leakage) lifts the absent class's mean $I/\sigma$ well above zero and, when the present class is itself weak, carries the plain mean ratio past its bound; a false centering fails both tests, its absent class being as strong as the present one. When several centerings pass they are ranked by a **Beta-tail likelihood** rather than by a count of net absences: a count lets a centering that extinguishes many more reflections out-rank one that violates far fewer, and the likelihood weighs the violations against the class each belongs to instead. The acceptance bounds above are unchanged by that ranking.
|
||||
|
||||
**A confirmed promotion that is refused is decided by the twin-immune zone of its added operators, and only where that is undecided by merging under it.** The zone (§13.2) is the one reading that does not depend on the per-frame scales or on a reference operator: read on the all-observation P1 merge where the two search arms disagree, and on the adopted group's own merge at the remerge, an index-2 promotion whose calibrated zone evidence is acentric by 20 nats stays refused — on all observations, and the first added operator is recorded as the twin law — and one whose zone is centric by 20 nats is taken. Where the zone cannot decide (a higher index, no zone reflections in the shells with signal, within the margin), the merge is asked. Every gate that refuses a *confirmed* higher point group is a **ratio** — the added operators' disagreement against the parent's, or their $R$ against the best-agreeing operator anywhere — and both references are properties of how the crystal was mounted rather than of its symmetry. A 2-fold within a degree of the spindle records its mates on the same detector pixel half a turn later, so it carries no geometry-dependent systematic at all, and by being that clean it makes every other operator look bad against it; the best-agreeing operator can also be one of the operators under test, which collapses the ratio on worse data and raises it on better. So where a promotion is confirmed and then refused, the **merge** is asked instead of the ratio. Both groups are scaled and merged over one pinned resolution range — the adopted group's own cut — and the promotion is taken only if **neither $R_\mathrm{meas}$ nor ISa gets worse**. $R_\mathrm{meas}$ is multiplicity-corrected, so folding non-equivalent reflections together has to inflate it, and the error model is refitted per merge, so ISa says whether the extra multiplicity was bought with systematic disagreement. $CC_{1/2}$ and $\langle I/\sigma\rangle$ cannot arbitrate this: both *rise* on a false promotion too. Two details the comparison turns on: the refused point group's representative is primitive and symmorphic, so the arm merged under it takes the **adopted group's centring** — merged in the bare representative, a centred crystal is handed its centring-absent class as data, which inverts the decision — and the absence stage is asked of the adopted merge, so both arms carry the same absence classes and differ by the added rotations alone. That merge no longer holds the adopted group's screw-absent axial reflections, so the higher group also **keeps the screws the adopted group decided** — among the higher candidates the merge cannot separate, the one that predicts every such axial absence is taken — rather than the lowest-numbered one, which claims none. The cost is two extra merges, and only on a run that records a refusal, which is a few in a hundred.
|
||||
**A confirmed promotion that is refused is decided by the twin-immune zone of its added operators, and only where that is undecided by merging under it.** The zone (§13.2) is the one reading that does not depend on the per-frame scales or on a reference operator: read on the all-observation P1 merge where the two search arms disagree, and on the adopted group's own merge at the remerge, an index-2 promotion whose calibrated zone evidence is acentric by 20 nats stays refused — on all observations, and the first added operator is recorded as the twin law — and one whose zone is centric by 20 nats is taken. Where the zone cannot decide (a higher index, no zone reflections in the shells with signal, within the margin, or an acentric control more compressed than a perfect twin's 0.541 — something other than a twin, the overlapping spots of a long axis, then compresses the zone too and a genuine one reads acentric), the merge is asked. Every gate that refuses a *confirmed* higher point group is a **ratio** — the added operators' disagreement against the parent's, or their $R$ against the best-agreeing operator anywhere — and both references are properties of how the crystal was mounted rather than of its symmetry. A 2-fold within a degree of the spindle records its mates on the same detector pixel half a turn later, so it carries no geometry-dependent systematic at all, and by being that clean it makes every other operator look bad against it; the best-agreeing operator can also be one of the operators under test, which collapses the ratio on worse data and raises it on better. So where a promotion is confirmed and then refused, the **merge** is asked instead of the ratio. Both groups are scaled and merged over one pinned resolution range — the adopted group's own cut — and the promotion is taken only if **neither $R_\mathrm{meas}$ nor ISa gets worse**. $R_\mathrm{meas}$ is multiplicity-corrected, so folding non-equivalent reflections together has to inflate it, and the error model is refitted per merge, so ISa says whether the extra multiplicity was bought with systematic disagreement. $CC_{1/2}$ and $\langle I/\sigma\rangle$ cannot arbitrate this: both *rise* on a false promotion too. Two details the comparison turns on: the refused point group's representative is primitive and symmorphic, so the arm merged under it takes the **adopted group's centring** — merged in the bare representative, a centred crystal is handed its centring-absent class as data, which inverts the decision — and the absence stage is asked of the adopted merge, so both arms carry the same absence classes and differ by the added rotations alone. That merge no longer holds the adopted group's screw-absent axial reflections, so the higher group also **keeps the screws the adopted group decided** — among the higher candidates the merge cannot separate, the one that predicts every such axial absence is taken — rather than the lowest-numbered one, which claims none. The cost is two extra merges, and only on a run that records a refusal, which is a few in a hundred.
|
||||
|
||||
**On a merge that reads twinned, the search asks the zone itself.** A twin of an index-2 subgroup by exactly the operators a promotion adds defeats every agreement gate once its fraction is high — the added operators then agree like real ones — so where the P1 merge's $\langle|L|\rangle$ lies in the partial-twin band (0.375 to 0.44), the candidate is refused when the twin-immune zone of one of its index-2 subgroups reads acentric by 20 nats. That holds for a candidate that is the whole symmetry of its lattice too: the subgroup's twin law is one of the candidate's own operators, so a crystal in 4 twinned by $k,h,\bar{l}$ is exactly such a twin of 422. Below 0.375 something other than a twin compresses the intensities, the zones with them, and they are not read. A $P3_1$ crystal twinned at $\alpha \ge 0.4$ by its 321 law, whose 32 promotion every agreement gate passed, reads −230 nats there; a body-centred crystal in 4 twinned at about 0.3, promoted to 422 at an $H$ ratio of 1.51, −58 nats. Between two candidates of the same order the one whose own two-folds carry screw absences is preferred, but an axial row whose odd class a lattice centring extinguishes is not counted where the merge reads that centring in its general reflections: on a body-centred crystal every principal row reads extinct whatever the two-folds are, which would hand 222 the tie over 4.
|
||||
|
||||
|
||||
@@ -136,7 +136,13 @@ namespace {
|
||||
return 0;
|
||||
}
|
||||
const auto &zone = z.zones[0];
|
||||
const int verdict = zone.calibrated_evidence_nats <= -DECISIVE_NATS ? -1
|
||||
// Where the control reads more compressed than any twin can make it (zones_ambiguous), something
|
||||
// else - the overlapping spots of a long axis - compresses the zone as well, and a genuine zone
|
||||
// reads acentric: no verdict either way, as SearchSpaceGroup's own zone gate reads it. A 622
|
||||
// crystal with a very long axis, 95% of its spots overlapping and its control at 0.513, read its
|
||||
// genuine 2-folds at -319 nats and had the refusal of 622 stand on it.
|
||||
const int verdict = z.zones_ambiguous ? 0
|
||||
: zone.calibrated_evidence_nats <= -DECISIVE_NATS ? -1
|
||||
: zone.calibrated_evidence_nats >= DECISIVE_NATS ? +1 : 0;
|
||||
const std::string text = fmt::format(
|
||||
"{} over {}: operators {}; n {} <|E^2-1|> {:.3f} +- {:.3f} (control {:.3f}, {:+.3f} nats per "
|
||||
@@ -146,8 +152,8 @@ namespace {
|
||||
zone.standard_error, z.control.mean_abs_e2_minus_1, z.control_excess_per_reflection, z.twin_fraction,
|
||||
zone.evidence_nats, zone.calibrated_evidence_nats, z.d_max_A, z.d_min_A,
|
||||
z.tncs_normalised ? ", normalised per pseudo-translation class" : "",
|
||||
verdict < 0 && z.zones_ambiguous
|
||||
? "acentric, but the control is compressed beyond a perfect twin, so genuine symmetry would read so too"
|
||||
z.zones_ambiguous
|
||||
? "undecided - the control is compressed beyond a perfect twin, so genuine symmetry would read as the zone does"
|
||||
: verdict < 0 ? "acentric, the added operators are a twin law or a pseudo-symmetry"
|
||||
: verdict > 0 ? "centric, the added operators are real" : "undecided");
|
||||
// Recorded only where the zone DECIDED something. An undecided read decides nothing - the
|
||||
|
||||
Reference in New Issue
Block a user