北美质谱谱库 MoNA — 三百六十万条谱的众包集市

一百四十八个提交方 / 实验谱与计算谱同台 / JSON·MSP·SDF 三格式整库下载

来源 https://mona.fiehnlab.ucdavis.edu/发布时间: 2026-10-29最后更新: 2026-10-29 阅读 8
北美质谱谱库 MoNA — 三百六十万条谱的众包集市

信息速览

数据集名称北美质谱谱库 MoNA — 三百六十万条谱的众包集市
数据类型质谱谱图,元数据,化合物注释,检索型数据库
规模不适用(以谱图记录计数:三百六十万一千一百六十条)
接入方式https://mona.fiehnlab.ucdavis.edu/
AI 就绪度

MoNA 的全称是 MassBank of North America,由加州大学戴维斯分校基因组中心的 Fiehn 实验室托管,站点自述为「以元数据为中心、自动策展」的质谱谱图仓储。截至 2026 年 10 月底,其统计页给出的数字是:谱图记录逾三百六十万条,按 InChIKey 首段去重后约八十九万个化合物骨架,提交方一百四十八个。

它与商业谱库的差别不在规模排序,而在收录方式。同一套字段下既有各实验室采来的实验谱,也有由结构按碎片规则推算出来的计算谱,两者靠标签与打分区分;元数据不做人工复核,只由规则逐项加减分。整库可按谱型或命名库分块下载,也可经 REST 接口按字段检索。

下面先给规模、结构与边界三类数字,再拆记录结构、自动策展的打分逻辑与取数路径,最后与 METLIN、MassBank 两个相邻库逐一划界。一屏速览见下表。

维度 内容
全称 MassBank of North America(缩写 MoNA)
维护方 加州大学戴维斯分校基因组中心 Fiehn 实验室
别名站点 massbank.us(MassBank 联盟北美门户)
定位 以元数据为中心、自动策展的谱图仓储,非人工策展库
谱图记录 三百六十万一千一百六十条(统计页,2026-10-28)
化合物骨架 约八十九万个(按 InChIKey 首段去重)
提交方 一百四十八个
谱型 MS1、MS2、MS3、MS4;GC-MS 与 LC-MS 两大色谱类型
记录来源 实验采集与结构推算两类,同台存放
命名库 五十余个,最大的两个各逾百万条
下载格式 JSON、MSP(NIST 兼容)、SDF(NIST 兼容)
整库体量 JSON 五点二 GB、MSP 三点五 GB、SDF 四点六 GB
检索接口 REST,Spring Filter 查询语法,分页返回
许可 内容默认 CC BY 4.0,单条可不同;代码 LGPL v3
提交门槛 注册账户后可上传,上传内容默认套用站点许可
明确不含 原始质谱文件、色谱图、样本与受试者信息、人工复核结论

§1 它要解决的具体麻烦

1.1 谱图散在各家手里,格式还各不相同

做非靶向代谢组学的人迟早会撞上同一堵墙:手上有一堆未知峰,需要回答「这个峰可能是哪个分子」。答案不在任何单独的数据库里,而是散在几十个地方——仪器厂商的自带库、各国 MassBank 门户、大学实验室的自建库、 consortium 的共享库、论文补充材料里的表格。每一处的格式都不一样:有的给 MSP 文本,有的给 NIST 格式,有的只有一张论文里的柱状图。

把这些拼起来的工作量常常超过分析本身。更麻烦的是拼完之后无法追溯:某个峰是从哪个库来的、那张谱是用什么仪器采的、有没有碰撞能、许可允不允许再分发,这些信息在拼接过程中全部丢失。

MoNA 的切入点是把这些来源并到一个仓储里,用同一套字段存放,并且把「这条记录来自哪里、由谁提交、有什么元数据」作为一等公民保存下来。它不解决「谱图质量参差」的问题,它解决的是「找到并读进来」的问题。代价是所有来源被强行放进同一套字段,来源本身的整理水平差异在这一步被抹平。

1.2 三条常见的错误期待

常见期待 实际情况
以为它是一个经过人工审核的标准谱库 它自述为自动策展,只有规则打分与熵值标记,没有逐条人工复核
以为记录数就是这个库自己采的谱数 记录里混着大量从其他库并入的记录,以及由结构推算的计算谱
以为三百多万条都是独立化合物 按 InChIKey 首段去重后只有约八十九万个骨架,同一化合物常有几十上百张不同条件下的谱

1.3 它能给到的与给不到的

你的需求 它给的 够不够
一个未知峰的可能候选名单 按前体 m/z、加合物类型、谱型检索,返回候选谱 够做候选筛选,不够做确证
判断某张谱是不是噪声 每条记录带谱熵与归一化熵,展示页对高熵记录打噪声标 够做粗筛
批量拿谱做机器学习 整库三种格式下载,单条记录字段规整 够,但要自己清洗
GC-MS 的保留指数 部分记录带保留指数与衍生化信息 部分够,缺失普遍
定量信息 只有相对强度,没有浓度、没有响应因子 不够
原始质谱文件 不给,只有峰表 不够
样本来源与生物学背景 只有零散的 sample 字段,绝大多数记录没有 不够
可直接引用的许可结论 逐条不同,需逐条判断 不够,需自行核对

1.4 你的处境与它能帮到的事

你的处境 它能帮你什么 下一步该做什么
手上一批未知峰,要先出一个候选名单 按 m/z 与加合物检索,跨库一次查完 拿候选回标准品做保留时间确认
要训一个谱图匹配模型,缺大规模谱料 整库下载,字段统一,含正负离子与多级谱 先剔除计算谱,再按仪器类型分层
自己实验室的谱想公开又不想建站 注册后上传,自动获得记录页与检索入口 上传前确认许可条款与元数据完整度
想核对某个化合物到底有多少张公开谱 按 InChIKey 检索,跨来源汇总 注意同一化合物不同条件下的谱不具可比性
要做环境或食品的大规模 suspect screening 有专门的农药、真菌毒素、天然产物库 结合高分辨数据与保留时间模型使用
要一个能直接进报告的标准谱库 自动策展,无人工复核,评分不等于正确 改用商业标准谱库或自建验证集

1.5 一句话判断

如果你要的是一个「什么都有一点、许可清楚、能整库拖下来」的公开谱图集市,MoNA 是目前覆盖最广的免费选择之一;如果你要的是一份每一张谱都被专家核过的标准库,它的诚实程度只到「规则打分 + 熵值」这一层。

1.6 不适合谁:四条边界

第一,不适合需要确证结论的人。自动策展只做规则打分,一条记录拿到高分只说明它的元数据填得全,不说明这张谱采得准。用 MoNA 的谱去做定性,最后一步仍然要回到标准品或正交方法。

第二,不适合需要定量信息的人。记录里只有 m/z 与相对强度,没有浓度、没有响应因子、没有内标信息。任何试图从谱图强度反推含量的做法,都越过了这份数据的边界。

第三,不适合需要原始数据的人。MoNA 存的是峰表,不是仪器原始文件。想重做峰提取、想看色谱峰形、想换积分参数,都必须回到提交方或原始 repository 取数。

第四,不适合把整库当单一来源使用的人。同一个化合物在库里可能有来自十几个实验室的几十张谱,仪器不同、碰撞能不同、离子化方式不同。把它们平均或混在一起训练,得到的模型学到的是来源差异,不是化学规律。

§2 数据构成与规格

2.1 两层账:记录数与化合物数

MoNA 的规模有两本账,混着说必然出错。

