4. 受体与配体预处理:去除水分子、加氢、计算电荷、设置可旋转键

预处理这一步,说白了就是把受体和配体收拾干净,让Vina能读懂它们。很多新手觉得这一步无聊,直接拿原始结构就跑对接,结果对接出来的姿势怎么都对不上实验数据。嗯,我刚开始也犯过这毛病。

我自己习惯把预处理拆成四个动作:

  • 去除水分子——只留关键的那几个
  • 加氢——补全缺失的氢原子
  • 计算电荷——让分子带上正确的电性
  • 设置可旋转键——告诉Vina配体哪些键能转

下面我一个一个说。你想想看,每个步骤都有坑,踩过一个就够你折腾半天。

受体与配体预处理流程 步骤1 去除水分子 步骤2 加氢 步骤3 计算电荷 步骤4 设置可旋转键 预处理完成 可对接的PDBQT文件 常见问题 水分子该留还是该删? 加氢后电荷不平衡? 旋转键设太多? → 输出

4.1 去除水分子

从PDB数据库下载的结构,里面通常有不少结晶水。这些水分子是否需要保留,我个人的判断标准很简单:如果水分子处于结合位点内部,并且与配体或关键残基形成了稳定的氢键网络,那就留着。但如果水分子在蛋白表面或者远离开口,直接删掉。

为什么?你想想看,Vina在做对接时,默认把受体看成刚性结构。如果保留了一大堆无关的水分子,配体根本挤不进去,对接全是乱来的。

核心原则:只保留结合位点内、对配体结合有贡献的保守水分子。其他一概删除。

实际操作中,我会用PyMOL或Chimera先看一下水分子的位置。我之前有个项目,处理一个激酶结构,里面30多个水分子。我一个个审视,最后只保留了2个。结果对接出来的构象跟晶体结构重合度很高。嗯,这2个水确实是关键的。

小技巧:用以下命令在PyMOL中快速远程删除水分子:

remove resn HOH
save cleaned_receptor.pdb

4.2 加氢

X射线晶体学通常分辨不出氢原子,PDB文件里的氢原子基本都是空的。但Vina做对接时,氢键的判断依赖氢原子。不加氢,对接的精度会大打折扣。

加氢不只是简单补几个原子。关键是加在正确的位置,还要考虑pH环境。比如在生理pH(7.4)下,组氨酸可能是双质子化的,Asp和Glu是去质子化的。我之前遇到过一个问题:没设置pH直接加氢,结果有一个关键Asp的电荷全偏了,对接的分数完全离谱。

我通常用AutoDock Tools(ADT)来加氢。命令很简单:

# 在ADT中:
Edit -> Hydrogens -> Add -> Polar Only (或 All Hydrogens)

但这里有个坑:ADT默认加的是极性氢,非极性氢要你自己决定。我建议先加全部氢,然后合并电荷。具体后面我会说。

注意:有些工具加氢后结构会扭曲,尤其是对环状体系。加完氢一定要检查一下键长和键角。我之前用过某个在线工具,加完氢直接把一个苯环压变形了,对接直接跑了负十几分,一看就知道是假的。

4.3 计算电荷

这一步非常关键。Vina的评分函数里包含静电项,电荷算错了,静电作用就全跑偏了。

常用的电荷计算方法有两种:

方法 原理 适用场景
Gasteiger 电荷 基于原子电负性分配 小分子配体、一般精度
MMFF94 电荷 力场所带电荷 小分子、与力场一致性好
AM1-BCC / RESP 半经验/从头算 高精度、需要更好的静电描述时

我个人在大多数项目中,给配体用Gasteiger电荷,受体用Kollman电荷。这两种都是ADT内置的,不需要额外装软件。跑起来很省事:

# 在ADT中:
Grid -> Set Charges -> Gasteiger (for ligand)
Grid -> Set Charges -> Kollman (for receptor)

经验:如果不确定用什么电荷,先用Gasteiger/Kollman。但如果你发现对接结果跟实验有系统性偏差,换成AM1-BCC试试。我之前有个氟代化合物的项目,Gasteiger算出来电荷分布偏小,换AM1-BCC后对接的RMSD降了0.3Å。

还有一个细节:计算电荷前,必须确保原子类型正确。ADT的原子类型和Vina的原子类型不完全一样。你最好用ADT的“Check”功能验证一下。我见过有人直接拿别的软件生成的结构导入,电荷算出来一大堆警告,最后对接结果全是0分。

4.4 设置可旋转键

这个步骤只针对配体。受体在Vina里默认是全刚性的,不设可旋转键。

设置可旋转键的核心逻辑是:告诉Vina配体里哪些单键可以自由旋转。Vina在做对接时,会通过这些可旋转键改变配体的构象,从而寻找最优结合姿势。

通常规则:

  • 单键——通常是可旋转的(除非是环内单键或酰胺键)
  • 双键、三键——不能旋转
  • 环结构——Vina把整个环看成一个刚性片段,环内键不旋转
  • 酰胺键——建议固定为反式构型,不旋转
  • 末端甲基——可以旋转,但Vina自己有自动识别

在ADT里设置:

Ligand -> Torsion Tree -> Detect Root
Ligand -> Torsion Tree -> Choose Torsions

Vina自己也有自动检测可旋转键的功能,但我建议手动复核一遍。尤其是:

  • 如果配体含有大共轭体系,Vina可能把一些不该转的键也标成可旋转
  • 如果配体有很多支链,默认设置可能让自由度爆炸,对接时间成倍增长

效率提示:可旋转键数量直接决定了对接的计算量。每增加一个可旋转键,构象搜索空间指数增长。我通常控制在6-8个以下。如果超过10个,考虑固定一些不重要的侧链。

我之前有一个大分子配体,带两个长烷基链,默认检测出12个可旋转键。我手动锁定了远端的4个甲基,让它们不能转,结果对接速度和精度都上去了。

4.5 输出PDBQT文件

预处理完成后,把受体和配体分别输出成PDBQT格式。这是Vina能直接读的格式。

# ADT中:
File -> Save -> Write PDBQT (for receptor)
File -> Save -> Write PDBQT (for ligand)

输出之后,我习惯打开PDBQT文件看一下头几行,检查一下原子类型和电荷是否正确。举个例子:

ATOM      1  N   LIG A   1      26.730  14.530  20.820 -0.3587   0
ATOM      2  CA  LIG A   1      26.170  14.730  21.760  0.2700   0
ATOM      3  C   LIG A   1      24.580  14.930  21.040  0.6200   0

这里第7列就是电荷。如果全部是0或者全部是整数,说明电荷没算上。我曾经有一次忘了点“Compute Gasteiger”,结果PDBQT里电荷全0,跑了一晚上对接发现全是负分,气到睡不着。

避免踩坑:PDBQT文件里不能有重复原子,不能有缺失的原子,原子类型必须属于Vina支持的列表。否则Vina直接报错退出。

4.6 小结一下

预处理看着琐碎,但每一个动作都影响后续结果。我做了这么多年分子对接,最大的感受就是:预处理花的时间,后面都能省回来。

  • 去除多余水分子——减小搜索空间
  • 正确加氢——保证氢键网络正确
  • 准确计算电荷——让静电作用可信
  • 合理设置可旋转键——控制搜索复杂度

这一步做好了,Vina才能发挥它真正的实力。