module-05|重对接与相互作用分析:2ITO(gefitinib)与 3POZ(TAK-285)

本模块从 data/cadd-tutorial-inputs 里的 TeachOpenCADD 输入出发,实际完成两个 EGFR 复合物的 重对接、相互作用指纹分析与结构展示,并对"预测位姿 vs 晶体位姿"做诚实对照。


1. 先说清楚:本次做了什么、不是什么

上游教程(参考) 本次实际执行
2ITO / gefitinib T015:Smina + Open Babel 重对接,box = 坐标极值中点,边长 = max−min+5 Å,10 poses / exhaustiveness 8 Vina 1.2.7 + Meeko 0.8.0 重对接;沿用同一 box 约定与 10 poses / exhaustiveness 8
3POZ / TAK-285 T016:PLIP 相互作用分析(不是对接) PLIP 3.0.1 相互作用分析 + 重对接(扩展,原教程无此项)

这不是数值复现。 引擎与配体准备都不同(Vina/Meeko ≠ Smina/Open Babel), 相同的打分名与相同的搜索设置不能让两者在数值上等价。因此本报告不引用上游的具体分值, 也不声称与教程逐数值一致;凡涉及 3POZ 重对接的结论,均标记为本课程的扩展。

为透明度,教程未固定的 Vina 随机种子在此固定为 seed 42,并在 outputs/*/screen/summary.json 中记录。


2. 输入身份核对(分析前完成)

复合物 构造 配体 链 / 残基 关键位点
2ITO EGFR 激酶域 G719S 突变体(P00533) IRE = Iressa / gefitinib,C22H24ClFN4O3,31 重原子 A / 696–1019(晶体学) 719 = SER(即 G719S)、790 = THR、858 = LEU
3POZ EGFR 激酶域 野生型 03P = TAK-285,C26H25ClF3N5O3,38 重原子 A / 701–1017 719 = GLY(野生型)、790 = THR、858 = LEU

两个案例不是同一蛋白构造(一个是 G719S 突变体,一个是野生型),所以它们的口袋与结合模式 不能当作"同一体系换配体"来直接比较。配体的键级/芳香性取自 mmCIF 的化学组分字典 (_chem_comp_atom / _chem_comp_bond),不是从对接程序反推。

本地文件与 RCSB 沉积的一致性(真实核对)

本地包中的 T016/data/3poz.pdb 头部写的是 MDANALYSIS FRAME 0,因此先验证再使用: 与 RCSB 3POZ 沉积按残基号配对、不做叠合比较后——

即:本地文件保留了晶体坐标,只是被 MDAnalysis 重新序列化过(链名改为 X)。 记录见 inputs/provenance_3poz.json。


3. 方法(固定参数,事后未调整)

引擎       Vina 1.2.7(Python 引擎)/ 受体与配体准备 Meeko 0.8.0
打分函数   vina
种子       42                (T015 未固定种子;此处固定并记录)
位姿       10 个              exhaustiveness 8      (沿用 T015 设置)
搜索盒     参考配体重原子包围盒,每侧 padding 2.5 Å
           ≡ 边长 = max−min+5 Å,即 T015 约定
受体       晶体坐标系;去水去硫酸根;Meeko 依模板补氢并赋 Gasteiger 电荷
配体输入   由化学式独立生成 3D 构象(seed 42),与参考位姿无关

受体准备中的一处真实取舍:2ITO 的 988 与 1004 号残基因晶体学无序(激活环/C 端, 990–1001 完全缺失,988/1004 侧链被截断)无法匹配模板,被 Meeko 的 --allow_bad_res 剔除 (logs/ 中保留完整输出)。这两个残基距配体 19 Å 与 15 Å,不在 ATP 口袋内,剔除不影响结合位点; 该事实已在结果中记录而不是隐去。


4. 结果

4.1 位姿找回("能不能找到实验观测到的位姿")

案例 对接最佳 RMSD(不叠合) 对称性感知叠合 排名第一的 RMSD 结论
2ITO / gefitinib 3.16 Å 2.62 Å 3.16 Å 未找回
3POZ / TAK-285 0.98 Å 0.90 Å 0.98 Å 找回

两种 RMSD 约定必须分开引用:direct 是图匹配后直接算偏差(redock-rmsd 的约定,不做配体叠合), best_fit 是对称性感知叠合后的偏差,回答的是另一个问题。

给初学者的说明:对接是在口袋里"试摆"分子;打分是排序规则,不是亲和力。RMSD 是与某个参考 位姿的几何偏差。找回一个晶体位姿只能检验"这一套本地设置",不能证明亲和力、富集能力或换一个靶点也有效。

图组 1(figures/fig1_pose_recovery.png):10 个采样位姿各自的 RMSD 阶梯。

4.2 经验打分与实验几何是否一致(对照实验)

用同一套受体与格点给实验位姿本身打分(坐标未改动,已核验最近邻偏差 0.000 Å):

2ITO / gefitinib 3POZ / TAK-285
排名第一的对接位姿 −8.10 −10.73
晶体位姿(原始坐标) −6.85 −10.29
晶体位姿(局部最小化后) −7.33 −10.52

图组 2(figures/fig2_score_vs_geometry.png)。经验打分不是亲和力实测值。

4.3 PLIP 相互作用指纹(T016 的原始方法)

对晶体位姿与对接位姿各跑 PLIP 3.0.1。两类输入的配体化学身份核验一致 (InChIKey 与分子量相同,见 outputs/plip_identity.csv),这排除了"配体身份不同"这一项; 但指纹差异同时受位姿几何与准备条件(质子化、水与离子、受体坐标)影响, 不能只归因于构象。

案例 构象 疏水 氢键 卤键 盐桥
2ITO 晶体 2 1(Met793) 1(Leu788) 1(Asp800)
2ITO 对接 3 1(Met793) 1(Leu788) 0
3POZ 晶体 5 2(Met793、Asn842) 3 0
3POZ 对接 8 2(Met793、Asp855) 3 0

相互作用表的原子是按角色解析的:氢键用 protisdon 决定供/受体归属(例如 Met793 的 749 号是 蛋白供体 N,2438 号才是配体受体),卤键用 don_idx/acc_idx,盐桥用嵌套的 idx 列表。 见 outputs/plip_interactions.csv(含原子编号、类型、距离、角度、坐标)。

图组 3(figures/fig3_plip_fingerprint.png)、图组 4(figures/fig4_residue_contacts.png)。

4.4 与上游教程保存输出的差异(明确区分)


5. 结构展示(OmicOS Molecule Viewer + 离线渲染)

交互场景(原生 Molecule Viewer,属于本任务的检查环节,不改坐标): inputs/prepared/2ito_viewer_overlay.pdb 与 3poz_viewer_overlay.pdb 各含 受体(链 A)+晶体配体(IRE/03P)+对接位姿(链 L),三者共用同一受体坐标系。 当前 2ITO 场景已载入(2481 原子 / 2 链 / 2 个 HET 配体);可交互的口袋与距离命令见本次回复正文的 PyMOL 代码块,由前端在当前会话结束后应用,应用后的画面由使用者复核。

离线渲染用 PyMOL 3.2(scripts/10_render_structural_figures.py),每个案例拆成 A 全局 / B 口袋+距离 / C 位姿叠合三个焦点,标签尽量少,长说明放进图注:

物理解释与表示一致:晶体配体为 sticks + spheres(真正的球棍),对接位姿为 licorice (细棍);两者同时用颜色与表示区分,不只依赖颜色。PyMOL 没有 ball+stick 这个表示名, 早期脚本里的 show ball+stick 曾静默失败——已修正并保留每次渲染的 stdout/stderr (logs/10_render_*.log,当前无 Error)。

图中距离已用 PyMOL 独立复测核对(2ITO:2.916 / 3.285 / 3.487 Å;3POZ:2.963 / 3.549 / 3.230 Å), 与 PLIP 报告的 2.92 / 3.29 / 3.49 与 2.96 / 3.55 / 3.23 一致。

图版:figures/plate_structure_2ito/plate.png、figures/plate_structure_3poz/plate.png、 figures/plate_quantitative/plate.png(各含 plate.pdf 与 caption.md;打包 CLI 的合成结果作为中间产物 保留在 figures/packaged_plates/)。


6. 一处被修正的真实缺陷(保留证据)

第一轮 PLIP 分析把对接配体连显式氢一起写进复合物 PDB。PLIP 随后感知到的是另一个分子: 自由基 SMILES、分子量 422.71(而非 446.90)、InChIKey 不同。那样的对接指纹不是同一配体只换位姿的比较。

同类问题也出现在第一版"局部最小化位姿"的导出上(用 obabel 直接做 PDBQT→SDF 丢了氢计数, 得到 [C] 自由基)。修正为模板感知的 pose-export,以晶体配体自身的化学图作模板 (键长几何偏差降到 0.0008 Å),并在导出后核验规范 SMILES / 分子式 / 电荷 / 自由基数 / 手性一致, 才用它计算 RMSD。检查项见 outputs/<case>/score_control_*.json 的 minimised_pose_identity_matches_reference: true。


7. 局限

  1. 不是教程数值复现:引擎、准备与 PLIP 版本均不同(见 §1、§4.4)。
  2. 两个案例构造不同(G719S 突变体 vs 野生型),不可当作同一体系的平行对照。
  3. 经验打分 ≠ 亲和力:全部打分只用于排序;本模块没有 IC50/KD 实测值,也没有活性/诱饵富集实验, 因此不能据此判断活性、选择性或可成药性。
  4. 只跑了单一协议、单一种子、每次 10 个位姿:找回失败可能来自采样、打分或准备, 本模块不作唯一归因(§4.2)。
  5. 水与硫酸根:晶体复合物保留了晶体水(有/无水报告相同),但未保留 3 个硫酸根; 受体对接时去水去离子。
  6. 2ITO 有两处无序残基被剔除(距配体 15–19 Å,不在口袋)。
  7. 交互场景的渲染画面由使用者复核;离线结构图是用同一坐标的独立渲染,不是浏览器截图。
  8. RMSD 未做配体叠合;direct 与 best_fit 两个约定不可互换引用。

8. 复用入口

./run_module05.sh verify-fresh     # 在新目录、新进程中跑一个小步骤(已验证通过)
./run_module05.sh figures          # 重新生成 fig1–fig4(CJK 字体在运行期解析)
./run_module05.sh all              # 完整链路

可配置项(避免只能在当前机器运行):

变量 含义 默认
CADD_PY 具备 rdkit/vina/meeko/gemmi/plip/pymol 的解释器 CADD profile venv
CADD_SKILL cadd-discovery-workflow 技能目录(含 scripts/run.py) 工作区 skills/
CADD_MODULE 工作/输出目录 脚本所在的 module-05 目录
CADD_CJK_FONT 中文字体文件路径(可选,供独立进程重绘用) 自动探测 msyh/simhei/wqy

已在全新目录、全新进程验证(run_module05.sh verify-fresh):

该次新目录运行的实测结果:

步骤 结果
inputs 复制 2ito.cif / 3poz_rcsb.cif / 3poz_t016_local.pdb
prepare 配体身份与会话一致(C22H24ClFN4O3、C26H25ClF3N5O3;303 / 293 残基)
receptors 两个受体 PDBQT 与会话结果 SHA-256 逐字节一致(e2090408…、a37829fb…);参考配体 SDF 亦一致
chart-smoke 仅用已准备输入跑出真实位点图 site_view.png(146 KB,status=completed)
verify box 返回 center=[-48.508, -0.753, -21.855]、size=[15.102, 13.226, 18.559],与会话一致

已验证范围仅限上表:准备、受体准备、图表路径与 box 步骤在新目录可复跑。 完整的重对接没有在新目录重跑;本模块报告的对接、打分对照与 PLIP 结果来自本会话的运行 (outputs/),不能把上述小检查等同于"整个入口的对接链路已在新环境验证"。

统计图组也已在新进程中独立重绘:scripts/12_make_stat_figures.py 不依赖交互式内核, 自行从阶段产物重建四张面板的数据表并输出 PNG + PDF + 同名 CSV; CJK 字体在运行期按 CADD_CJK_FONT → 常见系统字体顺序解析(本次解析为 Microsoft YaHei)。 每张图版的 plate.png / plate.pdf / plate.svg 均由同一次渲染产出,保证三份格式对应同一版本; 旧版式遗留的 SVG/清单已移入 figures/deprecated_debug/。


9. 文件索引

路径 内容
inputs/2ito.cif, inputs/3poz_rcsb.cif RCSB 沉积(身份与坐标核对用)
inputs/3poz_t016_local.pdb 本地教程文件(哈希与 manifest 一致)
inputs/prepared/* 受体、参考配体(含键级 SDF)、配体 CSV、复合物、Viewer 叠加文件
scripts/01..11_*.py, 03,06_*.sh 可复用代码(准备 / 对接 / 打分对照 / PLIP / 作图 / 渲染 / 合成)
outputs/2ito/, outputs/3poz/ box → 配体准备 → 对接 → 位姿导出 → RMSD → 打分对照
outputs/plip/* 6 次 PLIP 运行(晶体/无水晶体/对接 × 2 案例)的 XML/TXT
outputs/plip_interactions.csv 角色解析后的相互作用长表
outputs/plip_runs.csv, plip_identity.csv 每次运行的状态、计数与配体身份核验
outputs/plip_round1_defect/ 失败轮证据(不进入最终对比图)
figures/fig1..fig4_*.png/.csv 定量图组与同名面板数据
figures/plate_*/ 三张交付图版(PNG/PDF/caption.md)
logs/ 各阶段完整 stdout/stderr

数据与许可

TeachOpenCADD 教学材料:Volkamer Lab 及各章作者与贡献者,固定提交 4efdbd36723b5d07960142e15df393d7c6df2ba1,CC BY 4.0。 ChEMBL / PubChem / PDB 数据保留各自数据库条款。本模块的新计算与中文解读为本次会话产出; 底层第三方数据不因本仓库许可而重新授权。