99
1010## 1. 总体架构
1111
12- MFSL(MetaboFlow Spectral Library)是一个独立的数据资产,由两个核心库组成。两个库各自拥有完整的 8 维标签体系,通过 InChIKey 关联但不互相依赖 。
12+ MFSL(MetaboFlow Spectral Library)是一个独立的数据资产,由两个核心库组成,服务于分层注释流程中的不同环节 。
1313
14- ### 1.1 三层结构
14+ ### 1.1 双库结构
1515
1616```
17- Layer 1: 数据层
18- ├── deduplicated/*.msp 质谱库:60 万条 MS2 谱图峰数据(标签内嵌)
19- └── compound_metadata.csv 化合物库:127 万条化合物属性(= Level 3 数据)
20-
21- Layer 2: 索引层
22- └── spectral_metadata.csv 质谱库的只读快速索引(从 MSP 自动生成)
17+ 质谱库 (Level 2 数据) 化合物库 (Level 3 数据)
18+ deduplicated/*.msp compound_metadata.csv
19+ 60 万条 MS2 谱图 127 万条化合物
20+ 每条内嵌 8 维标签 每条有 8 维标签
21+ 数据内容:碎裂峰(mz + intensity) 数据内容:精确质量 + SMILES + 交叉引用
22+ 用途:Level 2 MS2 谱图匹配 用途:Level 3 MS1 匹配 + 元数据富集
2323
24- Layer 3: 文档层
25- └── DATABASE_MANUAL.md 来源清单 + 构建方法 + 架构说明
24+ 另附:DATABASE_MANUAL.md (来源清单 + 构建方法 + 架构说明)
2625```
2726
28- ### 1.2 双库关系
27+ ** 两个库各自独立,各自拥有完整的 8 维标签。 ** 搜索时各自按标签过滤,不依赖对方。
2928
30- ```
31- 质谱库 (Level 2) 化合物库 (Level 3)
32- deduplicated/*.msp compound_metadata.csv
33- 60 万条谱图 127 万条化合物(覆盖所有谱图化合物)
34- 每条内嵌 8 维标签 每条有 8 维标签
35- 数据:peaks(碎裂谱图) 数据:exact_mass(精确质量)
36- 用途:MS2 谱图匹配 用途:MS1 精确质量匹配
37- │ │
38- └──── InChIKey(前 14 位)────────────────┘
39- 增值关联,非必须依赖
40- ```
29+ ### 1.2 元数据富集:两个库如何协同
30+
31+ 质谱库和化合物库在注释流程中各司其职,但在** 结果输出阶段** 需要协同——Level 2 谱图匹配命中后,仅凭 MSP 文件里的信息(compound_name + InChIKey + score)不足以支撑下游通路分析(缺 KEGG ID)和结果报告(缺化学分类细节)。这是行业共同痛点:MetaboAnalystR 4.0 用本地 SQLite 解决,XCMS Online 依托 METLIN,多数工具需要用户手动做 ID 转换。
32+
33+ ** MetaboFlow 的方案:compound_metadata.csv 承担元数据富集角色。** 具体关联机制:
34+
35+ 1 . ** 主关联键:InChIKey** (完整 27 位优先,前 14 位退化匹配)
36+ - 覆盖率:MSP 谱图中 95.8% 有 InChIKey
37+ - compound_metadata 已包含所有谱图化合物(100% 前 14 位匹配)
38+
39+ 2 . ** 补充关联键** (用于 InChIKey 缺失的 25,274 条谱图)
40+ - HMDB ID:50% 的无 InChIKey 谱图有 HMDB ID(12,651 条),compound_metadata 有 hmdb_id 字段
41+ - CAS 号:29% 有 CAS(7,206 条),compound_metadata 有 cas_number 字段
42+ - 关联优先级:InChIKey 27 位 → InChIKey 14 位 → HMDB ID → CAS 号
43+
44+ 3 . ** 富集内容** :从 compound_metadata 获取的信息
45+ - KEGG ID → 支撑通路富集分析(ORA/GSEA)
46+ - HMDB ID → 支撑 MetaboAnalyst 兼容
47+ - 详细化学分类(chemical_class、application、sample)→ 结果报告和图表
48+ - SMILES → 结构展示
49+ - reg_lists → 环境筛查报告
50+
51+ 4 . ** 富集不是搜索的前置条件** ——搜索阶段(Level 2/3)各自独立完成,富集在搜索完成后执行。搜索性能不受富集步骤影响。
52+
53+ ### 1.3 标签与 MSP 原有字段的共存
54+
55+ MSP 文件中原有的字段(Ion_mode、Instrument_type、Spectrum_type 等)与八维标签存在部分重复:
4156
42- ** 核心原则:**
43- - 两个库各自独立——质谱库的标签不依赖化合物库查询,化合物库的标签不依赖质谱库
44- - InChIKey 关联是增值查询——有就补充更多信息,没有也不影响基础标签和搜索
45- - 标签内嵌 MSP 文件——行业标准做法(MassBank/GNPS/MoNA/FragHub 均如此)
46- - spectral_metadata.csv 是 MSP 的衍生物——从 MSP 文件自动生成,不是数据源
57+ | MSP 原有字段 | 八维标签 | 处理方式 |
58+ | ------------| ---------| ---------|
59+ | ` Ion_mode: POSITIVE ` | ` Polarity: positive ` | 原有字段保留(向后兼容),标签字段为规范化值,搜索用标签字段 |
60+ | ` Instrument_type: LC-ESI-ITFT ` | ` Instrument: orbitrap ` | 原有字段保留原始值,标签字段为归一化类别 |
61+ | ` Spectrum_type: Predicted ` | ` Confidence: predicted ` | 同上 |
62+ | ` Sources: massbank.msp; hmdb.msp ` | (source 维度从 Sources 字段提取) | 不新增字段,直接读 Sources |
63+ | ` Collision_energy: 20 ` | 无对应标签 | 不是过滤维度,不纳入标签 |
64+ | ` Quality_score: 95 ` | 无对应标签 | 同上 |
65+
66+ ** 原则:原有字段保留不删,八维标签新增写入。matchms 解析后两组字段各自独立存在于 metadata 字典中,不冲突。annot-worker 过滤时统一使用八维标签字段名。**
4767
4868### 1.3 注释匹配流程(matchms 真实工作逻辑)
4969
@@ -93,8 +113,8 @@ Step 7: Level 4 — 分子式推算
93113```
94114
95115** 关键说明:**
96- - spectral_metadata.csv 不参与此流程—— matchms 直接读 MSP 文件
97- - InChIKey 关联发生在 Step 4(元数据富集),不在搜索阶段
116+ - matchms 直接加载 MSP 文件,不需要中间索引文件
117+ - 元数据富集( Step 4)使用完整 27 位 InChIKey 优先匹配,匹配不到退化为前 14 位,再匹配不到用 HMDB ID / CAS 号补充关联
98118- Level 2 和 Level 3 是完全独立的代码路径,只共享标签过滤逻辑
99119- compound_metadata.csv 承担两个角色:Level 3 数据源 + 元数据富集来源
100120
@@ -201,30 +221,7 @@ matchms 原生兼容——每行自动解析为 `spectrum.metadata['chemical_cla
201221| lipidmaps_id | LipidMaps ID |
202222| cas_number | CAS 号 |
203223
204- ### 3.3 spectral_metadata.csv(只读索引,从 MSP 生成)
205-
206- | 字段 | 说明 |
207- | ------| ------|
208- | spectrum_id | 唯一标识 |
209- | inchikey | InChIKey(关联化合物库) |
210- | name | 化合物名称 |
211- | precursor_mz | 前体离子质量 |
212- | precursor_type | 加合离子类型 |
213- | formula | 分子式 |
214- | collision_energy | 碰撞能量 |
215- | file_source | MSP 文件名 |
216- | num_peaks | 峰数量 |
217- | quality_score | 质量评分 |
218- | chemical_class | 化学类别 |
219- | application | 应用场景 |
220- | sample | 样本基质 |
221- | confidence | 可信度 |
222- | instrument | 仪器类型 |
223- | polarity | 离子模式 |
224- | reg_lists | 监管清单 |
225- | sources | 数据库来源 |
226-
227- ** 生成方式** :` scripts/build_spectral_metadata.py ` 解析所有 MSP 文件,提取 header 字段 + Tags 行,写入 CSV。任何时候可以从 MSP 文件重新生成。
224+ * (spectral_metadata.csv 已废弃——其内容被 MSP 内嵌标签 + compound_metadata 完全覆盖,不参与数据处理流程)*
228225
229226---
230227
@@ -333,10 +330,9 @@ MFSL 的架构与搜索引擎无关——它只负责存储、索引、标签,
333330
334331```
335332~/spectral_libraries/
336- ├── DATABASE_MANUAL.md # 文档(含来源清单,原 registry.csv 内容并入)
337- ├── spectral_metadata.csv # 谱图索引(只读,从 MSP 生成)
338- ├── compound_metadata.csv # 化合物元数据(= Level 3 数据)
339- ├── deduplicated/ # MSP 峰数据(标签内嵌)
333+ ├── DATABASE_MANUAL.md # 文档(含来源清单、构建方法、架构说明)
334+ ├── compound_metadata.csv # 化合物元数据(= Level 3 数据 + 元数据富集来源)
335+ ├── deduplicated/ # MSP 峰数据(8 维标签内嵌)
340336│ ├── massbank_orbitrap_positive.msp
341337│ ├── norman_positive.msp
342338│ └── ... (50 个文件)
@@ -358,11 +354,11 @@ MFSL 的架构与搜索引擎无关——它只负责存储、索引、标签,
358354| 决策 | 理由 |
359355| ------| ------|
360356| 标签内嵌 MSP 而非仅存 CSV | 行业标准(MassBank/GNPS/MoNA/FragHub),自包含,不会 MSP/CSV 不同步 |
361- | spectral_metadata.csv 是衍生物 | 从 MSP 自动生成,用于快速统计和前端展示,不是搜索必经环节 |
357+ | 删除 spectral_metadata.csv | 内容已被 MSP 内嵌标签 + compound_metadata 完全覆盖,不参与数据处理流程 |
362358| 8 维标签全部适用所有化合物 | reg_lists 对非环境化合物为空值,但保留维度的统一性 |
363359| InChIKey 前 14 位跨库匹配 | 前 14 位是分子骨架,立体异构体共享,跨库匹配率从 35% 提升到 65% |
364360| 标签只用可信来源填充 | 不猜、不推测——原始库字段、库级别确定性标注、ClassyFire API |
365- | 两个库各自独立标签 | 质谱库原有 65% 谱图的化合物不在化合物库里(已通过合并解决) |
361+ | 两个库各自独立标签 | 质谱库搜索不依赖 compound_metadata,各自按内嵌标签过滤 |
366362| compound_metadata 覆盖所有谱图化合物 | 从 MSP 提取 13.6 万"谱图独有"化合物合并到 compound_metadata,实现 100% InChIKey 覆盖 |
367363| registry.csv 并入 DATABASE_MANUAL | spectral_metadata.csv 已覆盖其索引功能,registry 降为文档 |
368364| 去重保留来源追溯 | Sources 字段记录所有数据库来源,去重不丢信息 |
@@ -418,7 +414,7 @@ MFSL 的架构与搜索引擎无关——它只负责存储、索引、标签,
418414| compound_metadata.csv | ` xcms-worker/R/annotation_ms1.R ` | Level 3 精确质量匹配 |
419415| compound_metadata.csv | ` annotation_orchestrator.py ` Step 4 | 元数据富集(InChIKey → KEGG/HMDB/通路) |
420416| MSP 标签字段 | ` AnnotationParams.tag_filter ` | 前端标签过滤传给后端 |
421- | spectral_metadata.csv | 前端统计展示 | 不参与 E2E 搜索流程 |
417+ | MSP 内嵌标签字段 | ` annot-worker ` 加载后按 ` metadata ` 字典过滤 | 搜索前的标签筛选 |
422418
423419### 10.2 标签字段名对齐
424420
0 commit comments