352

Scaffold Hopping 实战:如何跳出原有母核

骨架跃迁让分子跳出原有母核。这篇给出多种实战方法的代码、几何约束思路与验证流程。

骨架跃迁(scaffold hopping):保留关键取代基与它们的空间排布,把中间的母核换掉。动机可能是改善性质、规避专利、提升选择性或简化合成。这篇给出几条可操作的技术路线。

路线一:基于三维形状与药效团

核心洞察是真正重要的不是核心本身,而是它把取代基「摆在什么位置、什么朝向」

from rdkit import Chem
from rdkit.Chem import AllChem, rdShapeHelpers, rdMolAlign
import numpy as np

def shape_similarity(ref_mol, probe_smiles, n_confs=50, seed=0xf00d):
    """计算候选分子与参考分子的最佳三维形状相似度"""
    probe = Chem.AddHs(Chem.MolFromSmiles(probe_smiles))
    p = AllChem.ETKDGv3(); p.randomSeed = seed; p.pruneRmsThresh = 0.5
    cids = AllChem.EmbedMultipleConfs(probe, numConfs=n_confs, params=p)
    if not cids:
        return 0.0
    AllChem.MMFFOptimizeMoleculeConfs(probe, maxIters=500)

    best = 0.0
    for cid in cids:
        try:
            AllChem.AlignMol(probe, ref_mol, prbCid=cid)
            sim = 1.0 - rdShapeHelpers.ShapeTanimotoDist(
                probe, ref_mol, confId1=cid, confId2=0)
            best = max(best, sim)
        except Exception:
            continue
    return best

# 参考:已知活性分子的结合构象(最好来自共晶结构)
ref = Chem.MolFromMolFile("ref_ligand.sdf", removeHs=False)

for cand in candidate_smiles:
    print(f"{shape_similarity(ref, cand):.3f}  {cand}")

路线二:R 基团分解 + 核心替换

from rdkit.Chem import rdRGroupDecomposition as rgd

# 1) 把已知活性分子按核心分解
core = Chem.MolFromSmarts("c1ccc2[nH]ccc2c1")     # 原核心:吲哚
res, unmatched = rgd.RGroupDecompose([core], active_mols,
                                      asSmiles=True, asRows=True)
print(f"分解成功 {len(res)},未匹配 {len(unmatched)}")
for r in res[:3]:
    print(r)      # {'Core': '...', 'R1': '...', 'R2': '...'}

# 2) 准备候选新核心(保持相同的连接点数与相对几何)
new_cores = [
    "c1ccc2occc2c1",        # 苯并呋喃
    "c1ccc2sccc2c1",        # 苯并噻吩
    "c1cnc2[nH]ccc2c1",     # 氮杂吲哚
    "c1ccc2c(c1)cc[nH]2",   # 异吲哚
    "C1CCc2ccccc2C1",       # 四氢萘(饱和替换)
]

# 3) 用反应模板重组
from rdkit.Chem import AllChem

def graft_rgroups(core_smiles, rgroups):
    """把 R 基团接到新核心上(需按连接点编号对应)"""
    # 实践中用带原子映射的 SMARTS 反应,或用 RDKit 的 ReplaceCore/ReplaceSidechains
    combined = core_smiles
    for i, r in enumerate(rgroups, start=1):
        combined = combined.replace(f"[*:{i}]", r.replace(f"[*:{i}]", ""))
    m = Chem.MolFromSmiles(combined)
    return Chem.MolToSmiles(m) if m else None

路线三:从数据中挖掘真实发生过的替换(推荐)

# mmpdb:匹配分子对分析,从数据中学习「哪些替换实际保持了活性」
pip install mmpdb

# 1) 从 ChEMBL 或内部数据构建 MMP 数据库
mmpdb fragment chembl_compounds.smi -o fragments.fragdb
mmpdb index fragments.fragdb -o mmp.mmpdb

# 2) 加载活性数据
mmpdb loadprops -p activities.csv mmp.mmpdb

# 3) 查询:给定一个分子,看有哪些已知的转换
mmpdb transform --smiles "c1ccc2[nH]ccc2c1CCN" \
  --property pIC50 mmp.mmpdb

MMP 分析是最值得自建的能力:它给出的不是理论上的可能替换,而是「在真实数据中,这个替换平均让活性变化多少」。用自家历史数据做 MMP,得到的知识比任何通用规则都贴合实际。

路线四:生成模型 + 相似性约束

# REINVENT4 的 Mol2Mol 模式:在相似性约束下生成变体
# 通过控制相似性下限,可以做「适度跃迁」

[[stage.scoring.component]]
[stage.scoring.component.TanimotoDistance]
[[stage.scoring.component.TanimotoDistance.endpoint]]
name = "similarity_window"
weight = 1.0
params.smiles = ["原始活性分子的 SMILES"]
# 用 double_sigmoid 设一个「相似度窗口」:
#   太相似 → 不是跃迁
#   太不相似 → 可能失活
transform.type = "double_sigmoid"
transform.low = 0.35
transform.high = 0.60
transform.coef_div = 1.0

成功的关键前提

  • 必须知道正确的结合姿势:出口向量是从三维结构中读出的。没有共晶结构或可靠对接姿势,几何约束无从谈起。
  • 判断哪些取代基是关键的:形成关键氢键、盐桥、占据关键疏水口袋的取代基必须保住位置;伸向溶剂的部分容差大。用 PLIP 或 ProLIF 先分析清楚(见 338《用 ProLIF 提取相互作用指纹》339《用 PLIP 生成蛋白-配体相互作用报告》)。
  • 核心本身是否参与相互作用:如果原核心与蛋白有直接接触(如芳环 π 堆积),换掉它风险大得多。
  • 构象刚性的影响:新核心的柔性不同会改变取代基的构象分布,即使静态几何匹配也可能活性下降。

验证流程

# 候选新核心的分级验证

# 1) 几何可行性:约束嵌入检查
from rdkit.Chem import AllChem

def geometric_feasibility(new_mol, ref_mol, key_atom_map):
    """检查新分子能否让关键取代基落在参考位置"""
    try:
        AllChem.ConstrainedEmbed(new_mol, ref_mol, randomseed=0xf00d)
        rmsd = float(new_mol.GetProp("EmbedRMS"))
        return rmsd < 1.0, rmsd
    except Exception as e:
        return False, str(e)

# 2) 对接验证:新分子能否复现关键相互作用(见 338)

# 3) 性质检查:新核心是否真的改善了目标性质

# 4) 合成可行性:逆合成分析 + 合成化学家评审

# 5) 专利检索:SureChEMBL 初筛(见 234),
#    但 FTO 判断必须由专利律师完成

现实的成功率

骨架跃迁的成功率不高,要有心理准备。几何匹配只是必要条件,实际活性还受构象熵、局部静电、去溶剂化代价等多重因素影响。很多「理论上完美」的替换在实验中活性大跌。务实的做法是一次准备多个候选核心,接受大部分会失败。

常见坑与提示

  • 前提是已知正确结合姿势,并先分析清楚哪些取代基是关键的;
  • MMP 分析(mmpdb)从真实数据挖掘有效替换,比理论规则可靠
  • 核心本身若参与关键相互作用,跃迁风险大得多;
  • 成功率有限,一次准备多个候选并接受大部分失败。

延伸资源