受体准备工作:从PDB文件到pdbqt格式的转换技巧
写代码多年,我养成了一个习惯:准备永远比计算更重要。搞分子对接也一样。你准备好了参数,但受体文件本身有问题——结果肯定一塌糊涂。我刚入行那会儿,就因为pdbqt文件少了几根键,排查了一整周。
说白了,pdbqt格式包含两个关键信息:原子坐标和原子类型。AutoDock Vina用这套信息来计算结合自由能。如果受体里缺了原子或者类型标错了,对接结果就是瞎猜。
PDB文件到手后,先做这几步
1. 检查缺失原子
晶体结构不一定完整。尤其是柔性侧链和溶剂暴露区域,电子密度模糊,PDB里会直接跳过这些原子。怎么办?
- 用
pdb4amber或WHAT IF补全缺失侧链 - 或者手动编辑,但结构生物学基础不牢的话,不建议手动动刀
你想想看,如果活性位点缺了个关键残基的侧链,对接出来的pose能准吗?答案显而易见。
2. 处理多构象
很多PDB文件里记录着多个构象(ALT A/B/C)。Vina只认第一个构象。所以得把多余构象删掉,只保留占有率最高的那个。
# 用python脚本快速提取alt loc A
from Bio.PDB import PDBParser, PDBIO
parser = PDBParser()
structure = parser.get_structure("receptor", "4hhb.pdb")
for model in structure:
for chain in model:
for residue in chain:
for atom in residue:
if atom.get_altloc() != " " and atom.get_altloc() != "A":
residue.detach_child(atom.get_id())
io = PDBIO()
io.set_structure(structure)
io.save("receptor_clean.pdb")
3. 移除水分子和配体
大多数情况下,对接前得把结晶水和原始配体去掉。但也不绝对——如果水分子在活性位点里扮演着稳定的桥连角色,那就得保留。
- 常规做法:
grep -v "HOH" receptor.pdb > receptor_dry.pdb - 保留关键水:在pyMOL里手动挑出与残基形成两个以上氢键的水分子
pdbqt格式转换的核心逻辑
当初mgltools是唯一的官方转换工具。但它的python 2依赖让人头疼。现在有了更好的选择——meeko 和 AUTODUMMY。
方法一:用ADT(AutoDock Tools)——传统路线
这是AutoDock团队提供的图形界面工具。我早期用过很多次,稳定但慢。
- 启动ADT → 加载PDB → 加氢 → 计算Gasteiger电荷 → 指定可旋转键 → 保存pdbqt
- 注意:ADT会把所有非标准残基当成配体,需要手动设置为受体一部分
方法二:用meeko——我现在的首选
meeko是一个纯Python 3的开源库,安装简单,速度快。它把配体和受体转换分开处理。今天我们先说受体部分。
# 安装meeko
pip install meeko
# 转换受体PDB为pdbqt
meeko_prepare_receptor.py --input receptor.pdb --output receptor.pdbqt --pH 7.4 --add_hydrogens
--pH 7.4 这个参数。为什么?因为这个pH值对应生理条件。如果你研究的是胃蛋白酶或溶酶体酶,pH得相应调整。我曾经因为忽略pH参数,把组氨酸的质子化状态搞错了,对接结果完全不符合实验数据。
方法三:用AUTODUMMY——自动化处理管道
AUTODUMMY把加氢、电荷计算、pdbqt转换都封装在一个命令里。适合批量处理。
autodummy.py --receptor-pdb receptor.pdb --output-dir ./prepared/
它会自动生成 receptor.pdbqt 和一份日志文件,记录所有处理细节。
氢键和柔性处理——最容易被坑的地方
| 问题 | 常见错误 | 正确做法 |
|---|---|---|
| 组氨酸质子化状态 | 默认加氢,不区分HID/HIE/HIP | 根据pH和氢键网络手动指定 |
| 天冬氨酸/谷氨酸 | 直接加氢不考虑环境 | 检查活性位点疏水性,决定质子化 |
| 柔性残基选择 | 把整个蛋白设成柔性 | 只选活性位点侧链,通常3-8个残基 |
| 电荷分配 | 使用+1泛型电荷 | 用Gasteiger-Marsili半经验方法 |
我的实用工具链推荐
我用了三年,总结出下面这个组合。实践证明最靠谱:
- PDB准备: pyMOL + Bio.Python 脚本(去水、去配体、提取单构象)
- 加氢与电荷: reduce(加氢) + meeko(计算电荷并输出pdbqt)
- 质量检查: OpenBabel 的
obabel -ipdbqt receptor.pdbqt -O receptor_report.txt --error - 柔性设定: 用脚本提取要柔化的残基坐标,另存为独立的pdbqt
这张图帮你理清整个流程
下面是我自己画的流程图,涵盖从原始PDB到最终pdbqt的完整路径。
避坑清单:我替你踩过的雷
- 不要直接对着PDB加氢。 我试过,加出来的氢键方向十有八九是错的。一定要用reduce或meeko这类专用工具。
- 电荷必须重新计算。 PDB文件里没有电荷信息。如果用旧版工具生成pdbqt但忘了重新分配电荷,原子类型会乱套。
- 柔性残基的pdbqt需要单独准备。 不能把柔性残基放在受体主文件里一起转。我当时踩过这个坑,Vina报了一个莫名其妙的索引错误,后来发现是同一原子被定义了两次。
- 组氨酸的质子化状态要手调。 自动工具默认加两个氢(HIP),但多数情况下组氨酸只加一个氢(HID或HIE),甚至不加(HIN)。
最后一条黄金法则:每做完一步转换,用文本编辑器打开pdbqt文件看看。你不需要懂每一行,但至少确认一下坐标范围是否合理,ATOM记录数量是否异常。我在项目里见过有人把溶剂分子当成受体的一部分转进去了,坐标从-100到300,离谱得一塌糊涂。
关于受体准备,核心就这些了。把pdbqt文件准备好,后面的对接参数设置才有意义。不然你费尽心思调盒子大小、设exhaustiveness,结果受体本身有问题——说白了,白忙活。