第4章:蛋白质结构文件格式 — PDB与mmCIF详解

搞结构验证的人,整天打交道最多的就是文件格式。PDB和mmCIF,说白了就是蛋白质结构的“身份证”。你从PDB数据库下载的结构,跑不掉这两个格式。

我个人习惯,上手一个新工具前,先搞清楚它的“粮食”——输入文件长什么样。不然工具再强,喂错东西也是白搭。今天我就把这两种格式掰开揉碎讲清楚。

4.1 PDB格式:老牌格式,但有坑

PDB格式诞生在70年代,那时候磁盘空间金贵,所以格式设计得非常“紧凑”。一个原子一行记录,列宽固定。你用文本编辑器打开一个.pdb文件,会看到一长串以ATOM开头的行。

一个标准的ATOM记录长这样:

ATOM      1  N   THR A   1       7.053   4.897   2.620  1.00 10.00           N
ATOM      2  CA  THR A   1       8.380   5.018   3.302  1.00 10.00           C
ATOM      3  C   THR A   1       9.237   3.811   2.959  1.00 10.00           C

我简单拆解一下各列含义:

列位置内容注意点
1-6记录类型(ATOM/HETATM/TER等)大写,左对齐
7-11原子序号右对齐,别超过99999
13-16原子名称右对齐,如“ CA ”表示Cα
18-20残基名称(三字码)如THR、ALA
22链标识符单字母,A/B/C...或空格
23-26残基编号整数,有时带插入码
31-54X, Y, Z坐标每个占8列,单位埃
55-60occupancy(占有率)0-1之间
61-66temperature factor(B因子)单位平方埃
77-78元素符号右对齐,如“ N”“ C”

关键点:PDB格式的原子名称是右对齐的。CA在13-14列写“ CA”,而Cα和钙离子都叫“CA”?没错,靠列位置区分。Cα是13-14列,钙离子是“CA ”(14-16列)。我见过有人写脚本解析时搞混这个,直接报错。

我的习惯:凡是新拿到的PDB文件,先用grep数一下ATOM行数,再用cat -A看看行尾有没有隐藏空格。有些老旧PDB文件末尾会带多余空格,QMEAN读进去会直接崩。

4.2 PDB最大的坑:链标识和原子编号

我在项目中遇到过最离谱的一次:一个PDB文件里,链标识居然用了小写字母“a”、“b”。大部分工具严格区分大小写,把“a”当作链A处理——结果全乱了。

还有原子编号。PDB格式里原子序号最多5位数。超过99999怎么办?有些工具会截断,有些直接报错。现在大型复合物动不动就几十万个原子,PDB格式真的撑不住。

另外,PDB的坐标精度是小数点后3位,也就是0.001埃。对于一般晶体结构够用,但做高精度优化(比如力场最小化后的轨迹)时,这个精度会引入舍入误差。

避坑指南:我曾经拿一个PDB文件跑Verify3D,结果怎么也跑不通。后来发现文件里有几行“CONECT”记录的格式不对——第四列的原子编号超出了9999,直接写了五位数字,把后面列挤乱了。从此我养成了习惯:新结构一定先用pdb_check或者rasmol -verify过一遍再喂给工具。

4.3 mmCIF格式:结构生物学的未来

为什么要用mmCIF?说白了,PDB格式的“架子”太小了。一个结构里链多了、配体多了、实验数据多了,PDB根本塞不下。mmCIF(也叫PDBx/mmCIF)就是为了解决这个诞生的。

mmCIF不是用固定列宽,而是用“键-值”对加循环的方式组织数据。打开一个.cif文件,你会看到类似这样的结构:

loop_
_atom_site.group_PDB
_atom_site.id
_atom_site.type_symbol
_atom_site.label_atom_id
_atom_site.label_comp_id
_atom_site.label_asym_id
_atom_site.label_seq_id
_atom_site.Cartn_x
_atom_site.Cartn_y
_atom_site.Cartn_z
ATOM 1 N N . THR A 1 7.053 4.897 2.620
ATOM 2 C CA . THR A 1 8.380 5.018 3.302

你看,每个字段都有明确的名称。不用担心列宽对齐、不用担心空格数量。数据量大了以后,mmCIF的灵活性完胜PDB。

特性PDB格式mmCIF格式
最大原子数~99999个无理论上限
链标识单字符,区分大小写任意长度字符串
坐标精度3位小数任意精度
元数据支持极弱(靠REMARK)结构化存储,可扩展
解析难度低(固定列宽)中(需理解loop结构)
工具兼容性极高(所有工具都支持)高(现代工具原生支持)
文件体积小(紧凑格式)较大(自描述标签冗余)

实用建议:QMEAN和Verify3D都原生支持mmCIF。如果你处理的是大型复合物(比如核糖体、病毒衣壳),直接用.cif文件效率更高。不过有些旧版脚本只认.pdb,所以建议你同时保留两种格式:工作目录里放.cif,对外分发时转成.pdb。

4.4 格式转换:不只有“另存为”

我需要把PDB转成mmCIF,或者反向转换。怎么做?我给你列几个靠谱的命令。

使用Maxit(官方推荐)

# PDB -> mmCIF
maxit -input myfile.pdb -output myfile.cif -o 1

# mmCIF -> PDB
maxit -input myfile.cif -output myfile.pdb -o 2

使用OpenMM的PDBxFile

from openmm.app import PDBxFile, PDBFile
# 读mmCIF
pdbfile = PDBxFile('input.cif')
# 写PDB
PDBFile.writeHeader(pdbfile.topology, open('output.pdb', 'w'))
PDBFile.writeModel(pdbfile.topology, pdbfile.positions, open('output.pdb', 'a'))

我的经验:用Maxit转换时,如果目标PDB链数超过26条或者残基数超过9999,转换会直接失败。这时候只能退回到mmCIF格式继续工作。所以我现在做链比较多的结构,全程用.cif,省得来回折腾。

4.5 哪种格式更适合你的工具链?

来,我直接给你一个选择指南:

  • 如果你用QMEAN:官方建议用mmCIF。QMEAN内部解析mmCIF效率更高,尤其是计算势能时读取侧链原子位置更快。
  • 如果你用Verify3D:两种格式都可以。但Verify3D的某些旧版本(2010年以前的)只认PDB。新版Phenix里的Verify3D已经完美支持mmCIF。
  • 如果你写自动脚本:我建议全用mmCIF。PDB的格式问题太多了,不值得花时间去处理各种边界情况。

注意:有些在线验证服务器(如SAVES v6.0)仍然只接受PDB格式。这时候你不得不做一次转换。转换后务必检查拓扑完整性,特别是水分子和配体的残基编号——我见过好几次转换后水分子顺序被打乱,导致QMEAN对溶剂评分异常。

4.6 本章SVG:文件格式与验证工具的关系图谱

下面这张图,我想用它帮你把今天讲的东西串起来。它展示了PDB、mmCIF两大格式如何被QMEAN和Verify3D消费,以及你需要注意的关键转换节点。

蛋白质结构文件格式与验证工具关系图谱 蛋白质结构文件格式与验证工具集成关系图 PDB 格式 mmCIF 格式 格式互转 (Maxit / OpenMM) 验证工具接收入口 QMEAN (优先mmCIF) Verify3D (两者皆可) 结构质量评分与验证报告 格式选择要点: PDB适合小结构、传统管道 mmCIF适合大型异构复合物

看完这张图你应该发现了:无论格式怎么变,最终都会汇集到QMEAN和Verify3D这两大工具上。我的建议是,在工具链的起始端就确定好统一格式,中间尽量减少不必要的格式转换。