339

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

PLIP 一条命令生成蛋白-配体相互作用报告,还能直接出 PyMOL 图。这篇给出用法、报告解读与批量处理脚本。

拿到一个复合物结构,最快搞懂「它是怎么结合的」的方式就是跑一遍 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 轨迹上批量统计这些相互作用是否被复现、是否稳定。一静一动,配合自然。

常见坑与提示

  • 分析前务必补氢并定好质子化态,缺氢会让氢键判定完全不可靠;
  • 水桥信息是它的独特价值,手工分析很容易漏掉;
  • 批量分析一系列共晶结构,统计热点残基对设计很有指导意义;
  • 几何判据是经验阈值,临界值附近的相互作用要结合化学常识判断。

延伸资源