PDB 格式概述
处理 PDB 文件时,你最头疼的是什么?格式乱?坐标对不上?还是链标识搞得人晕头转向?今天咱们就把 PDB 格式里的几个核心概念掰开揉碎聊一聊。我记得刚入行那会儿,第一次打开一个 PDB 文件,满屏的 ATOM 和数字,说实话,真有点懵。后来踩的坑多了,才慢慢摸清门道。
1.1 PDB 文件标准
说白了,PDB 格式就是结构生物学界的“通用语言”。它由 wwPDB 维护,最初的版本是为 X 射线晶体学量身定做的。后来 NMR、冷冻电镜都加入了,格式也在不断扩展。
目前你见到的 PDB 文件,大多数还沿用传统格式,但官方力推的是 PDBx/mmCIF 格式。我个人习惯在做大规模批量处理时,优先把传统 PDB 转成 mmCIF,因为它的字段更灵活,不会出现列宽不够用的情况。
一个标准的 PDB 文件,由记录类型(Record Type)来组织内容。常见的记录类型包括:
- HEADER —— 文件头,包含结构名称、沉积日期、PDB ID
- ATOM —— 标准氨基酸或核苷酸原子坐标
- HETATM —— 非标准原子坐标(配体、水、修饰残基)
- TER —— 链终止标记
- END —— 文件结束
grep 快速统计 PDB 文件里 ATOM 和 HETATM 的行数,一眼就能看出蛋白和配体的比例。
1.2 原子记录
原子记录是 PDB 文件的核心。先看一段实例,你就明白了:
ATOM 1 N ALA A 1 1.234 2.345 3.456 1.00 0.00 N
ATOM 2 CA ALA A 1 2.345 3.456 4.567 1.00 0.00 C
ATOM 3 C ALA A 1 3.456 4.567 5.678 1.00 0.00 C
ATOM 4 O ALA A 1 4.567 5.678 6.789 1.00 0.00 O
HETATM 5 O HOH A 201 5.678 6.789 7.890 1.00 0.00 O
TER 6 ALA A 1
END
每一列的含义是固定的,我整理了一张对比表,把 ATOM 和 HETATM 的核心区别讲清楚:
| 对比项 | ATOM | HETATM |
|---|---|---|
| 记录对象 | 标准氨基酸 / 核苷酸 | 配体、水分子、修饰残基 |
| 占据率处理 | 按标准规范处理 | 视具体实验数据而定 |
| 对接预处理 | 通常作为受体固定 | 可作为对接位点灵活处理 |
| 残基命名 | 标准三字母(ALA, LYS…) | 自定义或字典命名 |
你想想看,一个原子记录里包含了多少信息?原子名、残基名、链 ID、坐标、占据率、温度因子……这些字段在后续的结构分析和预处理中全都用得上。
1.3 坐标与坐标系
PDB 里的坐标是三维空间中的直角坐标,单位是 Ångström(埃)。格式上固定占 8 列宽,通常保留三位小数。
我个人习惯在预处理 PDB 文件时,先检查坐标精度。有些旧结构的坐标小数点后只有两位,而高精度的冷冻电镜结构可能有六位。精度不够会导致后续计算出现奇怪的偏差。
1.4 链标识
链标识(Chain ID)是 PDB 里最容易出幺蛾子的字段之一。它是一个单字符,可以是字母或数字。大写字母最常见,但也可能混进小写和数字。
我遇到过最离谱的一次,一条链用大写的 A,另一条用小写的 a。在视觉上几乎看不出区别,可程序一跑就报错。为什么会这样?因为很多工具链区分大小写。
- 单链结构:通常用
A - 多链结构:
A,B,C… 依次编号 - 特殊场景:数字链 ID(如
1,2)在旧结构中偶尔出现
grep "^ATOM" | cut -c22 | sort -u,一秒看清楚一共有多少条链,以及它们的大小写情况。
1.5 残基编号
残基编号也不总是连续增长的。插入码(Insertion Code)就是一个经典的坑。
举个例子,在某些抗体结构中,为了给补充决定区(CDR)的插入残基让出位置,编号可能是 100A, 100B, 101 这种格式。PDB 文件里用第 27 列(插入码字段)来标记。
ATOM 120 N CDR A 100A 11.234 22.345 3.456 1.00 0.00 N
ATOM 121 CA CDR A 100B 12.345 23.456 4.567 1.00 0.00 C
ATOM 122 N CDR A 101 13.456 24.567 5.678 1.00 0.00 N
注意: 处理残基编号时,必须把 resid(编号)和 icode(插入码)作为一个组合键来看待。我曾经在对接预处理时只按编号排序,结果把 100A 和 100B 的顺序搞反了,导致 CDR 区域的构象完全错位。
1.6 备选构象
备选构象(Alternate Conformation)用 altLoc 字段标记,位于原子名的后面。当某个残基或原子在电子云密度中有两种或多种稳定位置时,PDB 会用 A, B, C 等标识区分。
ATOM 10 N ALA A 1 10.123 20.456 30.789 1.00 0.00 N
ATOM 11 CA A ALA A 1 11.234 21.567 31.890 1.00 0.00 C
ATOM 12 CA B ALA A 1 11.567 21.890 32.123 1.00 0.00 C
上面这段里,CA 原子有 A 和 B 两种构象。如果不做处理直接读入,你的结构里会同时出现两个位置矛盾的 CA,能量计算直接崩掉。
A 的原子全部筛选出来,要么取主构象,要么丢弃。
处理备选构象的策略通常有三种:
- 保留主构象 —— 只保留
altLoc=A或空格的原子 - 按最高占据率选取 —— 谁的占据率高就留谁
- 扩展为多模型 —— 把 A/B 构象拆成两个独立的模型文件
我个人倾向第一种策略,因为它最简单、最可复现。在做深度学习模型训练时,数据一致性比那一点点构象多样性重要得多。
一句话总结: PDB 格式里的 5 个核心概念——原子记录、坐标、链标识、残基编号、备选构象——不是孤立的知识点,而是整个结构解析流程的基础设施。哪怕只忽略其中一个,都可能让后续的分析工作白费力气。