4. 受体文件准备报错:PDB格式错误与missing atoms

做分子对接,第一步就是准备受体文件。很多新手一上来就急着跑AutoDock,结果报错弹出,看着那一堆英文日志一头雾水。我这些年见过的这类报错,少说也有上百种了。其实说白了,大部分问题都出在PDB格式和缺失原子上。

先把常见问题梳理一下。

4.1 常见的PDB格式问题

AutoDock读取PDB文件时,对格式要求其实挺严格的。不是你随便从PDB数据库下载一个.pdb文件就能直接用。我刚开始做的时候也踩过这个坑,下载下来直接丢进去,报错说“ATOM record format error”。

常见的问题主要有这几类:

问题类型具体表现产生原因
列对齐错误AUTODOCK返回“ATOM record malformed”PDB文件中原子记录的列位置不对,比如残基名称或坐标没有按标准格式排列
非标准残基名称AutoDock无法识别残基类型PDB中使用了非标准命名,或者接头的修饰基团没有被正确标记
链标识符混乱多链受体对接时出现链冲突链ID不统一或缺失,AutoDock无法区分不同链的原子
原子名称不规范对接过程中出现unexpected atom type原子名称包含了空格或特殊字符,或者使用了非IUPAC命名规则

遇到格式问题,我建议先别急着找复杂原因。先检查一下PDB文件的前几行,用文本编辑器打开看一眼。

ATOM      1  N   THR A   1       6.320   4.980   7.380  1.00  0.00           N  
ATOM      2  CA  THR A   1       7.540   5.150   6.620  1.00  0.00           C  
ATOM      3  C   THR A   1       8.710   4.940   7.560  1.00  0.00           C  
ATOM      4  O   THR A   1       8.680   5.540   8.630  1.00  0.00           O  

标准PDB格式的ATOM记录,每个字段都有固定列宽。举个例子,原子名从第13列开始,残基名从第18列开始,坐标X从第31列开始。如果差一个空格,AutoDock就解析不出来了。

我个人习惯:拿到受体PDB文件后,先用工具做一轮格式检查和修复。我最常用的是OpenBabel,一条命令搞定。

obabel receptor.pdb -O receptor_clean.pdb -p 7.4 --addhydrogens --proper

4.2 missing atoms 的根本原因

“missing atoms”这个报错,我估计用过AutoDock的人都见过。为什么会有缺失原子?

晶体结构解析的时候,分辨率有限。那些侧链末端摆动比较大的原子,比如赖氨酸的末端氨基、谷氨酸的羧基氧,有时候在电子密度图里根本看不清。解析人员就会把这些原子忽略掉。你拿到手的PDB文件,天然就不完整。

还有一种情况——你自己从同源建模来的结构,建模软件没把侧链补全。我记得有一次帮一个做药物设计的团队处理问题,他们的受体跑了三天一直报missing atoms,我打开一看,整个loop区都是缺失的。

常见缺失原子位置:

  • 侧链末端原子(如Lys的NZ、Glu的OE1/OE2)
  • 柔性较大的残基(如Ser、Thr的羟基氢)
  • His残基的咪唑环原子(depending on protonation state)
  • 水分子附近的极性氢原子
  • Cys残基的巯基氢(如果形成了二硫键就不会缺失)

要是遇到missing atoms报错,先别慌。把报错日志里的残基编号记下来,去PDB文件里定位看看。很多时候只是少了个氢原子,补上就行。

4.3 missing atoms 的排查与修复

排查思路很简单——看日志里的残基编号,再对比PDB文件。AutoDock的日志会明确告诉你哪个残基的哪个原子缺失。

Error: Missing 2 atoms in residue HIS 57
  Atom ND1 not found
  Atom NE2 not found

嗯,这里要注意,HIS残基的咪唑环原子缺失很常见。因为His有两种质子化状态,很多时候PDB文件只存了其中一种形态的坐标。

修复方法我推荐用AutoDock Tools自带的工具,或者用PyMOL的补全功能。我个人的习惯分两步走:

  1. 先检查PDB文件是否完整——看看有没有MODEL标记或REMARK里交代了缺失信息
  2. 再用工具补全——用ADT的“Edit → Add Missing Atoms”功能

用ADT操作流程:

1. 打开AutoDock Tools
2. File → Read Molecule → 选择你的受体PDB文件
3. 菜单栏选择 Edit → Add Missing Atoms
4. 弹窗选择 yes
5. 保存为新的PDB文件

用PyMOL的方法更直接,适合批量处理:

# 在PyMOL命令行里输入
fetch 1abc
remove solvent
h_add
save 1abc_fixed.pdb

这条命令会先下载PDB结构,去掉水分子,然后自动添加所有缺失的氢原子。我自己做过测试,成功率在95%以上。

4.4 高级排查技巧

有时候missing atoms报错不一定是真缺失。可能是PDB文件里原子命名和AutoDock的原子类型库对不上。举个例子,PDB里写的“HG”原子,AutoDock可能不认识,就会报错说缺失。

深层次原因其实是原子类型映射没做好。我建议你准备一个原子类型对照表:

PDB常用原子名AutoDock原子类型说明
NN主链氮,一般没问题
CACalpha碳,注意别和钙离子搞混
CB、CG、CD...C侧链碳原子,A
OD1、OE1O羧基氧,常见
NH1、NH2N胍基氮,如Arg侧链
SGS巯基硫,Cys残基特有

如果你的PDB文件里出现了非标准的原子名,比如“C5”、“C6”这种,AutoDock大概率会报错。我建议你用标准化工具重命名一下。

# 用OpenBabel重命名原子
obabel input.pdb -O output.pdb --addhydrogens --proper --fill 2 100

这里--fill 2 100的意思是填充缺失侧链的最大长度限制。值越大,补全范围越广,但耗时也增加。

千万别以为补了缺失原子就万事大吉。补全的原子坐标是预测的,不一定准确。尤其是柔性侧链末端,补上去的坐标可能和真实构象差很远。有条件的话,最好用MD模拟做一下局部优化。

举个例子,我经手的一个案例:一个激酶抑制剂项目,受体PDB文件里Lys72的侧链末端NZ原子缺失。用ADT补上之后直接对接,结果对接能量异常低。我仔细一看,补上的NZ位置和其他残基有严重空间冲突。后来重新做了50ns的MD模拟平衡,才得到合理的构象。

4.5 本章核心流程

我把受体文件准备的流程整理成了下面这张图。你可以把这当成操作清单,每次准备受体都按这个走一遍,基本不会再出问题。

受体文件准备流程 原始PDB文件 格式检查 缺失原子检查 补全缺失原子 格式修复 输出准备完毕 检查清单 • 列对齐 • 残基命名规范 • 链标识符一致性 • 原子名称标准化 做完这一步,对接基本不会因 PDB格式或缺失原子报错

这个流程图基本覆盖了受体文件准备的核心步骤。我个人建议,每次准备新受体都按这个顺序走一遍,尤其是从PDB数据库下载的结构,一定要做格式检查和缺失原子补全。别嫌麻烦,这一步做好了,后面的对接效率能提升一大截。

好了,这一章的内容就到这。记住,受体文件的质量直接决定了对接结果的可靠性。下次再遇到missing atoms报错,按我上面的方法排查一遍,基本都能搞定。