第一本是记录数。统计页在 2026 年 10 月 28 日给出 3,601,160 条谱图记录,这个数字统计的是「谱」,一张谱一条记录,同一个化合物在正负两种离子模式下各采一次就是两条。首页的欢迎语曾经写「逾二百万条」,那是更早时点的口径,与统计页不同步。

第二本是化合物数。同一页面给出 892,269 个唯一化合物,去重规则是按 InChIKey 的第一段。这个规则值得说明:InChIKey 是二十七位字符串,分三段,第一段十四位编码的是分子的连接关系(骨架),第二段编码立体化学与同位素,第三段是版本与质子化状态。按第一段去重,意味着所有立体异构体被合并成一个骨架。

这个选择对使用者的影响是具体的:查一个带手性中心的分子,返回的「一个化合物」下面可能挂着若干立体异构体的谱。做手性分离的方法开发时,这一层合并会掩盖关键差异;做骨架层面的分类或检索时,这个合并恰好是想要的。

同页还有四个计数,用于说明元数据的体量:元数据类型八万四千余种、元数据值总数两亿一千余万、标签类型一百零一种、已打标签八百一十六万余个。其中「元数据值总数」除以记录数约为五十八,可以理解为平均每条记录带五十八个元数据项——这个量级说明 MoNA 确实是以元数据为中心设计的,而不是只存一张峰表。

2.2 谱型与下载集合

下载页把全部记录按谱型切成若干包,各包之间可以重叠。下表列出主要几项,数字取自同一次浏览。

集合 记录数 JSON 体量
全部谱图 三百六十万一千一百六十 五点二 GB
计算谱 三百一十九万一千一百零四 一点八 GB
实验谱 一百七十五万六千八百零七 三点六 GB
LC-MS 谱 一百三十二万八千零六十 三点零 GB
LC-MS/MS 谱 一百三十一万七千二百六十七 三点零 GB
QTOF 来源的二级谱 一百二十一万零五百一十三 二点七 GB
正离子模式二级谱 一百万零三百三十六 二点五 GB
负离子模式二级谱 三十一万三千五百四十三 五百四十 MB
Orbitrap 来源的二级谱 十五万九千四百六十三 二百七十七 MB
GC-MS 谱 一万九千七百三十五 十三点三 MB

从这张表能读出三件事。

其一,计算谱占了记录的绝大多数:三百一十九万条计算谱对一百七十五万条实验谱,两者之和已经超过总数三百六十万,说明这两个口径互相包含而非互斥。这是 MoNA 最容易被误读的地方——「三百六十万条谱」里真正由仪器采出来的只有一部分,剩下的是由结构算出来的。

其二,色谱类型严重偏向液相。LC-MS 系一百三十余万条,GC-MS 只有不到两万条。做气相方法的人在这里能拿到的东西,比液相少两个数量级。

其三,仪器类型集中在 QTOF。QTOF 来源的二级谱一百二十一万条,Orbitrap 来源的十五万九千条,其余类型更少。这意味着用 MoNA 训练或评估匹配算法时,模型见到的峰形与分辨率分布是偏的。

2.3 一条记录的完整解剖

经 REST 接口取一条记录,结构如下。字段名保持原样。

{
  "id": "WA002994",
  "compound": [
    {
      "kind": "biological",
      "inchiKey": "···",
      "inchi": "InChI=1S/···",
      "names": [{"name": "Cefuroxime", "computed": false, "score": 0.0}],
      "molFile": "···",
      "classification": [{"name": "alternative parent", "value": "Azacyclic compounds", "computed": true}]
    }
  ],
  "metaData": [
    {"name": "accession", "value": "WA002994"},
    {"name": "ms level", "value": "MS1"},
    {"name": "ionization", "value": "ESI"},
    {"name": "ionization mode", "value": "negative"},
    {"name": "instrument", "value": "ZQ, Waters"},
    {"name": "instrument type", "value": "LC-ESI-Q"},
    {"name": "retention time", "value": "11.420 min"},
    {"name": "column", "value": "2.1 mm id XTerra C18MS"},
    {"name": "exact mass", "value": 424.06888},
    {"name": "license", "value": "CC BY-NC"},
    {"name": "spectral entropy", "value": 4.1245},
    {"name": "normalized entropy", "value": 0.8311}
  ],
  "spectrum": "100:3.103103 101:1.201201 104:15.315315 ···",
  "splash": {"splash": "splash10-0a4i-0981100000-05f4b050fdb3869b8bd1"},
  "score": {"impacts": [{"value": 2.0, "reason": "Valid molecular structure(s) provided"}]},
  "submitter": {"institution": "Nihon Waters K.K.", "emailAddress": "massbank@massbank.eu"},
  "tags": [{"text": "MassBank", "ruleBased": false}, {"text": "LC-MS", "ruleBased": true}],
  "library": {"library": "MassBank", "description": "MassBank High Quality Mass Spectral Database"},
  "dateCreated": 1552348800000,
  "lastUpdated": 1657929600000
}

四点观察。

其一是记录号。这条记录的 id 是 WA002994,与 MassBank 的登录号一致。多数从其他库并入的记录保留原库登录号,MoNA 不为它们重建编号,这既是优点(可与原库对照)也是麻烦(编号规则因来源而异,无法从编号推断来源)。

其二是元数据是键值对数组,不是固定列。字段名是自由文本,单位写在值里(11.420 min、2.1 mm id),同一个概念的写法在不同来源里可能完全不同。

其三是峰表被压成一个字符串。m/z:强度 按空格分隔,强度是相对值,通常以基峰为一百。这种形态便于存储与导出,但要解析成数组才能计算。

其四是 splash。SPLASH 是一种谱图哈希,把峰表归一化后算出一个可比较的字符串,用于跨库判断「这两张谱是不是同一张」。MoNA 为每条记录生成该值,这是它做跨库去重的技术基础。

2.4 元数据字段字典

MoNA 没有强制的模式,字段随提交方而变。下表是实际出现频率最高的一批,按用途分组。

字段名 含义 常见取值 缺失情况
accession 记录登录号 各来源自己的编号 极少缺失
ms level 谱级 MS1、MS2、MS3、MS4 计算谱与部分老记录缺失
ionization 离子化方式 ESI、APCI、EI、MALDI 实验谱多有一半以上有
ionization mode 极性 positive、negative 较完整
precursor m/z 前体质荷比 浮点数 二级谱必有,一级谱无
precursor type 加合物 [M+H]+、[M-H]-、[M+Cl]- 常缺失,缺失时无法反推中性质量
instrument 仪器型号 Bruker timsTOF、Q Exactive 等 计算谱全无
instrument type 仪器大类 LC-ESI-QTOF、GC-EI-TOF 计算谱全无
collision energy 碰撞能 数值或 ramp 区间 缺失普遍,GC-EI 谱无此概念
retention time 保留时间 秒或分,单位写在值里 常有,单位不一
retention index 保留指数 数值(如 1817.1) 仅 GC-MS 部分记录有
column 色谱柱 长度、内径、填料 缺失普遍
derivatization type 衍生化 n TMS 等 仅衍生化 GC-MS 有
ccs 碰撞截面 数值 仅离子淌度仪器有
molecular formula 分子式 字符串 部分有
exact mass 精确质量 浮点数 部分有
license 该条许可 CC BY、CC BY-NC、CC BY-SA 老记录可能无
spectral entropy 谱熵 浮点数 系统计算,基本都有
normalized entropy 归一化熵 零到一 系统计算,基本都有
origin 原始文件名 如 MSDIAL-...msp 计算谱与批量导入常见

