对接给出的姿势可能是对的,也可能完全错误。而所有基于该姿势的后续分析(相互作用解读、设计决策)都建立在它之上——因此判断姿势可信度是对接流程中最关键的一步。
第一道关:重对接验证
# 这是使用任何对接方法前的必做步骤
#
# 做法:
# 把共晶结构中的原配体取出,用同样的流程重新对接回去,
# 看能否复现晶体姿势
#
# 判据:
# 重原子 RMSD ≤ 2.0 Å → 成功
# RMSD 2~3 Å → 边缘
# RMSD > 3 Å → 失败
#
# 如果重对接失败:
# 说明结构准备、盒子设置、或参数有问题
# → 在解决之前,对新分子的所有结果都不可信
#
# 常见的失败原因:
# - 结构未正确加氢或质子化态错误(见 105)
# - 盒子中心/尺寸不当
# - 删掉了必要的辅因子或金属
# - 删掉了参与结合的关键水分子
# - 配体的互变异构体或立体化学错误
from rdkit import Chem
from rdkit.Chem import rdMolAlign
def redock_rmsd(docked_sdf, reference_sdf):
docked = Chem.RemoveHs(Chem.SDMolSupplier(docked_sdf)[0])
ref = Chem.RemoveHs(Chem.SDMolSupplier(reference_sdf)[0])
return rdMolAlign.CalcRMS(docked, ref)
# 建议对该靶点家族的 3~5 个共晶结构都做重对接
# → 得到该体系上的成功率,而非单个案例
物理有效性检查
# PoseBusters:系统检查姿势的物理合理性
pip install posebusters
from posebusters import PoseBusters
buster = PoseBusters(config="dock")
df = buster.bust(["docked.sdf"], None, "receptor.pdb")
print(df.T)
# 检查项包括:
# 分子层面:
# - SMILES 是否合法
# - 键长、键角是否在合理范围
# - 芳环平面性
# - 立体化学是否保持
# - 内部空间冲突
# 复合物层面:
# - 与蛋白的空间冲突
# - 配体是否在口袋内(而非悬在外面)
# - 体积重叠
#
# 任何一项不通过 → 该姿势不应用于设计决策
#
# 重要性:
# 深度学习对接方法(DiffDock 等)生成的姿势
# 有相当比例通不过这些基本检查(见 101)
# → 这一步对它们尤其关键
相互作用核对:最有判别力的检验
- 思路:如果该靶点有已知的共晶结构,先分析出关键相互作用(如激酶的铰链区氢键),然后检查对接姿势是否复现了它们;
- 为什么有效:这是独立于打分函数的判据。打分函数可能被大而油的分子欺骗,但「有没有形成铰链氢键」是明确的几何事实;
- 工具:用 PLIP(见 108《PLIP》)分析共晶结构得到参考模式,用 ProLIF(见 109《ProLIF》)批量检查对接结果;
- 判据:与参考指纹的 Tanimoto 相似度 > 0.5,或至少复现 1~2 个核心相互作用。
import prolif as plf
import MDAnalysis as mda
# 计算对接姿势与共晶配体的相互作用指纹相似度
u = mda.Universe("receptor.pdb")
protein = plf.Molecule.from_mda(u.select_atoms("protein"))
fp = plf.Fingerprint()
fp.run_from_iterable(list(plf.sdf_supplier("docked_poses.sdf")), protein)
df_poses = fp.to_dataframe()
# 与参考比较(见 338 的完整代码)
# 能复现关键相互作用的姿势才值得采纳
多方法一致性
# 用原理不同的方法交叉验证
#
# Vina(物理打分 + 随机搜索)
# GNINA(+ CNN 重打分)
# DiffDock(扩散生成,盲对接)
# Boltz/Chai-1(AF3 类复合物预测,见 344)
#
# 比较各方法给出的姿势:
from rdkit.Chem import rdMolAlign
import itertools
def consensus_check(poses_dict, threshold=2.0):
names = list(poses_dict.keys())
agreements = {}
for a, b in itertools.combinations(names, 2):
try:
agreements[f"{a}-{b}"] = rdMolAlign.CalcRMS(
poses_dict[a], poses_dict[b])
except Exception:
agreements[f"{a}-{b}"] = None
return agreements
# 判读:
# 全部一致(两两 RMSD < 2 Å)→ 可信度高
# 部分一致 → 需进一步验证
# 各说各话 → 该体系的结合模式不明确,
# 不应据此做设计决策
#
# 这是最实用的可信度判据之一(见 346)
MD 验证
- 思路:对候选姿势跑短程 MD(10~50 ns),看它是否稳定;
- 判据:对齐蛋白后,配体的 RMSD 应保持在 2 Å 以内。若配体在模拟中漂移到别处或大幅改变取向,说明该姿势不稳定(见 124《RMSD 与 RMSF》);
- 额外收益:MD 还能揭示相互作用的稳定性(用 ProLIF 算占有率,见 109《ProLIF》)与水分子的作用;
- 成本:比对接高得多,只对关键姿势做。
与化学常识对照
这是最容易被跳过但极有价值的一步——用药化的眼睛看一遍:
- 极性基团是否埋在疏水口袋中且未形成氢键?这是明确的红旗(见 094《静电互补 Electrostatic Complementarity》);
- 疏水基团是否暴露在溶剂中?浪费了疏水结合的机会;
- 配体构象是否合理?是否处于明显的高能构象(如顺式酰胺、扭曲的共轭体系);
- SAR 能否解释?如果该姿势提示某个基团很重要,而 SAR 显示去掉它活性不变,那么姿势可能是错的;
- 与同家族的已知结合模式是否一致?激酶抑制剂应该形成铰链氢键——如果姿势中没有,需要特别的理由。
可信度判据汇总
| 检验 | 成本 | 判别力 |
|---|---|---|
| 重对接验证 | 低 | 必做,前置条件 |
| 物理有效性(PoseBusters) | 极低 | 必做 |
| 相互作用核对 | 低 | 高,独立于打分 |
| 多方法一致性 | 中 | 高 |
| 与化学常识对照 | 低(人力) | 高 |
| MD 稳定性 | 高 | 高 |
| 共晶结构 | 很高 | 决定性 |
关键要点
- 重对接验证(RMSD ≤ 2 Å)是使用任何对接方法的前置条件;
- 相互作用核对提供了独立于打分函数的判据,判别力高;
- 多方法一致性检验是最实用的可信度判据——各说各话就不该做决策;
- 用化学常识过一遍:埋藏的未配对极性基团是明确的红旗。
延伸资源
- 打分函数:095《Docking Score》;方法对比:346《比较 DiffDock、Vina、GNINA》;
- 相互作用分析:108《PLIP》、109《ProLIF》;MD 验证:124《RMSD 与 RMSF》。