第二章:质谱样本处理概述
在开始用 Docker 批量处理质谱样本之前,咱们得先搞清楚几个基本问题。质谱数据长什么样?分析流程有哪些步骤?为什么要费劲搞批量处理?
别急,我一个一个讲。我在实验室里折腾了几年质谱数据,踩过不少坑,吃过不少亏。今天把这些经验掰开揉碎,让你少走弯路。
核心一句话:这一章不是讲理论,而是给你一张“地图”,知道数据从哪里来、到哪里去、中间要过几道关。那我们就开始吧。
2.1 质谱数据格式 —— 五花八门,各有脾气
质谱仪器厂商很多,不同仪器产出的原始数据格式完全不同。你想想看,Thermo 的 .RAW、Bruker 的 .d、Waters 的 .raw(注意大小写不同)、AB Sciex 的 .wiff……光名字就够晕的。
我个人习惯把格式分成三类:
- 厂商私有二进制格式:比如 .RAW、.d、.wiff。这些格式只有厂商自己的软件才能直接打开,跨平台极差。我曾经在 Mac 上想分析 Thermo 的 .RAW 文件,折腾了三天才找到转换工具。
- 开放交换格式:最主流的是 mzML(HUPO PSI 标准),还有 mzXML(Sashimi 项目)、mgf(Mascot Generic Format)、mzTab 等。这些格式是纯文本或压缩的 XML/JSON,可读性好,各种开源工具都支持。
- 中间处理格式:比如 pepXML、protXML、MaxQuant 的 evidence.txt。它们通常是分析流程中的产物,不是原始数据。
那么问题来了,我们做 Docker 批量处理的最终目标,通常是把原始数据转成开放格式(mzML)再走后续流程。所以我强烈建议你在项目初期就统一成 mzML,用 ProteoWizard 的 msconvert 完成转换。
小技巧:msconvert 可以在 Docker 里跑,一句命令搞定转换和压缩。后面章节我会详细讲。
| 格式 | 类型 | 典型场景 | 开放度 |
|---|---|---|---|
| .RAW | 厂商二进制 | Thermo Q-Exactive、Orbitrap | 低 |
| .d | 厂商二进制 | Bruker timsTOF | 低 |
| .wiff | 厂商二进制 | SCIEX TripleTOF | 低 |
| mzML | 开放XML | 通用处理 | 高 |
| mzXML | 开放XML | 早期工具兼容 | 高 |
| mgf | 开放文本 | 数据库搜索输入 | 高 |
2.2 常见分析流程 —— 从质谱图到生物学意义
质谱数据分析可以拆成三大块:预处理、鉴定、定量。说白了就是:
- 预处理:从原始信号中找出真正的肽段峰,去掉噪音,把不同样本的保留时间对齐(如果需要)。
- 鉴定:把每一个碎片谱图跟理论谱图比对,确定肽段序列和蛋白质身份。
- 定量:计算每个蛋白质在不同样本里的丰度变化,比如标记定量(TMT、iTRAQ)或无标记定量(LFQ)。
我记得有一次帮朋友分析一批时间梯度样本,预处理阶段没有做保留时间对齐,结果鉴定出来的肽段数量少了将近一半。后来加了一步峰值对齐,翻了一倍多。你想想看,这一步有多重要。
注意:很多商业化软件把这三大步打包成“一键分析”,但你如果用 Docker 搭建 pipeline,每一步都要单独考虑输入输出格式和参数灵活性。
那这些步骤对批量处理来说意味着什么呢?
- 预处理通常是最消耗 CPU/内存的一步,尤其峰值检测和去卷积。
- 鉴定依赖数据库搜索,搜索时间跟谱图数量和数据库大小成正比。如果处理 1000 个 RAW 文件,单线程跑可能要跑一个星期。这里就需要并行和调度。
- 定量中的标准化步骤需要跨样本统计,不能完全独立跑每个样本。
2.3 批量处理需求 —— 为什么要上 Docker?
单个样本手动用 GUI 软件跑,没问题。但现实是:
- 一个项目可能有 200 个 RAW 文件,来自 4 个条件、5 个生物学重复、10 个时间点。
- 需要统一参数、统一版本、统一环境。
- 你无法保证另一台机器装了一样版本的 ProteoWizard 和 SearchGUI。
- 甚至你换了个操作系统,某些库就不兼容了。
我曾经在 Linux 服务器上部署了一次经典的“OpenMS + Comet”流程,因为系统库版本问题,编译 OpenMS 花了两个整天,最后还跑不起来。用 Docker 之后,一个 docker pull 搞定了所有依赖。
批量处理需求的核心:可重复、可扩展、可自动化。Docker 恰好能解决环境一致性和并行调度问题。这也正是这门课的主题。
下面这张图把这一章的核心知识串了一下。看完你应该能大概理解:原始数据格式、分析步骤、批量处理需求三者之间是什么关系。
我自己的一点体会:不要一上来就想着把整套流程都塞进一个 Docker 容器里。先拆开成独立模块(格式转换、预处理、鉴定、定量),每个模块一个容器,再用编排工具(比如 Docker Compose 或 Nextflow)串起来。这样改一个模块不会影响其他模块,排查问题也方便得多。