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的补全功能。我个人的习惯分两步走:
- 先检查PDB文件是否完整——看看有没有MODEL标记或REMARK里交代了缺失信息
- 再用工具补全——用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原子类型 | 说明 |
|---|---|---|
| N | N | 主链氮,一般没问题 |
| CA | C | alpha碳,注意别和钙离子搞混 |
| CB、CG、CD... | C | 侧链碳原子,A |
| OD1、OE1 | O | 羧基氧,常见 |
| NH1、NH2 | N | 胍基氮,如Arg侧链 |
| SG | S | 巯基硫,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数据库下载的结构,一定要做格式检查和缺失原子补全。别嫌麻烦,这一步做好了,后面的对接效率能提升一大截。
好了,这一章的内容就到这。记住,受体文件的质量直接决定了对接结果的可靠性。下次再遇到missing atoms报错,按我上面的方法排查一遍,基本都能搞定。