4. 配体准备工作:处理多构象、加氢、电荷分配

配体准备,说白了就是让分子文件变成Vina能读懂的样子。很多人直接拿一个原始SDF甚至SMILES就跑对接,结果要么报错,要么结果不准。

我刚开始做对接时,就吃过这个亏。一个激酶抑制剂项目,跑了三天筛选,最后发现是配体没加氢,电荷分配也不对。白白浪费了时间。

这一章,我把配体准备的三个核心步骤拆开讲:多构象处理、加氢、电荷分配。每一步都有坑,咱们一个一个说。

4.1 配体准备的核心任务

Vina要求输入配体是PDBQT格式。这个格式不能直接从晶体结构里拿。你得手动准备。

PDBQT文件包含哪些内容?

  • 原子坐标(PDB部分)
  • 部分电荷(Q部分)
  • 原子类型(T部分,AutoDock力场定义)
  • 可旋转键信息
  • 加氢后的极性氢

说白了,三步走:处理多构象→加氢→电荷分配。顺序不能乱。

4.2 多构象处理:从SDF到PDBQT

你手里拿到的配体文件,可能是SDF格式。一个SDF文件可能包含多个构象。

为什么要在Vina里处理多构象?

Vina本身会搜索配体构象。但它只从一个初始构象开始。如果你的初始构象离真实结合构象很远,搜索可能找不到最优解。

多构象输入,相当于给Vina多个起点。它会分别对接每个构象,最后合并结果。

我建议的做法:

  1. 生成构象库:用OpenBabel或RDKit,对配体生成20-50个低能构象。
  2. 转换为PDBQT:用MGLTools的prepare_ligand4.py脚本,逐个转换。
  3. 合并为一个多构象文件:用cat或文本编辑器,把多个PDBQT文件合并。

合并命令很简单:

cat ligand_conf1.pdbqt ligand_conf2.pdbqt ligand_conf3.pdbqt > ligand_multi.pdbqt

小技巧:合并后检查文件头部。每个构象必须以ENDMDL或END结束,下一个构象以MODEL开始。格式不对,Vina会报错。

我个人习惯用OpenBabel生成构象库:

obabel ligand.sdf -O ligand_conf.sdf --confab --nconf 50 --conformer

生成50个构象。够用。太多反而会拖慢对接速度。

4.3 加氢:极性氢与非极性氢的处理

加氢这事,容易搞混。

Vina需要加哪些氢?

氢类型 是否需要 说明
极性氢(-OH,-NH,-SH) 必须 影响氢键形成,必须保留
非极性氢(-CH3,-CH2-) 不需要 Vina内部使用“疏水”原子类型处理
芳香环上的氢 部分需要 取决于是否参与氢键

为什么要区分?

Vina的力场里,非极性氢被视为疏水原子的一部分。你加上去反而会多算原子数量,增加计算量。

正确的做法:

  1. 用prepare_ligand4.py加氢:脚本会自动判断哪些氢需要加。
  2. 检查pH条件:Vina默认在pH 7.4下运行。如果你的配体有可电离基团,要手动调整质子化状态。

我曾经在pH 7.4下跑一个羧酸配体。羧酸在pH 7.4下应该是去质子化的(-COO⁻),但默认脚本把它加成了-COOH。结果对接结果全错。后来检查才发现。

避坑指南:我曾经因为没检查羧基质子化状态,跑了500个化合物的虚拟筛选,结果只有12个有活性。后来重跑,正确率翻了三倍。切记:pH条件决定质子化状态。

手动调整质子化的例子:

# 用MGLTools的prepare_ligand4.py
# -g 参数指定质子化状态:0=去质子化,1=质子化
# 羧基在pH 7.4下去质子化,使用-g 0

pythonsh prepare_ligand4.py -l ligand.pdb -o ligand.pdbqt -g 0

4.4 电荷分配:Gasteiger与MMFF94

电荷是Vina计算结合能的关键。电荷不对,静电项就全偏了。

Vina用什么电荷?

Vina默认使用Gasteiger-Marsili电荷。这个电荷计算方法基于原子电负性。