这张表值得注意的地方有三处。字段名是自由文本,所以「precursor m/z」与「pepmass」这类同义字段会并存,实际存在于不同来源的记录里。单位不统一,保留时间有的写秒有的写分,解析时必须读字符串而不能当数字用。computed 标记只出现在部分字段上,用于区分「提交方填的」与「系统算的」,但这个标记并不覆盖全部字段。

2.5 命名库清单

除按谱型切分,下载页还按来源切成命名库,每个库有自己的描述与外部链接。下表取规模最大的若干项。

命名库 记录数 性质
LipidBlast 2022 一百三十四万六千七百九十八 计算谱,脂质
Enveda-180 一百一十五万八千二百九十三 实验谱,单家企业的商业化合物库
LipidBlast(早期版本) 四十八万五千七百九十六 计算谱,脂质
BMDMS-NP 二十二万七千三百零七 实验谱,天然产物
MSnLib 八万七千九百四十八 实验谱,多级谱
MassBank 七万二千四百三十九 并入的日本与欧洲记录
Vaniya/Fiehn 天然产物库 四万四千九百三十六 实验谱
VF-NPL Q Exactive 子库 二万八千二百六十 实验谱
GNPS 二万三千八百零一 并入的社区库
预测 GC-MS EI 谱库 一万零八百八十九 计算谱,气相
HMDB 七千四百一十五 并入的代谢物库谱
NIST 糖链参考库 五千三百零五 实验谱,多级
ReSpect 六千三百七十四 并入的植物代谢物库
FAHFA 四千二百九十 实验谱,脂质
CASMI 2016 六百二十二 挑战赛题集

这张清单本身就是一份来源地图。它说明 MoNA 的构成方式是「自建 + 并入 + 众包」三路并行:LipidBlast 与预测气相库是自己算的,MassBank、GNPS、HMDB、ReSpect 是从别处并的,Enveda、BMDMS、天然产物库则是机构或企业直接提交的。

单家来源的集中度很高。最大的两个库合计逾二百五十万条,占全库七成左右。这意味着「MoNA 的统计特征」在很大程度上就是「这两家的特征」,任何按全库做的抽样都不等于按来源分层抽样。

2.6 文件与格式

整库下载只提供三种格式,各有明确用途。

JSON 是站点内部格式,字段最全,包含结构文件、分类、打分与全部元数据。它是唯一保留完整嵌套结构的格式,做二次开发应以此为准。全部谱图的 JSON 为五点二 GB。

MSP 是 NIST 兼容的文本格式,一行一个字段,峰表跟在后面。它是质谱软件生态里通用的交换格式,多数商业与开源检索工具都能读。代价是嵌套信息被压平,分类、打分这些字段要么丢失要么塞进注释。全部谱图为三点五 GB。

SDF 是结构文件格式,每条记录带一个分子连接表加若干数据字段。它适合需要结构做相似性计算或子结构检索的场景,峰表以文本字段形式附带。全部谱图为四点六 GB。

三种格式的体量差异说明了一件事:JSON 比 MSP 大一半,多出来的部分是结构、分类与元数据。如果只做谱图匹配,MSP 更省;如果要做结构层面的处理,SDF 或 JSON 更合适。

2.7 数量口径互相打架的地方

把几个页面并排看,会发现数字对不上,这些不一致不是错误,而是口径不同,但必须点明。

第一处,实验谱与计算谱之和大于总数。两个子集相加约四百九十五万,超过三百六十万的总记录数。说明这两个集合不是互斥划分,至少有一批记录同时被计入两边;也可能两个包的生成时点不同。

第二处,命名库之和远大于总数。仅 LipidBlast 两个版本加 Enveda 一家就已超过全库。这提示命名库之间存在层级关系(早期 LipidBlast 的谱可能也进了 2022 版),或同一个谱被打了多个库标签。

第三处,首页与统计页不同步。欢迎语里的数字是静态文本,统计页是实时计算,两者相差可能上百万条。引用时只应引用统计页并写明日期。

第四处,MassBank 命名库与 MassBank 官方门户的规模不同。前者七万余条,后者按其门户自述已逾八万条。MoNA 收录的是其中一个时点的快照,不是镜像。

§3 它的身份:谁的谱库,对谁负责

3.1 三个名字,一处容易混淆的地方

MoNA 有三个层面的名字。全称 MassBank of North America 用于正式场合与文献引用;缩写 MoNA 是日常称呼;域名有两个,主站 mona.fiehnlab.ucdavis.edu 挂在实验室域名下,别名 massbank.us 挂在联盟域名下,两者指向同一套服务。

名字里的「MassBank」是最容易造成混淆的部分。MassBank 原本是日本质谱学会发起的一个记录集与格式规范,后来欧洲建立了独立门户,北美这一支则由 Fiehn 实验室另建平台。三者同属 MassBank 联盟,共用一套记录格式的理念,但各自独立运营、独立计数、独立条款。

因此「MoNA 是 MassBank 的北美镜像」这个说法是错的。它包含一个名为 MassBank 的库,但它本身是另一个平台,收录范围比 MassBank 大得多。

3.2 维护方与利益结构

维护方是加州大学戴维斯分校基因组中心的 Fiehn 实验室,同一批人运营着 West Coast Metabolomics Center 与若干谱图工具(LipidBlast、MS-DIAL 相关流程、SPLASH 等)。这条线索决定了 MoNA 的气质:它更像一个由工具链驱动的仓储,而不是一个由策展团队驱动的数据库。

这解释了库里为什么计算谱占比这么高。LipidBlast 是同一实验室的产物,其推算谱自然大批进入 MoNA;SPLASH 也是同一实验室提出,因此成为记录的标准字段。工具与仓储互相喂养,形成正反馈。

也解释了它在策展上的克制:自动打分、自动算熵、自动补分类(ClassyFire),全部是算法动作,没有专家逐条审阅的环节。这不是省钱,而是规模决定的——三百万条记录,任何人工流程都不成立。

3.3 对谁负责:三种责任边界

责任对象 它承担的部分 它不承担的部分
提交方 保存其提交的谱与元数据,给出记录页与检索入口 不核验提交内容的真实性,不做实验复核
使用者 保证字段结构一致、可整库下载、接口可用 不保证跨来源的谱具有可比性,不保证许可整齐
被并入的库 保留原始登录号与来源标注 不保证与源库同步更新,快照可能落后

把三条摆在一起,可以提炼出一条使用准则:把 MoNA 当作「一个带来源标注的谱图交换所」,不要当作「一个有质量分级的参考谱库」。它给你来源,不给你背书。

3.4 三条坐标轴

理解 MoNA 的组织方式,抓住三条轴就够了。

记录轴由登录号定义。编号沿用来源,因此同一个库里可能出现多种编号风格,无法从编号推断来源,只能读 library 字段。

化合物轴由 InChIKey 定义。去重按首段,即骨架层。这条轴决定了「有多少化合物」这个数字的含义,也决定了立体异构体在统计上被合并。

库轴由命名库定义。它是唯一能表达「这批谱是一起采的、条件一致」的维度,任何需要控制变量的分析都应当先按库分组,而不是按化合物分组。

§4 它的手艺:自动策展怎么打分

4.1 元数据打分:把「填得全」变成可计算的数

MoNA 自述为自动策展,具体机制是一套基于规则的打分。每条记录的 score.impacts 是一串带正负号的加减项,每条给出一个分值与一句理由,加总即为该记录的分数。

