Replacing the count-based GTI metric with the line/continuum invariant
- Date: 2026-09-10
- Type: refactor (metric replacement) + feature (null-distribution calibration, fault injection, holdout validation)
- Risk: high — this deprecates an already publicly published metric and changes the core claims on the public pages
- Related docs:
results/sp_gti_proposal_20260909/proposal.md(the current public document; §8.1–8.7 are the sections to be replaced)cognition-os/insights/I003_lineanchored_2p1c_temporal_qualification.md(the original design of line-anchor 2.1c; this specification continues it rather than replacing it)results/m31_mos2_variable_sp_removal_20260910_e1/variable_sp_removal.json(the receipt of the deprecated metric, retained for historical comparison)
0. Adjudication status
| # | Item | Status |
|---|---|---|
| 1 | Pareto y-axis changed from G to \(R = C_\mathrm{all}/C_K\) | Adopted (author decision, 2026-09-14) |
| 1b | The selection band is fixed to the field-of-view 2.5–8.0 keV | Adopted (author decision, 2026-09-14) |
| 1c | Observation-window upper bound 2.395 keV (93 cells × 15 eV; labels state the actual value, not 2.400) | Adopted and re-checked (author decision, 2026-09-14; leakage test in §3.3) |
| 1d | Line centroids fixed, values updated to Al-K 1.4879, Si-K 1.7466 keV | Adopted (author decision, 2026-09-14) |
| 2 | Whether to apply the line/continuum coupling correction | Pending decision, but not blocking implementation (2026-09-14). See §3.9.1 and §0.2: implementation computes and records \(\lambda\)、\(s\lambda\)、\(\delta s\,\lambda\), but not applied; gate verdict marked provisional. Switching to applied once decided is a one-line change. |
| 3 | “High \(R\) and gate-blind observations | Resolved (2026-09-14). Constraint restated as \(L_\mathrm{all} = L_K\) (§3.9), test power automatically proportional to the removed share: the original 11 UNTESTED split into 12 "trivially satisfied" and 1 genuinely untested (0800731101). No additional criterion needed. |
Implementation must not start before items 2 and 3 are adjudicated — both change acceptance-artifact fields and how the frontier plot is drawn. The planner's original recommendation for item 2 (apply the correction) has been withdrawn; see §3.9.1. Item 3 is resolved by the constraint restatement; see §3.9.
0.1 Framework overview
GTI selection for a single observation is now a constrained two-dimensional frontier problem.
- \(T_K\): retained live time (or its share \(f_T\)). The larger the better.
- \(R = C_\mathrm{all}/C_K\): the 1.000–2.395 keV continuum reduction factor. The larger the better.
- Constraint:\(L_\mathrm{all} = L_K\)— the GTI must preserve the full-interval Al-K line flux. This is the only form defined under any \(f_T\) ; the equivalent \(L_K = L_B\) becomes meaningless as the removed intervals go empty.
There is one constraint, not two, and test power comes matched. From the identity \(L_K - L_\mathrm{all} = (1-f_T)(L_K - L_B)\), the magnitude of any constraint violation is proportional to the removed share: cutting more both demands and provides test power; cutting less makes both vanish together. No artificial tolerance threshold is needed. The implementation must still compute on disjoint \(K\) and \(B\) (only in that form are the two error terms independent), but the verdict is stated on \(L_\mathrm{all}\) (§3.9).
Three energy bands with disjoint responsibilities:
| Band | Responsibility | Adjudicated |
|---|---|---|
| 2.5–8.0 keV (field of view) | independent GTI construction. Corner curve in the same band, diagnostic only, never used for selection | §0 item 1b |
| 1.000–2.395 keV | Observation window: fit out \(L_K\)、\(C_K\); the gate and the y-axis both live here | §0 item 1c |
| \(< 1.0\) keV | Science band (CGM), not involved in any selection or verdict | — |
Disjointness is the core of the design, not a coincidence:
- Overlapping the selection band with the observation window would fabricateno soft-proton variability observations, a spurious 7–8% reduction, \(+5.5\sigma\) and \(+6.1\sigma\)(§3.3)。
- Al-K sits at 1.486 keV, outside the selection band, so the gate has discriminative power; if the line fell inside the band the gate would silently always pass (measured ratios 0.907–0.939 still passing).
- The bias inside the selection band measures 7%, while below 1 keV it is consistent with zero (\(0.9965 \pm 0.0025\)、\(0.9955 \pm 0.0038\))——the science band is uncontaminated。
Why the constraint and the objective are the same coin. \(R\) increases monotonically as one cuts harder, so something must prevent pure-noise grade inflation from "picking only bins where the continuum fluctuates downward." Al-K lies inside the observation window, so such a selection also suppresses the line flux and the gate triggers on the spot — measured in the overlapping configuration, \(L_K/L_B\) dropped to 0.7680/0.8034, gate FAIL at \(-5.4\)/\(-4.6\)。The line that makes \(R\) meaningful is simultaneously the lock that prevents \(R\) from being inflated by noise.
What this framework does not answer (§3.6, §3.10): it does not measure absolute soft-proton counts; it does not identify the steady soft-proton component in the background (a constant component raises both \(C_\mathrm{all}\) and \(C_K\) together, \(R\) remains 1); \(R\)'s ceiling is set by the observation's own flare content, and it must not be averaged, ranked, or aggregated across observations。
Two open items (§0 items 2, 3): the direction and magnitude of the line/continuum coupling correction; and the cause of the residual line deficit of \(-2.2\sigma\) to \(-2.5\sigma\) that emerges after the correction — if Al-K fluorescence indeed varies with particle flux, then the constraint \(L_K = L_B\) itself is partly invalid, which is a design-level problem.
0.2 Interim freeze (2026-09-14)
This section freezes the design, not the results. After the freeze it may still be revised, but only via the same path: measure first, then edit the document, and record in the acceptance artifact what was overturned.
Frozen; implementation proceeds on this basis:
| Item | Content |
|---|---|
| Problem statement | Within one observation, find the \((T_K,\,R)\) Pareto frontier subject to \(L_\mathrm{all} = L_K\) |
| y-axis | \(R = C_\mathrm{all}/C_K\) |
| Selection | field of view 2.5–8.0 keV; corner same band, diagnostic only |
| Observation window | 1.000–2.395 keV, 93 bins × 15 eV, integer bin-count construction |
| Continuum model | log-parabola (single segment with curvature) + two Gaussians, Cash |
| Line centroid | fixed Al-K 1.4879, Si-K 1.7466 keV; the two-segment fit must not free them |
| Live time | per-bin TIMEDEL × FRACEXP; per-bin live/nominal distribution into the acceptance artifact |
| Gate | three classes: trivially satisfied / tested / genuinely untested, split by \(\max|L_\mathrm{all}/L_K-1|\) |
| all three quantities recorded | \(L_\mathrm{all}\)、\(L_K\)、\(L_B\) each with errors, plus \(f_\mathrm{line}\) per segment |
| Null distribution | permutation; analytic propagation must not be substituted |
Still open, but structured so as not to block implementation:
- Whether to apply the coupling correction (§0 item 2). Implementation proceeds normally, computing \(\lambda = \ln(C_B/C_K)\)、\(s\lambda\)、\(\delta s\,\lambda\) and writing all of them into the acceptance artifact, but not applying them to the verdict; gate conclusions marked
provisional. That way, once decided, applying or not is a one-line change, and the before/after numbers are directly comparable in the artifact. - The cause of the residual line deficit (end of §3.9.1). After the correction the retained-segment Al-K is 2.6%–4.2% below the removed segment (\(-2.2\sigma\) to \(-2.5\sigma\)). If the cause is Al-K fluorescence varying with particle flux, then the constraint \(L_\mathrm{all} = L_K\) itself is partly invalid — that is a framework-level problem, not a tolerance problem. The check is an independent task: use the corner 2.5–8.0 keV rate as a particle-flux probe (the corner lies outside the field of view and receives no focused soft protons) and test whether Al-K intensity rises with it. This task runs in parallel with the implementation; neither blocks the other.
- Cross-year stability of the line centroid. 1.4879 currently holds only for this observation set (spanning months). Cross-year checks are run independently on the full CDFS and M31 archives.Does not affect the gate (centroid error cancels within an observation, and is measured not to vary with count rate); it only affects absolute flux.
Known blanks at freeze time, which must not be silently filled in during implementation:
- \(f_T \to 0\) has no samples at one end (this set's minimum is 0.302). Handling at that end is documented (§3.9), but it is untested against data。
- The gap (1.95%–3.00%) that the 2% boundary relies on is a property of this sample, not guaranteed to be universal.
- The exclusion of fit degeneracy is only 2.2σ.
- The leakage test of the 0.1 keV buffer was done only on 2 zero controls with 400 draws.
1. Background & Goal (WHY)
The current metric A(K) = Σ(c_j − m·τ_j) and η(K) = A(K)/A_tot counts "excess counts above the background."Counting cannot in principle separate three things: real soft protons, upward Poisson fluctuations picked by rate-based selection, and overall intensity changes of the ordinary spectrum. A measured failure: on an observation with no detectable soft-proton variability (0800730201), if the band used for time selection coincides with the continuum band serving as denominator, the ratio-type statistic deviates from the permutation null by +8σ to +11σ; under a pure Poisson null, A_tot is positive in 88.4% of cases, and the nominal z≥5 false-positive rate reaches 0.5%–3.63%.
The replacement is this project's earlier line-anchored invariant:
where L is the instrumental fluorescence line intensity and C is the continuum intensity.Note that C's definition has changed in this specification:\(G\) era it was the count in a "line-free continuum window" avoiding the line via sidebands; now it is the integral of the log-parabola fit over the whole 1.00–2.20 keV, with the line/continuum split carried by the fit (§3.2). The sideband design is obsolete and must not be revived in the implementation (§4).Rate-based selection merely rescales the whole spectrum proportionally, line and continuum varying together, so G's null distribution sits at 1; only a component that "adds continuum without adding line" (exactly what soft protons do) can push it off 1. Exposure cancels inside each ratio, so G is immune to live-time accounting.
G In this specification it is further rewritten into a constrained form (§3.2): the author's goal is "keep the 1–2 keV instrumental line flux inside the GTI constant, while making the 1–2 keV continuum as low as possible." Under a valid gate these two statements are exactly equivalent to maximizing the continuum reduction factor \(R = C_\mathrm{all}/C_K\)。R replaces G as the Pareto y-axis, because G's denominator references removed intervals, whose composition changes with \(f_T\); comparing across different \(f_T\) comparisons of G is like measuring with different rulers; R's reference is fixed for a single observation.G is retained as an audit quantity.
End state:A/η is withdrawn from public documents and pages; (f_T, R) becomes the two Pareto axes, the line-flux gate becomes the admission condition; the page, per falsifiability requirements, fully displays zero controls, strong flares, intermediate states, continuum-model reconciliation, fault injection, the observation dependence of the overlap trap, gate blind spots, and holdout validation.
2. Scope (WHERE)
Files to create
scripts/m31_mos2_line_continuum_invariant.py— compute \(R\) and \(f_T\), line-flux gate (with coupling correction), permutation null distribution, train/holdout split, and write the acceptance artifact.Gis output alongside as an audit quantity, not as the frontier y-axis.scripts/m31_mos2_invariant_fault_injection.py— fault-injection matrix (see §3.7).results/m31_mos2_line_continuum_invariant_20260910_g1/— new acceptance-artifact directory (JSON + CSV).results/sp_gti_proposal_20260909/figures/add new figures (see §3.11); file names are the implementer's choice, but must start withfigand be referenced inproposal.md.
Files to modify
scripts/make_proposal_figures.py— add the figures this specification requires; deletefig9_constructionandfig10_eta_sample(they display the deprecatedA/η); fixfig8description's causal misstatement that "flares bring curvature" (measurement shows it is the quiescent spectra that need curvature).results/sp_gti_proposal_20260909/proposal.md— §8.1 replaced wholesale; §4.3 and §8.7 rewritten accordingly; remaining sections adjusted for cross-reference consistency.site/cdfs-mos-sp-audit/sp-gti-proposal.htmland its figures directory — re-render and publish.
Files NOT to touch (explicit boundary)
results/m31_mos2_frontier_transfer_20260906_r2/、..._r3/、..._20260907_a1/、..._20260908_b1/、..._20260910_e1/— historical acceptance artifacts are strictly read-only.e1Keep in particular: the new document must cite it to explain why the old metric was deprecated.scripts/m31_0800730101_mos2_line_ratio_pareto.py— the_gehrels_varianceinside is deliberately retained but annotated historical code; touching it would break reproducibility of the old acceptance artifacts.scripts/m31_mos2_variable_sp_removal.py— Do not delete, do not modify. It is the implementation of the deprecated metric and must be preserved verbatim to reproduce thee1acceptance artifact. Only append one status line to the docstring at the top of the file:SUPERSEDED by scripts/m31_mos2_line_continuum_invariant.py; retained for reproducibility of the e1 receipt.- any
.env*or configuration file.
Database changes
None.
3. Implementation Notes (HOW, coarse)
3.1 Time cells and live time
- Time-bin length 100 s, following the existing cadence (unoptimized, recorded among the open choices in §8.7).
- Each bin must compute its actual live exposure: from this observation's own
EXPOSUexpanded per time slice, takeTIMEDEL × FRACEXPand sum over bins, rather than assigning a full bin to every "bin containing at least one event."
Why "counted bins × bin width" cannot be used. The error of this estimator is usually taken to be bounded by one bin width — the missing exposure is all at the edges of exposure segments, and a bin straddling a boundary is off by at most one bin. That reasoning holds forboundaries, but it does not catch another class of bin: entirely inside the observation, containing counts, yet with only partial live time (dead time, counting-mode losses, telemetry gaps, recorded slice by slice in FRACEXP). Measured (30 observations, 100 s bins, 5395 occupied bins):
| Use | How this estimator performs | Verdict |
|---|---|---|
| Total exposure | \(+1.92\%\)(539.7 vs 529.5 ks; 1 ks differs by about 19 s) | Adequate |
| Per-bin rate: for 99.1% of bins, | systematically 2.4% low (live/nominal median 0.976) | Harmless — a uniform multiplicative factor cancels in rankings and ratios |
| Per-bin rate: for 0.9% of bins, | rate overestimated by a median of 4.87×, worst 7.8× (live/nominal minimum 0.128) | Fatal |
The transmission path is ranking: the GTI cuts bins by rate, and a bin with only 18 s of live time but normal counts, treated as a full bin, yields a 5× rate, which looks like a flare and gets pushed to the top of the rate ranking — exactly where flare removal cuts. Measured at 70% retention, 79 bins land on the wrong side of the cut line (1.46% of all bins, involving 7.9 ks of nominal time). 79 > 49 because each fake flare bin pushed up displaces a genuine bin that should have been cut — one misplacement costs two.
The deprecated metric A/η's tau = np.full(nb, CELL) is exactly this estimator, which produced \(-11.5\sigma\) of spurious line drift (e1 in the acceptance artifact, line_drift_z is therefore invalid). This error raises no error and its numbers are not absurd; it manifests only as the line slowly drifting.
Criterion: exposure whennormalizing use (total counts ÷ total time) this estimator is adequate; whendiscriminating use (ranking by rate to decide which bins to cut) true live time must be used. GTI construction is the latter.
Fallback priority (when EXPOSU is unavailable): ① TIMEDEL × FRACEXP; ② intersect bins with GTI intervals and sum — catches boundaries, but misses in-bin dead time, exactly the 0.9% tail in the table above; ③ counted bins × bin width, adequate only for total estimates.
- A diagnostic that must be output: the per-bin
live/nominaldistribution (minimum and 0.1/1/50 percentiles) written into the acceptance artifact. A minimum near 1 means the tail is absent and rate ranking is safe; once the 0.1 percentile falls to the 0.2 level, ranking is being driven by an accounting artifact.Let the estimator report itself when it cannot be used, which is more reliable than recording a rule in documentation. - Live time is used forSelection bins (rate ranking / cutting), and to convert counts into rates for fitting. It does not enter any numerator or denominator as "full bin per bin" — this is exactly where the old metric failed (
tau = np.full(nb, CELL)), and this must be stated clearly in the docstring.
3.2 Pareto ordinate: the gate-constrained continuum reduction factor
The author's goal statement is two sentences:Keep the 1–2 keV instrumental line flux inside the GTI constant, and make the 1–2 keV continuum as low as possible. This section writes it as an executable definition and explains its relation to the earlier G.
Denote a candidate GTI by \(K\),\(L\) as the Al-K line flux, \(C\) as the 1.0–2.2 keV integrated continuum flux from the same fit (both come from the same fit; the line/continuum split is decided by the fit, with no assumption that the continuum under the line equals a sideband linear interpolation; the continuum model is given below).
- Notation. \(K\) denotes the intervals retained by the candidate GTI (kept), \(B\) denotes the removed intervals (BTI). Note the distinction from the y-axis \(R\): \(R\) is the continuum reduction factor, not an abbreviation of "rejected" — early drafts of this specification used \(L_R\) for the removed-interval line flux, colliding with the y-axis letter; all such uses have been changed to \(L_B\)。
Constraint (gate):\(L_K\) agrees with the full-interval value \(L_\mathrm{all}\).
- Objective:\(C_K\) as small as possible. Equivalently, maximize
the two Pareto coordinates are \((f_T,\;R)\),\(f_T\) as the retained live-time fraction.
Continuum model: single segment, with curvature, no break. The fit window 1.00–2.20 keV lies entirely below the 3.2 keV break, so there is no break to model and one segment suffices — in this window a broken power law degenerates to a single power law, and writing "broken power law" is both meaningless and misleading, suggesting the break participates in the fit.
But this segmentcannot be a bare power law: the likelihood-ratio test rejects a single power law on quiescent spectra (\(\Delta C\) median 9.1, 17/23 exceeding 99%), and curvature is needed — from the sky Fe-L/Mg complex and the 1.84 keV Si K edge, unrelated to soft protons. Therefore takea log-parabola(a single-segment power law plus curvature term \(\beta\)):
) plus two Gaussians (Al-K 1.49 keV, Si-K 1.74 keV, shared width), Cash statistic.
A broken power law is used only for fits that cross 3.2 keV — the soft-proton injection template (§3.7 bin 2) and the spectral slope measurement of the removed component. Do not mix the two, and do not push a broken power law into this window for the sake of "model unification"; §4 already lists this as a prohibition.
Relation to G. Let \(W(K)=L_K/C_K\). With the gate satisfied, i.e. \(L_K=L_\mathrm{all}\),
so "line constant + continuum lowest" under the gateis exactly equivalent to"maximizing the continuum reduction factor."\(R\) is not an approximation of \(G\); it is the value of \(G\) on the constraint surface.
Why use \(R\) instead of \(G\)。 \(G=(L/C)_\mathrm{GTI}/(L/C)_\mathrm{BTI}\)'s denominator referencesremoved intervals, and the composition of removed intervals changes with how much is cut: \(f_T\) changes, \(G\)'s reference object changes. Comparing across different \(f_T\) comparisons of \(G\) is measuring with different rulers.\(R\)'s reference \(C_\mathrm{all}\) is fixed for a single observation, independent of the candidate \(K\); therefore different strategies within the same observation have \(R\) directly comparable — exactly what frontier drawing requires.G is downgraded to an audit quantity: still computed and recorded in the acceptance artifact, but not used as the frontier y-coordinate.
The gate is simultaneously the lock against grade inflation. \(R\) increases monotonically as one cuts harder, so something must prevent pure-noise sampling of "bins where the 1–2 keV continuum fluctuates downward." The gate is that lock: Al-K lies inside 1–2 keV, so such a selection also suppresses the line flux and the gate triggers immediately (measured: when the line falls inside the selection band, the ratio drops to 0.907–0.939).The line that makes \(R\) meaningful is simultaneously the lock that prevents \(R\)the lock that prevents R from being inflated by noise— this is a property \(G\) does not have, and is the reason for keeping the "line inside 1–2 keV" design.
Measured (archived 2.filter GTI, 30 observations, MOS2):
| Quantity | Result |
|---|---|
| \(C_\mathrm{all}\) | 0.266 – 3.538 cps, spanning 13.3× |
| \(C_K\) | 0.266 – 0.610 cps, 27 falling in 0.27–0.36 |
| \(R\) | median 1.86, range 1.000 – 12.80 |
| \(f_T\) | median 0.786 |
| Spearman \(\rho(f_T,R)\) | \(-0.850\) |
\(C_\mathrm{all}\) spans 13× while \(C_K\) converges to the same floor — direct evidence that the y-coordinate measures a true common floor rather than arbitrary per-observation normalization.\(\rho=-0.850\) indicates the two coordinates are strongly anti-correlated — the prerequisite for a frontier to exist.
3.3 Hard design rule: the selection band and the 1–2 keV fit window must not overlap
What this rule guards against. A candidate GTI sorts and cuts bins by count rate in some band. If that band coincides with \(C\) in the 1.00–2.20 keV fit window, that amounts tosampling by the denominator's own noise — some of the "quietest bins" selected are merely \(C_K\) downward Poisson fluctuations, \(R = C_\mathrm{all}/C_K\) is directly inflated, and the whole process needs not a single soft proton。
After switching to \(R\) this matters more than in the \(G\) era:\(G\) is separated by a layer of ratio, \(R\)'s denominatoris exactly the quantity being selected。
Measured (on \(R\), retention 0.70, 100 s bins, permutation null 200 draws):
| Observation | Selection band | \(R\) | Permutation null distribution | \(z_\mathrm{null}\) | \(L_K/L_B\) | Gate |
|---|---|---|---|---|---|---|
| 0800730201 (no variability) | 1.00–2.20 overlapping | 1.085 | \(1.0013 \pm 0.0137\) | +6.1 | 0.8034 | FAIL (\(-4.6\)) |
| 0800730201 | 2.50–8.00 disjoint | 0.990 | \(0.9992 \pm 0.0148\) | \(-0.6\) | 1.0530 | PASS |
| 0800730401 (no variability) | 1.00–2.20 overlapping | 1.074 | \(0.9996 \pm 0.0135\) | +5.5 | 0.7680 | FAIL (\(-5.4\)) |
| 0800730401 | 2.50–8.00 disjoint | 0.980 | \(0.9994 \pm 0.0140\) | \(-1.4\) | 0.9846 | PASS |
| 0800730101 (has flare) | 1.00–2.20 overlapping | 1.531 | \(1.0016 \pm 0.0262\) | \(+20.2\) | 1.0635 | PASS |
| 0800730101 | 2.50–8.00 disjoint | 1.533 | \(1.0002 \pm 0.0245\) | \(+21.7\) | 1.1156 | PASS |
twono detectable soft-proton variability observations, overlapping fabricates a 7–8% "continuum reduction" out of nothing, relative to the permutation null \(+5.5\sigma\) and \(+6.1\sigma\); after decoupling it returns to \(0.98\)–\(0.99\), consistent with the null distribution.
"No soft proton" must be unpacked into three layers and not used loosely. Taking 0800730201 as an example:
- no detectable variability on the 100 s scale: the 2.5–8.0 keV field-of-view light curve is consistent with a constant rate \(\chi^2/\mathrm{dof} = 1.03\) (156 full bins, \(p = 0.39\)), indistinguishable from a constant rate plus Poisson noise. For comparison: 0800730101 is 35.6, 0800732501 is 2005.
- but it does contain a small amount of real soft protons: the archived
2.filtercut two 60 s segments, which in the 2.5–8.0 keV field of view are \(1.45\times\) and \(1.63\times\)(about \(+2.7\sigma\) and \(+3.7\sigma\)) of the mean, whilethe corner in the same period is only \(0.73\times\) of the mean. Field of view up, corner not up — exactly thefocused soft proton signature rather than a particle-background rise — the purpose of the corner monitor is to distinguish these two. - the steady component is entirely invisible: if the soft proton is constant throughout the observation, \(C_\mathrm{all}\) and \(C_K\) is raised together, \(R\) remains 1. See §3.10(c).
This does not shake the conclusion in the table above, and can be quantitatively excluded. Those two segments total 260 events over 120 s, an excess of only 19.7 events over the GTI mean of 2.0022 cps, out of 31254 events in the full interval, i.e. 0.063%; whereas the overlap fabricates 8.5% reduction, a difference of 135×.\(f_T = 0.70\) discards 4.7 ks, not these 120 s. So the zero-control observation's qualification holds, but in the page and the acceptance artifact it must be written as "no detectable variability," not "no soft proton"。
Why this trap is insidious — this must be written into the page. Look at the last two rows: on 0800730101, which has a real flare, overlapping and disjoint give almost the same \(R\) (1.531 vs 1.533), and of the 188 bins selected by the two choices they share 183. The reason is that a real flare raises the count rate in both bands, so both bands agree on "which bins are bad," and the selection bias is drowned by the real signal.
So overlap specifically fabricates on control observations: on flaring data it barely changes anything, but on clean data it hands you a 6σ false signal. A process validated only on flaring observations will never find it. Fault-injection matrix bin 3 (§3.7) must run onzero-soft-proton observations, not only on flaring observations.
The observation-window upper bound is ruled: 2.395 keV. The grid is 15 eV bins from 1.000 keV, so \((2.400-1.000)/0.015 = 93.33\) is not an integer, hence 93 bins, upper bound 2.395,labels always state the actual value— earlier np.arange(lo, hi+de, de) generated one extra bin, the actual window being 1.000–2.215 while the document said 1.00–2.20; this is where that came from.
2.395 is only 105 eV above the selection band's lower edge. MOS energy resolution at 2.5 keV has FWHM ≈ 85–90 eV (\(\sigma \approx 37\) eV), so the buffer is about \(2.8\sigma\), while 2.200 gives \(7\sigma\). A thinner buffer means the selection bias mayleak across the boundary (the bands do not overlap, but redistribution is not a knife), so it must be tested independently; the 2.500 result cannot be extrapolated.
| Observation | Upper bound | Bins | Counts in window | \(R\) | Null sd | \(z_\mathrm{null}\) | \(\sigma_L/L\) |
|---|---|---|---|---|---|---|---|
| 0800730201 (no variability) | 2.200 | 80 | 8060 | 0.990 | 0.0138 | \(-0.8\) | 2.55% |
| 0800730201 | 2.395 | 93 | 8471 | 0.989 | 0.0128 | \(-0.8\) | 2.51% |
| 0800730201 | 2.500 | 100 | 8678 | 0.989 | 0.0124 | \(-0.8\) | 2.48% |
| 0800730401 (no variability) | 2.200 | 80 | 7675 | 0.980 | 0.0152 | \(-1.4\) | 2.69% |
| 0800730401 | 2.395 | 93 | 8025 | 0.980 | 0.0131 | \(-1.6\) | 2.65% |
| 0800730401 | 2.500 | 100 | 8228 | 0.979 | 0.0134 | \(-1.5\) | 2.62% |
| 0800730101 (has flare) | 2.200 | 80 | 19881 | 1.533 | 0.0265 | \(+20.1\) | 2.20% |
| 0800730101 | 2.395 | 93 | 21252 | 1.548 | 0.0261 | \(+20.9\) | 2.18% |
(400 permutation draws, retention 0.70.)
Criterion and conclusion. The signature of leakage is: on a no-variability observation with nothing real to find, \(z_\mathrm{null}\) systematically shifts positive as the window widens. Measured: entirely absent——\(-0.8/-0.8/-0.8\) and \(-1.4/-1.6/-1.5\), all three windows consistent. 2.395 is therefore safe. It captures about two-thirds of the available gain (counts \(+5.1\%\), versus 2.500's \(+7.7\%\)), while keeping the 105 eV buffer.
This gain is itself small and must be stated honestly: On the full sample, 2.2 → 2.5 tightens \(\sigma_L/L\) from 2.14% to 2.09% (median improvement 2.8%, all 12/12 observations consistently tighter), while the gate's \(\sigma_\mathrm{tot}\) is 5%–10%, no observation changes from UNTESTED to verdictable(0800731101's \(\sigma_\mathrm{ratio}\) tightens from 0.166 to about 0.158, still far from 0.10). 2.395 is chosen because it is free, not because it solves anything.
Line centroid ruled: fixed, values updated. Al-K takes 1.4879 keV, Si-K takes 1.7466 keV, replacing the original 1.486/1.740. The basis is full-interval spectra of the 30 observations fitted with the centroid free:
| Quantity | Result |
|---|---|
| \(E_\mathrm{Al}\) between observations | mean 1.4879 keV, sd 0.9 eV, full range 3.8 eV, offset from 1.486 \(+1.9\) eV |
| \(E_\mathrm{Si}\) between observations | mean 1.7466 keV, sd 4.4 eV, offset from 1.740 \(+6.6\) eV |
| Cash improvement from freeing the centroid | median 9.3 (2 extra parameters) — the assumed values are indeed off |
| line flux free/fixed | median 0.9979, maximum deviation 0.66% |
| centroid shift between retained and removed segments | mean \(\mathbf{-0.04 \pm 0.44}\) eV, sd 1.98 eV, max 4.0 eV, \(n = 20\) |
- the two-segment fit must not free the centroid. The last row is the verdict: the removed-segment count rate is tens of times higher, yet the centroid does not move (\(-0.1\sigma\)), so the mechanism "centroid drifts with count rate"does not exist; the gate using a fixed centroid is safe. Freeing it only adds a degree of freedom and inflates the error; and when the line is buried in the continuum (0800731101's removed-segment line is only 3.1% of counts), the centroid gets pushed around by noise, injecting pure-noise position differences into \(L_B\)。
- No need to re-fit the centroid per observation. \(E_\mathrm{Al}\)'s cross-observation scatter of 0.9 eV is only 1/40 of the line width \(\sigma \approx 37\) eV, i.e. 1/40 of the line width.
- Si-K scatter is 5× Al-K's, butthis is not gain drift: if it were gain, both lines should move proportionally, \(E_\mathrm{Si}\)'s full range would be \(3.8 \times 1.740/1.486 = 4.5\) eV, whereas 20 eV is measured. The scatter mainly comes from Si-K itself being weaker, so its centroid is poorly measured.
- Long-term drift measured (2026-09-14, artifact
results/xmm_mos2_line_centroid_drift_20260914_c1/):
| Quantity | Result |
|---|---|
| time span | 2000-07-09 to 2022-02-09, 21.6 years |
| observations | found 185, fitted 140, failed 45 |
| \(E_\mathrm{Al}\) drift | \(+0.115 \pm 0.011\) eV/yr (artifact flags 10.1σ) |
| after overdispersion correction | linear fit \(\chi^2/\mathrm{dof} = 5.36\), error \(\times 2.32\) → 4.4σ |
| 21.6-year cumulative | 2.5 eV, which is 1/15 of the line width \(\sigma \approx 37\) eV, i.e. 1/15 of the line width |
| \(E_\mathrm{Si}\) drift | \(+0.290 \pm 0.044\) eV/yr, 5.2σ after overdispersion correction, cumulative 6.3 eV |
| M31 correctness self-check | passed: 30 observations reproduce Al-K 1.48787 / scatter 0.90 eV, Si-K 1.74633 / 3.50 eV |
Two places must be honestly labeled, not reusing the artifact front-page wording:
- This is a single-archive M31 study, not a cross-archive study. CDFS's 40 observationsallfail at
no_event_files_matched— that archive stores only processed image products (*-obj-im-*.fits, mask, exposure maps),pps/is empty, with no event lists. The 21.6-year span comes entirely from M31. The artifact front page's "found 185 / processed 140" would mislead one into thinking both archives entered. - Drift significance must be discounted by the overdispersion factor. The artifact's quoted 10.1σ does not include \(\chi^2/\mathrm{dof} = 5.36\)'s overdispersion, so the actual value is about 4.4σ. The drift is real, but not at the headline magnitude.
Impact on this specification: none. This observation set spans months, during which the drift is \(< 0.1\) eV, far smaller than the cross-observation scatter of 0.9 eV; the centroid error cancels within an observation, and it is measured not to vary with count rate (\(-0.04 \pm 0.44\) eV)。1.4879 holds for this observation set. If the method is later applied to cross-year datasets, correct by 0.115 eV/yr, at which point the 0.9 eV cross-observation scatter also starts to matter.
Selection band ruled: field of view 2.5–8.0 keV (PI 2500–8000 eV).
- This is the band the archived
2.filteruses, naturally disjoint from the 1.00–2.20 keV fit window, so the §3.3 constraint is in the default configurationguaranteed by construction. The programmatic check is still retained, because if the strategy grid later expands to other bands, this rule must remain in force. - The gate is therefore live. Al-K sits at 1.49 keV, outside the selection band, so the gate has discriminative power. If the line fell inside the selection band, the gate wouldsilently always be true — measured in that case the ratio drops to 0.907–0.939 yet still passes (§3.9).
- Select with the field-of-view curve, use the corner curve as a diagnostic; never interchange.
2.filtercatalog simultaneously providesfovlc(field of view) andcorlc(out-of-field corner,!(CIRCLE(...))). The archived GTI threshold is applied on the field-of-view curve: the two cut minutes are \(1.45\times\)/\(1.63\times\) of the mean in the field of view, but only \(0.73\times\)。 - The corner curve must be recorded per candidate in the acceptance artifact. Soft protons are focused by the mirror and enter only the field of view; particle background enters both the field of view and the corner. Therefore "field of view up, corner not up" is the soft-proton signature, while "both up" is a particle-background event, the latter not to be handled by GTI cutting (that is §3.7 bin 5). In the acceptance artifact, record for each candidate the field-of-view/corner rate ratio of the removed intervals, as the criterion for what that candidate actually cut.
Implementation requirements.
- mustprogrammatically verify that each candidate's selection band is disjoint from the 1.00–2.20 keV fit window; any overlap meansabort with an error, not release with a warning.
- The archived
2.filter's selection band is PI 2500–8000 eV, naturally disjoint from the fit window, a legal configuration. - The continuum has exactly one definition: the integral of the §3.2 log-parabola over 1.00–2.20 keV. There is no second "line-free continuum window," and do not reintroduce sideband windows — sidebands are the deprecated count-based design; see §4.
- The gate (§3.9) and this rule are two sides of one coin: this ruleprohibits illegal configurations, and the gate, when the configuration is legal,detects residual bias of the same class. The last two columns of the table above are exactly the gate's behavior under the illegal configuration.
3.4 Null distribution: permutation, not assumed
- For each observation and each (selection band, retention fraction) configuration, performbin-label permutation: hold the number of retained bins fixed, randomly reshuffle bin membership, re-fit for each draw and recompute \(R\). draws ≥ 200, with the random seed recorded in the acceptance artifact.
- Report \(z_\mathrm{null} = (R - \mathrm{mean}(\text{null}))/\mathrm{sd}(\text{null})\),and use it as the significance criterion. The measured null distribution centers on \(0.9992\)–\(1.0016\), consistent with the theoretical value of 1 (the expected continuum of a random subset equals the full-interval continuum).
- Do notuse analytic error propagation in place of permutation.\(C_\mathrm{all}\) and \(C_K\) comes fromnested event sets (\(K \subset \mathrm{all}\)), which are strongly correlated; and bin selection is itself data-dependent, which the analytic form does not account for. Permutation automatically includes both.
- Parameter errors from a single fit are taken from \(\Delta C = 1\) contours (re-fitting the remaining parameters at each step), recorded in the acceptance artifact as a quick error bar, but not used as a criterion。
- When scanning the strategy grid, the family-wise false-positive rate must be reported: run the full candidate search on the zero-control observation and count how many candidates meet the claimed criterion. Showing a single point that happens to be zero does not count.
3.5 Training / holdout
- Pre-declare the training observation set and the holdout set, write them into the acceptance artifact, andfreeze them before reading any holdout observation's \(R\)。
- List every tunable chosen only on the training set and write them into the acceptance artifact: bin length, retention fraction \(f_T\) scan range, selection band, gate tolerance, overdispersion factor \(\kappa\), coupling slope \(s\) and \(\delta s\)。excluding the broken power law \(\Gamma_1\)/\(\Gamma_2\)/fold and any sideband window width — those belong to the deprecated design (§4) and must not reappear in the template list.
- On the holdout set, report only signed \(\ln R\) and its permutation \(z_\mathrm{null}\), summarized with the pre-declared sign test / Stouffer method.
- Any frontier point appearing only on training observations must be labeled on the page as hypothesis, not as evidence.
3.6 \(N_\mathrm{sp}\) boundary (not done this round)
- This specificationdoes notdoes not claim to measure absolute removed/remaining soft-proton counts.\(R\) is a dimensionless ratio in detector space, measuring "for this GTI relative to the full interval, by what factor did the 1–2 keV continuum drop."
mos-back, matched ARF/RMF, forward-folded response closurenot done this round, per explicit author instruction. Both the acceptance artifact and the page must state this boundary and which problem it blocks (the steady soft proton in the background remains unidentifiable; see §3.10(c)).- If the implementation performs \(N_\mathrm{sp}\) type decomposition, the signed estimator must allow negative values; it must not be forced non-negative.
3.7 Fault-injection matrix
Run on synthetic data, reporting per-bin signed bias, RMSE, 95% CI coverage, and zero-soft-proton false-positive rate:
- pure \(Q(E)\) Poisson (no soft proton).
- Real broken-power-law soft-proton injection at multiple intensities. The broken power law is legal here because the injection template crosses 3.2 keV; it does not enters the 1.00–2.20 keV fit (§3.2).
- inside the selection band only conditional Poisson fluctuation — this bin specifically tests the §3.3 rule, and must be run on the zero-soft-proton configuration. Already measured on real data at \(+5.5\sigma\) and \(+6.1\sigma\), and the synthetic data must reproduce this magnitude.
- particle-background line and continuumnon-proportionaldrift — this bin tests the gate (§3.9), because it is exactly the case of "line moves while continuum does not."
- anomalous CCD (soft, line-free, time-localized).
- in-field-of-view variable astrophysical source (line-free but mirror-reflected, and compact).
Items 5 and 6 are expected to be \(R\) impossible todistinguish, so the acceptance artifact must state that they are handled by emanom pre-screening and the §4.2 spatial-compactness criterion, not by \(R\).
3.8 Prerequisite: the instrumental line must first prove itself stable
The gate compares the \(L_K\) and \(L_\mathrm{all}\) ratio, which is meaningful only when the line itself is stable. Thismust be measured first, not assumed, and it must rely on per-window fitting, not sidebands — sidebands are affected by the continuum, and the continuum is precisely what changes most during flares.
Measured (MOS2, 30 observations, per-window fit, model as in §3.2, errors from \(\Delta C = 1\) contours, re-fitting the continuum and Si normalization at each step):
| Test | Result |
|---|---|
| line rate constant within observation | \(\chi^2/\mathrm{dof} = 0.971\) (247 dof), 0/30 exceed \(3\sigma\), maximum slope significance \(2.37\sigma\) |
| single-window precision | 6.3% |
| drift upper bound | median 13.8% |
| line response to flare \(\mathrm{d}L/\mathrm{d}C\) | \(+0.00106 \pm 0.00155\)(\(0.7\sigma\)),\(2\sigma\) upper bound 0.42% |
The last row is the key: even on observations where the continuum changes by 87×, the line does not follow.
Unstable across observations, stable within an observation. The full-interval Al-K rate across the 30 pointings isdoes notconsistent with a constant: \(\chi^2/\mathrm{dof} = 282.7/29 = 9.75\), scatter 6.5%, while the single-observation error median is only 2.3%. Therefore:
- the gate's referencemust be this observation's full-interval value \(L_\mathrm{all}\);
- must notuse the campaign mean (0.22302 ± 0.00093 cps) as an external reference, even though it is 1.8× more precise. This path has been ruled out by measurement; do not reintroduce it in the implementation.
3.9 Line-flux gate: the constraint is \(L_\mathrm{all} = L_K\)
The correct statement of the constraint. The GTI must preserve the full-interval instrumental line flux:
This isthe only constraint, and the only form defined under any \(f_T\). The equivalent \(L_K = L_B\) becomes meaningless as the removed intervals go empty — at that point there is no \(L_B\) to speak of — while \(L_\mathrm{all} = L_K\) still holds and retains physical meaning.
Test power comes matched. From the identity
the magnitude of constraint violationis proportional to the removed share. Therefore:
- the more one cuts, the more testing is needed — and the more one cuts, \(L_B\)'s exposure is longer and the test power stronger;
- the less one cuts, the less testing is needed — and weak power is exactly harmless, because the possible violation magnitude shrinks in step.
The two are naturally matched; no artificial tolerance threshold is needed. Early drafts used a fixed \(\sigma_\mathrm{ratio} \le 0.10\) verdict, forcing an adaptive quantity into a fixed threshold; it is deprecated.
The implementation must still compute on disjoint \(K\) and \(B\), because only in that form are the two error terms independent; writing it directly as \(L_K\) on \(L_\mathrm{all}\) makes numerator and denominator share events, so the propagated width is wrong. Compute on \(B\), state the verdict on \(L_\mathrm{all}\) (§3.9).
All three quantities must be measured, recorded, and compared. \(L_\mathrm{all}\)、\(L_K\)、\(L_B\) each written into the acceptance artifact with errors, as are their pairwise ratios. Do not preset which one governs: the side with less data naturally has larger error, andwhich side has less data depends on \(f_T\). Measured at \(f_T \approx 0.3\), \(L_B\) is in fact the better-measured one (0800731801: \(\sigma/L\) K 3.70%, B 3.32%; 0800733101: 4.50% vs 4.26%). The constraint is still stated as \(L_\mathrm{all} = L_K\), because that is what must be preserved scientifically; but the test path is chosen by which quantity is available.
\(L_K\) and \(L_B\) degrade for different reasons, which must not be conflated. when the line sits on the continuum, the relative error scales roughly as
i.e. precision is set bycountsandline fraction jointly. The retained segment is by construction the low-continuum side, \(f_\mathrm{line}\) is stable; the removed segment is by construction the high-continuum side, \(f_\mathrm{line}\) collapses precisely when the observation is strongly filtered — no amount of exposure rescues it。
| retained segment | removed segment | |
|---|---|---|
| \(f_\mathrm{line}\) median | 39.5% | 12.7% |
| \(f_\mathrm{line}\) range | 26.5%–44.0% (stable) | 2.8%–38.3% (spans an order of magnitude) |
| \(\sigma_L/L\) ratio \(\sigma_B/\sigma_K\) | — | median 2.5×, max 8.8× |
| that ratio predicted by counts alone | — | 0.66× (B has more counts, so should be more precise) |
| that ratio predicted by line fraction alone | — | 3.05× |
Of the 21 observations with a measurable removed segment, 15 have more removed-segment counts, and of those 13 have larger errors instead. Extreme example: 0800732501's removed segment has 69306 counts, 10× the retained segment's 6532, yet the line is measured 3.5× worse (7.95% vs 2.29%), because \(f_\mathrm{line}\) drops from 43.3% to 2.8%.
Therefore whether \(L_B\) is usable is judged by \(f_\mathrm{line}\), not exposure length. \(f_\mathrm{line}\) must be recorded per segment in the acceptance artifact. It also distinguishes two kinds of "\(L_B\) unusable," whose consequences are entirely different:
| Cause | Signature | Consequence |
|---|---|---|
| removed time short | \(N_B\) small and \(f_\mathrm{line}^B\) normal | harmless: in this case \(L_\mathrm{all} \approx L_K\) already holds |
| line buried by its own continuum | \(N_B\) large and \(f_\mathrm{line}^B\) collapsed | vacuum gap: a lot is cut yet it cannot be tested (0800731101, \(f_\mathrm{line}^B = 3.1\%\)) |
\(f_T \to 0\) has no samples at one end. This observation set's minimum \(f_T = 0.302\). If an observation has almost no GTI, then \(L_K\) becomes the poorly measured side, and at that point \(L_\mathrm{all} \approx L_B\)—— must not switch to \(L_B\) as the benchmark, which is equivalent to using discarded intervals to define what the retained interval should be. In this case one can only give \(L_K\)'s upper bound, mark it genuinely untested, and record the cause as "insufficient retained time."
Verdict: three classes, split by "the maximum violation the data allows," not by a fraction threshold.
The right-hand second term, when \(L_B\) is measurable, takes both ends of its \(2\sigma\) band; when unmeasurable it takes the physical boundary \(L_B \ge 0\)。
| Verdict | Condition | Meaning |
|---|---|---|
| trivially satisfied | upper bound \(< 2\%\) | too little is cut, so the constraint holds by construction, no testing needed — this is not a defect |
| tested | upper bound \(\ge 2\%\) and \(L_B\) measurable | a normal pass/deviation is given |
| genuinely untested | upper bound \(\ge 2\%\) while \(L_B\) unmeasurable | a lot is cut yet it cannot be tested, it must be flagged separately |
The archived 2.filter measured distribution on
| Category | observations | Upper-bound range |
|---|---|---|
| trivially satisfied | 12 | \(\le 1.95\%\) |
| tested | 17 | \(3.00\%\)–\(14.90\%\) |
| genuinely untested | 1(0800731101,\(f_T = 0.836\)) | \(4.61\%\) |
The 2% threshold falls in a genuine gap in the data, it is not arbitrary: the trivially-satisfied class has a maximum upper bound of 1.95%, the tested class a minimum of 3.00%, and the middle is empty.but this gap is a property of this sample, not guaranteed to be universal, so the implementation must write this distribution into the acceptance artifact and alarm if the gap disappears rather than continuing to use 2%.
Why the old verdict was too strict. 0800730301 and 0800730601 under the old \(\sigma_\mathrm{ratio} \le 0.10\) scheme were judged UNTESTED (\(2\sigma\) being 0.169 and 0.145), yet they only cut 6.1% and 11.3% respectively, so \(L_B\) at its most deviant could only push \(L_\mathrm{all}\) to 1.47% and 1.95%.The old scheme worried about a deviation that cannot occur and mislabeled 11 observations as "unverified." There is only one genuine gap.
3.9.1 Coupling correction: the original proposal is withdrawn; the sign is measured negative by controlled injection
The original scheme (withdrawn). Earlier, an in-observation regression measured \(\mathrm{d}\ln L/\mathrm{d}\ln C = +0.0098 \pm 0.0063\), on that basis proposing to add a \(\ln(L_K/L_B)\) correction to \(s\lambda\), and claiming the full-sample line deficit goes from \(-1.6\sigma\) back to \(-0.6\sigma\)。That conclusion is wrong: it pushes the deficit to zero only because the slope sign used was wrong.
Controlled injection. The in-observation regression is confounded — flare and quiescent periods differ by more than continuum level. The injection experiment removes the confound: take an observation with no detectable soft-proton variability (0800730201, 8092 counts) and add to its spectrum a pure-continuum, line-free component, re-fit, and watch the fitted Al-K. The true value is unchanged by construction, so any offset is coupling. Do 60 Poisson realizations per injection level and take the mean, with the random part decaying as \(1/\sqrt{N}\).
| Injection spectral shape | \(\mathrm{d}\ln L/\mathrm{d}\ln C\) | Per-point significance |
|---|---|---|
| flat (\(\Gamma = 0\)) | \(-0.0062\) | \(-3.4\) to \(-3.8\) |
| soft-proton-like (\(\Gamma = 0.5\)) | \(-0.0077\) | \(-3.1\) to \(-3.7\) |
| steep (\(\Gamma = 1.5\)) | \(-0.0096\) | \(-0.4\) to \(-4.8\) |
the three spectral shapesconsistently give a negative sign, with the flat and soft-proton-like groups monotonic in injection level.A rising continuum makes the fitted line come out low, not high.
The first injection experiment did only one realization per level, with single-point Poisson jitter reaching \(\pm 8\)–\(10\%\), while the effect under test is about 1%, so the slopes from the three spectral shapes scatter across zero (\(+0.0065\)、\(-0.0001\)、\(-0.0078\))——that version measured noise, and its conclusions must not be cited.
Correction direction and consequence. From \(\ln L_\mathrm{meas} = \ln L_\mathrm{true} + s\ln C\) one obtains
so when \(\ln(L_K/L_B)_\mathrm{true} = \mathrm{meas} + s\lambda\)。\(s\) is negative the correction is a reduction, not an increase:
| Slope used | full sample \(\ln(L_K/L_B)\) | significance |
|---|---|---|
| uncorrected | \(-0.0258 \pm 0.0164\) | \(-1.6\sigma\) |
| observation regression \(+0.0098\)(wrong sign) | \(-0.0094 \pm 0.0166\) | \(-0.6\sigma\) |
| injection flat \(-0.0062\) | \(-0.0360 \pm 0.0164\) | \(-2.2\sigma\) |
| injection soft-proton-like \(-0.0077\) | \(-0.0385 \pm 0.0164\) | \(-2.3\sigma\) |
| injection steep \(-0.0096\) | \(-0.0416 \pm 0.0164\) | \(-2.5\sigma\) |
Done correctly, the correction makes the line deficit larger, not make it disappear.
The real problem this surfaces. After the correction, the retained-segment Al-K is 2.6%–4.2% below the removed segment, reaching \(-2.2\sigma\) to \(-2.5\sigma\). Not yet at \(3\sigma\), but no longer a comfortable zero. At least two explanations are currently inseparable:
- physical: Al-K fluorescence is excited by particle flux, and during a soft-proton flare the particle environment is genuinely different, so the removed segment should have more Al-K.If so, the gate's premise that "the line is unchanged across the two intervals" is partly invalid — this is a design-level problem, not something a tolerance can solve.
- a second unmodeled systematic, not covered by the injection experiment.
Until these two are distinguished, item 2 must not be adjudicated, and the gate tolerance must not be finalized on this basis. The next measurement needed: extend the injection experiment to observations with real flares, and directly test the relation between Al-K intensity and corner particle rate (§3.3 already requires per-candidate recording) — if the line rises with particle rate, explanation 1 holds.
The correct conclusion on fit degeneracy. The observation-to-observation line–continuum slope is \(+0.0448 \pm 0.0149\) (3.0σ), and the within-observation one is \(+0.0098 \pm 0.0063\) (1.6σ), a difference of 2.2σ. Degeneracy is a property of the fit; the fit does not know which spectra come from the same pointing, so it must give the same slope; if they differ, that showsthe observation-to-observation \(+0.045\) is not fit degeneracy, but a common physical cause (pointings months apart, different particle environment).
But one must not conclude from this that "there is no fit degeneracy." §3.9.1's controlled injection directly measures the fit-level coupling, at \(-0.006\) to \(-0.010\), consistent across the three injection spectra, 3–4σ per point. The fit coupling is real, just small andnegative; it is a different thing from the positive observation-to-observation trend. This 2.2σ conclusionis not strong, and the acceptance artifact must honestly record that significance.
Hard premise: the line band and the selection band must not overlap. If the time-series band used to construct the candidate GTI contains the line, the gate will silently always be true — measured: with the line inside the selection band the ratio is 0.907–0.939, outside it 0.985–1.019. The implementation must programmatically verify and, on overlap, abort, not release with a warning. This and §3.3 are two faces of the same rule.
The cause of "genuinely untested" is not the removed-exposure length. This is easy to get wrong: 0800730301 has only 1.49 ks of removed exposure yet is classed trivially satisfied (cut 6.1%, upper bound 1.47%); 0800731101 has 4.01 ks yet is the only genuinely untested one (cut 16.4%, upper bound 4.61%). The deciding factor is thesignificance of the line relative to its own continuum in the removed spectrum — the flare raises the continuum 24× (\(\lambda = 3.19\)), and the line is only 3.1% of removed-segment counts (retained segment 41.9%), so no exposure length can measure it. The classification in the implementation must rely on the computed upper bound, must notusing exposure length or the \(f_T\) threshold instead.
External references are unavailable. See §3.8: the observation-to-observation Al-K rate \(\chi^2/\mathrm{dof} = 9.75\), so the campaign mean is not a valid reference and must not be used to rescue the genuinely-untested class.
3.10 Where the ordinate \(R\)Where it fails
\(R\) Every failure mode must be written on the page, together with what else catches it.
(a) \(R\) is not the soft-proton removal fraction. \(C_K\) contains sky background and QPB, neither of which can be removed. Therefore \(R\) has a hard ceiling \(C_\mathrm{all}/C_\mathrm{floor}\), and this ceiling is set byhow much flare the observation itself has, not by how good the strategy is. Measurement supports this picture: \(C_K\) falls in 0.27–0.36 (27/30), nearly constant, so \(R \approx C_\mathrm{all}/\text{const}\)。Consequence:\(R\) must not be averaged, ranked, or aggregated across observations. The frontier can only be drawn within a single observation; across observations one may compare only the shape of the frontier, not its height. This must be hardened as an assertion in the implementation.
(b) On zero-soft-proton observations the frontier collapses to a point. 0800730201, 0800730401, 0800730801, 0800730901, 0800731901 have \(R = 1.000\), which no strategy can separate. This is correct behavior, not a defect, but it means these observationsdo not participate in strategy selection; they enter only the zero-control set. The implementation must route them accordingly and must not mix them into the frontier fit.
(c) The steady soft proton in the background is invisible. \(R\) measures the drop relative to the background, and the background itself contains a steady soft-proton component.\(R\) cannot see it. This is the boundary already declared in §3.6, and it must not be treated as solved merely because the y-coordinate changed.
(d) \(R\) monotonically rewards cutting more. Keeping only the quietest bins can always inflate \(R\), and the only downward pressure comes from \(f_T\). Therefore \(R\) must not be maximized alone; one may only take the frontier in the 2D \((f_T, R)\) plane — this is why the two-parameter framework exists, not an optional presentation choice.
(e) On rare high-\(R\) observations the gate has no discriminative power. See §3.9: in the full sample there is only 1 (0800731101), whose removed-segment line is buried by its own continuum.
(f) Anomalous CCDs and in-field variable sources \(R\) cannot be distinguished. Consistent with §3.7 items 5 and 6, they are handled by emanom pre-screening and the spatial-compactness criterion, not by \(R\).
3.11 Figures
At minimum cover: zero control (0800730201), strong flare (0800732501), intermediate state (0800730101), continuum-model reconciliation (log-parabola vs bare power-law likelihood ratio), fault-injection matrix, holdout transfer distribution. Every figure must be driven by the acceptance artifact this specification produces; no hand-filled numbers.
3.12 Documentation and publication
proposal.md§8.1 is replaced wholesale with \((f_T, R)\) and the line-flux gate;A/ηis downgraded to a paragraph marking the "deprecated metric," together with the measured numbers for why it failed (permutationz_null, Poisson-null false-positive rate, live-time bug), and points toe1the acceptance artifact.- The page is re-rendered and published to the existing Cloudflare Pages project
cdfs-mos-sp-audit's/sp-gti-proposalroute, keeping the existing design, typesetting, dark mode, pinned KaTeX version, and figure-card style.
4. Do NOT (NEGATIVE SPACE)
- Do notRetain
A(K)/η(K)as a parallel indicator or "spare y-axis." It is deprecated and appears only as a historical note. - Do notRelease with a warning when the selection band overlaps the continuum window — must abort.
- Do notUse the Gehrels upper-limit expression as a variance.
- Do notIntroduce
mos-back, ARF, matched background, forward-folded response closure. - Do notReplace the broken power law with the local continuum under the line in 1.00–2.20 keV: this window lies entirely below the 3.2 keV break, where the broken power law degenerates to a single power law, and the single power law has already been rejected by the likelihood-ratio test (quiescent spectrum ΔC median 9.1, 17/23 exceeding 99%). Keep log-parabola there, butmust correct the causal misstatement in the comment: it is the quiescent spectra that need curvature (sky Fe-L/Mg complex plus the 1.84 keV Si K edge), not the flare spectra.
- Do notModify or delete
scripts/m31_mos2_variable_sp_removal.py's implementation body. - Do notUse \(R\)'s analytic significance as the criterion; the criterion is the permutation
z_null。\(C_\mathrm{all}\) and \(C_K\) from nested event sets, so analytic propagation does not apply (§3.4). - Do notWrite an explicit
NaN/Infreason string into JSON when it occurs;nullwith a reason string. - Do notLet any local path, hostname, or credential appear in the deployed HTML.
- Do notRun any git command; this directory is not a git repository.
- Do notUse sideband subtraction instead of fitting to measure the line flux. Sidebands are affected by the continuum, and the continuum is precisely what changes most during flares; all line-flux numbers in this specification come from per-window fitting. Sideband estimates may be kept as a diagnostic record but must not enter the gate.
- Do notUse "counted bins × bin width" as the per-bin live time. It is adequate for estimating total exposure (\(+1.92\%\)), but for 0.9% of bins it overestimates the rate by about 5× and promotes them to fake flares — measured: 79 bins therefore land on the wrong side of the 70% cut line.
- Do notFree the line centroid in the retained/removed-segment fits. Measured centroid shift between the two segments is \(-0.04 \pm 0.44\) eV, so no freedom is needed; freeing it instead lets the removed-segment centroid be shoved by noise. Free-centroid fitting is only for the full-interval spectrum gain diagnosis.
- Do notConstruct the GTI from the corner curve. The corner lies outside the field of view and receives no focused soft protons; selecting on it amounts to cutting on particle background while the soft protons stay in the data. The corner is diagnostic only.
- Do notCall a zero-control observation "no soft proton." Measured: 0800730201 contains two real soft-proton segments (field of view \(1.45\times\)/\(1.63\times\), corner \(0.73\times\), focused signature), and the steady component is in principle invisible on \(R\). The correct wording is "no detectable soft-proton variability" (\(\chi^2/\mathrm{dof} = 1.03\),\(p = 0.39\))。
- Do notUse the campaign-mean Al-K rate as the gate reference. The observation-to-observation
chi2/dof= 9.75, so this path has been ruled out by measurement. - Do notUse removed-exposure length or the
f_Tthreshold to judge UNTESTED. Counterexamples measured: 0800730301 is verdictable with 1.49 ks, 0800731101 is not with 4.01 ks. One must rely only on the computedsigma_tot。 - Do notUse exposure length or count magnitude to judge whether \(L_B\) is usable. Measured: among 15 observations with more removed-segment counts, 13 have larger errors instead; the dominant term is line fraction (predicts 3.05× vs the counts term's 0.66×).
- Do notWrite an explicit \(f_T \to 0\), switch to \(L_B\) as the benchmark. That is equivalent to using discarded intervals to define what the retained interval should be.
- Do notTreat "genuinely untested" as a pass. AlsoDo notlabel "trivially satisfied" as untested — when too little is cut the constraint holds by construction, and the old scheme's fixed tolerance mislabeled 11 observations this way; the actual gap is only 1.
- Do notUse one uniformly relaxed tolerance in place of per-observation coupling correction. The lever arm
ln(C_B/C_K)spans 0.56–3.43, so a flat tolerance over-protects quiet observations and still under-protects 0800732501, and it permanently bakes a correctable signed bias into the results (measured: uncorrected full-sample line deficit −1.6σ, corrected −0.6σ). - Do notAverage, rank, or aggregate across observations
R: its ceiling is set by the observation's own flare content, not by the strategy. - Do notMaximize
Ralone; only take the frontier in the 2D(f_T, R)plane. - Do notClaim the gate only fails harmlessly — 0800731101 is the counterexample (blind and
R= 4.83)。 - Do notWrite compatibility-layer code (§8 is deliberately empty).
5. Acceptance Criteria (DONE)
- [ ]
python3 scripts/m31_mos2_line_continuum_invariant.py --helpexit code 0. - [ ] Full run-through and write the acceptance-artifact JSON;
python3 -c "import json;d=json.load(open('results/m31_mos2_line_continuum_invariant_20260910_g1/line_continuum_invariant.json'));print(d['schema'],d['status'],len(d['cases']))"output the schema, status, and observation count. - [ ] Window boundary: the implementation uses 93 bins, upper bound 2.395 keV, and integer bin-count construction (do not use
np.arange(lo, hi+de, de)); the acceptance artifact records the actual upper bound and bin count; the leakage test is re-run on this round's data, and for the two no-variability observationsz_nullmust not systematically shift positive as the window widens. - [ ] Line centroid: the implementation has Al-K = 1.4879, Si-K = 1.7466 keV, frozen in both segment fits; the acceptance artifact records the free-centroid fit of the full-interval spectrum, yielding \(E_\mathrm{Al}\)、\(E_\mathrm{Si}\) and the centroid difference between the retained/removed segments (this round's measured mean \(-0.04\) eV)。
- [ ] Field-of-view / corner cross-check: the field-of-view rate / corner rate ratio of each candidate's removed intervals is written into the acceptance artifact; on zero-control observations this ratio must show a focused signature (measured 0800730201, removed two minutes: field of view 1.45×/1.63×, corner 0.73×).
- [ ] Live-time diagnostic: the per-bin
live/nominal's minimum and 0.1/1/50 percentiles are written into the acceptance artifact; if the 0.1 percentile is below 0.9, the artifact must also record "how many bins would land on the wrong side of the cut line under the naive estimator" (this round measured 79 / 5395), as a warning about that observation's ranking credibility. - [ ] Line-stability premise: the per-window-fit within-observation line rate
chi2/dofand the 0/30 exceeding 3σ conclusion are reproduced on this round's data; the artifact records each observation's slope significance and single-window precision. - [ ] Line does not respond to flare:
d(line)/d(continuum)'s 2σ upper bound is computed and written into the acceptance artifact. - [ ] External reference excluded: the acceptance artifact records the observation-to-observation Al-K
chi2/dof(measured 9.75) and dispersion (6.5%), and explicitly states that the gate reference is this observation'sL_all, not the campaign mean. - [ ] line fraction: each observation's retained and removed segments' respective \(N_\mathrm{tot}\)、\(N_\mathrm{line}\) and \(f_\mathrm{line}\) are written into the acceptance artifact; "\(L_B\) unusable" must be distinguished and recorded as either "removed time short" or "line buried" (this round measured: retained segment \(f_\mathrm{line}\) median 39.5%, removed segment 12.7%, minimum 2.8%).
- [ ] Gate three classes: each observation is assigned one of "trivially satisfied" / "tested" / "genuinely untested" based on
max|L_all/L_K - 1|'s upper bound, must notusing the1-f_Tor exposure-length threshold instead; the full-sample distribution of this upper bound is written into the acceptance artifact, and if the gap the 2% boundary relies on disappears it must alarm. "Genuinely untested" must not count as a pass in any summary (this round measured: 12 / 17 / 1). - [ ] Gate error calibration: recompute on this observation set
chi2/dof's overdispersion factorkappaand use it for the verdict; the artifact records the pre- and post-calibrationz。 - [ ] Coupling correction: the within-observation
d lnL / d lnCis re-measured on this round's data; the per-observation lever armlambda, correction amounts*lambda, systematic errords*lambdaandsigma_totare all written into the acceptance artifact; the pre- and post-correction full-sampleln(L_K/L_B)are recorded side by side (measured −1.6σ → −0.6σ). - [ ] Degeneracy exclusion: the observation-to-observation and within-observation slopes and their difference significance are written into the acceptance artifact (measured 2.2σ), and the page labels this conclusion as not strong.
- [ ] Gate self-test powerless:
d ln(L_K/L_B) / d lambda's regression result is written into the acceptance artifact, and it explicitly states that the correction's basis comes from the independently measured within-observation slope, not the gate's own data. - [ ] Gate blind spot: the acceptance artifact lists all UNTESTED observations and their
R、sigma_tot, removed exposure, and lever armlambda;R > 1.15; observations that are UNTESTED (known: 0800731101,R= 4.83,sigma_tot= 0.166) are marked separately on the frontier plot. - [ ] Line band ⟂ selection band: when the line band overlaps the selection band the program aborts; the acceptance artifact must not contain a gate verdict for that configuration.
- [ ] Y-coordinate cross-observation ban: an assertion exists in the implementation, blocking cross-observation averaging or ranking of
R; zero-soft-proton observations (R= 1.000) are routed into the zero-control set rather than the frontier fit. - [ ] Zero control: 0800730201 and 0800730401, under the "selection band ⟂ 1.00–2.20 keV fit window" configuration,
|z_null| < 3and the gate PASSes (measuredz_null= −0.6 / −1.4, gate z = +1.1 / −0.3). - [ ] Overlap detection: under the configuration where the selection band overlaps the 1.00–2.20 keV fit window, the program aborts with a non-zero exit code; the acceptance artifact must not contain fractions for that configuration. It is also necessary, ina diagnostic mode with this abort disabled, to reproduce the bias magnitude (measured: no-variability observation
z_null= +5.5 / +6.1, gate FAIL at −5.4 / −4.6), and to record that this diagnostic run must not be used for any frontier conclusion. - [ ] Strong flare: 0800732501's
z_null > 10, and the gate gives PASS or UNTESTED rather than FAIL. - [ ] Null distribution center: the permutation null distribution means of all configurations fall in
1.00 ± 0.02(measured 0.9992–1.0016). - [ ] Observation dependence of the overlap trap: the acceptance artifact records side by side the overlap configuration's
z_nulland gate verdict on zero-soft-proton versus strong-flare observations, to show that this trap specifically fabricates on control observations (measured: on 0800730101 the overlapping versus disjointRdiffer by 0.002, with bins shared 183/188). - [ ] Family-wise false-positive rate: run the full candidate grid on the zero-control observation and report the fraction of candidates meeting the criterion.
- [ ] Fault injection: all six bins of §3.7 have numbers; bin 3 (conditional fluctuation inside the selection band only) produces no false positives under the correct configuration.
- [ ] Holdout: the train/holdout split is written into the acceptance artifact with a freeze timestamp; the holdout-set sign-test result is reported.
- [ ] All figures are rebuilt artifact-driven,
python3 scripts/make_proposal_figures.pyexit code 0, andfig9_construction.png、fig10_eta_sample.pngis no longer generated. - [ ] The page
https://cdfs-mos-sp-audit.pages.dev/sp-gti-proposalreturns 200; local and online HTML and each figure's SHA-256 match; the deployed HTML contains no local path / hostname / credential.
6. Rollback Plan
All changes are new files plus three regenerable products (proposal.md, figures, deployed page). Rollback method: e1 the acceptance artifact and scripts/m31_mos2_variable_sp_removal.py are kept as-is, proposal.md's previous version is retrievable from the deployed page's historical versions, and re-rendering rolls back. The historical acceptance-artifact directory is read-only throughout, so there is no destructive change to undo.
7. Extra Notes for Implementer
- Read first
scripts/m31_mos2_contrast_statistics.py: its module docstring states this project's uncertainty contract (exact Poisson for disjoint sets; the Gehrels upper limit is not a variance), andlive_coordinate/circular_shift_null's implementation pattern. scripts/m31_mos2_removed_component_spectrum.pyis the closest reference: same inputs, same difference-spectrum definition, same JSON cleaner, same acceptance-artifact shape.- The masked-corner geometry mustper observationbe parsed from this observation's own archived
corlc.fits'sSLCTEXPRheader keywords (two CIRCLE, four rotated BOX, values differing per observation), not hard-coded. - The full-interval event list is at
inputs/m31_sirius_fulltime_20260909/, 30 MOS2 MIEVLI; the archived GTI and light curve are atinputs/m31_sirius_temporal_20260902/<obsid>/rpc/2.filter/。 - Performance: the permutation null needs 2000 draws × 30 observations × multiple configurations. First build per-bin count vectors per energy band, so one permutation is just re-shuffling indices and summing — do not re-scan the events each time.
- This project's docstring style is long explanation: state what this statistic means and whatdoes not conclusion it licenses. Keep to that.
8. Compatibility Exemption Registry (default: empty)
| What's being compatible-with | Why this is a permanent need, not a temporary bridge | Cleanup timeline | Owner |
|---|---|---|---|
| (none) |
9. Definition of Done Evidence (filled at implementation time)
9.1 Static build evidence
$ <command>
$ <command>
$ <command>
9.2 Runtime verification evidence
$ <command>
$ <command>
9.3 Test suite
This project has no independent test suite; acceptance is the executable acceptance-artifact checks and page validation in §5.