380

共价对接 Covalent Docking:如何建模反应性结合

共价对接需要同时建模非共价识别与化学反应。这篇给出工具选择、参数设置与结果解读的实际方法。

常规对接假设配体与蛋白只有非共价相互作用。共价抑制剂(见 379《共价抑制剂设计》)需要额外建模化学键的形成,这对对接程序提出了不同的要求。

共价对接的两种思路

思路 做法 适用
共价约束对接 先假设共价键已形成,把配体与目标残基当作一个整体优化 已知反应位点,评估结合姿势
非共价对接 + 几何筛选 常规对接,再筛选「弹头接近目标 Cys」的姿势 探索阶段,评估可行性

第二种思路常被低估但很实用:它直接回答「这个分子的弹头能不能够到那个半胱氨酸」——这是共价设计的核心几何问题。

方法一:AutoDock 的共价对接

# AutoDock 家族支持「柔性侧链」方式的共价对接
# 思路:把目标 Cys 侧链与配体合并成一个柔性单元

# 1) 构建共价加合物(配体 + Cys 侧链)
#    用化学软件手工构建,或用脚本自动化

# 2) 用 Meeko 准备(见 341)
mk_prepare_ligand.py -i covalent_adduct.sdf -o adduct.pdbqt

# 3) 对接时把该残基从受体中移除(因为它已在配体里)

# 4) 用位置约束保持 Cα 位置不变
vina --receptor receptor_no_cys.pdbqt --ligand adduct.pdbqt \
     --center_x ... --size_x ... \
     --exhaustiveness 32 --seed 42

# AutoDock4 的 flexible sidechain 方式更直接支持这一点

方法二:非共价对接 + 几何筛选(推荐起步)

from rdkit import Chem
from rdkit.Chem import AllChem
import numpy as np
from Bio.PDB import PDBParser

def screen_covalent_feasibility(docked_sdf, receptor_pdb,
                                cys_resnum, warhead_smarts,
                                max_dist=5.0, chain="A"):
    """筛选出弹头能够到目标半胱氨酸的对接姿势"""
    # 获取目标 Cys 的 SG 原子坐标
    parser = PDBParser(QUIET=True)
    st = parser.get_structure("r", receptor_pdb)
    sg_coord = None
    for res in st[0][chain]:
        if res.id[1] == cys_resnum and "SG" in res:
            sg_coord = res["SG"].get_coord()
            break
    if sg_coord is None:
        raise ValueError("未找到目标 Cys 的 SG 原子")

    warhead = Chem.MolFromSmarts(warhead_smarts)
    results = []

    for mol in Chem.SDMolSupplier(docked_sdf, removeHs=False):
        if mol is None:
            continue
        matches = mol.GetSubstructMatches(warhead)
        if not matches:
            continue
        conf = mol.GetConformer()

        # 找弹头反应中心(如丙烯酰胺的 β 碳)到 SG 的最短距离
        best = 1e9
        for match in matches:
            for idx in match:
                pos = np.array(conf.GetAtomPosition(idx))
                d = np.linalg.norm(pos - sg_coord)
                best = min(best, d)

        results.append({
            "name": mol.GetProp("_Name") if mol.HasProp("_Name") else "",
            "score": float(mol.GetProp("minimizedAffinity"))
                     if mol.HasProp("minimizedAffinity") else None,
            "warhead_to_sg": float(best),
            "feasible": best <= max_dist,
        })
    return results

# 常用弹头的 SMARTS:
WARHEADS = {
    "acrylamide": "[CX3](=O)[CX3]=[CX3]",       # 丙烯酰胺
    "chloroacetamide": "[CX3](=O)[CH2]Cl",      # 氯乙酰胺
    "vinyl_sulfone": "[SX4](=O)(=O)[CX3]=[CX3]",
    "cyanoacrylamide": "[CX3](=O)[CX3](=[CX3])C#N",
}

res = screen_covalent_feasibility(
    "docked.sdf", "receptor.pdb", cys_resnum=797,
    warhead_smarts=WARHEADS["acrylamide"])

feasible = [r for r in res if r["feasible"]]
print(f"{len(feasible)}/{len(res)} 个姿势的弹头能够到目标 Cys")

距离判据:反应中心到 SG 的距离在 3~5 Å 范围内通常认为几何可行(考虑到侧链柔性与反应过渡态的需求)。超过 6~7 Å 基本不可行。

方法三:专用工具

工具 特点
AutoDock4 / Vina 柔性侧链 开源,需手工构建加合物
CovDock(Schrödinger) 商业,流程完整
Rosetta 共价对接 可定制,需编写协议
GOLD 共价模式 商业
DOCKovalent 学术工具,专为共价虚拟筛选设计

共价对接不能告诉你什么

这是最重要的认知:共价对接建模的是几何可行性与结合姿势,而不是反应本身。它不能预测:

  • 反应速率(kinact:这需要量子化学计算过渡态,或用 QM/MM 方法——成本高且精度有限;
  • 半胱氨酸的实际反应性:Cys 的 pKa 受局部环境影响很大(附近碱性残基降低 pKa,使其成为更活泼的硫醇盐),而对接程序不建模这一点;
  • 选择性:需要考虑全蛋白组中其它可及的半胱氨酸;
  • 竞争反应:与 GSH 等细胞内亲核试剂的反应。

更完整的评估流程

# 1) 非共价对接 + 几何筛选
#    → 弹头能否够到目标 Cys

# 2) 共价约束对接或最小化
#    → 成键后的构象是否合理

# 3) MD 模拟
#    → 共价复合物是否稳定
#    → 需要共价键的力场参数(可能要自己参数化)

# 4) 量子化学(可选,成本高)
#    → 用 QM/MM 计算反应能垒
#    → 只对少数关键分子做

# 5) Cys pKa 预测
#    → PROPKA 等工具估算目标 Cys 的 pKa
#    → pKa 低(更易去质子化)= 反应性更高

# 6) 选择性分析
#    → 在同源蛋白中该 Cys 是否保守?
#    → 全蛋白组中还有哪些可及的 Cys?

# 7) 实验验证(不可替代)
#    → k_inact/K_i 测定
#    → 质谱确认修饰位点
#    → ABPP 评估脱靶

虚拟筛选共价化合物

# 共价虚拟筛选的实用流程
#
# 1) 库准备:从化合物库中筛出含目标弹头的分子
from rdkit import Chem

warhead_pattern = Chem.MolFromSmarts(WARHEADS["acrylamide"])
covalent_library = [smi for smi in library
                    if (m := Chem.MolFromSmiles(smi)) is not None
                    and m.HasSubstructMatch(warhead_pattern)]

# 2) 常规对接(不建模共价键)

# 3) 几何筛选:弹头到目标 Cys 的距离

# 4) 综合排序:对接分数 + 几何可行性
#    注意:不能只看对接分数 ——
#          分数最好的姿势可能弹头朝向完全错误

# 5) 人工审查弹头的化学合理性
#    某些弹头虽然匹配 SMARTS,但化学环境使其反应性异常

常见坑与提示

  • 「非共价对接 + 几何筛选」是最实用的起步方法,直接回答弹头能否够到;
  • 反应中心到 SG 距离 3~5 Å 视为几何可行;
  • 共价对接建模的是几何,不是反应速率——kinact 需要量化计算或实验;
  • 不能只看对接分数,最高分的姿势可能弹头朝向完全错误。

延伸资源