You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
ACOM: 7 of 200 off-grid recoveries land 36 or 60 degrees away #8
Zone axes whose centrosymmetric pattern has a symmetry of its own; not separable on spots alone. A pattern between templates in a sparse corner of the zone is untested. Metal is not faster than all CPU cores up to 1 024 patterns at 600 axes; 16 384 patterns and 2 400 axes are for the nightly.
Conclusion: the cause is inherent pseudo-symmetry, not a kit defect. All 7 large failures are coincidence twins of the truth (sigma 3 and sigma 5). Their kinematic patterns at 200 kV are nearly identical, and py4DSTEM shares the ambiguity. No matcher change. Test and docs are in #46.
Hypotheses and what would refute each
Hypothesis
Refuted if
Result
Pseudo-symmetric twin patterns
The truth and the wrong winner have clearly different patterns (overlap well below the winner's score)
Confirmed: overlap 0.95 to 1.0000
Orientation-grid density
The cases go away with 4x the zone axes
Refuted: 7 left at 2400 axes
In-plane resolution
The cases go away with 512 bins or refinement
Refuted: 4 left at 512 bins, 3 at 512 bins with 2400 axes, the same 7 with the parabola refinement
Correlation tie-breaking
The winner and the best correct candidate tie in score
Refuted: the test takes the minimum angle over the 24 proper operators itself
Experiment
The setup is the 200 seeded plants of ACOMOffGridRecoveryTests: Al, m-3m, 600 axes, 128 bins, the apps' curvature model at 200 kV. For each failure above 10 degrees, I measured four things:
The best correct candidate: the best real-space correlation over every template, both passes and every bin whose orientation is within 3 degrees of the truth.
The exact twin: the truth turned by exactly 60 degrees about a <111> or 36.87 degrees about a <100>, taking the twin nearest the winner.
The overlap of the exact truth pattern with the exact twin pattern in the matcher's own polar image.
The score of a template built at the exact (off-grid) truth beam direction.
case
error (deg)
twin
beam near
winner to exact twin (deg)
winner score
best correct
truth-twin overlap
exact-truth template
8
36.8
36.87 about <100>
<013> 1.9 deg
0.5
0.9958
0.9875
0.9988
0.9672
37
59.2
60 about <111>
<112> 4.4 deg
1.6
0.9773
0.9744
0.9987
0.9754
126
37.3
36.87 about <100>
<013> 3.6 deg
1.0
0.9384
0.9306
0.9526
0.9418
141
59.2
60 about <111>
<112> 4.4 deg
0.9
0.9850
0.9843
0.9945
0.9507
150
59.9
60 about <111>
<112> 4.1 deg
0.5
0.9864
0.9650
0.9979
0.9697
181
59.7
60 about <111>
<112> 2.6 deg
0.3
0.9989
0.9932
1.0000
0.9830
190
59.7
60 about <111>
<112> 3.3 deg
1.2
0.9879
0.9830
0.9996
0.9845
Failures above 10 degrees, on the same plants:
setting
failures
128 bins, 600 axes
7
128 bins, 2400 axes
7
512 bins, 600 axes
4
512 bins, 2400 axes
3 (all twins, overlap 0.9992 to 1.0000)
128 bins with refinement
7
10x wavelength
0
Mechanism
60 degrees about <111> and 36.87 degrees about <100> are the sigma 3 and sigma 5 coincidence rotations. The beams of the failing plants lie near <112> and <013>, zones whose plane contains that <111> or <100>. The twin therefore maps the zero-order Laue zone onto itself (with the zone's own mirror), and both orientations excite the same spots.
The flat-sphere part of the excitation error, g.n, enters the envelope squared, so it cannot tell g from -g. Only the curvature term, lambda |g|^2 / 2 (about 0.003 1/A at 200 kV, further damped by the 0.25 intensity power), separates the twin from the truth. That separation (1 minus the overlap: 0 to 5 %) is smaller than what the grid and bin quantisation costs the correct candidate (1.5 to 5 %), so the twin can win. With 10x the wavelength the curvature term separates them and no case is left.
py4DSTEM (pinned f050d207)
I generated py4DSTEM patterns of the 7 truths and their twins with its own model at 200 kV, ran orientation_plan over the m-3m zone at 2 degree steps, then match_single_pattern:
On the truth patterns it picks the twin in 3 of 7 (cases 8, 126, 181).
On the twin patterns it picks the truth in the other 4 (cases 37, 141, 150, 190).
That is 7 of 14 matchings on the wrong twin. The detector overlap of truth and twin in its model is 0.78 to 0.999. Its curvature sign is the opposite of the apps' model, which is why its choices flip between the truth and the twin, but the ambiguity is the same.
Next step
Nothing to fix in the matcher. Badges stay validation: "none".
A consumer that needs to know can score the sigma 3 or sigma 5 twin of the winner and flag positions where the two are within a few percent.
Still open from this issue's body: a pattern between templates in a sparse corner of the zone, and Metal timing at 16 384 patterns and 2 400 axes.
Triage 31 Oct 2026 (Paul approved): done. The 31 Oct diagnosis found the large failures are coincidence twins of the truth (sigma 3 and sigma 5) that py4DSTEM shares; the test and docs landed in PR #46. No matcher change.
Activity
Paullo9 commentedon Oct 31, 2026
Diagnosis, 31 Oct 2026
Conclusion: the cause is inherent pseudo-symmetry, not a kit defect. All 7 large failures are coincidence twins of the truth (sigma 3 and sigma 5). Their kinematic patterns at 200 kV are nearly identical, and py4DSTEM shares the ambiguity. No matcher change. Test and docs are in #46.
Hypotheses and what would refute each
reduceissue (PR #43)reduceExperiment
The setup is the 200 seeded plants of
ACOMOffGridRecoveryTests: Al, m-3m, 600 axes, 128 bins, the apps' curvature model at 200 kV. For each failure above 10 degrees, I measured four things:Failures above 10 degrees, on the same plants:
Mechanism
60 degrees about <111> and 36.87 degrees about <100> are the sigma 3 and sigma 5 coincidence rotations. The beams of the failing plants lie near <112> and <013>, zones whose plane contains that <111> or <100>. The twin therefore maps the zero-order Laue zone onto itself (with the zone's own mirror), and both orientations excite the same spots.
The flat-sphere part of the excitation error, g.n, enters the envelope squared, so it cannot tell g from -g. Only the curvature term, lambda |g|^2 / 2 (about 0.003 1/A at 200 kV, further damped by the 0.25 intensity power), separates the twin from the truth. That separation (1 minus the overlap: 0 to 5 %) is smaller than what the grid and bin quantisation costs the correct candidate (1.5 to 5 %), so the twin can win. With 10x the wavelength the curvature term separates them and no case is left.
py4DSTEM (pinned f050d207)
I generated py4DSTEM patterns of the 7 truths and their twins with its own model at 200 kV, ran
orientation_planover the m-3m zone at 2 degree steps, thenmatch_single_pattern:That is 7 of 14 matchings on the wrong twin. The detector overlap of truth and twin in its model is 0.78 to 0.999. Its curvature sign is the opposite of the apps' model, which is why its choices flip between the truth and the twin, but the ambiguity is the same.
Next step
validation: "none".Paullo9 commentedon Oct 31, 2026
Triage 31 Oct 2026 (Paul approved): done. The 31 Oct diagnosis found the large failures are coincidence twins of the truth (sigma 3 and sigma 5) that py4DSTEM shares; the test and docs landed in PR #46. No matcher change.
Generated by Claude Code