第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-54 | X, Y, Z坐标 | 每个占8列,单位埃 |
| 55-60 | occupancy(占有率) | 0-1之间 |
| 61-66 | temperature 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消费,以及你需要注意的关键转换节点。
看完这张图你应该发现了:无论格式怎么变,最终都会汇集到QMEAN和Verify3D这两大工具上。我的建议是,在工具链的起始端就确定好统一格式,中间尽量减少不必要的格式转换。