以一条 GC-MS 记录为例,它的加减项是:提供了有效分子结构加二分;色谱类型识别为 GC-MS 加一分;提供了离子化方式加一分;识别了谱级加一分;提供了仪器信息加一分;提供了保留时间或保留指数加一分;未提供碰撞能减一分;未提供色谱柱信息减一分。合计六分。

这套规则的设计意图很清楚:它衡量的不是谱图质量,而是元数据的完整度。一条谱采得再好,只要字段没填全,分数就上不去;反过来,字段填全了但谱是坏的,分数照样高。

这一点必须在使用时记住。展示页把分数作为排序依据之一,高分的记录排在前面,但这只意味着它的描述更完整,不意味着它更适合做定性。

4.2 熵:把「像不像噪声」变成两个数

除了打分,每条记录还带两个熵值。

谱熵衡量峰强度分布的离散程度,值越大说明能量越分散在众多小峰上。归一化熵把它压到零到一之间,便于跨谱比较。两个值都是系统计算的,与提交方无关,因此可以作为跨来源的统一指标。

站点的展示页对某些记录打「NOISY」标,例如一张环巴胺(cyclopamine)的记录,其归一化熵约为零点八六。查询指南给出的示例更明确:把归一化熵大于零点八、同时谱熵大于三点零的组合作为「脏谱」的筛选条件。

这个机制的实用价值在于批量清洗。整库下载后,按这两个字段过滤掉高熵记录,可以显著减少噪声谱对模型的影响。它的局限也同样明显:熵高不等于谱错,某些真实化合物的谱本来就碎片多而分散,一刀切会误删。

4.3 化合物归并:InChIKey 首段的作用

MoNA 把化合物层单独抽出来,一个化合物对象下挂结构、名称、分类,谱记录则引用它。归并的依据是 InChIKey。

这个设计带来两个后果。好处是跨来源的同一化合物能被聚到一起,检索时不必关心它来自哪个库。代价是立体异构体被合并,且当结构信息缺失时(计算谱常只给分子式与类别名),归并只能靠名称或分子式,准确性下降。

分类字段由 ClassyFire 批量计算,给出化学类别层级。它同样是推算值,computed 标记为真。做化学类别统计时可以用,做结构确证时不能用。

4.4 计算谱是怎么来的

计算谱的生成路线在记录里留下了痕迹。以 LipidBlast 2022 的一条记录为例,其元数据包含分子式、保留时间、碰撞截面、化合物类别、前体 m/z、加合物类型,以及一个 origin 字段指向 MSDIAL-TandemMassSpectralAtlas-VS69-Neg.msp。

它缺什么同样清楚:没有仪器、没有碰撞能、没有谱级、没有色谱柱。这些缺失在打分里全部记为负分,因此计算谱的总分普遍低于实验谱。这是规则系统少见的「自动惩罚」,也恰好是使用者需要的信号。

计算谱的价值在于覆盖。真实标准品买不到、采不了的脂质种类,可以由结构规则推出一张可用的碎片谱,用于候选筛选中排除明显不符的结构。它的风险在于「像真的」:字段格式与实验谱完全一样,只有标签与缺失字段能区分。批量使用时若不先按标签过滤,模型会把两类谱混为一谈。

4.5 一个贯穿案例:Enveda 的一条记录

用一条来自 Enveda-180 库的记录,可以把上面几节串起来。这条记录的元数据包含:内部编号、母离子质量、电荷状态、保留时间、碰撞能、碰撞截面、前体强度、仪器型号(Bruker timsTOF Pro 2)、解释峰数、解释强度比例、峰质量偏差、母离子偏差、分子式、加合物式、离子化模式、前体离子淌度、仪器大类、进样方式、色谱柱、谱熵、归一化熵、加合物类型、前体 m/z、质量准确度、质量误差,以及一个指向 Enamine 目录号与 PubChem CID 的外部标识。

从这条记录能看出 MoNA 字段体系的两个特点。其一是可扩展:离子淌度相关的 ccs、precursor im 这些字段并非最初设计,而是随仪器普及后新增的,说明键值对结构允许字段自然生长。其二是元数据可以很厚:单条记录超过二十个字段,覆盖了从仪器到化学标识的完整链条,这类记录在打分里几乎不扣分。

同一批数据也暴露了问题。标签数组里出现了重复项(同一条记录里 In-Silico 出现两次),说明标签写入没有去重约束。这类小瑕疵不影响使用,但提醒一件事:MoNA 的数据校验在结构层面是松的,做批量处理时要自己加约束。

后文 §5 的取数示例与 §6 的选型对照,都会回到这条记录。

§5 取数:从网页点击到 REST

5.1 四条路径的取舍

路径 适合的人 代价 边界
网页单条检索 查一两个化合物 手工操作 无法批量
整库下载 要训练模型或建本地库 数 GB 下载与解压 拿不到实时更新
按命名库下载 只关心某一来源 体积小得多 需要先知道该选哪个库
REST 接口 要按条件筛、要写进流水线 需处理分页与限流 全量拉取不划算

四条路径背后是同一批数据。网页与接口走的是实时数据库,下载包是定期导出,两者时点不同,数字会有差异。

5.2 REST 接口与查询语法

接口有两个端点:/rest/spectra/search 用于检索,/rest/spectra/count 用于取总数。查询参数用 query 传表达式,用 size 与 page 控制分页。

查询语言是 Spring Filter,支持三种基本组合(and、or、not)、一组比较符(等值、不等、大于、小于、包含、为空)以及子查询 exists。子查询是这个系统里最关键的部分:由于元数据是键值对表,要同时约束「字段名是某值」与「字段值是某值」,必须在同一个表达式里两次访问元数据表,只有 exists 能做到。

一个典型查询是「离子化模式为正离子」:

#-- 取 10 条正离子模式的记录
curl -s -G "https://mona.fiehnlab.ucdavis.edu/rest/spectra/search" \
  --data-urlencode "query=exists(metaData.name:'ionization mode' and metaData.value:'positive')" \
  --data-urlencode "size=10" \
  --data-urlencode "page=0"

要取总数,把端点换成 count。但要注意:计数端点当前忽略 query 参数,返回的始终是全库总数。做子集计数只能在客户端逐页累加,或者改用下载页给出的分项数字。

5.3 用 Python 批量取

实际工作中更常见的是按一组前体质量批量取候选谱。下面的脚本给出最小可用形态:按 m/z 区间检索、翻页、把峰表解析成数组。

#-- 按前体质量区间翻页取谱,并把峰表解析成 (mz, intensity) 列表
import requests

BASE = "https://mona.fiehnlab.ucdavis.edu/rest/spectra/search"

def fetch_spectra(mz_low, mz_high, max_pages=5, size=100):
    out = []
    for page in range(max_pages):
        query = (f"exists(metaData.name:'precursor m/z' "
                 f"and metaData.value >: {mz_low} "
                 f"and metaData.value <: {mz_high})")
        r = requests.get(BASE, params={"query": query, "size": size, "page": page}, timeout=60)
        r.raise_for_status()
        batch = r.json()
        if not batch:
            break
        out.extend(batch)
    return out

def parse_peaks(s):
    peaks = []
    for token in s.split():
        mz, _, inten = token.partition(":")
        peaks.append((float(mz), float(inten)))
    return peaks

recs = fetch_spectra(300.0, 301.0, max_pages=2)
print(len(recs), "条记录")
if recs:
    print(recs[0]["id"], recs[0]["library"]["library"], len(parse_peaks(recs[0]["spectrum"])))

