Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

GRID 标定数据处理

本仓库用于 GRID 载荷标定数据的处理、拟合与质量检验。

快速上手

前置依赖: uv(Python 环境管理)和 just(命令运行器)。

curl -LsSf https://astral.sh/uv/install.sh | sh   # 安装 uv
cargo install just                                  # 安装 just(或 brew install just)

部署:

git clone <repo-url> && cd calibration_process
uv sync                              # 安装依赖到 .venv
just init {ver} {data-path}          # 软链 data/{ver}/raw_data + 建输出目录({ver} 用 `just` 查看)
just check {ver} [--fix]             # 校验新配置/manifest 层与数据链接(--fix 自动建缺失输出目录)

详细部署步骤(装 uv/just、挂数据、新载荷初始化等)见仓库根 AGENTS.md 的「部署」一节。

跑数据(显式 workflow):

just all {ver}                       # 处理该版本全部 TB + EC 数据(单拟合 + 全局拟合)
just all {ver} --until L3            # 只跑到单拟合(L2=只读出、L4=构造点、L5=全局)
just fit-one {ver} tb {id}           # 单 measurement 单拟合
just global {ver} tb                 # TB 二维面拟合
just global {ver} ec                 # E-C 关系拟合
just discover {ver} {branch}         # 扫描目录 -> manifest 草稿
just oracle {ver}                    # 把本版产物冻结到 .oracle/{ver}/ 供回归比对

新版本由显式 workflow 驱动:配置在 src/calibration_process/configs/{ver}/(YAML + strict schema),每一步都调用同一个未改动的科学内核,因此结果与历史实现一致。

标定的基础流程

GRID 载荷标定分成 TB(温度-偏压)与 EC(能量-道址)两条线。处理是分层的, 每一层都可以选择落盘,just all {ver} --until L1|L2|L3|L4|L5 可停在任意一层:

[L0 原始数据]   data/{ver}/raw_data(软链到外部)
        │  discover → 人工确认 manifest
        ▼
[L1 忠实帧]     一个粒子 / 一次采样一行(含解析出的 crc_check)
        │       data/{ver}/l1/<key>/{sci,hk,tl}.parquet
        ▼
