理解PDB文件格式
PDB 文件说白了就是蛋白质的“存档”文件。你打开一看,全是固定格式的文本行。我第一次接触时也觉得眼花,但只要搞懂几条核心记录,剩下的都大同小异。
我个人习惯把 PDB 文件分成三个部分:文件头(告诉你这个结构是谁、怎么测的)、原子坐标(核心,每个原子的 xyz 坐标)以及连接和结束信息。下面我们就拆开聊。
PDB 文件整体框架
先看一张图,把 PDB 文件的骨架烙进脑子里。后面讲细节时,你就能知道每段代码该往哪放。
最重要的记录:ATOM
ATOM 记录是整个 PDB 文件的价值所在。它描述蛋白质中每一个“标准氨基酸”的原子坐标和化学信息。
看一个真实的例子,这是 1CRN 结构(一种植物毒素蛋白)中的第一个残基:
ATOM 1 N THR A 1 6.316 24.238 47.845 1.00 12.44 N
ATOM 2 CA THR A 1 7.608 23.623 48.228 1.00 10.32 C
ATOM 3 C THR A 1 7.904 23.924 49.693 1.00 15.27 C
ATOM 4 O THR A 1 8.105 25.101 50.030 1.00 12.63 O
ATOM 5 CB THR A 1 8.722 23.649 47.186 1.00 12.94 C
ATOM 6 OG1 THR A 1 9.396 24.933 46.975 1.00 15.90 O
ATOM 7 CG2 THR A 1 8.426 22.719 46.046 1.00 13.45 C
每一列都有明确含义。下表总结了 ATOM 记录的 12 个固定字段:
| 列号(1-index) | 字段名 | 含义 | 格式与示例 |
|---|---|---|---|
| 1-6 | Record Name | 记录类型标识 | ATOM (注意末尾两个空格) |
| 7-11 | Serial Number | 原子在文件中的顺序号 | 1 右对齐,整数 |
| 13-16 | Atom Name | 原子名称(例:N、CA、C、O、CB) | N (长度 4,不足右补空格) |
| 17 | Alt Loc | 可替换构象标识(空格表示无) | 或 A |
| 18-20 | Residue Name | 残基名称(三字母码) | THR |
| 22 | Chain ID | 链标识符 | A |
| 23-26 | Residue Number | 残基序列号 | 1 |
| 27 | Code for Insertion | 插入残基码(用于非标准序列编号) | |
| 31-38 | X (Å) | 正交坐标 X | 6.316 |
| 39-46 | Y (Å) | 正交坐标 Y | 24.238 |
| 47-54 | Z (Å) | 正交坐标 Z | 47.845 |
| 55-60 | Occupancy | 占有率(通常为 1.00) | 1.00 |
| 61-66 | Temp Factor | 温度因子(B 值) | 12.44 |
| 77-78 | Element | 元素符号(右对齐) | N 或 C |
| 79-80 | Charge | 形式电荷(极少使用) | 或 2+ |
HETATM:与标准残基说再见
HETATM 记录长得跟 ATOM 一模一样——列位置、字段顺序完全相同。唯一的区别是前 6 个字符写着 “HETATM”。
那它用来存什么?说白了,非蛋白质标准组分的原子。比如:
- 配体(抑制剂、辅因子、金属离子,如 Zn²⁺、ATP)
- 水分子(HOH 或 H2O)
- 修饰残基(比如乙酰化的赖氨酸,但有时也被放进 ATOM)
举个例子,一个结合在蛋白活性位点的锌离子:
HETATM 1234 ZN A 100 12.345 56.789 23.456 1.00 8.50 Zn
我在做药物对接项目时,常需要从 HETATM 中单独提取配体。这时我会先过滤 Record Name,再根据 Residue Name 找出目标配体(比如 1A4G 中的配体叫做 “STU”)。注意:不要把水分子(HOH)也当作配体,除非你明确需要它。
ATOM 和 HETATM 我总是分开处理。前者做结构建模,后者做配体分析——混在一起容易搞乱坐标排序。
CONECT:原子之间的“隐形桥梁”
ATOM 和 HETATM 只告诉你“这里有一个原子,坐标是 xyz”。但你还需要知道谁和谁成键。PDB 标准做法是用 CONECT 记录来定义共价连接关系。
基本格式:
CONECT serial bonded1 bonded2 bonded3 bonded4
每个字段都是 1-4 位整数,右对齐。例如:
CONECT 1234 1235 1236 1240
表示原子 #1234 与 #1235、#1236、#1240 分别成单键。
但是……现实往往没那么完美。
避坑指南(我遇到过的真实问题):
- 很多 PDB 文件缺失 CONECT 记录——特别是旧的 X 射线结构。这时你需要靠自己算距离。
- 部分 PDB 文件用SSBOND记录二硫键,而不是 CONECT。
- 还有的配体键信息被藏在LINK或HYDBND里,不是标准格式。
所以,如果你做分子模拟(比如准备 GROMACS 拓扑),我建议不要完全依赖 PDB 的 CONECT。最好用VMD 或 PyMOL的自动键识别功能重算一遍,或者用 RDKit / OpenMM 的模板化加键逻辑。
下面是一个真实的 PDB 文件片段,展示完整的文件结尾部分(包含 CONECT 和 END):
CONECT 1234 1235 1236 1240
CONECT 1235 1234 1241 1242
CONECT 1240 1234
END
文件结构与解析思路
现在来总结一下,你拿到一个 PDB 文件后,脑子里要有一个“扫描清单”:
- 先看 HEADER:确认结构类型(蛋白质 / DNA / 复合物)、分辨率、发布年份。
- 跳过 REMARK、TITLE 等注释行(除非你需要提取实验细节)。
- 读取所有 ATOM 记录:按残基分组,构建主链和侧链坐标。
- 读取 HETATM 记录:提取配体、水、金属离子。
- 找 CONECT、SSBOND、LINK:建立键拓扑(如果做分子动力学这一步不能省)。
- 遇到 END 记录:停止解析。
一个小技巧:如果你用 Python 解析 PDB,推荐用 Biopython,它处理字段对齐和续行的问题非常稳。自己手写解析时,注意 ATOM 的 Atom Name 可能从第 13 列开始而不是第 12 列——有些 PDB 格式变体把第 12 列也占用了。
最后,我想强调一点:PDB 格式看似死板,但它的长度固定、字段位置严格恰好是它最大的优点。你写一次解析代码,基本所有 PDB 文件都能吃。比那些 XML 啊、JSON 啊的变体格式省心多了。