PDB 格式概述

处理 PDB 文件时,你最头疼的是什么?格式乱?坐标对不上?还是链标识搞得人晕头转向?今天咱们就把 PDB 格式里的几个核心概念掰开揉碎聊一聊。我记得刚入行那会儿,第一次打开一个 PDB 文件,满屏的 ATOM 和数字,说实话,真有点懵。后来踩的坑多了,才慢慢摸清门道。

PDB 格式核心知识体系 PDB 文件标准 原子记录 坐标系统 链标识 残基编号 备选构象 生物大分子结构解析 5 大核心要素共同构成 PDB 格式基础,缺一不可

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 文件时,先检查坐标精度。有些旧结构的坐标小数点后只有两位,而高精度的冷冻电镜结构可能有六位。精度不够会导致后续计算出现奇怪的偏差。

避坑指南: 我曾经因为坐标列宽解析错误,把整条蛋白的 Cα 原子坐标读错了一列,结果 RMSD 算出来 20 Å,排查了半天才发现是列对齐的问题。写解析脚本时,务必用固定列宽(Fortran 格式),别用空格分割。

1.4 链标识

链标识(Chain ID)是 PDB 里最容易出幺蛾子的字段之一。它是一个单字符,可以是字母或数字。大写字母最常见,但也可能混进小写和数字。

我遇到过最离谱的一次,一条链用大写的 A,另一条用小写的 a。在视觉上几乎看不出区别,可程序一跑就报错。为什么会这样?因为很多工具链区分大小写。

  • 单链结构:通常用 A
  • 多链结构:A, B, C … 依次编号
  • 特殊场景:数字链 ID(如 1, 2)在旧结构中偶尔出现
建议: 拿到 PDB 文件先跑 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,能量计算直接崩掉。

避坑指南: 我曾经在做结构叠加时,没有过滤 altLoc,结果一条蛋白链里同时保留了 A/B 两种构象的侧链原子,整个叠加矩阵算出来完全不合理。后来养成了习惯:预处理第一步就把 altLoc 不是空格或 A 的原子全部筛选出来,要么取主构象,要么丢弃。

处理备选构象的策略通常有三种:

  1. 保留主构象 —— 只保留 altLoc=A 或空格的原子
  2. 按最高占据率选取 —— 谁的占据率高就留谁
  3. 扩展为多模型 —— 把 A/B 构象拆成两个独立的模型文件

我个人倾向第一种策略,因为它最简单、最可复现。在做深度学习模型训练时,数据一致性比那一点点构象多样性重要得多。

一句话总结: PDB 格式里的 5 个核心概念——原子记录、坐标、链标识、残基编号、备选构象——不是孤立的知识点,而是整个结构解析流程的基础设施。哪怕只忽略其中一个,都可能让后续的分析工作白费力气。