4. 配体准备工作:处理多构象、加氢、电荷分配
配体准备,说白了就是让分子文件变成Vina能读懂的样子。很多人直接拿一个原始SDF甚至SMILES就跑对接,结果要么报错,要么结果不准。
我刚开始做对接时,就吃过这个亏。一个激酶抑制剂项目,跑了三天筛选,最后发现是配体没加氢,电荷分配也不对。白白浪费了时间。
这一章,我把配体准备的三个核心步骤拆开讲:多构象处理、加氢、电荷分配。每一步都有坑,咱们一个一个说。
4.1 配体准备的核心任务
Vina要求输入配体是PDBQT格式。这个格式不能直接从晶体结构里拿。你得手动准备。
PDBQT文件包含哪些内容?
- 原子坐标(PDB部分)
- 部分电荷(Q部分)
- 原子类型(T部分,AutoDock力场定义)
- 可旋转键信息
- 加氢后的极性氢
说白了,三步走:处理多构象→加氢→电荷分配。顺序不能乱。
4.2 多构象处理:从SDF到PDBQT
你手里拿到的配体文件,可能是SDF格式。一个SDF文件可能包含多个构象。
为什么要在Vina里处理多构象?
Vina本身会搜索配体构象。但它只从一个初始构象开始。如果你的初始构象离真实结合构象很远,搜索可能找不到最优解。
多构象输入,相当于给Vina多个起点。它会分别对接每个构象,最后合并结果。
我建议的做法:
- 生成构象库:用OpenBabel或RDKit,对配体生成20-50个低能构象。
- 转换为PDBQT:用MGLTools的prepare_ligand4.py脚本,逐个转换。
- 合并为一个多构象文件:用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的力场里,非极性氢被视为疏水原子的一部分。你加上去反而会多算原子数量,增加计算量。
正确的做法:
- 用prepare_ligand4.py加氢:脚本会自动判断哪些氢需要加。
- 检查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 |
推荐工作流:
- 用OpenBabel或RDKit生成20-50个低能构象
- 用prepare_ligand4.py转换为PDBQT(加氢+电荷)
- 手动检查可旋转键和质子化状态
- 合并为多构象文件
- 用Vina对接
4.7 本章知识体系图
下面这张图总结了配体准备的完整流程。从原始文件到最终的PDBQT,每一步都对应一个检查点。
每个节点都是我踩过的坑。记住这张图,你的配体准备工作就不会出错。
4.8 小结
配体准备是虚拟筛选中最容易被忽视的环节。我见过太多人因为加氢不对、电荷分配错误,导致后续所有结果不可靠。
总结一下:
- 多构象:用OpenBabel或RDKit生成20-50个低能构象
- 加氢:只保留极性氢,检查pH条件下的质子化状态
- 电荷:优先用Gasteiger,特殊配体用MMFF94或QM
- 可旋转键:手动检查,锁死酰胺键和环键
- 验证:每次都要检查电荷和、构象数量、文件格式
配体文件准备好后,下一件事就是设置搜索范围。到时候我会讲怎么确定盒子的大小和位置。