[L2 处理输出]   (sci, tel) 物理量:amp、遥测换算、CRC/run 过滤、按通道分组
        │       data/{ver}/l2/<key>/*.parquet
        ▼
[L3 单谱拟合]   peak / center / sigma / resolution / redchi / qa_flag(file_lib + util_lib 内核)
        │       single_process/{TB,EC,NEUTRON}_fit_result/<stem>.{fit.json,spectrum.parquet,pickle}
        ▼
[L4 构造点]     TBPoint / ECPoint(含通道过滤、能量映射;由 fit.json + L2 遥测重建)
        ▼
[L5 全局拟合]   TB:峰位~(温度,偏压) 二维面;EC:按 K 边拆段二次 + 分辨率拟合
                tb_logs/、ec_logs/(JSON / npy / 图,与历史格式兼容)
  • L1 / L2 是透明加速缓存(.gitignore,删掉可从 L0 重算);L3 的 *.fit.json / *.spectrum.parquet 是跨项目可移植产物,dill *.pickle 保留给旧消费方与冻结 oracle。
  • TB 单谱峰拟合不做温度偏压校正(corr = 1),温压依赖交给 L5 的二维面建模。
  • EC 单谱在 L3 生成阶段做 TV 校正:以 TB 二维面为参考(默认 25°C/28.5V), 把每个 EC 文件修正到该参考点(get_spectrum 里对 amp 乘因子)。
  • 各层的落盘格式、缓存键与跨项目读取见 docs/intermediate_data.md。
  • EC 再分成放射源与X 光机两条分支(背景/选点不同,见 workflows.md)。
  • 每个版本的实际选择规则与特殊处理见 docs/workflows.md。

增加一个新载荷

最小流程(新配置 + 新数据,无需改科学内核):

calib scaffold {ver} --data-dir /path/to/data   # 生成 configs/{ver}/*.yaml + 目录 + 软链 raw_data
# 1) 编辑 configs/{ver}/payload.yaml:reader / bin_width / adc_max / 分支路径 / channel_count
# 2) 若 reader 常量不同,改 configs/{ver}/reader.yaml(engine + handler + params)
# 3) 若包格式不同:新增 lib_reader/src/lib_reader/reader{ver}/,并在 lib_reader/__init__.py 注册
calib discover {ver} tb                        # 扫描 -> manifest 草稿(tb / ec_source / ec_xray 各一次)
# 4) 人工确认 manifest(去重、剔除坏点、设 use / channels.use)
# 5) 填 configs/{ver}/fit_range_tb.yaml / fit_range_ec_source.yaml / fit_range_ec_xray.yaml
calib check {ver}                               # 校验配置/manifest 层与数据链接
calib all {ver}                                 # 全流程:单拟合 + TB/EC 全局拟合
  • 若该版本的流程与已有版本完全相同,在 workflows/versions/ 里复用对应文件的 enumerate_measurements,并去 workflows/registry.py 注册即可(版本选择只发生一次)。
  • 若流程真的不同(不同的选点/背景/分辨率/模型),在 workflows/versions/v{ver}.py 里显式写出差异,并把差异点写进 docs/workflows.md。
  • 配置都是 strict schema:未知字段/非法枚举/重复 id/指向缺失文件 都会在 calib check 或 workflow 开始前失败,报错会带上 version/branch/measurement/字段。
  • 参考:不同读者 / 包格式判定、HK 截取、找峰、Co60 双高斯等工程细节见 docs/data.md;每个载荷现有 workflow 见 docs/workflows.md。

文档

详细文档在 docs/ 目录(清单与写作约定见 docs/README.md):

文档 内容
docs/workflows.md 每个载荷各自的显式 workflow(选点、reader、背景轮转、分辨率、特殊处理)
docs/workflow_matrix.md 历史 workflow 完整审计矩阵(每个版本实际做了什么)
docs/data.md 数据准备与目录约定:新配置/manifest 格式、新载荷接入流程与方法论
docs/results.md 结果产物与 QA 指标说明
docs/12B_13B/data.md 12B/13B 类载荷的数据说明(点位对照表、各文件的特殊情况)
docs/N1/data.md N1(GRIDN1)的数据说明(GAGG/CLYC 双数据集、扫描分段、坏点)
docs/payloads_data.md 其它 7 个载荷的数据说明(简化版:通用结构 + 各版本选点/排除)
docs/intermediate_data.md 分层中间数据(L1/L2 缓存、L3 可移植产物、pickle)、怎么读、跨项目分析、定制 pipeline

每类载荷的数据说明单独放一个目录(如 docs/12B_13B/),新增载荷时仿照添加。

命令速查

命令 说明
just 查看所有命令
just init {ver} {path} 初始化版本:软链数据 + 建目录
just check {ver} 校验新配置/manifest 层与数据链接(--fix 建缺失目录)
just all {ver} [--until LN] 处理该版本全部数据;--until 停在 L1/L2/L3/L4/L5
just fit-one {ver} {branch} {id} 处理单个 measurement 单拟合
just fit {ver} {branch} 处理单个分支单拟合
just global {ver} {branch} TB/EC 全局拟合
just discover {ver} {branch} 扫描目录生成 manifest 草稿
just list {ver} {branch} 列出已确认 measurement
just config {ver} {branch} {id} 查看单个 measurement 的 resolved 配置
just new-payload {ver} 为新载荷生成 YAML 配置/目录骨架
just oracle {ver} 把本版产物冻结到 .oracle/{ver}/(回归基准)
just compare {ver} 新流程 vs 冻结 legacy oracle 差异对比

仓库结构

.
├── README.md
├── docs/                           # 详细文档(清单见 docs/README.md)
│   ├── README.md                   # 文档目录说明与清单
│   ├── workflows.md                # 每个载荷各自的显式 workflow
│   ├── workflow_matrix.md          # 历史 workflow 审计矩阵
│   ├── data.md                     # 数据准备与目录约定、接入方法论
│   ├── results.md                  # 结果产物与 QA 指标
│   ├── payloads_data.md            # 其它 7 个载荷的数据说明(简化版)
│   ├── intermediate_data.md        # 分层中间数据(L1/L2 缓存、L3 可移植产物)/ 跨项目 / 定制 pipeline
│   ├── 12B_13B/                    # 12B/13B 类载荷的数据说明(详细版)
│   │   └── data.md                 # 点位对照表、各数据文件的特殊情况
│   └── N1/                         # GRIDN1 载荷的数据说明
│       └── data.md                 # GAGG/CLYC 双数据集、中子、EC、坏点
├── data/{ver}/                     # 各版本数据目录
│   ├── raw_data -> /path/to/data   # 原始数据软链(L0)
│   ├── l1/                         # L1 忠实帧 parquet 缓存(可删可重算)
│   ├── l2/                         # L2 处理输出 parquet 缓存(可删可重算)
│   ├── single_process/             # L3 单拟合产物(fit.json / spectrum.parquet / pickle / 图)
│   ├── tb_logs/                    # TB 面拟合产物
│   └── ec_logs/                    # E-C 拟合产物
├── lib_reader/                     # 各版本数据读取库(workspace 子包)
├── lib_plot/                       # 绘图库(workspace 子包)
├── grid_common/                    # 共享数值(谱/分辨率/naming,中立包)
├── src/calibration_process/
│   ├── cli.py                      # calib 命令入口
│   ├── pipeline.py                 # 高层编排(discover/list/fit/global/all/--until)
│   ├── config_schema.py            # strict Pydantic schema(payload/reader/analysis/fit_range/manifest)
│   ├── manifest.py                 # manifest 发现与加载(运行时不再扫目录)
│   ├── runtime.py                  # 解析后的运行时配置(resolved context)
│   ├── deploy.py                   # 部署校验 + 新载荷脚手架(calib check/scaffold)
│   ├── products.py                 # typed 中间产物(FileRunSpec/TBPoint/ECPoint)
│   ├── file_lib.py                 # 单文件读取与拟合(protected kernel)
│   ├── util_lib.py                 # 工具函数(拟合、阈值,protected kernel)
│   ├── configs/{ver}/              # 每版本 YAML 配置 + manifest
│   └── workflows/
│       ├── common.py               # 复用内核的 stage(single fit/points/global)
│       ├── registry.py             # 版本 -> workflow 模块(选择只发生一次)
│       └── versions/v{ver}.py      # 每版本显式 workflow(文件选择规则)
├── pyproject.toml
├── uv.lock
└── justfile

TODO

  • 12B 简易结果
  • 12B 完整结果(TB: 备份目录全 54 点位温偏面拟合,适用偏压 ≥27.5V 内残差 <3.5%;EC: 与其他载荷相同的 K 边拆段二次拟合(EC_low/EC_high 输出 schema 一致),锚点为 Am241/Na22/Cs137/Co60(双高斯拟合 1332 keV)+ X光机 20-100 kV(低管压点的能量按管压赋值、有已知系统偏差,仅作参考;见 docs/12B_13B/data.md))
  • N1 温偏 + EC(TB: GAGG/CLYC 分数据集二维面,合并后 GAGG ch1/2 与参考逐位一致、CLYC ch0/3 在 ±1.6%;EC: 放射源 + X 光机单条二次;中子束流为自洽快照;见 docs/N1/data.md)
  • 13B 完整结果
  • 10B, 11B 塑闪结果

Contributor

  • wqd
  • 丘智勇
  • Lee
  • yhl
  • xsq(Haruka Kujo)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages