慢引出 spill 监视器
SlowExtractionMonitor 读取指定 慢引出(SlowExtraction) 命令产生的事件,
按跟踪圈数、物理到达时间或两者同时累计 spill 直方图。它不从环内选择粒子,
也不改变粒子状态。统计输入是 source 事件行,而不是反复扫描负 tag。
对同一 source 批次重复执行时,不会重复计数。
Source 必须精确匹配同束流 Sequence 中一个 SlowExtraction 的名称。
监视器必须与 source 位于相同 S (m),并在 source 后执行。
默认优先级 850、860 满足这一顺序;同位置使用显式 Order 时,
应为该处每条命令设置互不相同的值。
监视器必须从 source 首个批次开始消费每次调用,包括统计窗口之外的圈。
遗漏批次会报错;监视器不会从 source 文件补读漏掉的事件。
窗口与分箱定义
圈数窗口和物理时间窗口均可独立配置,同时设置时取交集;两个窗口均为左闭右开。 监视器窗口只筛选 source 已经收集的事件,不改变 source 的引出条件, 也无法恢复 source 未曾收集的粒子。
Bin by="turn" 按 Turn bin width 指定的圈数宽度分箱,以 Start turn
为分箱起点。Bin by="time" 按 Time bin width (s) 指定的秒数宽度分箱,
以 Time origin (s) 为时间网格原点。"both" 分别输出两类直方图。
时间分箱始终采用 source 捕获的粒子到达时刻:
不使用固定回旋频率换算。同一圈的粒子可以落入不同时间 bin,较晚跟踪圈产生的事件 也可能更新更早的时间 bin。因此,运行中的时间直方图始终是可更新状态, 写出一次快照不代表关闭其时间 bin。
名义边界 bin_start、bin_end 在不同快照之间保持固定。
时间边界按 float64 的 origin + k * width 计算;事件与这些实际保存的边界
进行严格左闭右开比较,不用容差将相邻时刻吸附到边界。若 bin 宽度过小,
无法在观测时刻分辨相邻边界,则报错。
observed_start、observed_end、observed_width 单独表示当前观测所覆盖的部分。
圈数覆盖范围是监视器圈数窗口内实际执行的圈号区间。时间覆盖范围是 source 参考时刻
与所接受事件时刻的包络,再截取到监视器时间窗口。该包络不证明其中所有粒子到达事件
都已完整结束。
观测范围内会补齐零计数 bin,但不会把它们外推至整个请求的运行区间。
is_partial 标识覆盖不足一个名义 bin 的区间。若最新事件恰好位于时间 bin 边界,
可以暂时保留宽度为零的 partial bin,直到后续观测扩展覆盖范围。
比较完整 bin 的 spill 均匀性时,应排除 partial bin,并在报告纹波指标时保留所用分箱宽度。
接口参数
Python 参数 |
JSON 字段 |
类型 / 默认值 |
含义 |
|---|---|---|---|
|
|
|
只读 spill 监视器类型。 |
|
|
有限非负浮点数,必填 |
必须与 source 位于同一跟踪截面。 |
|
|
严格整数或 null;null |
同位置顺序,默认优先级 860。 |
|
|
非空字符串,必填 |
本束流中 |
|
|
|
|
|
|
严格正整数;1 |
名义圈数 bin 宽度,以 |
|
|
有限正浮点数;0.001 |
名义物理时间 bin 宽度。 |
|
|
有限浮点数;0 |
时间分箱网格原点,允许负 bin 索引。 |
|
|
严格非负整数;0 |
包含的统计起始圈。 |
|
|
严格整数或 null;null |
不包含的终止圈;设置时必须大于起始圈。 |
|
|
有限浮点数或 null;null |
包含的事件到达时间下界。 |
|
|
有限浮点数或 null;null |
不包含的时间上界;两者均设置时必须大于下界。 |
|
|
严格正整数;100 |
输出写盘间隔;finalize 时写出尚未发布的更新。 |
|
|
|
|
配置示例
以下片段假定同位置已经存在名为 extract 的引出动作。
from PASS.para.schema import SlowExtractionMonitorItem
seq.add("spill", SlowExtractionMonitorItem(
s=12.5, source="extract", bin_by="both",
start_turn=100, end_turn=10000,
start_time=0.10, end_time=1.20,
turn_bin_width=10, time_bin_width=1e-3, time_origin=0.0,
write_interval_turns=100,
))
只有同时满足圈数和时间边界的 source 事件才参与计数。
高层 API 的 monitors 列表也接受 type="SlowExtractionMonitor";
引出动作应单独使用 SlowExtractionItem。
输出表
表格写在运行输出目录下的 slow_extraction/;flat-output 模式省略
slow_extraction 子目录。文件名由 source 和 monitor 名称、摘要、运行标识及束流编号组成,
_turn.h5、_time.h5 后缀分别标识两类直方图。完整圈数 bin 在每次写盘时仅追加一次,
当前未完成的 partial 圈数 bin 仅在 finalize 时追加;内存中的 get_histogram("turn")
也包含当前 partial bin。时间表在同一路径发布完整累计快照,允许后续事件更新早期 bin。
source 的逐粒子事件表单独保存。
列名 |
含义 |
|---|---|
|
固定名义边界,单位为圈或秒,左闭右开。 |
|
相同单位下的已观测覆盖范围,宽度非负。 |
|
是否尚未覆盖完整名义 bin 的布尔标记。 |
|
bin 内的宏粒子事件数。 |
|
|
|
带符号的 |
|
按 bin 递增顺序累计的宏粒子数与真实粒子数。 |
|
仅时间表: |
|
仅时间表: |
当 observed_width 为零时,速率列写 NaN。速率的分母为已观测宽度,不假定完整 bin
都已被覆盖。partial bin 的速率不应直接参与完整 bin 的纹波统计比较。
headers 保存 source 事件文件身份、时间定义、窗口以及参考/事件观测包络。
CPU 与 GPU 路径均消费相同的独立主机事件批次,监视器不逐圈重读事件文件。 默认每 100 圈写一次输出,并在运行结束或 finalize 时写出。 正常处理中断时使用命令统一的 finalize 流程;进程突然结束可能丢失仍在内存中的更新。 圈数表追加失败可能留下不完整表格;执行会停止,不会重试该次追加。时间快照仅替换此前完整 发布的快照。当前实现没有恢复直方图状态与 source 事件历史的断点账本。
可按 表格输出格式 使用 PASS.utils.table_io.read_table 读取。
需要六维分布、逐粒子到达时间或其他离线分箱时,使用独立的 source 事件表。