形状互补是分子识别最基本的要求:配体必须能「装进」口袋,且尽可能填满它。这个看似简单的原则,是所有基于结构的设计方法的物理基础。
为什么形状这么重要
- 范德华相互作用的距离依赖极强:吸引力随距离的六次方衰减,斥力随十二次方上升。这意味着形状必须匹配得相当精确——差 0.5 Å 就可能从有利变成强烈排斥;
- 填充口袋获得结合能:每个与蛋白形成良好接触的配体原子都贡献结合能。留下的空腔意味着浪费的机会;
- 疏水效应:疏水表面的埋藏释放有序水分子,带来熵增——这是结合能的主要来源之一;
- 但过度填充有害:如果配体比口袋大,会产生空间冲突,代价极高。
量化形状互补
# 常用的量化指标
#
# 1) 埋藏溶剂可及表面积(BSA)
# BSA = SASA(配体) + SASA(蛋白) - SASA(复合物)
# → 越大说明接触面积越大
# → 但不区分「贴合」与「松散接触」
#
# 2) 形状互补性指数 Sc(shape complementarity)
# 衡量两个表面的法向量对齐程度
# Sc 接近 1 = 完美互补
# 典型的蛋白-配体界面 Sc 在 0.6~0.8
#
# 3) 口袋填充率
# 配体体积 / 口袋体积
# 过低 = 有未利用的空间
# 过高 = 可能有空间冲突
#
# 4) 空腔检测
# 复合物中是否有未被填充的内部空腔
# → 这是明确的设计机会
import freesasa
def compute_bsa(complex_pdb, ligand_pdb, protein_pdb):
def sasa(path):
s = freesasa.Structure(path)
return freesasa.calc(s).totalArea()
return sasa(ligand_pdb) + sasa(protein_pdb) - sasa(complex_pdb)
# 经验参考:
# 典型小分子-蛋白界面 BSA 约 300~600 Ų
# PPI 界面 1500~3000 Ų(见 382)
基于形状的虚拟筛选
# 核心思路:
# 如果一个分子的三维形状与已知活性分子相似,
# 它很可能能结合同一个口袋 ——
# 即使二维结构完全不同
#
# 这是骨架跃迁的重要途径(见 352)
from rdkit import Chem
from rdkit.Chem import AllChem, rdShapeHelpers
import numpy as np
def shape_similarity(ref_mol, probe_smiles, n_confs=100, 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=1000)
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
# 关键前提:
# 参考分子应该用「结合构象」而非任意低能构象
# → 有共晶结构时用共晶构象
# → 结合构象往往不是全局最低能构象(见 279)
形状 + 化学特征:更强的组合
- 纯形状匹配的问题:形状相似但化学性质完全不同的分子(如把苯环换成环己烷)会被判为高度相似,但结合行为可能差别很大;
- 解决:在形状之上叠加化学特征(氢键供受体、疏水、芳香性、电荷);
- ROCS 的 TanimotoCombo(见 278《OpenEye ROCS》)就是「形状 Tanimoto + 化学特征 Tanimoto」之和;
- 开源方案:RDKit 的形状比较 + 药效团特征(见 092《药效团 Pharmacophore》)、Shape-it、Pharmit。
在设计中的应用
# 1) 识别未填充的空间
# 在共晶结构中,找出口袋中配体未占据的区域
# → 这是增加取代基的方向
#
# 方法:
# - 用 fpocket 检测复合物中剩余的空腔
# - 在 PyMOL 中显示口袋表面与配体,目视检查
# - 用格点方法计算未被占据的口袋体积
#
# 2) 检测空间冲突
# 设计新分子后,检查是否与蛋白原子过近
# → 重原子间距离 < 3.0 Å 通常是冲突
# → 用 PoseBusters 等工具自动检查
#
# 3) 引导取代基方向
# 从共晶配体的某个原子出发,
# 哪个方向有空间可以延伸?
# → 这决定了在哪里加基团
#
# 4) 评估骨架跃迁的可行性
# 新骨架能否让关键取代基落在相同的空间位置?
# → 见 352
形状匹配的局限
- 不考虑静电:形状完美但电荷分布相反的分子不会结合(见 094《静电互补 Electrostatic Complementarity》);
- 刚性假设:形状叠合通常是刚性的,不考虑结合时的构象调整;
- 依赖构象:如果参考分子用了错误的构象,整个比较就是错的;
- 不考虑去溶剂化:把极性基团埋进疏水口袋,形状可能匹配但能量上不利;
- 诱导契合:真实的口袋会因配体而调整,静态形状匹配无法反映。
与对接的关系
对接打分函数中,形状互补(范德华项)通常是最大的贡献项——这也是为什么对接分数偏好大分子(见 095《Docking Score》):更多原子意味着更多的范德华接触。理解这一点,就理解了为什么要用配体高效性而非原始对接分数来比较不同大小的分子。
关键要点
- 范德华相互作用的距离依赖极强,形状必须匹配得相当精确;
- 基于形状的筛选能发现二维结构完全不同的分子,是骨架跃迁的重要途径;
- 参考分子必须用结合构象而非任意低能构象;
- 形状是必要不充分条件——需结合静电与化学特征一起判断。
延伸资源
- 药效团:092《药效团 Pharmacophore》;静电互补:094《静电互补 Electrostatic Complementarity》;
- ROCS:278《OpenEye ROCS》;构象生成:279《OpenEye Omega》;骨架跃迁:352《Scaffold Hopping 实战》。