第三章:数据格式的“前世今生”——RAW、mzML与搜库结果
做质谱数据分析,说白了就是跟各种文件格式打交道。我当年刚入行时,就被这一堆后缀名搞晕过——.raw、.mzML、.mzXML、.mgf……每个厂家还有自己的“方言”。今天这章,咱们就聊聊这些格式到底是干什么的,以及怎么在它们之间自由切换。
3.1 RAW文件:厂家的“黑匣子”
你从质谱仪上直接拷下来的文件,大概率是 .raw 后缀。这是Thermo Fisher家的专有格式。嗯,就像佳能相机拍的.CR2,只有自家软件才能完全解码。
RAW文件里到底存了什么?
- 原始谱图数据——每个扫描点的m/z和强度值
- 时间信息——保留时间轴
- 仪器参数——离子源设置、碰撞能量等等
- 诊断信息——比如真空度、电压波动记录
我在项目中遇到过好几次,有人拿着别人的RAW文件想直接用MaxQuant打开,结果报错。为什么?因为Thermo的RAW文件其实是分版本的——Xcalibur 2.x和4.x生成的RAW,底层结构都不一样。
我曾经有一次,从合作方拿到的RAW文件死活读不出来,折腾了两天才发现对方用的Thermo软件版本太老,MaxQuant根本认不了那个格式的头部信息。最后让对方重新导了一遍mzML才解决。
3.2 mzML:质谱界的“普通话”
为什么要转成mzML呢?你想想看,如果实验室里有Bruker、Thermo、SCIEX三台仪器,每个厂家格式都不一样,你的pipeline怎么写?
这就是mzML存在的意义——它是HUPO-PSI(人类蛋白质组学组织-蛋白质组学标准倡议)推的开放格式,基于XML,任何人只要读规范就能解析。
mzML相比于RAW的优势:
| 对比项 | RAW文件 | mzML |
|---|---|---|
| 开放性 | 封闭,依赖厂商SDK | 完全开放,XML明文 |
| 可读性 | 二进制,无法直接查看 | 文本格式,可用编辑器打开 |
| 跨平台 | 仅Windows(Thermo) | Linux/Mac/Windows通吃 |
| 压缩率 | 依赖厂商算法 | 支持zlib压缩,体积可控 |
| 元数据 | 部分丢失(不同版本) | 标准化,完整保留 |
我个人习惯,所有原始数据进pipeline之前,先统一转成mzML。这样后续不管用MaxQuant、OpenMS还是Skyline,接口都是通的。
3.3 搜库结果文件:MaxQuant的“成绩单”
MaxQuant搜库完成后,会吐出一堆文件。你真正需要关注的,其实就几个核心结果文件。
关键文件清单:
evidence.txt——最底层的肽段-谱图匹配(PSM)信息,每一行代表一个匹配peptides.txt——肽段水平汇总,去冗余后的结果proteinGroups.txt——蛋白质水平汇总,这是后续定量分析的起点msms.txt——二级质谱的详细信息,包括碎片离子强度summary.txt——运行参数和统计摘要,排查问题时的第一站
我在做PTXQC流程时,经常发现有人直接拿proteinGroups.txt就开始画火山图,但忽略了evidence.txt里的异常值标记。其实PTXQC的最核心输入,就是evidence.txt和summary.txt。
如果你用MaxQuant的“LFQ”或“iBAQ”定量,proteingroups.txt里的LFQ intensity列才是真正的定量值。别弄混了。
3.4 转换工具:谁好用?
格式转换是逃不掉的活。我列几个常用的工具,你们按需选用。
1. MSConvert(ProteoWizard)
业界标杆,支持几乎所有质谱格式的互转。命令行用起来非常爽。
# 单个RAW转mzML
msconvert input.raw --mzML -o ./output/
# 批量转换,保留索引
msconvert *.raw --mzML --zlib --filter "peakPicking true 1-" -o ./mzml_output/
那个 --filter "peakPicking true 1-" 参数,会自动做centroid处理,省掉你后续手动捣腾的麻烦。
2. ThermoRawFileParser
如果你只用Thermo的RAW,这个工具更快,而且输出mzML的元数据更完整。
# 基本用法
mono ThermoRawFileParser.exe -i=rawfile.raw -o=./mzml/ -f=2 -c=1
# -f=2 代表输出mzML格式
# -c=1 代表包括profile和centroid数据
3. OpenMS的FileConverter
在复杂的pipeline里,我建议用OpenMS工具链。
# 转换加保留时间对齐一步到位
FileConverter -in input.raw -out output.mzML
# 也可以直接转成featureXML
FileConverter -in input.mzML -out features.featureXML
4. mzML to MGF(Mascot通用格式)
有些老旧的搜库软件(比如Mascot)不吃mzML,这时候你就需要转成MGF。
# 用Python的pyopenms搞定
from pyopenms import *
exp = MSExperiment()
MzMLFile().load("input.mzML", exp)
MascotGenericFile().store("output.mgf", exp)
批量处理大量RAW文件时,我优先用MSConvert的命令行模式,配合Shell脚本循环,一次搞定上百个文件。pipeline里我会嵌套ThermoRawFileParser,因为它的日志输出更详细,方便排查。
3.5 格式转换的常见坑
你以为转个格式就是点一下按钮那么简单?嗯,有时候不是。
问题一:数据精度丢失
默认的mzML转换可能是32位浮点的,丢失细节。一定要指定输出精度。
# MSConvert设置64位
msconvert input.raw --mzML --precision 64 -o ./output/
问题二:时间戳错乱
我遇到过一例,转出来的mzML里保留时间全都差了0.5分钟。查了半天发现是仪器时钟偏差,转换时没有做时间校准。记住——RAW文件里的时间戳是本地时间,但mzML标准要求用相对保留时间(从进样开始算的秒数)。
问题三:元数据缺失
有些转换器会丢掉仪器类型、碰撞能量等关键信息。你在下游分析时发现filter string是空的,那就是转换时没带全。
# 用msconvert时可以指定保留所有params
msconvert input.raw --mzML --filter "peakPicking true 1-" --ignoreMissingTolerance 0.5
3.6 一张图看懂数据流转
咱们这一节讲了三种格式,它们之间的转换关系其实很清晰。我画了张图帮你理解整个数据流向。
这张图的逻辑其实很简单:仪器出来的RAW是源头,通过转换工具变成mzML这个“通用语言”,然后MaxQuant拿着mzML做搜库,最后吐出evidence.txt和summary.txt给PTXQC做质控。中间每一步都可能有坑,但掌握了格式特点和转换参数,就能绕过去。
以后你拿到一批新数据,先问自己三个问题:
1. 原始文件是什么格式?
2. 我下游的工具吃哪种格式?
3. 转换时我只保留centroid还是profile也要?
这三个问题想清楚,格式转换这一步就不会出错。
好了,这一章咱们把数据的“语言”理清了。下一部分就该上手操作,看看MaxQuant的web界面到底长什么样了。不过那是后面的事,先把今天的内容消化掉再说。