两个实践要点。第一,size 不要设得太大,站点文档明确提示大结果集会加重数据库负担并延长响应时间。第二,翻页遇到空数组即停止,不要依赖总数判断,因为计数端点不随查询变化。

5.4 整库下载后的处理

下载得到的 MSP 可以直接喂给多数谱库检索工具,但如果要做自定义分析,通常需要先转成表。MSP 的结构是「字段行 + 峰行 + 空行分隔」,解析时按空行切块即可。下面这段把 MSP 拆成记录字典。

#-- 解析 MSP:按空行切块,字段行形如 "Name: 值"
def read_msp(path):
    records, cur, in_peaks = [], {}, False
    for line in open(path, encoding="utf-8", errors="replace"):
        line = line.rstrip("\n")
        if not line.strip():
            if cur:
                records.append(cur)
            cur, in_peaks = {}, False
            continue
        if in_peaks:
            cur.setdefault("Peaks", []).append(line.strip())
        elif ":" in line and not line[0].isdigit():
            k, _, v = line.partition(":")
            cur[k.strip()] = v.strip()
        else:
            in_peaks = True
            cur.setdefault("Peaks", []).append(line.strip())
    if cur:
        records.append(cur)
    return records

这段代码的脆弱之处值得说明:MSP 没有统一规范,不同来源的字段名与峰行格式都有差异,某些记录的峰行以数字开头但仍在字段区。真实项目里应当先抽样几十条确认格式,再写解析器,而不是假定一种格式通吃。

5.5 分页、限流与礼貌抓取

站点是学术机构托管的服务,没有公开的配额说明。工程上应按「小页、慢速、可中断」的原则写:每页不超过一百条,请求之间留间隔,遇到错误退避重试,把已取到的结果落盘,避免重跑。这些不是性能优化,而是对公共资源的起码尊重,也直接决定脚本能不能跑完。

如果目标是全量,不要走接口。下载页已经提供了整包,接口适合做「按条件取一小批」这类交互式任务。

§6 与库内词条的关系

6.1 关系图谱

MoNA 在库内的位置,可以用「来源层、交换层、应用层」三层理解。MassBank、GNPS、HMDB、ReSpect 属于来源层,MoNA 是交换层,脂质图谱与代谢组学流程类词条是应用层。

库内相关词条 与本词条的关系 一句话区隔
METLIN 最常被拿来对比的商业谱库 METLIN 只收单实验室采的标准品谱,MoNA 收众包与计算谱
MassBank 上游来源之一,也是同名易混对象 MassBank 是记录集与格式规范,MoNA 是北美独立平台
脂质图谱类词条 下游使用者 那边做通路解读,这边提供谱图证据
代谢组学数据库类词条 部分记录重叠 那边以化合物为中心,这边以谱图为中心

6.2 检索路径

你的问题 该去哪个词条或入口 理由
这个峰可能是哪个分子 本词条,按 m/z 与加合物检索 覆盖最广的免费谱源
这个化合物的谱在哪些库里出现过 本词条,按 InChIKey 检索 跨来源归并是它的强项
我要一张标准品采的高质量二级谱 METLIN 词条 单实验室统一流程,条件一致
我要 MassBank 格式的原始记录 MassBank 词条 记录格式与字段定义的源头
我要做脂质的通路层面解读 脂质图谱类词条 那边有生物学解释层
我要定量 都不行 谱库普遍只有相对强度

6.3 与 METLIN 的逐项区隔

这两个库经常被并列提起,但它们的建库哲学几乎相反。

对比项 MoNA METLIN 对使用者的实际影响
一句话定位 众包与并入的谱图交换所 单实验室的标准品谱库 前者覆盖广而不齐,后者窄而一致
谱的来源 一百四十八个提交方,含企业与社区 一个实验室统一采集 MoNA 需按来源分层,METLIN 不必
是否含计算谱 含,且占比过半 不含,全部为实验采集 用 MoNA 必须先剔除计算谱
化合物规模 约八十九万个骨架 逾九十六万个分子标准 量级相当,含义不同
记录规模 逾三百六十万条谱 每标准品正负双模式、四档碰撞能 MoNA 条数多,单化合物条件不齐
仪器与碰撞能 因来源而异,缺失普遍 统一仪器、固定四档 MoNA 跨谱比较需谨慎
气相覆盖 有 GC-MS,约两万条 以液相为主 做气相方法 MoNA 是少数免费来源
访问方式 开放下载与开放接口 注册后网页检索 MoNA 可批量,METLIN 不可
许可 默认 CC BY 4.0,逐条可不同 商业条款,需遵守使用协议 MoNA 可再分发,METLIN 需授权
质量把关 规则打分与熵值 实验流程统一,人工参与采集 两者的「质量」不是同一个概念

一句话记住:METLIN 卖的是「同一把尺子量出来的谱」,MoNA 送的是「很多把尺子量出来的谱,每把都标了出处」。要做方法开发与确证,前者省事;要做覆盖与预训练,后者不可替代。

6.4 与 MassBank 的区隔

MassBank 是 MoNA 的源头之一,也是最容易被混为一谈的对象。

对比项 MoNA MassBank
运营主体 UC Davis Fiehn 实验室 日本与欧洲两个门户
规模 逾三百六十万条记录 官方记录集十三万余条
收录范围 自建计算谱、企业库、社区库、其他库快照 以学术实验室提交的参考谱为主
记录格式 自有 JSON 结构 + MSP/SDF 导出 MassBank 记录格式,纯文本
与对方的关系 内含一个名为 MassBank 的库 不收录 MoNA 的记录
计数口径 独立 独立

库内已有的 MassBank 词条已明确说明 MoNA 是独立平台、独立计数、独立条款,本词条不再重复,只补充一个量级对照:MoNA 里的 MassBank 库为七万二千余条,小于 MassBank 官方门户的记录数,说明那是快照而非镜像。

§7 质量评估与局限性

7.0 阅读本节前的一个前置校正

评估 MoNA 时最容易犯的错,是拿评估标准谱库的尺子来量它:问它有没有人工复核、有没有统一的采集协议、有没有浓度信息。这些维度上它必然低分,因为它的设计从一开始就不承担这些工作。

正确的评估框架是:在「把散落各处的谱图汇到一个可检索、可下载、来源可追的地方」这个任务上,它的覆盖率、可用性与来源透明度如何,以及这些优势换来了哪些不可逆的损失。下面每一处扣分都应读作「取舍的代价」,而不是「没做好」。

7.1 五维评分

维度 分数 依据
规模 5 / 5 逾三百六十万条记录、约八十九万骨架,免费开放的谱源里覆盖最广
一致性 2 / 5 来源过杂,字段名、单位、采集条件均不统一,缺强制模式
可用性 5 / 5 三种格式整库下载、开放 REST、记录页信息完整
可追溯性 4 / 5 每条记录带提交方、库名、原始登录号与来源链接,但无逐条处理日志
注释质量 2 / 5 元数据靠提交方自填,无核验;分类与熵值为系统推算

7.2 DAIMS 视角下的四条线

DAIMS 线 MoNA 的表现
数据获取与处理 提交与并入流程有文档,但单条记录的入库校验只有规则打分
数据建模 化合物、谱、元数据三层,键值对模型灵活但无约束
数据溯源 保留来源库、原始登录号、提交方与外部链接,溯源粒度到记录
数据使用与治理 默认 CC BY 4.0,逐条可不同,使用者需自行核对

