Code, configs, charge LUTs, best.pth and evaluation records for each training run, the knife-edge / Siemens-star / XRF notebooks with outputs, and the overnight run reports. Epoch checkpoints, inference results and HTML exports stay local (see .gitignore). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
22 KiB
GridBased 重建工作流 —— 设计与 Work Package 分割
状态:草案 v0.1(2026-08-30);进度见第 9 节(2026-09-18) 目标:把 MLXID 从「cluster finder + 按光子数分模型」的链路,改为「在像素栅格上直接预测亚像素位置 + 能量」的链路,以支持多色(polychromatic)信号。 上游背景:27th iWoRiD 报告 Outlook 页 —— grid-based prediction from frames to X-ray reconstruction。
0. 出发点:为什么现在这条链路在多色下必然失效
现有链路(已完成 1/2/3 光子位置重建):
raw ADU → pedestal → 3D-LUT 标定 → keV frame → cluster finder
→ 用 cluster 总能量判定光子数 (E±ΔE / 2E±2ΔE / 3E±3ΔE)
→ 送进 1/2/3 光子专用模型 (3×3 / 6×6 / 9×9,cluster 中心化)
→ 亚像素位置
它有三个隐含前提,在多色下全部失效:
- 光子数由 cluster 能量判定。 多色下 cluster 能量 = ΣEᵢ,无法区分「1 个 24 keV」和「2 个 12 keV」。
- 每个多重度一个模型、输入尺寸固定。 光子数不可知,就无法选模型。
- cluster 中心化输入。 位置精度与 cluster finder 的定心行为耦合;效率也由 cluster finder 定义(报告里的 85% / 89% / 96%)。
新链路把 cluster finder 从「多重度分类器」直接删除,改由一个全卷积网络在固定像素栅格上输出:每个 cell 一组 (有无光子, 亚像素偏移 dx dy, 能量 E)。
新增能力:per-photon 能量 → 能量分辨成像 / K-edge / XRF 成分成像;效率不再由 cluster finder 定义,而是模型自身的 efficiency–purity 工作点,可连续调节。
1. 任务重述(整件事的核心)
从「对一个已切好的 cluster 回归 N 个点」变成「在一帧图像上做点目标检测」。
采用 CenterNet / anchor-free 形式:
- 输出张量与输入帧同尺寸,每像素 cell 5 个通道:
logit p(该 cell 内有光子)、dx, dy ∈ [−0.5, 0.5](cell 内亚像素偏移)、log E(能量); 可选第 6 通道z(深度,仅模拟有真值,作辅助任务)。 - 真值分配:光子
(x, y)分配给 cell(⌊y⌋, ⌊x⌋)。 - 推理:
p > p_thr→ 3×3 max-pool NMS → photon list(x = col + dx, y = row + dy, E)。
为什么是这个形式,而不是 DETR 式集合预测:变长输出天然、平移等变、可在任意尺寸帧上推理、训练稳定。集合预测(Hungarian matching,现有 2/3 光子 loss 的推广)保留为 ablation。
2. 八个核心设计决策
D1 — 全卷积:train small / infer large
不要 FC 层、不要 coordinate-embedding 通道、不要依赖全局统计的 BatchNorm(用 GroupNorm 或不用归一化)。
现有模型靠 coordinate embedding 把绝对位置喂进 FC 层。在 grid 形式下这既不必要(绝对位置 = cell index),也有害:它破坏平移等变,逼得训练尺寸与推理尺寸必须一致。保持严格平移等变,就可以用 32×32 小帧训练、直接在 400×400(乃至 full-size 1200×800)整帧上推理 —— 这是分块问题最干净的解法。
D2 — 感受野即 halo,halo 即唯一的算法死区
设感受野半径 R(4 层 3×3 valid conv → R = 4 px = 100 µm)。
- 训练:tile 用 same padding,但损失只在距 tile 边界 ≥ R 的 cell 上计算。零填充对被监督的 cell 完全不可见 → 训练/推理分布一致。
- 推理:整帧一次前向,只丢弃物理边界外 R 圈。tile 之间不存在重叠问题,因为根本不切 tile。
- 显存受限时(1200×800 并不受限,24 GB 足够)退化为大 tile(如 256×256)+ halo R 重叠、只取中心区域,逻辑与训练完全一致。
关于原设想的「sub-frame 之间 1–2 行重叠」:若坚持切小 tile 推理,重叠必须是 2R(每边 R),即 8 行/列,而不是 1–2;且 9×9 tile 配 R=4 只剩 1×1 有效区,计算浪费约 80 倍。这就是不切小 tile 的直接理由。
关于探测器边缘:物理上不可恢复的只有最外 1 圈(电荷跑出传感器)。R 圈是算法性的,可以用边缘增强训练(约 5–10% 训练帧含一条模拟传感器边界、界外为零)消除,把弃用区从 4 圈压回 1 圈。400×400 上是 2% vs 0.5% 面积。
D3 — 训练帧尺寸 32×32,而不是 9×9
9×9 来自现有 3 光子 cluster 尺寸,在 grid 形式下不再有意义。选 32×32:
- 有效监督面积占比
(32−2R)²/32² = 56%(9×9 只剩 ~1%); - 1% occupancy 下每帧 ~10 个光子,天然包含真实 pileup 与空白区的混合。
空白区必须进训练集,否则模型在空 tile 上会幻觉出光子 —— 这是 fake rate 的根源。推论:训练样本必须按帧生成(见 D7),而不是按"事例"生成。
D4 — 同 cell 简并与 NMS
两个光子落在同一个 25 µm cell 内时,栅格形式只能吐一个。这本就是物理上不可分的情形,但必须量化:统计「因同 cell 丢失」的比例随 occupancy 的变化。若需要,可给每个 cell 两个 slot(10 通道),代价是标签歧义。
建议先单 slot,用 pair-resolution 曲线(分辨概率 vs 两光子间距)作为基本 figure of merit,取代原来的 "efficiency vs occupancy"。
相邻 cell 对同一光子同时激活的重复计数,用 3×3 max-pool NMS 抑制;同时评估「位置空间按距离合并」作为替代方案。
D5 — 能量:平坦先验 + log 回归
训练能量从 4–32 keV 均匀采样(比目标 5–30 keV 略宽)。回归网络会把预测拉向训练先验的均值,平坦先验可最大限度避免谱形偏置;真实谱下的表现在评估阶段用重加权检验。
预期能量分辨:3×3 求和的噪声极限 ≈ √9 × 0.13 = 0.39 keV RMS(12 keV 处 Fano 项只有 ~75 eV,可忽略)。网络能看到 9×9 感受野且能加权求和,有可能优于固定 3×3 求和 —— 3×3 在大电荷云 + 像素角入射时会漏掉尾巴。这是一个可验证的增益点。
D6 — 样本产生:α(E,t)、β(E,t) 做二维曲面,不要独立插值 9 个拟合参数
McGeneration/Notebooks/DoubleParameterize.ipynb 目前停在「把 5–30 keV 每个能量点的 9 个参数画出来」。
不要对这 9 个参数各自拟合 E 的函数。α 的 4 参数多项式和 β 的 5 参数 p0(x−p1)^p2 + p3·exp(p4·x) + 2 都存在拟合简并,参数之间强相关且各自不稳定;逐参数插值会在中间能量产生非物理的 α(t)、β(t)。
推荐:把每个能量点已拟合好的 α(t)、β(t) 采样成表,构造 α[E, t] / β[E, t] 二维 LUT + 双线性插值(E 方向 1 keV 步长已足够密)。物理量本身光滑,拟合参数不是。
闭合检验:用 LUT 在 12 / 15 keV 重新生成样本,与该能量点直接拟合生成的样本比较 cluster 能量谱、eta 分布、3×3 能量份额分布。
D7 — 帧级生成器,噪声要补齐
现有 McGenerator.singleProcess 是「一帧一个光子、位置固定在中心像素内、再切 cluster」。改成帧级:
N ~ Poisson(occupancy × 面积),位置在整帧均匀;- 每个光子独立采 E(谱可配置)→ 由 E 取衰减长度 → 采 z₀ → 得漂移时间 t → LUT 取 α、β →
gennorm采样电荷对 → 叠加; - 噪声:实测 per-pixel pedestal noise map(已有)+ shot + calibration,新增 common-mode(MÖNCH 逐行/列共模让相邻像素相关,是 grid 检测器 fake rate 的主要来源,原先被 cluster finder 的形态学约束挡掉了)+ ADU 量化 + LUT 残余非线性;
- 物理补齐:Si 逃逸峰(1.74 keV)、康普顿 —— 多色 5–30 keV 下这些会污染能量谱。
一个需要专门检验的物理效应:低能(5 keV,衰减长度 18 µm)几乎全部在入射面转换 → 最长漂移 → 最大电荷云 → 分享最好;高能(30 keV,衰减长度 3.3 mm ≫ 320 µm)深度近似均匀 → 大量小电荷云 → 位置分辨变差。 位置分辨对能量不是单调的,也正因如此位置和能量必须联合预测。
D8 — 分两步走:先单色对标,再多色
不要同时改两件事。第一阶段用 12 keV 单色,在同一批模拟样本上把 grid-based 与现有 1/2/3 光子模型 + eta 插值直接对比(σ = 0.8 µm、DanMAX 表格里的 MTF50 / DQE 都是现成对标点)。过不了这一关,多色再好看也不可信。
3. 评估口径必须换
原来的 efficiency 是 cluster finder 给的;现在是检测问题,要报:
| 指标 | 说明 |
|---|---|
| efficiency (recall) / purity (1 − fake rate) | 作为 occupancy、能量、最近邻距离的函数;工作点由 p_thr 扫出 ROC |
| 位置残差 RMS / FWHM | vs 能量、vs z、vs 是否 pileup |
| 能量分辨与线性 | vs 能量、vs pileup |
| 亚像素均匀度 | grid artifact 风险:每 cell 独立回归偏移,天生倾向于避开 cell 边界 |
| 纯噪声帧 fake rate | 直接拿 pedestal run 跑模型 —— 最硬的实验检验 |
| pair-resolution 曲线 | 分辨概率 vs 两光子间距,取代 efficiency vs occupancy |
匹配方式:photon-level Hungarian / 贪心匹配,半径阈值 1 px。
4. 实验数据:现成的多色数据已经有了
DataProcess/Configs.py 里已存在 2603 MaxIV beamtime 的 XRF run(Moench014 标定):
AgMo_factor_10—— Ag Kα 22.16 / Kβ 24.94,Mo Kα 17.48 / Kβ 19.61 keV更正(2026-09-18):这些 run 在 12 keV 束流下测量,低于 Pb L3 边(13.04 keV),谱里没有 Pb L 线。Pg28_2_factor_1/Pg28_2_factor_10—— Pb Lα 10.55 / Lβ 12.61 / Lγ 14.76 keVPb28/Pg28/Pg17/Pg7是颜料样品(钴蓝 / 钴钛绿 → Co Kα 6.93,氧化铬绿 → Cr Kα 5.41,酞菁绿 → Cu Kα 8.04), 13.8 keV 处的峰是 Co+Co pile-up。
分立的已知能量线,是 per-photon 能量重建最直接的检验(谱线位置、能量分辨、相对强度)。每个样品都有 slit factor 1/2/4/10(CuCr 还有 20)的 flux 系列,占有率 0.6–7 %。
实际覆盖:Cr/Co/Cu(5.4–8 keV,12 keV 束流)与 Mo/Ag/Cd/Sb(17–26 keV,束流高于 Sb K 边)。全部 run 和选择理由见 Configs/infer_measurement_poly_Moench014.yaml。
XRF 用的是 Moench014,偏压 150 V 已由 beamtime 的 moench.config(highvoltage 150)确认。
单色对标数据也齐:DanMAX 12 keV knife-edge + flat field、SOLEIL 15 keV Siemens star,可直接复算 ESF / MTF / DQE 与已发表表格对比(DeepLearning/src/funcs_postprocess.py 全部可复用)。
吞吐量估计:5 层小卷积 ≈ 54k MAC/px → 400×400 整帧 ≈ 17 GFLOP → RTX 4090 上 ~0.2 ms/帧(≈ 5–6 kHz,与探测器帧率同量级);20 M 帧 ≈ 1 GPU-小时,实际会是 I/O 受限(6.4 TB raw)。即:grid-based 端到端未必比现在的 CPU cluster finder 慢。
5. Work Package 分割
依赖关系:WP0 → {WP1, WP2} → WP3 → WP4 → WP5 → WP6。WP1 在关键路径上。
WP0 — 框架与数据契约(~0.5 周)
GridBased/独立 git repo,沿用现有约定:src/+Configs/*.yaml(OmegaConf) +Results/<exp>/{Models,Plots}。- 数据契约(先定死,后面全部依赖它):
- 训练帧 HDF5:
frames [N, S, S] float32 (keV);变长真值 photon list(frame_idx, x, y, E, z)。 - 推理输出:photon list
(frame_idx, x, y, E, p),+ 可选分箱图像。
- 训练帧 HDF5:
- 评估 harness 骨架(matching + 指标),先用现有 1/3 光子模型跑通,保证新旧结果可比。
WP1 — 多色样本产生(~2–3 周,关键路径)
- 1.1 α(E,t) / β(E,t) 二维 LUT + 闭合检验(接
DoubleParameterize.ipynb)。 - 1.2 帧级生成器:Poisson 布点、可配置能谱、边缘增强帧、多进程产出。
- 1.3 噪声与物理补齐:common mode、逃逸峰、ADU 量化、LUT 残差;与实测像素能量谱 / cluster 能量谱对标(沿用 NIMA 论文的比法)。
- 交付:5–30 keV、occupancy 0.1–10% 覆盖的 ~10⁷ 光子级数据集 + 生成器配置。
- 门控 G1:模拟帧的像素能量谱、cluster 能量谱、eta 分布在 12 / 15 keV 与实测一致。
WP2 — 输入定义与分块(~0.5–1 周)
tiling.py:训练帧采样、损失掩码、推理(整帧 / 大 tile 两条路径)、边缘策略。- 单元测试:覆盖完备性(每个物理像素恰被一个有效区覆盖一次)、无重复计数。
- ablation:R(层数)与训练帧尺寸扫描;「预测质量 vs 距 tile 边界距离」曲线用来定 halo。
WP3 — 模型与损失(~2–3 周)
- FCN backbone(GroupNorm / 无归一化)+ 5 通道 head;focal loss(objectness)+ SmoothL1(offset / logE,仅正样本);max-pool NMS。
- 先单色 12 keV(D8),再多色。
- 门控 G2:12 keV 模拟上单光子 σ ≤ 0.8 µm;1.7% occupancy 下 efficiency ≥ 96% 且 purity 不劣于现有链路。
WP4 — 模拟验证与基准(~1.5–2 周)
- 第 3 节全套指标;与 eta 插值、现有 1/2/3 光子模型在同一批样本上对比。
- 亚像素均匀度与展平方案(flat-field 自归一化 / Rosenblatt)。
- 门控 G3:5–30 keV 全区间 efficiency / purity / 能量分辨成表;亚像素均匀度可接受或有可用展平方案。
WP5 — 实验数据(~2–3 周)
- 5.1 帧级标定流水线:复用
UsefulFuncs.convertAduFrameToEnergyFrame,去掉 cluster finder 分支。 - 5.2 大规模推理 + photon list 输出 + 分箱成像(复用
binning_factor = 10)。 - 5.3 XRF 多色验证(AgMo / Pb):谱线位置、能量分辨、能量分辨成像。
- 5.4 单色复算:DanMAX knife-edge ESF/MTF/DQE、SOLEIL Siemens star,与已发表表格对比。
- 5.5 pedestal run 上的 fake rate 实测。
- 门控 G4:MTF50 ≥ 现有 DL 数字;XRF 谱线可分辨且位置正确。
WP6 — 扩展与集成(开放)
full-size MÖNCH 1200×800;ONNX / TensorRT 导出;在线管线集成;detector design scan(pixel pitch / sensor thickness / bias voltage)。
WP7 — 产出
iWoRiD / NIMA、thesis chapter;MLXIDDemo 增补 grid-based 分支。
6. 风险清单
| # | 风险 | 缓解 |
|---|---|---|
| R1 | 亚像素栅格伪影比现有方法更严重(每 cell 独立回归偏移,cell 边界处天然稀疏)。最可能真正卡住的一条。 | flat-field 自归一化;训练时亚像素抖动增强;或改用连续 heatmap + soft-argmax |
| R2 | fake rate / common mode —— cluster finder 的形态学约束没有了 | 噪声建模补齐 + pedestal run 实测 + p_thr 工作点 |
| R3 | sim-to-real gap —— 5–30 keV 全区间 LUT 标定的非线性残差 | XRF 线交叉检验;必要时用单色 run 的 pseudo-label 微调 |
| R4 | 同 cell 双光子的内禀损失,在高 occupancy 下成为主要低效来源 | 量化并写进 pair-resolution 曲线;必要时双 slot |
| R5 | 多色下没有"能量窗"可做数据侧筛选 —— 实验数据不再有 easy ground truth | 验证只能靠 XRF 线 + MTF + flat-field 均匀性三条腿 |
7. 已定 / 待定
已定(2026-08-30)
| 决定 | |
|---|---|
| 第一阶段工作点 | 12 keV 单色,MOENCH040 @150 V —— 直接对标 DanMAX knife-edge 与已发表的 σ=0.8 µm |
| 训练 occupancy | 对数均匀 0.2 % – 10 %(可配置),一个模型覆盖全通量;测试用 0.5/1/2/5/10 % 固定点逐步观察 |
| 样本来源 | 复用现成的 12keV_Moench040_150V_*.npz(10 M 无噪声 5×5 stamp),叠加成帧后统一加噪声;WP1.1 的 α(E,t) LUT 推迟到多色阶段 |
| 训练帧 / halo | 32×32 训练帧,R = 4 px(4 层 3×3),有效区 24×24;推理整帧 |
待定
XRF run 的偏压 / 增益设置需确认—— 150 V,见第 4 节。- 训练能谱:实际采用平坦 5–30 keV。XRF 表明能量头在两端 ~0.75 keV 内有偏移和刻度压缩(Cr Kα 5.41 keV 受影响), 建议下一版扩到 ~3–35 keV,使感兴趣的谱线都离边界 ≥ 1 keV(见第 9 节)。
- 是否要
z(深度)作为辅助输出 —— 有助于让网络显式学电荷云尺寸,但推理时无用。 - Moench040 的传感器厚度:现成样本的 z 范围是 0–650 µm,与 Moench014 的 320 µm 不同,多色阶段重做参数化时要对齐。
8. 建议目录结构
GridBased/
├── docs/
│ └── WORKFLOW_DESIGN.md # 本文件
├── Configs/
│ ├── generate_frames.yaml # WP1 帧级生成
│ ├── train_grid.yaml # WP3
│ └── infer_<run>.yaml # WP5
├── src/
│ ├── charge_model.py # WP1.1 α(E,t)/β(E,t) LUT
│ ├── frame_generator.py # WP1.2 帧级 MC
│ ├── noise_model.py # WP1.3 pedestal / common mode / 量化
│ ├── tiling.py # WP2 训练帧采样、损失掩码、推理分块
│ ├── datasets.py # WP3
│ ├── models.py # WP3 FCN + 5 通道 head
│ ├── losses.py # WP3 focal + SmoothL1 + 真值分配
│ ├── decode.py # WP3 NMS → photon list
│ ├── metrics.py # WP4 matching / efficiency / purity / 残差
│ └── measurement.py # WP5 标定 → 整帧推理 → photon list
├── scripts/
│ ├── 01_build_charge_lut.py
│ ├── 02_generate_frames.py
│ ├── 03_train.py
│ ├── 04_benchmark_mc.py
│ └── 05_infer_measurement.py
├── Notebooks/
└── Results/
可直接复用的现有代码:
McGeneration/McGenerator.py—— 漂移时间模型getDriftTime_allpix2_8p23、GGD 参数化流程DataProcess/UsefulFuncs.py——convertAduFrameToEnergyFrame(3D-LUT 标定)、pedestal 处理、raw 帧读取DeepLearning/src/funcs_postprocess.py—— ESF / MTF(ISO 12233) / NPS / DQE / 亚像素归一化EtaInterpolation/—— baseline 对比
9. 进度与门控(2026-09-19)
| WP | 状态 | 说明 |
|---|---|---|
| WP0 框架与数据契约 | ✅ | 00_selftest.py(坐标、D4、平移等变、位置空间合并) |
| WP1.1 α(E,t)/β(E,t) LUT | ✅ | 01_build_charge_lut.py + 01b_validate_charge_lut.py(留一法插值检验);现用 3–30 keV 表 data/charge_lut_Moench014_150V_3to30keV.npz(2 keV 模拟只有 328/512 个深度 bin,未用) |
| WP1.2 帧级生成器 | ✅ | 12 keV stamp 复用;3–30 keV 逐光子 LUT 采样(衰减长度表已补到 2 keV) |
| WP1.3 噪声 / 物理补齐 | ❌ | 只有 0.13 keV 像素噪声;逃逸峰、康普顿、LUT 增益残差、入射窗未做;门控 G1 未正式比对 |
| WP2 halo / 有效区 | ✅ | 严格验证;边缘增强已实现。训练帧尺寸 ablation 未做(R = 3 vs 4 已比较,见下) |
| WP3 模型与损失 | ✅ | 12 keV(MOENCH040)模型;多色:5–30 keV [32,64,128,128](旧默认)→ 3–30 keV 四种规模 → 默认 3–30 keV [32,64,96,96] |
| WP4 模拟验证 | ✅ | G2 通过(README "Baseline comparison");G3:3–30 keV 效率/纯度/能量响应已成表(eval_summary.json、07_energy_response.py) |
| WP5.1/5.2 测量流水线 | ✅ | GPU 标定(两种 LUT 格式、column_masked 共模)、整帧推理(FP16 主干 + FP32 输出层)、成像 |
| WP5.3 XRF 多色验证 | ✅(部分) | AgMo、CuCrCo:谱线位置、能量分辨、效率。能量分辨成像未做(XRF run 都是均匀照射) |
| WP5.4 单色复算 | ✅(部分) | DanMAX knife-edge 四个 flux 点完成;SOLEIL Siemens star 未做 |
| WP5.5 fake rate | ✅ | 12 keV:0 / 1000 帧(101×101);多色默认模型:0 / 1000 整帧(400×400) |
| WP6 扩展 / WP7 产出 | ❌ |
门控:G1 ❌(未正式比对);G2 ✅;G3 ✅;G4 ✅ —— knife-edge σ = 1.360 µm(MTF50 138 lp/mm,0.66 % 占有率),与已发表最好链路(CNN 1 光子,1.355 µm,138 lp/mm)在误差内相同,XRF 谱线全部分开且位置正确。
训练范围与模型规模(2026-09-19,Results/overnight_poly3to30keV/report):训练下限从 5 keV 降到 3 keV 后,数据上 Cr Kα 从 +33 meV、核心被压缩到 0.18 keV,变为 +10 meV、σ 0.245 keV(MC 0.256),不再需要 MC 修正。同一批 3–30 keV 数据上比较四种网络:[32,64,96,96] 与 [32,64,128,128] 各项一致,快 23 %,定为默认;[32,64,64,64] 快 82 %,但 10 % occupancy 下能量分辨差约 5 %,dark run 在 3 keV 以下有 15 个误报;R = 3 高 occupancy 下最差。
能量分辨对比(默认模型,XRF slit factor 10,线形核心 σ / 全线形 FWHM,keV,直接输出、无修正;经典 = 同一批标定帧上的 3×3 求和):
| 谱线 | E [keV] | GridBased σ (FWHM) | 经典 3×3 σ (FWHM) | FWHM 比 | MC 核心 σ |
|---|---|---|---|---|---|
| Cr Kα | 5.41 | 0.245 (0.58) | 0.398 (0.94) | 0.62 | 0.256 |
| Co Kα | 6.93 | 0.265 (0.62) | 0.408 (0.96) | 0.65 | 0.264 |
| Cu Kα | 8.04 | 0.305 (0.72) | 0.441 (1.04) | 0.69 | 0.267 |
| 弹性散射 | 12.0 | 0.311 (0.73) | 0.470 (1.11) | 0.66 | 0.279 |
| Mo Kα | 17.44 | 0.327 (0.82) | 0.464 (1.09) | 0.75 | 0.275 |
| Mo Kβ | 19.64 | 0.353 (0.83) | 0.492 (1.16) | 0.72 | 0.290 |
| Ag Kα | 22.10 | 0.378 (0.95) | 0.489 (1.15) | 0.82 | 0.301 |
- D5 的预期得到证实:网络比固定 3×3 求和窄 18–38 %,核心 σ 在所有谱线上都低于 3×3 的噪声极限 0.38 keV。
- Cr、Co 与 MC 一致(±5 %);Cu、弹性散射和 17–22 keV 的谱线比 MC 宽 12–26 %,多出一个 ∝ E 的项(~1 % E,像素增益残差一类)。这一项该放进 WP1.3。
- 效率:孤立光子(≥ 5 keV)99.97 / 99.99 %(MC 99.96 %)。grid 比经典多找 7–9 % 的光子,主要是经典方法合并掉的 pile-up。能量守恒 0.997 / 0.996。
- 谱线位置:grid 与表值差 ≤ 0.04 keV;经典 3×3 偏高 0.05–0.10 keV(Moench014 LUT 偏高 0.3–1 %)。"能量向中心偏"是尾部效应(均值),不是谱线偏移。
- 推理:FP16 时输出层须保持 FP32,否则能量落在 FP16 网格上(7–15 meV 步长),50 eV 能谱出现梳状结构。
下一步:WP1.3 加入增益残差 / 逃逸峰 / 入射窗并做 G1;XRF flux 系列(slit factor 1–20,yaml 已配置);SOLEIL Siemens star;上限 30 keV 附近的边界效应(Sb Kβ、Compton)如需处理,要有 30 keV 以上的模拟。