ARTICLE DETAIL

资讯详情

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

两分子的静电势形貌有多像?ESP-DNN 高精度还原 + espsim,一键计算3D分子ESP相似度

两分子的静电势形貌有多像?ESP-DNN 高精度还原 + espsim,一键计算3D分子ESP相似度 前置阅读ESP-DNNESP-DNN 本地部署实战: 7 年前的图卷积静电势模型一秒复现DFT精度的静电势表面espsim espsim 本地部署实测: 给生物电子等排体一个静电势相似度打分你在做配体筛选时碰到这种情况用 Glide 出 100 个对接 pose肉眼看都对得上靶点口袋但用 DFT 算 ESP surface 一查——形状对的那批电场形貌其实完全不同。本想用 espsim 算 ESP 相似度来重打分却发现 espsim 默认用 Gasteiger 电荷、粗糙没法反映真实 ESP 形貌。Astex 2019 年发了一篇 J. Med. Chem.介绍了ESP训练模型ESP-DNN能以近 DFT 质量算每个原子的 ESP 电荷但官方仓库只有 Py2.7 TF 1.10 Linux-only PLI 二进制三件套——Windows 上根本装不上。本文带你把这套 2019 年的工具链拆成 Path A仅 on-atom 重原子、Path B重原子 氢、Path CPLI ground truth重原子 氢 孤对 σ-hole三路 PQR 生成路径从而高精度获得ESP电荷最终用 espsim 在同一套坐标上对比三路 ESP 相似度——量化出丢掉 off-center 电荷到底损失多少。关键词ESP-DNN、AstexUK、espsim、PQR、off-center 电荷、Python 3.11 迁移、conda 环境隔离相关教程与核心文献资源链接与本文关系AstexUK/ESP_DNN 仓库github.com/AstexUK/ESP_DNNDNN 模型 PLI 二进制 示例配体heid-lab/espsim 仓库github.com/hesther/espsimESP 相似度计算库Rathi 等,J. Med. Chem.2019, 62, 7383–739710.1021/acs.jmedchem.9b01129ESP-DNN 原始论文Heid E Boeckler N,J. Chem. Inf. Model.2022, 62, 4891–489910.1021/acs.jcim.1c01535espsim 原始论文PLI 文档 (Astex)github.com/AstexUK/ESP_DNN/blob/master/esp_dnn/ext/pli/params/pli.paramsoff-center 元素参数表PLI 必读Crossref APIDOI 元数据api.crossref.org引用核验必备一、为什么需要这套组合1.1 你遇到的问题做 SAR 或对接 pose 重打分时你大概需要这样的指标两分子的静电势ESP形貌有多像。espsim 能算——但 espsim 默认用 Gasteiger 电荷化学直觉告诉我们Gasteiger 在卤素、芳香 N、酰胺等系统上误差 0.1–0.3 e对 σ-hole、孤对这种方向性 ESP几乎不体现espsim 论文里也明说建议用户提供 QM/DNN 电荷以提升精度Astex 2019 年发了一篇 ESP-DNNJ. Med. Chem.能给近 DFT 质量的原子 ESP 电荷但官方仓库默认Python 2.7 TF 1.10 64-bit Linux PLI 二进制——Windows / macOS 根本装不上。1.2 这套方案解决的核心问题本文拆三路跑通端到端路径实现部署难度off-centerAPy3 TF 2.15 RDKit 2026只算 on-atom 电荷丢 H 与 off-center本地 Windows OK无BPath A 基础上氢原子用 Gasteiger 补仍无 off-center本地 Windows OK无C在 Linux 服务器如团队 Linux 服务器跑 AstexUK 原版 PLI 二进制完整 off-center PQR需要 Linux 服务器有三路共用同一套 3D 坐标仅电荷不同——espsim 算 ESP 相似度时差异完全来自电荷处理可单独量化 off-center 损失。二、Py3 迁移的 7 个实测坑把 AstexUK 仓库从 Py2.7 TF 1.10 搬到 Py3.11 TF 2.15 踩了 7 个坑——这是迁移到现代 Python 时的典型障碍坑Py2 原写法Py3 修法影响范围1. NumPiElectrons 位置from rdkit.Chem.AtomPairs.Utils import NumPiElectronsfrom rdkit.Chem.rdchem import GetNumPiElectrons as NumPiElectronsatom_features.py 失败2. range list 不可加range(1, 19) [None]list(range(1, 19)) [None]模块顶层就 raise3. Py2 pickle 反序列化pickle.load(f)pickle.load(f, encodinglatin1)加载 norm_params.pkl 失败4. Keras 1.x 引擎from keras.engine.topology import Layerfrom tensorflow.keras.layers import Layergraph_conv.py 报 ImportError5. Adam 在 TF 2.16 移位tf.keras.optimizers.Adamtf.keras.optimizers.legacy.Adam模型构建失败6. K.batch_dot 在 TF2 静默K.batch_dot(d, self_output)tf.linalg.matmul(d, self_output)行为不变但被 deprecation7. setuptools ≥81 移除 pkg_resourcesespsim 0.0.1import pkg_resourcespip install setuptools81整个 espsim import 失败最隐蔽的是 #3——Py2 写出的 .pkl 文件含 strunicode而非 bytesPy3 默认 ASCII 解码pkl 头几个字节就 raise UnicodeDecodeError必须加encodinglatin1。三、本地安装Path A Path B环境需求Python 3.11TF 2.15 wheel 只到 3.113.12 装 TF 2.16 会触发别的兼容问题。消费级 GPU 足够本机走 CPU 推理 ~150 ms/分子。# 1. venv uv venv --python 3.11 ~/ESP_DNN_sim_env 2. 依赖 uv pip install --python ~/ESP_DNN_sim_env/Scripts/python.exe --index-url https://pypi.tuna.tsinghua.edu.cn/simple numpy1.26.4 pandas xarray tensorflow2.15.0 rdkit espsim scipy setuptools81踩坑 #8Windows 特有git clone AstexUK/ESP_DNN 在 Windows 上会失败——仓库里有cif/CON/CON.cif和cif/PRN/PRN.cif两个文件Windows 把 CON、PRN 当设备保留字COM1、LPT1 同类git 拒 checkout。解法用 tarballcurl codeload zip 解压——zip 文件名内允许 CON/PRNLinux 上unzip后这两个文件正常落地。3.1 加载模型验证import sys; sys.path.insert(0, ~/Desktop/M3/ESP_DNN_sim/esp_dnn_py3) from esp_dnn.predict import MolChargePredictor mcp MolChargePredictor() # 首次加载 ~10s解析 h5 print(mcp.model.input_shape) # [(None, None, 64), (None, None, None)]四、Path A — on-atom heavy only代码路径MolChargePredictor.write_pqr_block_on_atom_only(pdb_block, dqs)。每个非氢原子的 occupancy 字段写入 DNN 预测电荷氢原子留 0。20 原子分子输出 20 行 PQR。用法from esp_dnn.predict import MolChargePredictor mcp MolChargePredictor() dqs mcp.predict_dqs_from_pdb_block(open(lig1.pdb).read()) pqr mcp.write_pqr_block_on_atom_only(open(lig1.pdb).read(), dqs) open(lig1.path_a.pqr, w).write(pqr)五、Path B — on-atom 氢Gasteiger backfill代码路径MolChargePredictor.write_pqr_block_with_hydrogens(pdb_block, dqs)。氢原子的电荷用 RDKitComputeGasteigerCharges补。20 原子分子输出 ~40 行20 重 ~20 氢。为什么不用 DNN 给氢预测——DNN 只在heavy-only训练论文里说的强行把氢也喂给模型超出训练域。Gasteiger 在氢上误差比 heavy 大但对 ESP 形貌影响有限氢原子半径小、积分体积占比低。六、Path C — PLI ground truthLinux 服务器PLI 二进制5.3 MB ELF做的事在 DNN 给的重原子电荷基础上根据elements.pli表在孤对 / σ-hole / p 轨道位置再放一个虚拟电荷点。这一步是 Path A/B 缺的方向性 ESP来源。6.1 Linux 服务器部署# Linux 服务器端已装 amber26 自带 Python 3.12 RDKit 2026.3 TF 2.16 git clone --depth 1 https://github.com/AstexUK/ESP_DNN.git export PLI_DIR$PWD/ESP_DNN/esp_dnn/ext/pli /opt/amber26/python/bin/python3 scripts/run_path_c.py踩坑 #9PLI 不带 help flag-mode features失败时报unknown mode——真因是 PLI_DIR 没设。设对后prepare/features/preplig/score都接受。6.2 Path C 字节级匹配 Astex 自身 saved 文件跑出的lig1.path_c.pqr与仓库自带examples/ligands/lig1.mol.pdb.pqr.saveddiff 为空——这是 AtexUK 论文的 ground truth 路径。七、espsim 三路对比核心实证7.1 实验设计分子集AstexUK 自带 4 个测试分子lig1 / lig2 / lig3 / lig1_charged关键对照lig1 vs lig1_charged同骨架、0.4 总电荷——电荷判别能力试金石三路 PQR 原子数分子Path APath BPath Clig1204063lig2194062lig3204265lig1_charged204163Path C 的额外 ~23 行就是 off-center 虚拟原子Hlp 氮孤对、Hsh 氯 σ-hole 等。7.2 ESP sim 数值Carbo 指标espsim 重整化到 [0,1]对Path C (ground truth)Path BΔ(B-C)Path AΔ(A-C)lig1 vs lig20.95880.94190.0170.9998−0.041lig1 vs lig30.92740.88400.0430.9999−0.072lig1 vs lig1_charged0.57510.91620.3410.99970.425lig1_charged vs lig20.53750.96250.4250.99950.462lig1_charged vs lig30.50800.96000.4520.99980.492Δ(X-C) 路径 X 的 ESP sim 减 Path C。正数 简化让分数变低真损失负数 简化让分数变高伪提升。7.3 三条不可忽略的发现(1) Path A 虚高是积分体积 artifactPath A 在所有 5 对上都跑到 0.999——不是因为 ESP 表面更匹配而是 espsim 把 1/r 库仑积分在每个原子的 vdW 球壳内做丢掉 H 原子等于缩小积分区域分数自然抬高但无物理意义。绝对数字不可用仅可做同次运行的相对排序。(2) Path B 对中性体系勉强可用Path B 对中性 vs 中性lig1/lig2/lig3成本 1.7% 到 4.6%排序保持不变。可做中性 SAR 内的快速筛选。(3) Path B 对带电配体彻底失效lig1 vs lig1_chargedPath C 给 0.5751正确——这两分子净电荷差 0.4ESP 表面显著不同Path B 给 0.9162判不出带电差异。DNN 的apply_charge_correction只对形式电荷原子加 0.4×formal charge 校正不补 PLI 那套方向性 off-center。所以 0.4 净电荷在 Path B 里只表现为某个原子上一个微小的额外电荷ESP 形貌没改——espsim 看不到差异。八、决策矩阵什么时候用哪路场景Path APath BPath C中性 vs 中性 SAR仅排序可用推荐ground truth带电 vs 中性判别完全无效失效必需带电 vs 带电仅排序可用排序 OKground truth跨体系绝对 ESP sim 数值物理无意义±5% 真值truth速度每分子~150 ms~170 ms~10 s含 PLI round-trip结论做中性分子 SAR 快速打分 → Path B 够用做带电 vs 中性 / 带电 vs 带电 →必须 Path C论文级、对外汇报 → 永远 Path CPath A 仅当你不关心绝对数、只关心同次运行的排序时九、局限与展望9.1 当前限制Path B 的氢电荷是 Gasteiger 近似——对极化氢N–H、O–H、amide N–H误差 ~0.05 e传播到 ESP sim 约 ±2%Path C 强依赖 PLI 二进制——目前是 Linux ELFmacOS / Windows 无法本地跑必须有 Linux 服务器DNN 训练集 10 万分子全是中性AstexUK 没披露是否含带电样本比例所以带电分子本身的电荷预测就有系统偏差GitHub 仓库的 PLI 是 Astex 公开版64 MB PLI 数据 5.3 MB 二进制 ~80 MBoff-center 元素参数表可能不是 Astex 内部完整版——论文表 S1 描述了 50 种元素的 off-center 位置/电荷但仓库elements.pli未必全部覆盖9.2 未来方向用 psi4 / OpenFF 直接算 off-center 虚拟位点不靠 PLI可在 Windows / macOS 上跑训练 DNN 时补带电样本——A 股公开数据集PDBBind、BindingDB含大量带电配体espsim 升级到 1.x如果作者发布——目前 0.0.1 依赖 setuptools81长期维护有风险9.3 待追踪锚点AstexUK/ESP_DNN 的 Issue 区是否有 off-center 元素覆盖更新heid-lab/espsim 后续是否升级到支持 hydrogen-only 模式避免当前必须给完整重原子电荷的限制Linux 服务器迁移到新节点时PLI 二进制是否仍可直接 exec依赖 GLIBC 版本参考来源资源链接AstexUK/ESP_DNNgithub.com/AstexUK/ESP_DNNheid-lab/espsimgithub.com/hesther/espsimRathi 等J. Med. Chem.201910.1021/acs.jmedchem.9b01129Heid BoecklerJCIM202210.1021/acs.jcim.1c01535espsim PyPIpypi.org/project/espsimTensorFlow 2.15 迁移指南tensorflow.org/guide/keras/migrating_to_keras_v2RDKit release notesgithub.com/rdkit/rdkit/releasesuv 文档docs.astral.sh/uv更多专栏蛋白 / 多肽分子模拟 / 动力学分子对接 / CADD / 工具其他开源蛋白结构推理预测分子模拟基础UCSF DOCK系列agent智能体系列开源蛋白生成方法实践分子动力学模拟-AmberrDock系列化学大模型介绍2025蛋白药物设计-原理与案例剖析分子动力学模拟-GromacsLeDock系列我胡师兄说药开源多肽设计模型和方法实践結合自由能CADD中的机器学习模型siRNA药物设计模型开源多肽性质预测高效计算基本配置小分子药物设计-原理与案例剖析ASO药物设计模型多肽药物设计-原理与案例剖析作用于DNA/RNA的药物设计实践开源小分子生成和设计实践开源药代动力学模拟软件
返回列表