四条线里最稳的是溯源,最弱的是建模。键值对模型的好处是任何来源都能塞进来,代价是任何跨记录的查询都要处理同义字段与单位差异。

7.3 可枚举的偏差

第一,来源偏差。全库七成记录来自两个库,任何「MoNA 的整体特征」实际上主要是这两家的特征。

第二,谱型偏差。计算谱占多数,实验谱中又以 LC-MS/MS 与 QTOF 为主,GC-MS 与 Orbitrap 是少数。用全库统计推断仪器分布会严重失真。

第三,字段偏差。不同来源填的字段不同,做「有碰撞能的记录」这类筛选时,筛掉的不只是缺数据的记录,还有整套不填该字段的来源。

第四,结构偏差。去重按 InChIKey 首段,立体异构体被合并;结构缺失的计算谱只能靠分子式归并,准确性更低。

第五,更新偏差。并入的库是快照,源库更新后 MoNA 未必跟进,同一记录在两个站点可能已经不同。

7.4 交叉核对的四个角度

验证角度 做法 能得到什么结论
与源库对账 抽若干条 MassBank、GNPS 记录回原库比对 判断快照滞后程度
与商业库对账 同化合物同条件下的谱做相似度 判断数据是否可用于确证
内部一致性 同一化合物多张谱的峰分布比较 判断来源差异的量级
熵值有效性 人工标注一批噪声谱,看熵阈值能否分开 判断清洗规则是否可用

这四项里,前两项是必做的。不做对账就直接用,等于把「来源不明」这个风险转嫁给下游结论。

7.5 它为何能持续

一个公共谱库能不能活下来,取决于三件事:存入的成本是否足够低、取出的价值是否足够高、维护方是否有持续动机。

MoNA 在第一点上做到了极致:注册即可上传,格式宽松,字段自由,几乎没有门槛。第二点上,它把「一个接口查遍所有免费谱源」这件事做成了,这对非靶向分析的价值很难被替代。第三点上,它与同一实验室的工具链(LipidBlast、SPLASH、MS-DIAL 生态)绑定,仓储的存续本身就是工具链的基础设施。

代价同样清楚:低门槛意味着低一致性,工具链绑定意味着字段设计会被单一实验室的技术路线影响。这两点在可见的将来不会改变。

§8 生态位与历史

8.1 时间线

时间 事件
2015 年前后 平台对外公开,实验室软件页将其列为「整合全部免费谱图、结构与元数据」的项目
2017 年 2 月 被 re3data 收录,登记为开放访问、上传需注册的学科仓储
2023 年 1 月 后端重构,查询语言由 RSQL 改为 Spring Filter,接口文档改版
2025 年 9 月 前端大改版,上传与删除流程修复,界面重做
2026 年 7 月 上传与删除系统再次重构,新增「我的上传」历史页
2026 年 10 月 统计页记录数逾三百六十万,提交方一百四十八个

从这条线能读出两件事。其一是持续维护:三次较大改动都集中在提交与查询这两件核心功能上,说明维护方在解决的是「怎么收进来、怎么查出去」,而不是「怎么审」。其二是规模跃升发生在最近两年,与一家企业库(Enveda-180)和一个计算谱库(LipidBlast 2022)的大批并入同步。

需要说明的是,MoNA 没有一篇对应的建库论文。文献里引用它时通常给站点地址与 RRID(SCR_015536),或给 re3data 的记录号。实验室软件页上 MoNA 一栏旁标注的期刊页码,对应的是同一时期的另一篇软件论文,不是 MoNA 本身的介绍,引用时不宜张冠李戴。

8.2 MassBank 联盟的三地分工

MassBank 联盟有三个门户:日本、欧洲、北美。三者的分工不是地理划分那么简单。

日本门户历史最久,是记录格式与字段词表的源头,收录以学术实验室的参考谱为主。欧洲门户聚焦环境与食品领域,按机构贡献方组织,逐条标注许可。北美门户由 Fiehn 实验室运营,走的是聚合路线:不只收本地提交,还把能拿到的免费谱都并进来,并加入大量计算谱。

这个分工造成一个后果:三个门户的数字不能相加,也不能互相替代。做文献综述时把三者的记录数并排写,是最常见的引用错误之一。

8.3 在 AI 时代的再定位

谱图作为一种训练数据,近两年重新受到关注。原因不难理解:质谱的峰表是天然的张量,m/z 与强度构成稀疏向量;而公开可用的标注谱在数量上远远不够,MoNA 的三百多万条恰好补上了这个缺口。

这也带来一种新的误用风险:把整库当成「已标注的训练集」。实际上它的标签来自不同来源、不同规则,计算谱的标签是模型生成的,实验谱的化合物归属有的靠标准品、有的靠推断,而记录里并不总能区分。任何用它做训练的工作,都应当在方法里写清三件事:剔除了哪些来源、是否排除了计算谱、如何处理同化合物的重复谱。

8.4 与商业库的互补关系

有一种看法是开放谱库终将取代商业库,这个判断在可预见的范围内不成立。

商业库的价值在于「同一套采集协议 + 人工审核 + 合法授权」,回答的是「这张谱能不能作为确证依据」。开放库的价值在于「覆盖广 + 可批量 + 可再分发」,回答的是「这个峰可能是什么」。前者是终点,后者是起点,两者的工作流位置不同。

实际的做法通常是先用开放库缩小候选,再用商业库或自建标准品确证。MoNA 在这条链上的位置是入口,不是出口。

§9 使用指引

9.1 三种角色的路径

分析化学人员的路径最短:从未知峰出发,按前体 m/z 与加合物检索,看候选谱的碎片是否吻合,再用保留时间与标准品做确认。整条路径不需要写代码,网页即可完成。

算法研究者的路径最重:下载整库、剔除计算谱、按库或按仪器分层、去重、划分训练与测试集。关键在于分层——若随机划分,同一化合物的不同谱会同时落进训练与测试,指标虚高。

数据工程师的路径居中:把 REST 接口封装成内部服务,处理分页与缓存,把结果写进自己的谱库表。要点是把「来源」「库名」「原始登录号」三个字段一并落库,否则后续无法回溯。

9.2 一条最短的可用流程

下面从零到一个可用的本地子库。

#-- 第一步:确认站点可达,并看全库总数
curl -s "https://mona.fiehnlab.ucdavis.edu/rest/spectra/count"

#-- 第二步:取三条 GC-MS 记录落到本地,验证字段结构
curl -s -G "https://mona.fiehnlab.ucdavis.edu/rest/spectra/search" \
  --data-urlencode "query=exists(metaData.name:'retention index')" \
  --data-urlencode "size=3" -o gc_sample.json

#-- 第三步:看这批记录各自属于哪个命名库
grep -o '"library":"[^"]*"' gc_sample.json | sort -u

第二步取的是按保留指数筛出来的记录,这类记录几乎都是 GC-MS。第三步输出的是库名,用来确认来源——同一个库里的谱采集条件一致,这是后续分层的依据。

整包下载走的是另一条路:下载页的每个包有独立直链,页面本身只是清单,直接请求页面只会得到 HTML。挑包、复制直链这一步没有接口可用,必须在网页上完成。

#-- 第四步:过滤掉计算谱与高熵记录,只留可用子集
import json

recs = json.load(open("gc_sample.json", encoding="utf-8"))

def meta_of(rec):
    return {m["name"]: m["value"] for m in rec.get("metaData", [])}

def keep(rec):
    tags = [t["text"] for t in rec.get("tags", [])]
    if "In-Silico" in tags:
        return False
    try:
        return float(meta_of(rec).get("normalized entropy", 1)) < 0.8
    except (TypeError, ValueError):
        return True