优点是快。缺点是对于某些特殊配体(比如含金属原子或极性基团很多)不够准。

我一般建议:

  • 常规有机分子:Gasteiger电荷够用
  • 含金属的配体:改用MMFF94力场电荷
  • 带电配体:手动检查,必要时用QM计算电荷

用prepare_ligand4.py分配电荷:

# 自动分配Gasteiger电荷
pythonsh prepare_ligand4.py -l ligand.pdb -o ligand.pdbqt -U nphs

# 检查电荷是否合理
grep "ATOM" ligand.pdbqt | awk '{print $9}' | head

如何检查电荷?

配体所有原子的电荷之和应该等于分子的净电荷。中性分子和为0,带一个正电荷的和为1。

小技巧:我每次跑完电荷分配,都会用一个简单的Python脚本检查电荷和。如果偏离0.1以上,就得重来。

4.5 可旋转键设置:控制配体柔性

Vina允许你指定哪些键可以旋转。这直接影响搜索空间的大小。

规则很简单:

  • 所有非环单键都可以旋转
  • 双键、三键、环键不能旋转
  • 酰胺键最好锁定为平面

prepare_ligand4.py会自动检测可旋转键。但它有时会误判。

我曾经遇到过,一个配体里的酰胺键被当作可旋转键了。结果对接出来的构象,酰胺键扭曲成了非平面结构。而这个键在真实情况下是刚性的。

手动修改的方法:

# 打开生成的PDBQT文件
# 找到ROTATABLE键的声明
ROTATABLE 5
ATOM 12 C
ATOM 13 N
# 把酰胺键的行删除或注释掉

或者用AutoDock Tools(ADT)图形界面,手动锁定某些键。

4.6 常用工具与命令总结

我把常用的工具和命令列成一个表,方便你查阅。

工具 功能 命令示例
MGLTools (prepare_ligand4.py) PDB→PDBQT,加氢,电荷分配 pythonsh prepare_ligand4.py -l ligand.pdb -o ligand.pdbqt
OpenBabel 格式转换,构象生成 obabel ligand.sdf -O ligand.pdb --gen3D
RDKit (Python) 构象枚举,电荷计算 rdkit.Chem.rdDistGeom.EmbedMultipleConfs
AutoDock Tools (ADT) 图形界面,手动调整 GUI操作,无直接命令
AutoDockFR 自动处理多构象和电荷 autofr -l ligand.sdf -o ligand.pdbqt

推荐工作流:

  1. 用OpenBabel或RDKit生成20-50个低能构象
  2. 用prepare_ligand4.py转换为PDBQT(加氢+电荷)
  3. 手动检查可旋转键和质子化状态
  4. 合并为多构象文件
  5. 用Vina对接

4.7 本章知识体系图

下面这张图总结了配体准备的完整流程。从原始文件到最终的PDBQT,每一步都对应一个检查点。

配体准备工作流程图 原始配体文件 多构象生成 (20-50个低能构象) OpenBabel RDKit 加氢 + 质子化状态调整 电荷分配 (Gasteiger/MMFF94) 检查电荷和 = 分子净电荷 合并 → 最终 multi-PDBQT 文件 检查点 ① 构象数 ② 极性氢 ③ pH状态 ④ 电荷和 ⑤ 可旋转键 ⑥ 文件格式

每个节点都是我踩过的坑。记住这张图,你的配体准备工作就不会出错。

4.8 小结

配体准备是虚拟筛选中最容易被忽视的环节。我见过太多人因为加氢不对、电荷分配错误,导致后续所有结果不可靠。

总结一下:

  • 多构象:用OpenBabel或RDKit生成20-50个低能构象
  • 加氢:只保留极性氢,检查pH条件下的质子化状态
  • 电荷:优先用Gasteiger,特殊配体用MMFF94或QM
  • 可旋转键:手动检查,锁死酰胺键和环键
  • 验证:每次都要检查电荷和、构象数量、文件格式

配体文件准备好后,下一件事就是设置搜索范围。到时候我会讲怎么确定盒子的大小和位置。