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 只做几何判断,不做能量评估;
- 水桥检测是它的独特优势,很多工具会遗漏这类间接相互作用;
- 固定阈值带来边界效应,比较不同结构时应看距离数值而非只数个数;
- 结果依赖质子化态与加氢方式——结构准备流程必须固定。
延伸资源
- ProLIF:109《ProLIF》;PyMOL:110《PyMOL 可视化》;
- 静电互补:094《静电互补 Electrostatic Complementarity》;姿势验证:096《Binding Pose》;结构准备:105《PDBFixer》。