clean = [r for r in recs if keep(r)]
print(len(recs), "->", len(clean))

第四步的两个过滤条件对应 §4 的两套机制:标签排除计算谱,熵值排除噪声谱。两者都不改变峰表本身,只决定哪些记录进入后续分析。

9.3 引用方式

引用要写到三层。

第一层是站点本身。写明 MassBank of North America、访问日期与所引记录的具体编号。由于没有建库论文,把站点当作一手来源是合规的做法。

第二层是数据版本。MoNA 没有版本号,记录数随提交增长。稳妥的写法是给出「读取日期 + 当时的记录总数」,让读者能判断你用的是哪个时点的快照。

第三层是原始来源。如果分析涉及某个命名库,应同时引用该库的原始文献(例如 LipidBlast 的方法学论文),而不是只引 MoNA。因为 MoNA 只是搬运方,方法学归属在源头。

§10 AI 使用声明

项目 说明
本页 AI 参与程度 由 AI 助手依据官方统计页、下载页、许可页与 REST 接口返回结果起草,人工核对数字与结论
数字来源层级 见附录 B,官方页面与接口为一级,第三方登记记录为二级
未核实项 平台确切的上线月份、各命名库的并入时点,官方均未公开
版本信息 以 2026 年 10 月 28 日至 29 日读取的页面与接口为准
已知不一致 首页欢迎语记录数与统计页不同步;实验谱与计算谱之和大于总数
已知缺陷 单条记录内可出现重复标签;计数接口不响应查询条件
适用边界 本文描述数据集本身的结构、规模与边界,不评价任何具体研究结论
更新机制 数据集持续增长,本文不承诺随记录数同步刷新

常见误读(避坑清单)

常见说法 实际 证据
「MoNA 就是 MassBank 的北美镜像」 它是独立平台,只内含一个名为 MassBank 的库 站点自述与下载页库清单;MassBank 库七万余条,小于官方门户
「三百六十万条谱都是实验采的」 计算谱三百余万条,实验谱一百七十余万条,两者还有重叠 下载页分项统计
「记录数等于化合物数」 按 InChIKey 首段去重后只有约八十九万 统计页两个计数并列
「它经过人工审核」 自述自动策展,只有规则打分与熵值 首页自述与记录内 score 字段
「高分记录就是好谱」 打分只反映元数据填得全不全 打分项均为字段是否存在,无质量项
「可以拿来做定量」 只有相对强度,无浓度与响应因子 记录结构与峰表格式
「各页面数字应当一致」 首页、统计页、下载页三个口径,时点与切分方式都不同 三处数字并列可见
「许可都是 CC BY 4.0」 默认如此,但单条可为 CC BY-NC、CC BY-SA 记录内 license 字段实际取值
「可以按条件查总数」 计数接口忽略查询参数,始终返回全库数 接口实际返回
「并入的库与源库同步」 是快照,源库更新后不保证跟进 命名库记录数与源库自述规模不符
「计算谱可以替代买不到的标准品」 可用于候选筛选,不能用于保留时间与定量确证 计算谱缺仪器、碰撞能、保留时间

FAQ

Q1:MoNA 现在到底有多少条谱?

统计页在 2026 年 10 月 28 日给出三百六十万一千一百六十条记录、约八十九万个化合物骨架、一百四十八个提交方。首页欢迎语的数字是静态文本,时点更早,两者不要混用。引用时应写明读取日期。

Q2:它和 MassBank、METLIN 三者怎么区分?

MassBank 是记录集与格式规范的源头,分日本与欧洲两个门户;METLIN 是单实验室用标准品采的商业谱库;MoNA 是北美独立平台,聚合了免费谱源并加入大量计算谱。三者的记录数不能相加,也不能互相替代。

Q3:计算谱占多少?能直接用吗?

下载页给出的计算谱子集为三百一十九万余条,实验谱子集为一百七十五万余条,两者之和超过总数,说明口径有重叠。计算谱可用于候选筛选,不能用于保留时间确认与定量。批量使用时先按标签过滤。

Q4:为什么同一化合物有几十张谱?

不同实验室、不同仪器、不同碰撞能、不同离子化方式各自采一张,都会作为独立记录存在。这不是冗余,而是条件差异的显式记录。做比较时必须控制条件,否则比的是来源差异。

Q5:能批量下载吗?

可以,下载页按谱型与命名库拆成五十余个包,最大的整包为 JSON 五点二 GB。接口也支持分页检索,但只适合按条件取小批,不适合全量拉取。

Q6:许可到底是什么?

内容默认 CC BY 4.0,站点允许提交方另行约定,因此单条记录可能带更严格的条款(记录内 license 字段可见 CC BY-NC、CC BY-SA 等)。站点代码为 LGPL v3。批量再分发前应逐条核对。

Q7:为什么有的记录没有碰撞能?

GC-EI 谱本身没有碰撞能这个概念(电子轰击是硬电离),部分老记录与计算谱也没有。缺失在打分里被记为负分,但这不意味着记录不可用,只意味着它的适用场景不同。

Q8:谱熵和归一化熵该怎么用?

谱熵衡量峰强度的分散程度,归一化熵把它压到零到一。站点用高熵标记噪声谱,查询指南给出的示例阈值是归一化熵大于零点八且谱熵大于三点零。这个阈值适合粗筛,不适合当作质量判定的唯一依据。

Q9:能不能只取某个库的谱?

可以。下载页按命名库分包,接口则用标签字段过滤(tags.text 等于库名)。前者适合整包,后者适合交互式取数。

Q10:它有没有原始质谱文件?

没有。只存峰表,不存仪器原始文件,也没有色谱图。想重做峰提取必须回提交方或原始 repository。

Q11:为什么有时候检索会超时?

站点是学术机构托管的服务,大结果集会显著加重数据库负担。文档明确建议使用 size 参数控制返回量。工程上应按小页、慢速、可中断的方式写脚本。

Q12:记录里的 computed 标记可信吗?

它标记该字段是否为系统推算,但并非所有字段都带这个标记,覆盖并不完整。判断一条记录是实验谱还是计算谱,最可靠的方式是看库名与标签,而不是逐个字段看标记。

术语表

术语 含义
质谱谱图 记录离子质荷比与相对强度的一张表,是本库的基本存储单元
MS1 / MS2 / MS3 / MS4 谱级,一级为母离子谱,二级以上为碎裂后的子离子谱
前体离子 被选去碎裂的那个离子,其质荷比决定二级谱的检索范围
加合物 分子与离子结合形成的带电体,如 [M+H]+、[M-H]-
碰撞能 碎裂时施加的能量,决定碎片的多寡,GC-EI 无此概念
保留时间 / 保留指数 化合物在色谱柱上停留的时间,或换算成与内标比较的指数
InChIKey 由结构算出的二十七位字符串,三段分别编码骨架、立体化学与版本
SPLASH 谱图哈希,把峰表归一化后算出的可比较字符串,用于跨库去重
计算谱 由结构按碎片规则推算出来的谱,未经仪器采集
自动策展 由规则完成字段校验与打分,无人工逐条审阅
谱熵 / 归一化熵 衡量峰强度分散程度的指标,用于识别噪声谱
元数据 描述谱图采集条件与来源的键值对,本库的核心组织方式
命名库 按来源或项目切分的记录集合,是控制采集条件的唯一维度
ClassyFire 一种把化合物映射到化学分类层级的算法
MSP NIST 兼容的文本谱图格式,一行一个字段,峰表附在其后
SDF 结构文件格式,含分子连接表与附加数据字段
REST 基于 HTTP 的接口风格,本站用它提供检索与计数
RSQL / Spring Filter 两种查询表达式语法,本站 2023 年起改用后者
DAIMS 数据档案与信息管理系统的一套评估框架,看采集、建模、溯源与治理四条线
CC BY 4.0 署名即可自由使用的知识共享许可
LGPL v3 较宽松的开源软件许可,允许以动态链接方式被商业软件使用

