用线/连续谱不变量替换计数型 GTI 指标
- Date: 2026-09-10
- Type: refactor(指标替换)+ feature(零分布校准、故障注入、留出验证)
- Risk: high — 这会作废一个已公开发布的指标,并改变公开页面上的核心论断
- Related docs:
results/sp_gti_proposal_20260909/proposal.md(当前公开文档,§8.1–8.7 是要被替换的部分)cognition-os/insights/I003_lineanchored_2p1c_temporal_qualification.md(线锚 2.1c 的原始设计,本规格是它的延续而非替代)results/m31_mos2_variable_sp_removal_20260910_e1/variable_sp_removal.json(被作废指标的受体,保留作历史对照)
1. Background & Goal (WHY)
当前指标 A(K) = Σ(c_j − m·τ_j) 与 η(K) = A(K)/A_tot 数的是"高出基底的超出计数"。计数原理上分不开三件事:真实软质子、按率选择所挑中的向上 Poisson 涨落、以及普通谱的整体强度变化。已实测到的失效:在一个公认无软质子的观测(0800730201)上,若时间选择所用的能段与作为分母的连续谱能段重合,比值型统计量相对置换零分布偏离 +8σ 到 +11σ;纯 Poisson 零假设下 A_tot 有 88.4% 为正、名义 z≥5 的假阳性率达 0.5%–3.63%。
替换方案是本项目更早的线锚不变量:
其中 L 是仪器荧光线强度、C 是连续谱强度。注意 C 的定义在本规格中已经变了:\(G\) 时代它是「无线连续谱窗」里的计数,靠旁瓣避开线;现在它是对数抛物线拟合在整个 1.00–2.20 keV 上的积分,线与连续谱的划分由拟合承担(§3.2)。旁瓣设计已作废,不得在实现中复活(§4)。按率选择只是把整条谱等比放缩,线与连续谱同步变化,所以 G 的零分布坐在 1 上;只有"加连续谱而不加线"的成分(软质子正是如此)才能把它推离 1。曝光在每个比值内部即约掉,因此 G 对活时间记账免疫。
G 在本规格中被进一步改写成受约束的形式(§3.2):作者的目标是「保持 GTI 内 1–2 keV 仪器线流量不变,同时 1–2 keV 连续谱越低越好」,这两句话在闸门成立时精确等价于最大化连续谱降低倍数 \(R = C_\mathrm{all}/C_K\)。R 取代 G 作为 Pareto 纵轴,理由是 G 的分母引用被删时段、其成分随 \(f_T\) 变化,跨不同 \(f_T\) 比较 G 等于换尺子量;R 的参照对单个观测固定。G 保留为审计量。
终态:A/η 从公开文档与公开页面撤下;(f_T, R) 成为 Pareto 两轴,线流量闸门成为准入条件;页面按可证伪性要求,完整展示零控制、强耀发、中间态、连续谱模型对账、故障注入、重合陷阱的观测依赖性、闸门盲区与留出验证。
2. Scope (WHERE)
Files to create
scripts/m31_mos2_line_continuum_invariant.py— 计算 \(R\) 与 \(f_T\)、线流量闸门(含耦合改正)、置换零分布、训练/留出划分,写出受体。G作为审计量并列输出,不作前沿纵轴。scripts/m31_mos2_invariant_fault_injection.py— 故障注入矩阵(见 §3.7)。results/m31_mos2_line_continuum_invariant_20260910_g1/— 新受体目录(JSON + CSV)。results/sp_gti_proposal_20260909/figures/下新增图件(见 §3.11),文件名由实现者自定,但必须以fig开头并在proposal.md中被引用。
Files to modify
scripts/make_proposal_figures.py— 新增本规格要求的图;删除fig9_construction与fig10_eta_sample(它们展示的是被作废的A/η);修正fig8说明里"耀发带来曲率"的因果错述(实测需要曲率的是宁静谱)。results/sp_gti_proposal_20260909/proposal.md— §8.1 整节替换;§4.3、§8.7 相应改写;其余章节按交叉引用一致性调整。site/cdfs-mos-sp-audit/sp-gti-proposal.html及其 figures 目录 — 重新渲染并发布。
Files NOT to touch (explicit boundary)
results/m31_mos2_frontier_transfer_20260906_r2/、..._r3/、..._20260907_a1/、..._20260908_b1/、..._20260910_e1/— 历史受体一律只读。e1尤其要保留:新文档需要引用它来说明旧指标为何被作废。scripts/m31_0800730101_mos2_line_ratio_pareto.py— 其中的_gehrels_variance是刻意保留但已加注的历史代码,动它会破坏旧受体的可复现性。scripts/m31_mos2_variable_sp_removal.py— 不要删除、不要修改。它是被作废指标的实现,必须原样保留以便复现e1受体。只在文件顶部 docstring 追加一行状态标记:SUPERSEDED by scripts/m31_mos2_line_continuum_invariant.py; retained for reproducibility of the e1 receipt.- 任何
.env*或配置文件。
Database changes
None.
3. Implementation Notes (HOW, coarse)
3.1 时间格与活时间
- 时间格长度 100 s,沿用现有节奏(未优化,记入 §8.7 的未定选择)。
- 每格必须计算实际 live exposure,从该观测自己的 GTI/EXPOSURE 扩展导出,而不是给"含至少一个事件的格子"一律赋满格。首尾半格、遥测空洞、曝光缺口都要如实反映。
- 活时间用于选择格子(按率排序/切分),并用于把计数折成率送进拟合。它不以「每格满格」的形式进入任何分子分母——旧指标正是栽在这里(
tau = np.full(nb, CELL)),这一点要在 docstring 里写清楚。
3.2 Pareto 纵坐标:受闸门约束的连续谱降低倍数
作者的目标陈述是两句话:保持 GTI 内 1–2 keV 仪器线流量不变,同时 1–2 keV 连续谱越低越好。 本节把它写成可执行的定义,并说明它与早先的 G 是什么关系。
记候选 GTI 为 \(K\),\(L\) 为 Al-K 线流量,\(C\) 为同一次拟合给出的 1.0–2.2 keV 连续谱积分流量(两者都来自同一次拟合,线与连续谱的划分由拟合决定,不假设线下连续谱等于旁带直线内插;连续谱模型见下)。
- 约束(闸门):\(L_K\) 与全时段值 \(L_\mathrm{all}\) 相容。
- 目标:\(C_K\) 越小越好。等价地,最大化
Pareto 的两个坐标就是 \((f_T,\;R)\),\(f_T\) 为保留活时间份额。
连续谱模型:单段,带曲率,不带折点。 拟合窗 1.00–2.20 keV 整个在 3.2 keV 折点以下,没有折点要建模,所以一段就够——在这个窗口里折断幂律会退化成单幂律,写成「折断幂律」既无意义又会误导读者以为折点参与了拟合。
但这一段不能是裸幂律:似然比检验在宁静谱上拒绝了单幂律(\(\Delta C\) 中位 9.1,17/23 超过 99%),需要曲率——来自天空 Fe-L/Mg 复合体与 1.84 keV 的 Si K 边,与软质子无关。因此取对数抛物线(单段幂律加曲率项 \(\beta\)):
加两个高斯(Al-K 1.49 keV、Si-K 1.74 keV,共享宽度),Cash 统计量。
折断幂律只用在跨越 3.2 keV 的拟合上——软质子注入模板(§3.7 第 2 格)与去除分量的谱斜率测量。两者不要混用,也不要为了「统一模型」把折断幂律推到本窗口里;§4 已就此立了一条禁止项。
与 G 的关系。 令 \(W(K)=L_K/C_K\)。在闸门成立、即 \(L_K=L_\mathrm{all}\) 时,
所以「线不变 + 连续谱最低」在闸门下精确等价于「连续谱降低倍数最大」。\(R\) 不是 \(G\) 的近似,是 \(G\) 在约束面上的值。
为什么用 \(R\) 而不用 \(G\)。 \(G=(L/C)_\mathrm{GTI}/(L/C)_\mathrm{BTI}\) 的分母引用被删时段,而被删时段的成分随切多少而变:\(f_T\) 一变,\(G\) 的参照物就换了一个。跨不同 \(f_T\) 比较 \(G\) 是在拿不同的尺子量。\(R\) 的参照 \(C_\mathrm{all}\) 对单个观测是固定的,与候选 \(K\) 无关,因此同一观测内不同策略的 \(R\) 可以直接比较——这正是画前沿所需要的。G 降级为审计量,仍然计算并记入受体,但不作为前沿纵坐标。
闸门同时是防刷分的锁。 \(R\) 单调随切得更狠而增大,因此必须有东西阻止「专挑 1–2 keV 连续谱向下涨落的格子」这种纯噪声选样。闸门就是那把锁:Al-K 位于 1–2 keV 之内,这样选会同时压低线流量,闸门立刻触发(已实测:当线落在选择带内时比值降到 0.907–0.939)。让 \(R\) 有意义的那条线,同时是防止 \(R\) 被噪声刷高的那道锁——这是 \(G\) 不具备的性质,也是保留「线在 1–2 keV 之内」这一设计的理由。
已实测(归档 2.filter GTI,30 个观测,MOS2):
| 量 | 结果 |
|---|---|
| \(C_\mathrm{all}\) | 0.266 – 3.538 cps,跨 13.3 倍 |
| \(C_K\) | 0.266 – 0.610 cps,27 个落在 0.27–0.36 |
| \(R\) | 中位数 1.86,范围 1.000 – 12.80 |
| \(f_T\) | 中位数 0.786 |
| Spearman \(\rho(f_T,R)\) | \(-0.850\) |
\(C_\mathrm{all}\) 跨 13 倍而 \(C_K\) 收敛到同一个底,是纵坐标在测真实共同基底、而非各观测任意归一的直接证据。\(\rho=-0.850\) 说明两个坐标强烈反相关——前沿存在的前提。
3.3 硬性设计规则:选择能段与 1–2 keV 拟合窗必须不相交
这条规则在防什么。 候选 GTI 是按某个能段的计数率排序切格子的。若那个能段与 \(C\) 所在的 1.00–2.20 keV 拟合窗重合,就等于按分母自身的噪声选样——挑中的「最安静的格子」里有一部分只是 \(C_K\) 向下的 Poisson 涨落,\(R = C_\mathrm{all}/C_K\) 被直接刷高,整个过程一个软质子都不需要。
换到 \(R\) 之后这条比 \(G\) 时代更要紧:\(G\) 隔着一层比值,\(R\) 的分母直接就是被选的那个量。
已实测(\(R\) 上,保留份额 0.70,100 s 格,置换零分布 200 draws):
| 观测 | 选择能段 | \(R\) | 置换零分布 | \(z_\mathrm{null}\) | \(L_K/L_R\) | 闸门 |
|---|---|---|---|---|---|---|
| 0800730201(无 SP) | 1.00–2.20 重合 | 1.085 | \(1.0013 \pm 0.0137\) | +6.1 | 0.8034 | FAIL (\(-4.6\)) |
| 0800730201 | 2.50–8.00 不相交 | 0.990 | \(0.9992 \pm 0.0148\) | \(-0.6\) | 1.0530 | PASS |
| 0800730401(无 SP) | 1.00–2.20 重合 | 1.074 | \(0.9996 \pm 0.0135\) | +5.5 | 0.7680 | FAIL (\(-5.4\)) |
| 0800730401 | 2.50–8.00 不相交 | 0.980 | \(0.9994 \pm 0.0140\) | \(-1.4\) | 0.9846 | PASS |
| 0800730101(有耀发) | 1.00–2.20 重合 | 1.531 | \(1.0016 \pm 0.0262\) | \(+20.2\) | 1.0635 | PASS |
| 0800730101 | 2.50–8.00 不相交 | 1.533 | \(1.0002 \pm 0.0245\) | \(+21.7\) | 1.1156 | PASS |
两个无软质子的观测上,重合凭空造出 7–8% 的「连续谱降低」,相对置换零分布 \(+5.5\sigma\) 与 \(+6.1\sigma\);脱钩后回到 \(0.98\)–\(0.99\),与零分布相容。
这个陷阱为什么阴险——必须写进页面。 看后两行:在有真耀发的 0800730101 上,重合与不相交给出几乎相同的 \(R\)(1.531 vs 1.533),两种选择挑出的 188 个格子里共享 183 个。原因是真耀发同时抬高两个能段的计数率,两个能段对「哪些格子是坏的」意见一致,选择偏差被真信号淹没。
所以重合专门在对照观测上造假:有耀发的数据它基本不动,干净的数据它给你 6σ 的假信号。 只在耀发观测上验证过的流程永远发现不了它。故障注入矩阵第 3 格(§3.7)必须在零软质子观测上跑,不得只在耀发观测上跑。
实现要求。
- 必须以程序方式校验每个候选的选择能段与 1.00–2.20 keV 拟合窗不相交,重叠即中止并报错,不得以警告放行。
- 归档
2.filter的选择能段是 PI 2500–8000 eV,与拟合窗天然不相交,是合法配置。 - 连续谱只有一种定义:§3.2 那条对数抛物线在 1.00–2.20 keV 上的积分。不存在第二套「无线连续谱窗」,也不要再引入旁瓣窗口——旁瓣是已作废的计数型设计,见 §4。
- 闸门(§3.9)与本条是同一枚硬币的两面:本条靠中止禁止非法配置,闸门在配置合法时检测残余的同类偏差。上表最后两列就是闸门在非法配置下的表现。
3.4 零分布:置换,不得假定
- 对每个观测、每种(选择能段,保留份额)配置,做格子标签置换:保持保留格子数不变,随机重排格子归属,对每个抽样重新拟合并重算 \(R\)。draws ≥ 200,随机种子写入受体。
- 报告 \(z_\mathrm{null} = (R - \mathrm{mean}(\text{null}))/\mathrm{sd}(\text{null})\),以它作为显著性判据。实测零分布中心落在 \(0.9992\)–\(1.0016\),与理论值 1 相容(随机子集的期望连续谱等于全时段连续谱)。
- 不要用解析误差传播代替置换。\(C_\mathrm{all}\) 与 \(C_K\) 来自嵌套的事件集(\(K \subset \mathrm{all}\)),两者强相关;而且格子选择本身依赖数据,解析式不计入这一项。置换把两者都自动包含。
- 单次拟合的参数误差取 \(\Delta C = 1\) 轮廓(每步重拟合其余参数),记入受体作为快速误差棒,但不作为判据。
- 扫策略网格时必须报告全族假阳性率(family-wise false-positive rate):在零控制观测上跑完整候选搜索,统计有多少候选达到所声称的判据。只展示一个碰巧为零的点不算数。
3.5 训练/留出
- 预先声明训练观测集合与留出集合,写入受体,且在读取任何留出观测的 \(R\) 之前冻结。
- 只在训练集上选择的可调项,逐一列出并写入受体:格长、保留份额 \(f_T\) 的扫描范围、选择能段、闸门容差、过散因子 \(\kappa\)、耦合斜率 \(s\) 与 \(\delta s\)。不含折断幂律的 \(\Gamma_1\)/\(\Gamma_2\)/折点与任何旁瓣窗宽——那些属于已作废的设计(§4),不要再出现在模板清单里。
- 留出集上只报告 signed \(\ln R\) 及其置换 \(z_\mathrm{null}\),用预先声明的符号检验/Stouffer 汇总。
- 任何只在训练观测上出现的前沿点,在页面上必须标为 hypothesis,不得标为 evidence。
3.6 \(N_\mathrm{sp}\) 的边界(本轮不做的部分)
- 本规格不声称测量 removed/remaining 的绝对软质子计数。\(R\) 是探测器空间的无量纲比值,测的是「这条 GTI 相对全时段,1–2 keV 连续谱降了几倍」。
mos-back、matched ARF/RMF、forward-folded 响应闭合本轮不做,按作者明确指示。受体与页面都要写明这条边界,并写明它挡住了哪个问题(基底中的稳态软质子仍不可识别,见 §3.10(c))。- 若实现 \(N_\mathrm{sp}\) 型分解,signed 估计量必须允许为负;不得强制非负。
3.7 故障注入矩阵
在合成数据上跑,逐格报告 signed bias、RMSE、95% CI coverage、零软质子假阳性率:
- 纯 \(Q(E)\) Poisson(无软质子)。
- 真实折断幂律软质子注入,多个强度。折断幂律在此处合法,因为注入模板跨越 3.2 keV;它不进入 1.00–2.20 keV 的拟合(§3.2)。
- 只在选择能窗内的条件 Poisson 涨落——这一格专门检验 §3.3 那条规则,必须在零软质子配置下跑。已在真实数据上实测到 \(+5.5\sigma\) 与 \(+6.1\sigma\),合成数据上要复现这个量级。
- 粒子背景的线与连续谱非同比例漂移——这一格检验闸门(§3.9),因为它正是「线动而连续谱不动」的情形。
- anomalous CCD(软、无线、时间局部)。
- 视场内变天体源(线自由但经反射镜、且紧致)。
第 5、6 项预期 \(R\) 无法分辨,因此受体必须写明它们由 emanom 预筛与 §4.2 的空间紧致度判据处理,而不是由 \(R\) 处理。
3.8 前提:仪器线必须先自证稳定
闸门把 \(L_K\) 与 \(L_\mathrm{all}\) 比,只有在线本身稳定时才有意义。这一条必须先测,不得假定,并且要靠逐窗拟合,不能靠旁带——旁带受连续谱影响,而连续谱恰恰是耀发时变化最剧烈的东西。
已测(MOS2,30 个观测,逐窗拟合,模型同 §3.2,误差取 \(\Delta C = 1\) 轮廓且每步重拟合连续谱与 Si 归一):
| 检验 | 结果 |
|---|---|
| 观测内线率恒定 | \(\chi^2/\mathrm{dof} = 0.971\)(247 dof),0/30 超 \(3\sigma\),最大斜率显著度 \(2.37\sigma\) |
| 单窗精度 | 6.3% |
| 漂移上限 | 中位数 13.8% |
| 线对耀发的响应 \(\mathrm{d}L/\mathrm{d}C\) | \(+0.00106 \pm 0.00155\)(\(0.7\sigma\)),\(2\sigma\) 上限 0.42% |
最后一行是关键:即使在连续谱变化 87 倍的观测里,线也不跟着动。
观测间不稳定,观测内稳定。 全时段 Al-K 率在 30 个指向之间不相容于一个常数:\(\chi^2/\mathrm{dof} = 282.7/29 = 9.75\),散布 6.5%,而单观测误差中位数只有 2.3%。因此:
- 闸门的参照必须是本观测的全时段值 \(L_\mathrm{all}\);
- 不得用 campaign 均值(0.22302 ± 0.00093 cps)作外部参照,尽管它精度高 1.8 倍。这条路已被测量否掉,不要在实现里重新引入。
3.9 均值率闸门(mean-rate gate)
判据的代数形式。 设 \(L_K\) 为候选 GTI 内的线流量,\(L_R\) 为被删时段的线流量,\(f_T\) 为保留活时间份额。由于
是恒等式,「\(L_K = L_\mathrm{all}\)」与「\(L_K = L_R\)」是同一个命题。实现必须用不相交的 \(K\) 与 \(R\) 计算,因为只有这一形式的两项误差独立;写成全时段形式会让分子与分母共享事件,误差传播会给出错误的宽度。
线/连续谱耦合的逐观测改正。 拟合出的线率与同一次拟合的连续谱之间存在残余耦合,实测(观测内,2 ks 等活时间窗)
被删时段的连续谱高于 GTI,杠杆 \(\lambda = \ln(C_R/C_K)\) 实测跨 0.56–3.43(中位 1.53)。耦合因此把 \(L_R\) 系统性抬高、把比值压低。改正与残差系统误差都必须逐观测算,不得用一个统一放宽的容差代替——杠杆跨 6 倍,平摊的容差对安静观测过度保护,对 0800732501 仍然保护不足。
其中 \(s = 0.0098\)、\(\delta s = 0.0063\)、\(\kappa\) 为过散因子。
判定。
| 判定 | 条件 | 含义 |
|---|---|---|
| PASS | \(\sigma_\mathrm{tot} \le 0.10\) 且 \(\lvert z_\mathrm{corr}\rvert < 3\) | 有判定力,且未测到偏离 |
| UNTESTED | \(\sigma_\mathrm{tot} > 0.10\) | 没有判定力,不算通过 |
| FAIL | \(\sigma_\mathrm{tot} \le 0.10\) 且 \(\lvert z_\mathrm{corr}\rvert \ge 3\) | 测到偏离 |
容差 0.10 不是自由参数,必须与其实测分布一并报出。5% 是实测定得太紧:改正后 \(\sigma_\mathrm{tot}\) 落在 5.4%–9.8%,5% 只剩 2/30 可判。
归档 2.filter 上的实测结果(\(\kappa = 1.20\)):
| 量 | 结果 |
|---|---|
| 逐观测改正量 \(s\lambda\) | 中位 1.5%,最大 3.4% |
| 逐观测系统误差 \(\delta s\,\lambda\) | 中位 1.0%,最大 2.2% |
| 系统/统计之比 | 中位 0.15,最大 0.23 |
| 判定 | 19 PASS,0 FAIL,11 UNTESTED |
| 最大 \(\lvert z_\mathrm{corr}\rvert\) | 1.8(阈值 3) |
| 全样本 \(\ln(L_K/L_R)\) | 改正前 \(-0.0258 \pm 0.0164\)(\(-1.6\sigma\)),改正后 \(-0.0094 \pm 0.0166\)(\(-0.6\sigma\)) |
最后一行是本节的要点:早先在归档 GTI 上看到的那个 \(\approx -1.9\sigma\) 的整体线亏损,是这个耦合造成的,改正后消失。若不做改正而只是放宽容差,那个亏损会一直挂在那里,被误读为滤波真的削掉了线。
耦合本身的两点诚实说明,页面上必须写:
- 观测内斜率 \(+0.0098 \pm 0.0063\) 本身不显著(1.6σ)。仍然改正,是因为不改正时它的 2σ 上界 \(\times\) 最大杠杆给出 7.7% 的偏差,与该观测 7.8% 的统计误差同量级;改正后残差只剩 2.2%。对一个已测出中心值的效应做改正并携带其误差,是标准做法,不因不显著而豁免。
- 闸门没有能力检出自己的偏差。 直接回归 \(\mathrm{d}\ln(L_K/L_R)/\mathrm{d}\lambda = -0.0177 \pm 0.0226\),与零相容(0.8σ),也与耦合的预言 \(-0.0098\) 相容(0.3σ);Spearman \(\rho = -0.027\),\(p = 0.91\)。数据分辨不了。因此改正的正当性来自独立测得的观测内斜率,不来自闸门自身的数据,这一点不得含糊。
拟合简并已被排除。 观测间的线-连续谱斜率是 \(+0.0448 \pm 0.0149\)(3.0σ),远大于观测内的 \(+0.0098 \pm 0.0063\),两者差 2.2σ。简并是拟合的属性,拟合不知道哪些谱来自同一指向,因此必须给出相同的斜率;两者不同说明观测间的相关是共同物理成因(指向之间相隔数月,粒子环境不同),不是线与连续谱在拟合中的简并。此结论 2.2σ,不算强,受体中必须如实记录该显著度,并在更多数据可用时重测。
硬性前提:线带与选择带不相交。 若构造候选 GTI 所用的时间序列能段包含线,闸门会静默地恒真——已实测线落在选择带内时比值 0.907–0.939,落在带外时 0.985–1.019。实现必须以程序方式校验并在重叠时中止,不得警告放行。这条与 §3.3 是同一条规则的两个面。
已知盲区,必须在页面上写明。 闸门的精度由被删时段里线的可测性决定,\(f_T \to 1\) 时归零,任何统计量都救不回来。在 0.10 容差下 11/30 落在盲区。
盲区的边界不是被删曝光长度。 这一点容易搞错,必须写清楚:0800730301 只有 1.49 ks 被删曝光却可判(\(\sigma_\mathrm{tot} = 9.1\%\)),0800731101 有 4.01 ks 却不可判(\(16.6\%\))。决定因素是被删谱中线相对其自身连续谱的显著度——耀发把连续谱抬高十几倍,线被淹没,曝光再长也测不准。实现中判定 UNTESTED 必须依据算出的 \(\sigma_\mathrm{tot}\),不得用曝光长度或 \(f_T\) 的阈值代替。
其中 10 个盲观测的降低倍数 \(\le 1.006\)——删得少所以降得少,盲也无害。但有一个例外,必须如实记录:0800731101 盲(\(\sigma_\mathrm{ratio} = 0.138\),\(\kappa\) 标定后 0.166)而降低倍数 4.83。 成因是短而强的耀发:被删的 4.01 ks 里连续谱被抬高约 24 倍(\(\lambda = 3.19\)),线在其中测不准,而可扣掉的连续谱很多。因此「闸门恰好只在无害处失效」这个说法不成立,不得写进页面。这类观测(高 \(R\) 且盲)必须在前沿上单独标出,其 \(R\) 按未受保护处理。
外部参照不可用。 见 §3.8:观测间 Al-K 率 \(\chi^2/\mathrm{dof} = 9.75\),campaign 均值不是合法参照,不得用它来救盲区。
3.10 纵坐标 \(R\) 会在哪里失效
\(R\) 的每一条失效模式都要在页面上写明,并说明由什么别的东西兜住。
(a) \(R\) 不是软质子去除比例。 \(C_K\) 里含天空背景与 QPB,这两样删不掉。因此 \(R\) 有硬天花板 \(C_\mathrm{all}/C_\mathrm{floor}\),且这个天花板由观测本身有多少耀发决定,不由策略好坏决定。实测支持这个图像:\(C_K\) 落在 0.27–0.36(27/30),近乎常数,所以 \(R \approx C_\mathrm{all}/\text{const}\)。推论:\(R\) 不可跨观测取平均、排序或汇总。 前沿只能在单个观测内画,跨观测只能比较前沿的形状,不能比较高度。这一条要在实现里以断言形式固化。
(b) 零软质子观测上前沿塌成一点。 0800730201、0800730401、0800730801、0800730901、0800731901 的 \(R = 1.000\),任何策略都分不开。这是正确行为,不是缺陷,但意味着这些观测不参与策略选择,只进零对照集。实现必须按此分流,不得把它们混进前沿拟合。
(c) 基底里的稳态软质子不可见。 \(R\) 测的是向基底的下降,而基底本身含稳态软质子分量。\(R\) 看不见它。这是 §3.6 已经声明的边界,不得因为换了纵坐标就当作解决了。
(d) \(R\) 单调奖励多切。 只保留最安静的格子总能把 \(R\) 做大,向下压的力量只有 \(f_T\)。因此 \(R\) 不得单独最大化,只能在 \((f_T, R)\) 二维上取前沿——这就是两参数框架存在的理由,不是可选的呈现方式。
(e) 闸门在部分高 \(R\) 观测上无判定力。 见 §3.9 末段,0800731101 是实例。
(f) 异常 CCD 与视场内变源 \(R\) 分辨不了。 与 §3.7 第 5、6 项一致,由 emanom 预筛与空间紧致度判据处理,不由 \(R\) 处理。
3.11 图件
至少覆盖:零控制(0800730201)、强耀发(0800732501)、中间态(0800730101)、连续谱模型对账(对数抛物线 vs 裸幂律的似然比)、故障注入矩阵、留出转移分布。每张图必须由本规格产生的受体驱动,不得手工填数。
3.12 文档与发布
proposal.md§8.1 整节替换为 \((f_T, R)\) 与线流量闸门;A/η降级为"已作废指标"的一段说明,连同它为何失败的实测数字(置换z_null、Poisson 零假设假阳性率、活时间 bug),并指向e1受体。- 页面重新渲染并发布到既有 Cloudflare Pages 项目
cdfs-mos-sp-audit的/sp-gti-proposal路由,保持既有设计、排版、暗色模式、KaTeX 版本钉定与图卡样式。
4. Do NOT (NEGATIVE SPACE)
- 不要保留
A(K)/η(K)作为并行指标或"备用纵轴"。它被作废,只以历史说明的形式出现。 - 不要在选择能段与连续谱窗重叠时以警告放行——必须中止。
- 不要用 Gehrels 上限表达式当方差。
- 不要引入
mos-back、ARF、matched background、forward-folded 响应闭合。 - 不要把折断幂律换到 1.00–2.20 keV 的线下局部连续谱上:该窗口整个在 3.2 keV 折点以下,折断幂律在其中退化为单幂律,而单幂律已被似然比检验拒绝(宁静谱 ΔC 中位 9.1,17/23 超过 99%)。那里保留 log-parabola,但必须改正注释中的因果错述:需要曲率的是宁静谱(天空 Fe-L/Mg 复合体加 1.84 keV Si K 边),不是耀发谱。
- 不要修改或删除
scripts/m31_mos2_variable_sp_removal.py的实现主体。 - 不要把 \(R\) 的解析显著度当判据;判据是置换
z_null。\(C_\mathrm{all}\) 与 \(C_K\) 来自嵌套事件集,解析传播不适用(§3.4)。 - 不要在
NaN/Inf出现时写进 JSON;写显式null并附原因字符串。 - 不要在部署的 HTML 中出现任何本地路径、主机名或凭据。
- 不要运行任何 git 命令;本目录不是 git 仓库。
- 不要用旁带扣除代替拟合来测线流量。旁带受连续谱影响,而连续谱正是耀发时变化最剧烈的量;本规格所有线流量数字都来自逐窗拟合。旁带估计可作诊断记录,但不得进入闸门。
- 不要用 campaign 均值 Al-K 率作闸门参照。观测间
chi2/dof= 9.75,这条路已被测量否掉。 - 不要用被删曝光长度或
f_T的阈值判定 UNTESTED。反例已实测:0800730301 用 1.49 ks 可判,0800731101 用 4.01 ks 不可判。只能依据算出的sigma_tot。 - 不要把 UNTESTED 当 PASS,也不要为了让更多观测「可判」而放宽
sigma_tot容差——容差放宽不增加信息,只是把无判定力的结论改标成通过。 - 不要用一个统一放宽的容差代替逐观测的耦合改正。杠杆
ln(C_R/C_K)跨 0.56–3.43,平摊的容差对安静观测过度保护、对 0800732501 仍保护不足,而且会把一个可改正的有符号偏差永久留在结果里(实测:不改正时全样本线亏损 −1.6σ,改正后 −0.6σ)。 - 不要跨观测平均、排序或汇总
R:它的天花板由观测自身的耀发量决定,不由策略决定。 - 不要单独最大化
R;只在(f_T, R)二维上取前沿。 - 不要声称闸门只在无害处失效——0800731101 是反例(盲且
R= 4.83)。 - 不要编写兼容层代码(§8 刻意为空)。
5. Acceptance Criteria (DONE)
- [ ]
python3 scripts/m31_mos2_line_continuum_invariant.py --help退出码 0。 - [ ] 完整跑通并写出受体 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']))"输出 schema、status 与观测数。 - [ ] 线稳定性前提:逐窗拟合的观测内线率
chi2/dof与 0/30 超 3σ 的结论在本轮数据上重现;受体中记录每个观测的斜率显著度与单窗精度。 - [ ] 线不响应耀发:
d(line)/d(continuum)的 2σ 上限被计算并写入受体。 - [ ] 外部参照被排除:受体中记录观测间 Al-K 的
chi2/dof(实测 9.75)与散布(6.5%),并显式声明闸门参照为本观测L_all,不得为 campaign 均值。 - [ ] 闸门三态:每个观测输出 PASS/UNTESTED/FAIL 之一;
sigma_tot容差与其实测分布一并写入受体;UNTESTED 不得在任何汇总中计为通过。 - [ ] 闸门误差标定:在本观测集上重算
chi2/dof过散因子kappa并用于判定,受体中同时记录标定前后的z。 - [ ] 耦合改正:观测内
d lnL / d lnC在本轮数据上重测;逐观测的杠杆lambda、改正量s*lambda、系统误差ds*lambda与sigma_tot全部写入受体;改正前后的全样本ln(L_K/L_R)并列记录(实测 −1.6σ → −0.6σ)。 - [ ] 简并排除:观测间与观测内斜率及其差的显著度写入受体(实测 2.2σ),并在页面上标注该结论强度不高。
- [ ] 闸门自检无力:
d ln(L_K/L_R) / d lambda的回归结果写入受体,并显式声明改正的依据来自独立测得的观测内斜率,而非闸门自身数据。 - [ ] 闸门盲区:受体中列出所有 UNTESTED 观测及其
R、sigma_tot、被删曝光与杠杆lambda;R > 1.15且 UNTESTED 的观测(已知 0800731101,R= 4.83,sigma_tot= 0.166)在前沿图上单独标记。 - [ ] 线带⊥选择带:线带与选择带重叠时程序中止;受体中不得出现该配置的闸门结论。
- [ ] 纵坐标跨观测禁令:实现中存在断言,阻止对
R做跨观测平均或排序;零软质子观测(R= 1.000)被分流进零对照集而非前沿拟合。 - [ ] 零控制:0800730201 与 0800730401 在「选择能段 ⊥ 1.00–2.20 keV 拟合窗」配置下,
|z_null| < 3且闸门 PASS(实测z_null= −0.6 / −1.4,闸门 z = +1.1 / −0.3)。 - [ ] 重合检测:在选择能段与 1.00–2.20 keV 拟合窗重合的配置下,程序中止并给出非零退出码;受体中不得出现该配置的分数。另需在关闭该中止的诊断模式下复现偏差量级(实测:无 SP 观测
z_null= +5.5 / +6.1,闸门 FAIL 于 −5.4 / −4.6),并记录该诊断运行不得用于任何前沿结论。 - [ ] 强耀发:0800732501 的
z_null > 10,且闸门给出 PASS 或 UNTESTED 而非 FAIL。 - [ ] 零分布中心:所有配置的置换零分布均值落在
1.00 ± 0.02(实测 0.9992–1.0016)。 - [ ] 重合陷阱的观测依赖性:受体中并列记录重合配置在零软质子观测与强耀发观测上的
z_null与闸门判定,用以说明该陷阱专门在对照观测上造假(实测:0800730101 上重合与不相交的R差 0.002,格子共享 183/188)。 - [ ] 全族假阳性率:零控制观测上跑完整候选网格,报告达到判据的候选比例。
- [ ] 故障注入:§3.7 六格全部有数;第 3 格(只在选择能窗内的条件涨落)在正确配置下不产生假阳性。
- [ ] 留出:训练/留出划分写入受体且带冻结时间戳;留出集上的符号检验结果被报告。
- [ ] 图件全部由受体驱动重建,
python3 scripts/make_proposal_figures.py退出码 0,且fig9_construction.png、fig10_eta_sample.png不再生成。 - [ ] 页面
https://cdfs-mos-sp-audit.pages.dev/sp-gti-proposal返回 200;本地与线上 HTML 及每张图的 SHA-256 一致;部署 HTML 中无本地路径/主机名/凭据。
6. Rollback Plan
改动全部是新增文件加三个可再生成的产物(proposal.md、图件、已部署页面)。回滚方式:e1 受体与 scripts/m31_mos2_variable_sp_removal.py 原样保留,proposal.md 的上一版本在已部署页面的历史版本中可取回,重新渲染即可退回。历史受体目录全程只读,不存在需要撤销的破坏性变更。
7. Extra Notes for Implementer
- 先读
scripts/m31_mos2_contrast_statistics.py:其模块 docstring 写明了本项目的不确定度契约(不相交集合用精确 Poisson;Gehrels 上限不是方差),以及live_coordinate/circular_shift_null的实现模式。 scripts/m31_mos2_removed_component_spectrum.py是最接近的参考:同样的输入、同样的差谱定义、同样的 JSON 清洗器、同样的受体形状。- 屏蔽角区几何必须逐观测从该观测自己归档的
corlc.fits的SLCTEXPR头关键字解析(两个 CIRCLE、四个带转角 BOX,数值各观测不同),不得硬编码。 - 全时段事件表在
inputs/m31_sirius_fulltime_20260909/,30 个 MOS2 MIEVLI;归档 GTI 与光变在inputs/m31_sirius_temporal_20260902/<obsid>/rpc/2.filter/。 - 性能:置换零分布需要 2000 draws × 30 观测 × 多种配置。先按格子建立各能段计数的向量,一次置换就只是重排索引再求和,不要每次重扫事件。
- 本项目的 docstring 风格是长解释:说明这个统计量意味着什么、以及它不授权什么结论。请沿用。
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
本项目没有独立测试套件;验收即为 §5 中可执行的受体检查与页面校验。