第2章 输入文件准备:受体与配体结构文件格式(PDBQT)
做分子对接,第一步不是点开Vina就开始跑。
真正的工作,从准备输入文件开始。我见过太多新手——甚至一些老手——直接把PDB丢进Vina,然后对着报错日志发呆。说白了,Vina不认识普通PDB,它只吃PDBQT。
PDBQT是什么?就是在PDB基础上加了三点东西:原子类型(AutoDook类型)、电荷、还有扭转信息。受体不需要扭转,配体必须要有可旋转键的标记。没有这些,Vina没法算。
这一章,咱们把格式讲透,把转换工具用熟。你准备好了吗?
2.1 PDBQT 与普通 PDB 的核心差异
先看一张表,一目了然:
| 项目 | 普通PDB | PDBQT |
|---|---|---|
| 原子类型 | 元素名(C,N,O,S) | AutoDook原子类型(C.3,N.3,O.3等) |
| 电荷 | 无(可选放B-factor列) | 第10列写入Gasteiger电荷 |
| 扭转信息 | 无 | 配体记录可旋转键(ROOT/BRANCH/END) |
| 氢原子 | 通常省略或部分 | 明确添加极性氢 |
| 适用场景 | 可视化、分子动力学 | 对接、柔性侧链扫描 |
一句话记住:Vina只看PDBQT。没有准备就运行,报错是必然的。
2.2 受体 PDBQT 的准备:坐标 + 氢 + 电荷
受体的PDBQT相对简单。它不需要描述可旋转键,但必须包含所有非极性氢和完整的电荷。
我个人的习惯是:先用原始PDB做一次结构检查,去掉溶剂分子、配体、离子(除非你特意保留)。然后加氢、分配电荷、最后导出PDBQT。
为什么强调加氢?因为对接时,氢键的方向性非常重要。Vina算力不低,但你不能指望它自己猜出氢在哪。
2.2.1 使用 AutoDock Tools (ADT) 准备受体
ADT是图形界面的主力。步骤如下:
- 打开ADT,读入受体PDB:
File → Read Molecule。 - 删除水和其他非标准残基:
Edit → Delete → Delete Water,再手动删掉配体。 - 加氢:
Edit → Hydrogens → Add → All Hydrogens。 - 分配电荷:
Edit → Charges → Compute Gasteiger。 - 设定原子类型(ADT自动完成):
Edit → Atoms → Assign AD4 type。 - 保存为PDBQT:
File → Save → Write PDBQT。
# 命令行状态下,你也可以用prepare_receptor4.py(来自ADFR Suite)
# 假设我们有一个受体 1n1l_protein.pdb
prepare_receptor4.py -r 1n1l_protein.pdb -o 1n1l_protein.pdbqt -A checkhydrogens
我曾经踩过的坑:用ADT自动加氢时,如果不先删除水,水分子上的氢会混在受体里,导致对接时多出一堆假氢键。后来我养成习惯——先删水,再加氢。
2.2.2 使用 OpenBabel 准备受体(快速但有限)
OpenBabel也可以做加氢和导出PDBQT,但 原子类型和电荷分配的精度不如ADT。我建议只在大规划批量处理时用它做初步准备,最终还应该用ADT校准一次。
# OpenBabel 转换代码(加氢 + 导出pdbqt)
obabel 1n1l_protein.pdb -O 1n1l_protein.pdbqt -xh --partialcharge gasteiger
参数说明:-xh 加氢,--partialcharge gasteiger 计算Gasteiger电荷。
2.3 配体 PDBQT 的准备:扭转信息是关键
配体的PDBQT比受体复杂。它不仅要有正确的原子类型和电荷,还必须描述 可旋转键(ROOT, BRANCH, END)。Vina通过这个信息知道哪些键可以旋转,从而进行构象搜索。
没有扭转信息的配体PDBQT,Vina只会把它当刚体处理——那就失去对接的意义了。
2.3.1 使用 ADT 准备配体
- 打开ADT,读入配体分子(MOL2/SDF/PDB格式都行)。
- 检测扭转:
Ligand → Torsion Tree → Detect Root。ADT会自动找最合适的根原子。 - 设定可旋转键(通常保持ADT自动检测的结果即可):
Ligand → Torsion Tree → Choose Torsions。 - 加氢和电荷:
Edit → Hydrogens → Add → All Hydrogens,Edit → Charges → Compute Gasteiger。 - 保存PDBQT:
Ligand → Output → Save as PDBQT。
# 命令行准备配体(prepare_ligand4.py)
prepare_ligand4.py -l ligand.mol2 -o ligand.pdbqt -B frag
小技巧:配体文件最好用MOL2格式,因为它自带原子类型和连接表,ADT转换时更容易保留电荷。PDB格式没有连接表,容易丢失环信息。
2.3.2 使用 OpenBabel 准备配体(需手动确认扭转)
OpenBabel也能用,但生成的PDBQT有时候会把环上的单键也算作可旋转键——这会导致非常离谱的对接结果。我建议你用OpenBabel转换后,用文本编辑器打开PDBQT检查“ROOT”和“BRANCH”段是否合理。
# OpenBabel 配体转换(先加氢,再输出pdbqt)
obabel ligand.sdf -O ligand.pdbqt -xh --partialcharge gasteiger
转换完成后,用grep快速检查扭转数量:
grep -c "BRANCH" ligand.pdbqt
如果BRANCH段数远多于你预期的可旋转键数量(比如一个苯环有6个BRANCH),说明默认检测把环内单键错判了。此时应该回到ADT重新处理。
2.4 PDBQT 文件结构示意
看一个实际的配体PDBQT片段,理解它的结构:
ROOT
ATOM 1 C1 LIG 1 2.345 3.456 4.567 0.00 0.00 0.000 C.3
ATOM 2 C2 LIG 1 2.567 3.678 4.789 0.00 0.00 0.000 C.3
ATOM 3 C3 LIG 1 2.789 3.890 4.901 0.00 0.00 0.000 C.3
ENDROOT
BRANCH 1 4
ATOM 4 C4 LIG 1 2.901 4.012 5.123 0.00 0.00 0.000 C.3
ATOM 5 C5 LIG 1 3.123 4.234 5.345 0.00 0.00 0.000 C.3
ENDBRANCH
BRANCH 1 6
ATOM 6 O1 LIG 1 2.123 3.234 4.456 0.00 0.00 -0.350 O.3
ENDBRANCH
这里ROOT是刚性的核心(原子1~3),BRANCH标识从原子1分出去的两条侧链。Vina在对接时会旋转BRANCH中的单键,从根原子开始遍历构象空间。
2.5 转换流程总览(SVG)
2.6 常见问题与避坑指南
- 受体加氢后出现奇怪的原子:偶尔遇到ADT把H加到金属离子上。检查一下,如果受体含金属离子,需要手动处理——通常金属离子的配位水要保留,但水分子电荷要清掉。
- 配体扭转检测与预期不符:我遇到过环戊烷被检测出5个BRANCH(每个C-H都当成分支)。解决办法:在ADT中打开“Torsion Tree”,手动把环上的单键设为不可旋转。
- 电荷不收敛:Gasteiger电荷计算时如果分子太大,可能报“charge iteration not converged”。增大迭代次数,或者先用MOPAC/antechamber计算更准确的电荷,再导入。
- OpenBabel和ADT转换结果不一致:这很常见。我建议以ADT为准,OpenBabel只用作批量预处理,最终用ADT再检查一次。
记住:准备文件花20分钟,能省掉后面调试一周的时间。别偷懒。