拿到一个复合物结构,最快搞懂「它是怎么结合的」的方式就是跑一遍 PLIP(见 208《PLIP》)。它自动识别各类非共价相互作用并生成可读报告,不需要写代码,还能直接产出标注好的 PyMOL 会话文件。
安装与基本用法
pip install plip
# 分析本地复合物,输出文本报告
plip -f complex.pdb -t --name report
# 按 PDB ID 联网分析,同时生成 PyMOL 会话
plip -i 1M17 -t -y
# 输出 XML(便于程序解析)
plip -f complex.pdb -x --name result
# 指定要分析的配体(复合物含多个配体时)
plip -f complex.pdb -t --name report --peptides A
-y 生成的 PyMOL 会话里相互作用已经标注好,打开即可出图——做汇报材料时非常省时间。
报告里有什么
SMALLMOLECULE
=============
Interacting chain(s): A
**Hydrophobic Interactions**
+-------+---------+-----------+-----------+--------------+
| RESNR | RESTYPE | DIST | LIGCARBON | PROTCARBON |
+-------+---------+-----------+-----------+--------------+
| 718 | LEU | 3.72 | 1421 | 5623 |
| 745 | LYS | 3.91 | 1425 | 5891 |
+-------+---------+-----------+-----------+--------------+
**Hydrogen Bonds**
+-------+---------+-----------+--------+---------+----------+
| RESNR | RESTYPE | DIST_H-A | DIST_D-A | DON_ANGLE | PROTISDON |
+-------+---------+-----------+--------+---------+----------+
| 793 | MET | 2.05 | 2.98 | 165.2 | True |
+-------+---------+-----------+--------+---------+----------+
**pi-Stacking**
**Water Bridges**
**Salt Bridges**
读报告的三个重点
- 哪些残基参与最多:出现在多种相互作用中的残基是结合的关键锚点。改造分子时要保住与它们的接触。
- 相互作用类型的分布:以疏水接触为主,说明结合主要靠形状互补,选择性可能不足;有明确的氢键网络和盐桥,通常特异性更好。
- 有没有水桥:这是 PLIP 最有价值的一块。很多结合位点的关键相互作用通过保守水分子中介,手工看结构容易漏掉。设计时可以考虑用一个基团去置换那个水——这往往是活性提升的机会点,也可能是陷阱(置换保守水的熵代价可能很高)。
批量处理与结构化提取
import subprocess, glob, os
import xml.etree.ElementTree as ET
import pandas as pd
def run_plip(pdb_path, outdir):
os.makedirs(outdir, exist_ok=True)
subprocess.run(["plip", "-f", pdb_path, "-x",
"--name", "result", "-o", outdir],
check=True, capture_output=True)
return os.path.join(outdir, "result.xml")
def parse_plip_xml(xml_path):
tree = ET.parse(xml_path)
rows = []
for site in tree.findall(".//bindingsite"):
lig = site.find(".//longname")
lig_name = lig.text if lig is not None else "?"
for itype in ["hydrophobic_interaction", "hydrogen_bond",
"pi_stack", "salt_bridge", "water_bridge",
"halogen_bond", "pi_cation_interaction"]:
for it in site.findall(f".//{itype}"):
rows.append({
"ligand": lig_name,
"type": itype,
"resnr": it.findtext("resnr"),
"restype": it.findtext("restype"),
"reschain": it.findtext("reschain"),
"distance": it.findtext("dist") or it.findtext("dist_h-a"),
})
return pd.DataFrame(rows)
# 批量分析一批复合物
all_rows = []
for pdb in glob.glob("complexes/*.pdb"):
name = os.path.basename(pdb).replace(".pdb", "")
xml = run_plip(pdb, f"plip_out/{name}")
d = parse_plip_xml(xml)
d["complex"] = name
all_rows.append(d)
df = pd.concat(all_rows, ignore_index=True)
# 统计:哪些残基在这一系列复合物中最常参与结合
hot = df.groupby(["restype", "resnr"]).size().sort_values(ascending=False)
print("最常参与结合的残基:")
print(hot.head(15))
批量分析一系列共晶结构,统计出的「热点残基」对设计很有指导意义——它告诉你这个口袋中哪些位置是所有活性分子都在利用的。
出图:直接用生成的 PyMOL 会话
# plip -f complex.pdb -y 会生成 .pse 文件
# 打开后相互作用已标注好,只需调整视角与渲染
# 或用自己的 pml 脚本统一风格(见 211)
pymol -cq complex.pse -d '
bg_color white
set ray_opaque_background, 1
set ray_shadows, 0
orient organic
zoom organic, 4
ray 2400, 1800
png interaction.png, dpi=300
'
PLIP 与 ProLIF 怎么配合
| PLIP | ProLIF(见 338《用 ProLIF 提取相互作用指纹》) | |
|---|---|---|
| 输入 | 单个/少量静态结构 | 批量姿势或 MD 轨迹 |
| 输出 | 人类可读报告 + 图 | 结构化指纹(DataFrame) |
| 需要写代码 | 否 | 是 |
| 水桥 | 支持 | 需额外处理 |
| 统计分析 | 弱 | 强 |
实际组合:先用 PLIP 看懂共晶结构的结合模式、明确关键相互作用有哪些;再用 ProLIF 在对接结果或 MD 轨迹上批量统计这些相互作用是否被复现、是否稳定。一静一动,配合自然。
常见坑与提示
- 分析前务必补氢并定好质子化态,缺氢会让氢键判定完全不可靠;
- 水桥信息是它的独特价值,手工分析很容易漏掉;
- 批量分析一系列共晶结构,统计热点残基对设计很有指导意义;
- 几何判据是经验阈值,临界值附近的相互作用要结合化学常识判断。
延伸资源
- 工具详解:208《PLIP》;对照:207《ProLIF》、338《用 ProLIF 提取相互作用指纹》;
- 结构修复:340《用 PDBFixer 修复蛋白结构》;可视化:211《PyMOL 开源版》。