108

PLIP:自动生成蛋白-配体相互作用报告

PLIP 自动识别蛋白-配体的各类相互作用。这篇讲清它的检测能力、判据设置与结果解读。

PLIP(Protein-Ligand Interaction Profiler)能从一个复合物结构自动识别所有非共价相互作用并生成报告。它把「看结构」这个需要经验的工作,变成了可自动化、可复现的分析。

能识别的相互作用类型

类型 默认判据(约)
疏水接触 疏水原子间距 < 4.0 Å
氢键 供受体距离 < 4.1 Å,角度 > 100°
π 堆积 环心距 < 5.5 Å;分面对面与边对面
π-阳离子 环心与正电中心 < 6.0 Å
盐桥 带电中心距 < 5.5 Å
水桥 通过水分子的氢键桥接
卤键 距离 + C–X⋯Y 角度约束
金属配位 金属与配位原子的距离

「水桥」是 PLIP 相对很多工具的独特优势:许多配体通过水分子与蛋白间接作用,忽略这些会遗漏重要的结合贡献(见 091《蛋白口袋 Protein Pocket》)。

使用

pip install plip

# 命令行:分析本地 PDB
plip -f complex.pdb -t --name report
#   -t  输出文本报告
#   -x  输出 XML
#   -y  输出 PyMOL 会话文件(可视化)
#   -p  输出 PyMOL 脚本

# 直接从 PDB 下载并分析
plip -i 4XYZ -t -y

# 分析指定的配体(复合物中有多个配体时)
plip -f complex.pdb -t --peptides A   # 分析肽链
plip -f complex.pdb -t --chains A      # 只看 A 链

# 输出的文本报告结构:
#   SMALLMOLECULE
#   **Hydrophobic Interactions**
#   | RESNR | RESTYPE | DIST | LIGCARBONIDX | PROTCARBONIDX |
#   ...
#   **Hydrogen Bonds**
#   | RESNR | RESTYPE | DIST_H-A | DIST_D-A | DON_ANGLE | ...
#   ...

Python API:批量分析

from plip.structure.preparation import PDBComplex

def analyze(pdb_path):
    mol = PDBComplex()
    mol.load_pdb(pdb_path)
    mol.analyze()

    results = {}
    for key, site in mol.interaction_sets.items():
        # key 形如 "LIG:A:501"
        info = {
            "hydrophobic": [(i.restype, i.resnr, round(i.distance, 2))
                            for i in site.hydrophobic_contacts],
            "hbond": [(i.restype, i.resnr, round(i.distance_ad, 2),
                       "protein_donor" if i.protisdon else "ligand_donor")
                      for i in site.hbonds_pdon + site.hbonds_ldon],
            "pistacking": [(i.restype, i.resnr, i.type)
                           for i in site.pistacking],
            "saltbridge": [(i.restype, i.resnr)
                           for i in site.saltbridge_lneg + site.saltbridge_pneg],
            "waterbridge": [(i.restype, i.resnr)
                            for i in site.water_bridges],
            "halogen": [(i.restype, i.resnr) for i in site.halogen_bonds],
        }
        results[key] = info
    return results

# 批量分析一组共晶结构,找出保守的相互作用
from collections import Counter

conserved = Counter()
for pdb in ["4xyz.pdb", "5abc.pdb", "6def.pdb"]:
    for site, info in analyze(pdb).items():
        for itype, items in info.items():
            for it in items:
                conserved[(itype, it[0], it[1])] += 1

# 出现在多个结构中的相互作用 = 该靶点的关键相互作用
# → 这是构建药效团(见 092)与验证对接姿势(见 096)的基础
for k, v in conserved.most_common(10):
    print(v, k)

结果解读的要点

  • 相互作用数量不等于结合强度这是最常见的误读。PLIP 报告的是几何上满足判据的接触,不做能量评估。十个弱疏水接触可能不如一个关键的埋藏氢键;
  • 疏水接触通常最多:这是几何判据的必然结果,不代表疏水作用最重要;
  • 关注保守的相互作用:在多个共晶结构中反复出现的,才是该靶点的关键相互作用;
  • 结合 SAR 判断重要性:某个氢键看起来很好,但如果去掉该基团活性不变,说明它不重要(见 073《SAR 构效关系》);
  • 注意质子化态的影响:氢键与盐桥的判断依赖质子化态,如果结构准备时质子化错了,PLIP 的结果也会错(见 105《PDBFixer》)。

判据的局限

# PLIP 用固定的几何阈值,这带来几个问题:
#
# 1) 边界效应
#    距离 4.05 Å 与 4.15 Å 的差别是「有」与「无」
#    → 但物理上几乎没区别
#    → 不同结构间的比较要小心
#
# 2) 不区分强弱
#    2.8 Å 的强氢键与 3.9 Å 的弱氢键都记为「一个氢键」
#    → 建议同时看距离数值,而非只数个数
#
# 3) 依赖氢原子位置
#    氢键的角度判据需要氢原子
#    → 如果加氢方式不同,结果可能不同
#    → 应固定结构准备流程
#
# 4) 不考虑动态性
#    静态结构中的一个接触,在 MD 中可能只有 20% 的时间存在
#    → 用 ProLIF 分析 MD 轨迹能得到「占有率」(见 109)
#
# 5) 无法识别非经典相互作用
#    如 C–H⋯O、σ 空穴的某些形式、n→π* 等
#
# 可调参数(在 plip/basic/config.py 中):
#   HYDROPH_DIST_MAX, HBOND_DIST_MAX, HBOND_DON_ANGLE_MIN, ...
#   → 需要时可调整,但改动应记录在案

典型应用场景

场景 做法
提取靶点的关键相互作用 批量分析该靶点的所有共晶结构,找保守项
验证对接姿势 对比对接姿势与共晶的相互作用模式(见 096《Binding Pose》
构建药效团 把相互作用转成药效团特征(见 092《药效团 Pharmacophore》
解释 SAR 哪个基团形成了什么相互作用
选择性分析 比较靶点与脱靶的相互作用差异
生成可视化图 -y 输出 PyMOL 会话(见 110《PyMOL 可视化》

关键要点

  • 相互作用数量不等于结合强度——PLIP 只做几何判断,不做能量评估;
  • 水桥检测是它的独特优势,很多工具会遗漏这类间接相互作用;
  • 固定阈值带来边界效应,比较不同结构时应看距离数值而非只数个数;
  • 结果依赖质子化态与加氢方式——结构准备流程必须固定。

延伸资源