ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI增强构象采样教程(12):蛋白-小分子口袋内采样——从对接 pose 到口袋约束元动力学

AI增强构象采样教程(12):蛋白-小分子口袋内采样——从对接 pose 到口袋约束元动力学 AI增强构象采样教程12蛋白-小分子口袋内采样——从对接 pose 到口袋约束元动力学版本声明块工具/软件DiffDock扩散对接arxiv.org/pdf/2210.01776、AutoDock Vina计分之交为 pose 纸面排序、OpenMM 8.x openmmforcefieldsGAFF2/OpenFF 配体参数化、PLUMED 2.9 经 openmm-plumed 集成、PDBFixer。语言/环境Python 3.9依赖 openmm、openmmforcefields、mdanalysis、pdbfixer、rdkit。单位约定距离 Å、时间 ps/ns、能量按 OpenMM 默认 kcal/molPLUMED 量纲以官方为准。一句话结论对接 pose 是静态猜测真正有价值的是把它装进 MD 盒子后做口袋内构象采样用一枚口袋约束 CV配体到 3–5 个指定口袋残基重原子的最短/最小距离之和、或口袋内接触数把配体钉在结合位点内防逃逸再用良温元动力学采配体在口袋自由能景观上的亚态最终以客观成功判据配体 RMSDvs 起点、接触数保持、FES 出现两个可分离极小验证是否跑对。〇、本篇要解决的认知问题从对接 pose 到能跑 MD中间要补哪几大步pose 凭什么能直接进 MD什么是生物活性构象bio-active conformation为什么它不等于打分最高的 pose不加任何东西直接把配体丢进盒子采样会发生什么机器人错误配体逃逸口袋约束 CV 具体怎么定义距离 vs 接触数防止逃逸的原理是什么跑完口袋内元动力学怎么客观判断采到了真东西而不是白跑一、机制解析1.1 数据流pose → 拓扑 → 口袋内动态对接给的是配体的单个 (蛋白对齐, 配体坐标, 打分)三元组——pose。它没有键序参数化、没有氢核分布、没有水盒、没有力场本质上只是一框位置猜测。要变成可用 MD 体系必须走完整供应链DiffDock / Vina 多 pose 叠加到蛋白口袋里 │ │ ▼ ▼ pose (PDB/CIF, 打分) → 复合物中心盒 配体力场参数 │ (GAFF2/OpenFF vs 蛋白 AMBER) ▼ PDBFixer 补残基/加氢 → 水盒 中和离子 │ ▼ OpenMM System配体蛋白水统一能量函数 │ 口袋约束 CVPLUMED ▼ 口袋内元动力学采样配体亚态 → HILLS/COLVAR → FES对配体的参数化前先核配体位姿本系列实施计划铁律 4就落在第二层装盒之前用一个最小脚本验证 pose 是否真落在口袋内、配体的羧酸/胺质子化对错、接触是否像样否则后面全错。1.2 生物活性构象不是打分最高而是实验结合态生物活性构象bio-active conformation指配体当它真的结合在靶点里时取的那个或那几个3D 构象通常可从共晶结构co-crystal读出来。它与 docking pose 有本质差别docking pose 是按打分函数排序的猜测打分高的不一定是实验结合构象对接时的构象搜索常在孤立或简化场里做可能给一个在口袋内能量好看的、但配体自身二面角取出错的自适应构象每个 pose 的形态intramolecular geometry即配体内部的扭转与环折叠才是口袋内真实构象的主角。所以找生物活性构象不等于把 pose 打分排序后取第一名——它需要能量上自洽、相互作用合理、且能在动态里稳定下来。这也是为什么要跑 MD打分是静态快照MD 是给这帧快照一个热力学答案。经验上好的共晶生物活性构象通常与多种 pose 重叠良好而性状姿态对但对内部扭转错的 pose 常在 MD 里迅速打回原形数值为经验规则正文以实体实测为准。概念来源回答的问题局限对接 poseDiffDock/Vina“配体能放到哪”打分≠实验结合可能内部扭转错生物活性构象共晶/实验“配体结合时到底长啥样”只有特定体系有实验值口袋内采样构象本 MD“在这个位点它是亚稳态集合”依赖力场与 CV 选择1.3 逃逸与口袋约束为什么一定要钉住把配体丢进水盒裸采最常见的结果就是跑了 10 ns配体飘出口袋一切都白费——蛋白-配体 MD 若不限位配体结合是结合自由能下的稀罕事件会自己解离我们要采的是结合态内部的构象不是解离动力学。所以要么用软位置约束harmonic restraint 把配体质心往口袋中心拉要么用袋子式的集合变量钉住它而口袋约束 CV 正是给它一个结合域边界。口袋约束 CV 的两种典型定义类型 A配体-口袋残基距离——选 3–5 个指示口袋底部/开口的残基如保守疏水残基CV 配体上任意原子到这些残基重原子的最小距离或多个残基的最小距离求和。类型 B口袋接触数contact number——数配体重原子与 5 Å 内口袋残基的接触对数量。配体在口袋内时接触数高逃逸则骤降。用任意一个粗 CV 并做成软上下限UPPER_WALLS或LOWER_WALLS即可把配体钉在口袋内空间里但不锁死它内旋的自由度——这正是元动力学的舞台。CV 类型定义优点风险距离型配体某原子 ↔ 口袋残基的最小距离直观、易设墙单距离可能不够通用接触数口袋内配体-残基接触对数量鲁棒、能体现整体在袋内需要对接触半径/阈值排参1.4 口袋内元动力学在钉住前提下采亚态结合上述最终方案是三件事的合成口袋约束用UPLOWER/接触数 CV 加墙防逃逸这是袋子。元动力学/良温元动力学在配体的内部自由度 CV如 1–3 个关键扭转二面角或配体与某个口袋残基的距离上沉积偏置翻越配体内部亚态间的能垒。FES 重建plumed sum_hills处理 HILLS得到配体在该口袋位置上的自由能景观看到多个可解释的结合亚态。要点口袋约束 CV 与增强采样 CV 是两个不同 CV——前者负责留在这个区域采样后者负责在这区域内翻越内部壁垒。把它们混成一个是新手最容易犯的错。二、完整代码与逐行剖析2.1 配体装盒前检查pose 是否在口袋内核位姿# -*- coding: utf-8 -*-装盒前核验pose 是否落在口袋内、配体是否已参数化在合理距离。 铁律 4参数化前先核配体位姿。importnumpyasnpfromrdkitimportChemfromrdkit.ChemimportAllChemimportMDAnalysisasmdafromMDAnalysis.analysis.distancesimportdistance_array# 复合物 pose蛋白 (无氢) 配体配体残基名 LIGumda.Universe(complex_pose.pdb)proteinu.select_atoms(protein)ligu.select_atoms(resname LIG)# 预选的口袋残基按你对位点了解选 4 个多为保守疏水/极性锚定残基pocketu.select_atoms(resid 40 57 74 95)# 接触检查配体重原子与口袋残基 5 Å 内的接触对数量distdistance_array(lig.positions,pocket.positions)contactsint((dist5.0).sum())print(f配体-口袋接触对数5 Å:{contacts})# 配体自洽性键序 3D 校验承接第 05 篇结构准备lig2dChem.MolFromPDBFile(lig.pdb,removeHsFalse)lig3dChem.AddHs(lig2d)ok_3dany(conf.GetAtomPosition(i).LengthSq()1e-4forconfinlig3d.GetConformers()foriinrange(lig3d.GetNumAtoms()))print(f配体 3D 自洽:{ok_3d})# 客观判据接触数应当显著0且配体质心靠近口袋残基质心埃量级assertcontacts5,pose 不在口袋内先别装盒print([ok] pose 通过口袋初筛)2.2 OpenMM 完整体系 口袋约束 CV 良温元动力学# -*- coding: utf-8 -*-口袋内元动力学完整 OpenMM 体系 PLUMED 口袋约束 CV WT-METAD 采内旋亚态。 依赖openmm、openmmforcefields、pdbfixer、openmm-plumed。 说明SystemGenerator 用同一个生成器把配体(GAFF2/OpenFF)和蛋白(AMBER ff14SB) 统一进一个力场体系openmm-plumed 的 PlumedForce 构造以官方 README 为准。 importopenmmimportopenmm.unitasuimportopenmm.appasappfromopenmmimportPlatformfromopenmmforcefields.generatorsimportSystemGeneratorfrompdbfixerimportPDBFixer# PLUMED 偏置接口构造以 openmm-plumed 官方文档为准fromopenmmplumedimportPlumedForce PDB_COMcomplex_pose.pdb# 蛋白配体(未加氢)SMILESNone# 若配体无键序填 SMILES 走 template# ---------- 1) PDBFixer补残基 加氢 ----------fixerPDBFixer(filenamePDB_COM)fixer.findMissingResidues()fixer.findMissingAtoms()fixer.addMissingAtoms(seed2026)fixer.addMissingHydrogens(7.4)app.PDBFile.writeFile(fixer.topology,fixer.positions,open(com_allH.pdb,w))# ---------- 2) SystemGenerator蛋白配体统一力场 ----------genSystemGenerator(forcefields[ff14SB.xml,tip3p.xml],small_molecule_forcefieldgaff-2.11,# 配体 GAFF2或以 openmmforcefields 为准watertip3p,cachesmirnoff_cache,)pdbapp.PDBFile(com_allH.pdb)systemgen.create_system(pdb.topology,moleculespdb.topology)# ---------- 3) 溶液化solvate 水盒 ----------modellerapp.Modeller(pdb.topology,pdb.positions)modeller.addSolvent(gen.forcefield,padding1.0*openmm.unit.nanometer,ionicStrength0.15*openmm.unit.molar)systemgen.create_system(modeller.topology,moleculesmodeller.topology)# ---------- 4) PLUMED 口袋约束 内旋 WT-METAD ----------PLUMED_INpocket.plumed# POCKET_RESID 换成你体系的口袋锚定残基编号withopen(PLUMED_IN,w,encodingutf-8)asfh:fh.write( MOLINFO STRUCTUREcom_allH.pdb # (a) 口袋约束配体 (RES LIG) 到 4 个口袋残基的最小距离加 UPPER_WALL 防逃逸 d: DISTANCES ATOMSLIG-1:2,44:57,44:57 RESIDUES40,57,74,95 \ COMPONENTSX uww: UPPER_WALLS ARGd MIN0.0 MAX6.0 KAPPA500 AT6.0 # ↑ 上面一行优雅写法因残基-原子映射随体系而异落地请按 PLUMED 语法改写 # 更稳做法是写 COORDINATION 接触数 LOWER_WALLS 保持接触数≥阈值 # (b) 内旋增强对配体一个关键扭转二面角做良温元动力学 WT_METAD ARGd BIASFACTOR8 TEMP300 SIGMA0.2 HEIGHT0.3 \ PACE500 LABELmetad FILEHILLS PRINT ARGd,metad.bias STRIDE500 FILECOLVAR )plmdPlumedForce(PLUMED_IN)# 构造以官方文档为准system.addForce(plmd)# ---------- 5) 组装与跑 ----------platformPlatform.getPlatformByName(CUDA)integratoropenmm.LangevinIntegrator(300*u.kelvin,1/u.picosecond,2*u.femtosecond)simulationapp.Simulation(modeller.topology,system,integrator,platform)simulation.context.setPositions(modeller.positions)simulation.minimizeEnergy()simulation.reporters.append(app.DCDReporter(pocket_metad.dcd,1000))simulation.reporters.append(app.StateDataReporter(pocket_log.csv,1000,stepTrue,potentialEnergyTrue))simulation.step(2_000_000)# 2 ns 演示量级print([done] pocket-internal metad: pocket_metad.dcd, HILLS, COLVAR)逐段要点真正的标准写法与接口签名见各官方 READMEsmall_molecule_forcefieldgaff-2.11让 SystemGenerator 用 GAFF2 生成配体参数或以 openmmforcefields 枚举名/版本为准OpenFF 则换openff-2.0.0。口袋约束与增强采样是两个 CVPLUMED 输入里UPPER_WALLS/接触数把配体圈在口袋内“袋子”WT_METAD ARGd再在配体内旋自由度上翻越内部能垒“加速”。注释里已诚实标注口袋 CV 的残基映射写法强烈依赖你的体系落地时必须按 PLUMED 语法以结构文件重写。HILLS 用于plumed sum_hills重建配体口袋内 FES不加收敛判据不下结论本系列铁律 5。2.3 分析配体是否稳定在袋内 FES 初步# -*- coding: utf-8 -*-初检配体是否逃逸 接触数是否保持客观判定。importnumpyasnpimportMDAnalysisasmdafromMDAnalysis.analysis.distancesimportdistance_array umda.Universe(com_allH.pdb,pocket_metad.dcd)ligu.select_atoms(resname LIG)pocketu.select_atoms(resid 40 57 74 95)reflig.positions.copy()escaped_frames0fortsinu.trajectory:ddistance_array(lig.positions,pocket.positions)contactsint((d5.0).sum())ifcontacts5:# 阈值接触数跌破则视为该帧逃逸escaped_frames1print(f逃逸帧数/总帧数 {escaped_frames}/{u.trajectory.n_frames})assertescaped_frames/u.trajectory.n_frames0.05,配体大量逃逸检查口袋 CVprint([ok] 口袋内采样有效配体基本未逃逸)三、常见报错与排查现象根因排查与修复addSolvent抛parameter not found散片段断键配体未被正确处理为小分子且口袋约束 CV 定义信息不够先确认 SystemGenerator 的molecules正确传入含配体拓扑对配体走template/GAFF2 参数化第 05 篇配体跑去溶剂里接触数为 0没加口袋约束或 UPPER_WALLSKAPPA太弱换成接触数 CV LOWER_WALLS或加大KAPPA先跑 50 ps 短测试检查接触数曲线配体原子索引与 PLUMED 不对齐MOLINFO报错PLUMED 的原子标签依赖结构文件残基映射用 PROTEIN/LIG 语义标签或MOLINFO显式结构对不上就换接触数COORDINATION写法HILLS 不收敛、FES 单调抬升BIASFACTOR/TEMP与力场单位不匹配或跑太短均到 OpenMM 默认 kcal/mol 与 PLUMED 一致BIASFACTOR加大并跑更长看sum_hills出的峰有无稳定PlumedForce无法 importopenmm-plumed 未装或 API 名不同conda install -c conda-forge openmm-plumed构造以该仓库 README 的create_system/PlumedForce示例为准四、动手练习练习 1核位姿取一个已有共晶体系的蛋白配体 pose跑 2.1 段。判据接触对数≥5通过断言ok_3dTrue否则先修 pose 再继续。练习 2口袋内 WT-METAD跑 2.2 段 1–2 ns。判据pocket_metad.dcd、HILLS、COLVAR均生成2.3 段输出逃逸帧占比 5%。练习 3FES用plumed sum_hills由 HILLS 重建两个理会维度的 FES。判据自由能面上存在 ≥ 2 个可分离局部极小值且最小值差 15 kcal/mol有物理意义HILLS 高度随步数趋于平稳收敛弱判据。五、小结与下一篇预告对接 pose 只是静态猜测生物活性构象才配体真实结合的形态而两者之间要靠把 pose 装进 MD 盒子做口袋内动态来弥合。核心做法是用口袋约束 CV配体-口袋残基距离或接触数把配体钉在结合位点内防逃逸再另起一个增强采样 CV配体内旋亚态搞元动力学最终从 HILLS 重建 FES、检查接触数保持来客观判定采样有效。这类多起点多 pose→ 口袋采样 → 评估的产线化和上一篇抗体 CDR loop 的多环候选 → 增强采样 → ensemble是同一种思想。第 13 篇预告《用置信度与亲和力筛选初始构象》不再靠运气挑 pose而是读取 Boltz-2 输出的confidence_*.json与affinity_*.jsonaffinity_pred_value是 log10(IC50) 尺度、affinity_probability_binary判活性按置信度/亲和力排序再结合口袋约束做过滤与去重挑出真正的多起点。本篇认知问题回显FAQQ1对接 pose 到可跑 MD 要补哪些步pose 凭什么直接进 MDA1pose 只有坐标和打分必须经核位姿→PDBFixer 补残基/加氢→配体 GAFF2/OpenFF 参数化→solvate 水盒→统一 OpenMM System才具备 MD 所需拓扑、力场与边界条件。Q2什么是生物活性构象为什么不是打分最高的 poseA2生物活性构象是配体真实结合在靶点里时取的 3D 构象通常可借共晶读出对接打分是静态场下的猜测估计可能给内部扭转错误的自适应构象故最高分不等同于实验结合构象。Q3裸采的机器人错误是什么A3配体不会被固定在口袋内这一约束引导解离是自由能下的稀罕事件10 ns 级裸采常常直接把配体飘出口袋使口袋内采样全部作废。Q4口袋约束 CV 怎么定义、为何防逃逸A4距离型配体到 3–5 个口袋锚定残基的最小距离接触数型配体-口袋残基 5 Å 内接触对数量。两者配合UPPER_WALLS/LOWER_WALLS软墙把配体钉在口袋内空间但不锁它的内旋自由度。Q5如何客观判断口袋内采样有效A5跑完后数逃逸帧占比接触数跌破阈值帧数 / 总帧数 5%用plumed sum_hills重建 FES 并看到 ≥2 个可分离极小、HILLS 趋于平稳才对采样有效而非白跑。
返回列表