附录 A:核心数字核对表

项 值 来源 来源层级
谱图记录总数 三百六十万一千一百六十 统计页 一级
唯一化合物(InChIKey 首段) 八十九万二千二百六十九 统计页 一级
提交方 一百四十八 统计页 一级
元数据类型 八万四千零九十四 统计页 一级
元数据值总数 两亿一千零七十四万零四十二 统计页 一级
标签类型 一百零一 统计页 一级
已打标签数 八百一十六万五千二百零七 统计页 一级
计算谱记录 三百一十九万一千一百零四 下载页 一级
实验谱记录 一百七十五万六千八百零七 下载页 一级
GC-MS 记录 一万九千七百三十五 下载页 一级
整库 JSON 体量 五点二 GB 下载页 一级
整库 MSP 体量 三点五 GB 下载页 一级
整库 SDF 体量 四点六 GB 下载页 一级
下载集合数 五十余个 下载页 一级
仓储登记号 RRID:SCR_015536 re3data 二级
上线年份 2015 年前后 实验室软件页 三级

附录 B:数字的来源分层

一级:官方页面与接口。 统计页的各项计数、下载页的各包记录数与体积、许可页的条款说明、查询指南的语法与示例、REST 接口的实际返回。本文所有规模数字与字段名均取自这一层。

二级:第三方登记记录。 re3data 的仓储记录给出访问类型、上传限制、持久标识与收录日期,用于补充「开放访问、上传需注册」这类制度性描述。

三级:未核实。 平台的确切上线月份、各命名库的并入时点、单个来源库的采集年代,官方均未公开。实验室软件页上的年份与文献页码存在归属不清的情况,本文只作量级参照,不据此下结论。

附录 C:完整参考文献

  1. MassBank of North America 官方站点,首页自述与新闻列表,https://mona.fiehnlab.ucdavis.edu/ ,2026 年 10 月访问。
  2. 同站统计页,记录数、化合物数、提交方与元数据计数,https://mona.fiehnlab.ucdavis.edu/spectra/statistics ,2026 年 10 月 28 日读取。
  3. 同站下载页,各谱型与命名库的记录数及三种格式的体积,https://mona.fiehnlab.ucdavis.edu/downloads ,2026 年 10 月访问。
  4. 同站许可页,内容与代码的许可条款,https://mona.fiehnlab.ucdavis.edu/documentation/license ,2026 年 10 月访问。
  5. 同站查询指南,Spring Filter 语法、端点与分页参数,https://mona.fiehnlab.ucdavis.edu/documentation/query ,2026 年 10 月访问。
  6. 同站 REST 接口返回结果,记录字段结构与打分逐项,https://mona.fiehnlab.ucdavis.edu/rest/spectra/search ,2026 年 10 月 28 日调用。
  7. re3data 仓储记录 MoNA,访问类型、上传限制与持久标识,http://re3data.org/repository/r3d100012318 ,2026 年 10 月访问。
  8. Fiehn 实验室软件与工具页,MoNA 项目定位与年份,https://fiehnlab.ucdavis.edu/projects/softwaredev ,2026 年 10 月访问。
  9. MassBank 联盟三门户(日本、欧洲、北美),用于 §6.4 与 §8.2 的对照。

附录 D:取数代码

#-- 完整最小脚本:按库取谱、过滤、落盘
import json, requests

BASE = "https://mona.fiehnlab.ucdavis.edu/rest/spectra/search"
LIB = "MassBank"

def fetch_library(lib, max_pages=10, size=100):
    recs = []
    for page in range(max_pages):
        q = f"tags.text:'{lib}'"
        r = requests.get(BASE, params={"query": q, "size": size, "page": page}, timeout=60)
        r.raise_for_status()
        batch = r.json()
        if not batch:
            break
        recs.extend(batch)
    return recs

def to_row(rec):
    meta = {m["name"]: m["value"] for m in rec.get("metaData", [])}
    comp = rec["compound"][0] if rec.get("compound") else {}
    return {
        "id": rec["id"],
        "library": rec.get("library", {}).get("library"),
        "inchikey": comp.get("inchiKey"),
        "ms_level": meta.get("ms level"),
        "precursor_mz": meta.get("precursor m/z"),
        "ion_mode": meta.get("ionization mode"),
        "license": meta.get("license"),
        "n_peaks": len(rec.get("spectrum", "").split()),
    }

rows = [to_row(r) for r in fetch_library(LIB, max_pages=3)]
with open("mona_massbank.jsonl", "w", encoding="utf-8") as f:
    for row in rows:
        f.write(json.dumps(row, ensure_ascii=False) + "\n")
print("写入", len(rows), "行")

附录 E:如果只记五件事

第一,它是加州大学戴维斯分校 Fiehn 实验室托管的北美质谱谱库,与 MassBank 官方门户、METLIN 都不是同一个东西。

第二,规模是三百六十万条谱、约八十九万个化合物骨架、一百四十八个提交方;记录与化合物是两本账,不能混说。

第三,库里混着实验谱与计算谱,计算谱占比过半,使用时必须先按标签剔除。

第四,整库可按谱型或命名库下载,格式为 JSON、MSP、SDF;接口开放但只适合取小批。

第五,它自动策展、不做人工复核;许可默认 CC BY 4.0 但逐条可不同;没有原始质谱文件,也没有样本信息。

编辑说明

本篇核验时间为 2026 年 10 月 29 日。核验方式为直接读取 MoNA 官方站点的首页自述、统计页、下载页、许可页与查询指南,并调用其 REST 接口取回若干条记录以核对字段结构、打分项与许可取值,另比对 re3data 的仓储登记条目与 Fiehn 实验室的软件页。

未覆盖的内容包括:平台的确切上线月份与各命名库的并入时点(官方未公开);各命名库与源库的逐条一致性(未做全量对账);记录内 computed 标记的完整覆盖范围(接口未提供字段级说明)。实验室软件页在 MoNA 一栏旁标注的期刊页码对应另一篇软件论文,本篇不据此认定 MoNA 的建库文献,正文与附录中均按「无独立建库论文」处理。

本文描述的是数据集本身的结构、规模与边界,不涉及对任何具体研究结论的评价,也不构成使用建议的法律意见。许可需按记录逐条核对。


相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • hmdb — 共享标签:基因组学与多组学 / 代谢组学 / 化学信息学
  • metlin — 共享标签:基因组学与多组学 / 代谢组学
  • pride — 共享标签:基因组学与多组学 / 代谢组学
  • proteomexchange — 共享标签:基因组学与多组学 / 代谢组学
  • metabolights — 共享标签:基因组学与多组学 / 代谢组学
  • metabolomics-workbench — 共享标签:基因组学与多组学 / 代谢组学
  • massive — 共享标签:基因组学与多组学 / 代谢组学
  • gnps — 共享标签:基因组学与多组学 / 代谢组学
  • massbank — 共享标签:代谢组学 / 化学信息学
  • metacyc — 共享标签:基因组学与多组学 / 代谢组学

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集