信息速览
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:完整参考文献
- MassBank of North America 官方站点,首页自述与新闻列表,https://mona.fiehnlab.ucdavis.edu/ ,2026 年 10 月访问。
- 同站统计页,记录数、化合物数、提交方与元数据计数,https://mona.fiehnlab.ucdavis.edu/spectra/statistics ,2026 年 10 月 28 日读取。
- 同站下载页,各谱型与命名库的记录数及三种格式的体积,https://mona.fiehnlab.ucdavis.edu/downloads ,2026 年 10 月访问。
- 同站许可页,内容与代码的许可条款,https://mona.fiehnlab.ucdavis.edu/documentation/license ,2026 年 10 月访问。
- 同站查询指南,Spring Filter 语法、端点与分页参数,https://mona.fiehnlab.ucdavis.edu/documentation/query ,2026 年 10 月访问。
- 同站 REST 接口返回结果,记录字段结构与打分逐项,https://mona.fiehnlab.ucdavis.edu/rest/spectra/search ,2026 年 10 月 28 日调用。
- re3data 仓储记录 MoNA,访问类型、上传限制与持久标识,http://re3data.org/repository/r3d100012318 ,2026 年 10 月访问。
- Fiehn 实验室软件与工具页,MoNA 项目定位与年份,https://fiehnlab.ucdavis.edu/projects/softwaredev ,2026 年 10 月访问。
- 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 — 共享标签:基因组学与多组学 / 代谢组学
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

