PDB文件格式详解:原子记录、链标识、残基编号、注解字段
PDB文件,说白了就是蛋白质的"身份证"。里面记录着每个原子的坐标、每个残基的位置。我刚开始处理结构数据时,总觉得这玩意就是一堆数字堆砌。后来才发现,搞不清楚格式,后面所有分析都是白搭。
这一节,我们就把它彻底吃透。
ATOM记录:结构数据的核心
ATOM记录是PDB文件里最核心的部分。它描述的是蛋白质或核酸中每个非氢原子的位置。你想想看,一个蛋白质可能有几千个原子,每个原子都对应一行ATOM记录。
标准格式是这样:
ATOM 1234 CA ALA A 42 11.234 12.567 13.890 1.00 20.00 C
这行记录里藏着不少信息。我习惯把它拆成几个关键字段:
| 字段 | 起始列 | 长度 | 说明 |
|---|---|---|---|
| 记录名 | 1-6 | 6 | ATOM 或 HETATM |
| 原子序号 | 7-11 | 5 | 整数,按顺序递增 |
| 原子名称 | 13-16 | 4 | 左对齐,如 CA、CB、N |
| 残基名称 | 18-20 | 3 | 如 ALA、GLY、HIS |
| 链标识 | 22 | 1 | 通常 A、B、C ... |
| 残基编号 | 23-26 | 4 | 可包含插入位点 |
| X坐标 | 31-38 | 8 | 浮点数,单位 Å |
| Y坐标 | 39-46 | 8 | 浮点数 |
| Z坐标 | 47-54 | 8 | 浮点数 |
| occupancy | 55-60 | 6 | 占有率,通常 1.00 |
| 温度因子 | 61-66 | 6 | B-Factor,单位 Ų |
| 元素符号 | 77-78 | 2 | 右对齐,如 C、N、O |
核心原则:PDB行是"列对齐"的,不是用分隔符。解析时一定要按列位置读取,不能依赖空格或逗号。我在项目中吃过这个亏,后来写解析器时先把每一行当成80个字符的字符串来处理。
链标识:区分蛋白质的不同组分
链标识,就是第22列的单个字符。一个多亚基蛋白,每条链都有独立的标识。常见的有A、B、C,但也有数字或特殊字符。
为什么会这样?因为晶体结构解析出来的对象,可能包含多个生物分子。比如一个四聚体,通常会用A、B、C、D来标记。
我记得有一次处理一个免疫复合物结构,链标识用到了"X"、"Y"和"Z"。当时解析脚本没处理好,直接报错。后来加了个判断,允许单字符即可。
避坑指南:我曾经碰过一个结构,链标识是空白字符。很多解析器会把空白当成A链,但实际上它是未指定的。处理这种数据时,我建议自己加一个检查:如果链标识是空格,就视为"单链"。但正规PDB文件,链标识不应该为空。
链标识在Cryo-EM结构中尤其重要。因为这些结构可能包含数百个unique的链条或片段。我见过用1、2、3这样的数字做链标识的,也见过用@、#之类的符号。虽然不常见,但解析器得兜得住。
残基编号:定位蛋白质序列的位置
残基编号由第23-26列的4位数字和可能的插入位点(第27列)组成。这里有一个常见的误区——残基编号不一定是连续的。
举个例子:
ATOM 1234 CA ALA A 42 11.234 12.567 13.890 1.00 20.00 C
ATOM 1235 CB ALA A 42 11.567 12.890 13.234 1.00 21.00 C
ATOM 1236 N GLY A 43 10.890 11.345 14.567 1.00 19.00 N
ATOM 1237 CA GLY A 43 10.345 11.890 15.000 1.00 19.50 C
ATOM 1238 N ALA A 43A 11.000 12.000 14.500 1.00 20.00 N
看到了吗?残基43A就是插入位点的例子。这通常出现在loop区或晶体接触面。如果你写程序直接按数字比较相邻残基编号,很容易漏掉插入位点。
注意:我见过一些深度学习模型,直接用残基编号做特征拼接,结果模型预测全乱套了。原因是它们没有处理跳号和插入位点。处理残基编号时,我建议把它当作字符串而不是整数来处理。先把数字和字母拆开,再按"键值"比对。
注解字段:你忽略了什么?
除了ATOM记录,PDB文件里还有大量注解信息。这些信息写在"REMARK"、"HEADER"、"TITLE"、"COMPND"、"SOURCE"等行里。很多人只看ATOM行,把这些注解全扔了。但如果你要做结构验证,注解信息有时能救命。
我常用的注解字段包括:
- REMARK 3:描述结构精修的质量,包括R值、R-free值、键长和键角的RMSD。我习惯先看R-free值,低于0.25算是比较好的结构。
- REMARK 280:描述晶体生长的条件。如果你在重复实验,这个信息非常有用。
- REMARK 290:描述不对称单元中的分子数。这对判断同源二聚体或四聚体很有帮助。
- REMARK 465:描述缺失的残基。结构里可能有一段序列没被电子密度覆盖,这部分原子就不会出现在ATOM记录中。你直接从ATOM行数推断完整序列长度,一定会出问题。
- SSBOND:描述二硫键。结构验证时,我经常检查二硫键的键长和键角是否在合理范围内。
- LINK:描述链间的连接。比如配体与残基的相互作用。
经验之谈:我个人习惯在解析PDB文件时,把REMARK 465中的缺失残基编号单独存一份。后面做序列比对或结构叠加时,这些缺失区域可以直接标记为gap,避免干扰统计结果。
HETATM vs ATOM:差异在哪?
HETATM记录格式和ATOM完全一样,只是记录名不同。它用来表示非标准残基,比如配体、水分子、金属离子或修饰过的氨基酸。
我曾经写过一个小脚本,专门筛选HETATM中的水分子。因为300K以上的温度因子太高,这些水合点通常不可靠。做结构验证时,我建议先把所有水分子过滤掉,再分析主链和侧链的几何参数。
操作建议:解析PDB时,我个人习惯把ATOM和HETATM分别存到不同列表。在作图或计算时,先分析ATOM的主链和侧链,再把HETATM当成"额外信息"来叠加处理。这样逻辑更清晰。
小结:用什么解析PDB比较靠谱?
嗯,讲了这么多,回到实际工作。我个人推荐用Biopython的PDB模块。它已经处理好了列对齐、插入位点、链标识识别这些问题。但如果你像我一样,喜欢自己造轮子,那就记住三点:
- 每一行固定80列,用索引切片读字段
- 残基编号要留出插入位点的字符位
- REMARK 465能告诉你哪些残基没有被建模
一句话总结:PDB文件格式其实挺简单的,但细节藏得深。把ATOM记录、链标识、残基编号、注解字段这四个方面搞清楚,后面所有的结构分析、验证、可视化都不会跑偏。