从"生数据"到对接结果:semdock 让虚拟筛选不再受制于 ZINC
这篇方案解决什么问题
基于分子对接的虚拟筛选是大规模化合物库筛选、锁定候选活性分子的常规手段。此前的 jamdock-suite 已把"从建库到对接评估"整条流程自动化——但它有个硬伤:化合物库生成只能依赖 ZINC 数据库的外部服务器。用户自带的化合物集合(PubChem、ChEMBL、供应商目录、天然产物数据库、自建库)进不去流程,还得自己手工预处理。
本文发布的 semdock 工作流正是为补上这一环:直接吃 SDF、SMILES、CSV 三种最常见格式的原始化学数据集,自动完成从"生结构"到"可对接 PDBQT 文件"的全套配体准备,并新增按配体分配 CPU 核的并行对接(实测比传统多线程快约 30%)与自动化的对接后分析。
四大亮点(原文 Highlights):
- 支持从原始 SDF、SMILES、CSV 数据集直接启动虚拟筛选;
- 自动化配体准备:从原始结构一路到可直接对接的 PDBQT 文件;
- 每个配体独占一个 CPU 核的并行对接;
- 按阈值过滤并整理虚拟筛选结果,输出带分子描述符的数据表。
工作流结构:四个模块接力
| 模块 | 来源 | 职责 |
|---|---|---|
| sem_prep | 本文新增(含 3 个脚本) | 解析并标准化输入数据集(input_handler.py)、质子化(protonate.sh)、3D 构象生成与能量最小化(generate_3d.py),输出 PDBQT |
| jamreceptor | jamdock-suite(Data S3) | 受体结构清洗、分配 Gasteiger 电荷、转 PDBQT;用内置 fpocket 自动识别结合口袋并生成对接网格参数 |
| sem_dock | 本文新增 | 调用 AutoDock Vina 引擎,按配体分核并行对接 |
| sem_filter | 本文新增(另有 fail_check 脚本,Data S6) | 处理 Vina 输出,按结合能阈值或 Top-N 排名过滤,生成三个 CSV 结果表;可选 SimScore 构象收敛性评分 |
原版 jamdock-suite 的五个脚本(jamlib / jamreceptor / jamqvina / jamresume / jamrank)中,semdock 替换了"建库"(jamlib→sem_prep)与"对接"(jamqvina→sem_dock)两个环节,保留了受体准备等其余能力,并继承 jamrank 的 SimScore 计算思路。
材料与软件清单(关键资源表)
| 类别 | 名称 | 来源 / 标识 |
|---|---|---|
| 数据 | 虚拟筛选流水线 Bash/Python 脚本 | 本文;Zenodo: 10.5281/zenodo.19998830;GitHub: elrando/semdock |
| 数据 | 虚拟筛选化合物库 | ZINC 数据库(zinc.docking.org) |
| 数据 | 维生素 D 核受体配体结合域晶体结构 | PDB: 1IE9 |
| 数据 | 盐皮质激素受体配体结合域晶体结构 | PDB: 3VHU |
| 数据 | LOV 光传感域晶体结构 | PDB: 4R38 |
| 数据 | 孕激素受体配体结合域晶体结构 | PDB: 1SQN |
| 系统 | Ubuntu 24.04 LTS | ubuntu.com |
| 语言 | Python 3 | python.org |
| 工具 | GNU Wget 1.21.4 / nano 7.2 / curl 8.5.0 / git 2.43.0 | GNU Project 等 |
| 构建 | Cmake 3.28.3、Boost 1.83 | Kitware / Boost C++ Libraries |
| 环境 | Conda 26.1.0 | Anaconda |
| 化学 | RDKit 2025.09.2 | rdkit.org(Zenodo: 10.5281/zenodo.17495409) |
| 化学 | Meeko 0.7.1(PDBQT 转换) | Forli Lab(GitHub: forlilab/Meeko) |
| 化学 | Dimorphite-DL(质子化) | Durrant Lab(PyPI) |
| 对接 | AutoDock Vina 1.2.7(本文有修改版) | 官方 GitHub: ccsb-scripps/AutoDock-Vina;修改版: elrando/AutoDock-Vina |
| 并行 | GNU Parallel | GNU Project(Zenodo: 19701238) |
| 可视化 | PyMOL 3.1.0 Open-Source | Schrödinger(GitHub: schrodinger/pymol-open-source) |
本研究为纯计算工作流,不产生新实体材料。补充材料 Data S1(详细执行手册)、S2–S6(各模块代码)、S7(验证用 FDA 化合物库 CSV)随文发布。联系作者:Jahangir Md. Alam(jahangir@btge.iu.ac.bd)。
分步方案
Step 1 · 环境安装
在 Linux 环境安装 semdock 工作流及全部依赖(细节见 Data S1:Ubuntu 24.04、Python 3、RDKit、Meeko、Dimorphite-DL、GNU Parallel、修改版 Vina 等)。建议用 Conda 管理依赖。
Step 2 · 准备配体输入数据
- 输入支持 SDF、SMILES、CSV 三种格式;
- CSV 只要求含一列 SMILES——从 ZINC、PubChem、ChEMBL 下载的数据通常自带 SMILES 列,无需任何预处理即可直接使用;
- 验证用库:ZINC 下载的 3,230 个 FDA 批准化合物(CSV,含化合物标识符与 canonical SMILES,Data S7)。
Step 3 · 自动化配体准备(sem_prep,五个子步骤)
- 标准化用 RDKit 统一化合价/电荷等来源差异;
- 质子化用 Dimorphite-DL 在 pH 7.4 下指定质子化态——每个化合物只取单一质子化态(效率与可扩展性的取舍,见局限性);
- 3D 构象生成RDKit 的 ETKDGv3 距离几何算法;
- 能量最小化MMFF94 力场,参数缺失时自动回退到 UFF;
- 格式转换用 Meeko 把优化后的 3D 结构转成对接就绪的 PDBQT。
全程保留化合物原始标识符(保证对接与后续分析可追溯),每一阶段都记录处理日志,成功与失败分子分列。
Step 4 · 受体准备(jamreceptor)
- 从 RCSB PDB 下载目标蛋白结构(验证用四个:1IE9、3VHU、4R38、1SQN);
- 受体结构清洗 → 分配 Gasteiger 电荷 → 转 PDBQT;
- 内置 fpocket 自动识别结合口袋,生成对接网格(grid)参数。
Step 5 · 并行分子对接(sem_dock)
- 引擎:AutoDock Vina(选 Vina 而非原版 jamqvina 所用的 QuickVina 2——QVina 2 虽平均快约 2.3 倍,但 Vina 精度更高,本工作流优先保证预测质量);
- 参数:exhaustiveness 32、最多 9 个结合模式、能量范围 5 kcal/mol(保留与最优姿态能量差 5 kcal/mol 以内的所有结合姿态);
- 并行策略:可用 CPU 核按配体为单位分配,每个配体独立对接——相比"全部核同跑一个对接任务"的多线程模式,负载更均衡,减少因配体复杂度差异造成的 CPU 空转;
- 验证环境:KVM 虚拟机(AMD EPYC 9334 32 核、32 GB RAM),分配 30 核。
Step 6 · 对接后分析(sem_filter)
处理 Vina 输出,按结合能排名,支持两种过滤方式:设结合能阈值,或直接取 Top-N。输出三个 CSV 数据表:
| 输出文件 | 内容 |
|---|---|
| 表 1 | 全部已对接配体的结合能 |
| 表 2 | 仅过滤/排名后的化合物 |
| 表 3 | 过滤后化合物 + 分子描述符(分子量 MW、拓扑极性表面积 TPSA、氢键供体 HBD、氢键受体 HBA、可旋转键 RotB、脂水分配系数 LogP) |
可选 SimScore 评分(继承自 jamrank):度量同一配体各对接姿态间的相似性,反映姿态收敛程度,作为化合物排序的辅助指标。三个表均保留配体文件名、来源数据库与来源标识符(ZINC ID、PubChem CID 等),可直接接入下游化学信息学分析、机器学习或迭代筛选。
验证结果(预期结果长什么样)
- 配体准备成功率 98.17%:3,230 个 FDA 批准化合物(结构极其多样——多肽、大环、高电荷、多手性中心药物俱全)中 3,171 个全流程成功,仅 59 个(1.83%)失败;
- 对接提速约 30%:同一化合物库(3,171 个)对四个靶点,逐配体并行耗时 7–10 小时,传统 30 线程多线程模式需 10–15 小时(相同硬件与参数);
- 生物学合理性保持:四个靶点中,已知共晶配体全部进入 Top 榜单;预测结合姿态与晶体结构中的实验构象高度吻合(PyMOL 叠合目检);
- 失败化合物分析见 Troubleshooting。
Troubleshooting:为什么会有 1.83% 失败?
失败几乎都发生在构象生成阶段。查看失败分子结构,共性是拓扑刚性极强:桥环/多环骨架、螺环连接点、多个手性中心。这类结构让 ETKDGv3 的扭转与立体化学约束难以生成化学上合理的 3D 构象,导致后续优化与 PDBQT 转换无法完成。
| 问题 | 原因 | 处理建议 |
|---|---|---|
| 配体制备失败 | 刚性结构 + ETKDGv3 约束限制 | 本工作流为评估全自动性能未人工修正;实际项目中可人工指定构象、或分批调整构象生成参数后重跑 |
| 对接预测不准 | 刚性受体对接不考虑蛋白柔性 | 高动态结合位点的靶点慎用;把结合能/姿态视为早期优先级排序的近似 |
| 某些化合物漏筛 | 每配体单一质子化态、单一最优构象 | 对重点候选可补充多质子化态/互变异构体单独处理 |
| 内存吃紧 | 每个对接进程独立占内存 | 大搜索空间(盲对接)项目需预留充足内存 |
局限性
- 刚性受体:不考虑蛋白柔性,预测的结合能与姿态是近似值,适合早期优先级筛选,不适合替代更精细的采样方法;
- 单质子化态 + 单构象:为效率牺牲了化学采样,可能漏掉与结合相关的质子化态、互变异构体、立体化学变体或构象;
- 无 GPU 加速:以普通 CPU 系统的可及性为设计目标;且每进程独立占内存,盲对接等宽搜索空间场景内存需求可观;
- 打分≠真实结合:对接得分、排名与 SimScore 不能区分真结合物与假阳性,实验验证不可省略——筛出的化合物只应作为待检验的假设。
尽管如此,semdock 补齐了 jamdock-suite 最大的短板(只能用 ZINC 库),用 98.17% 的制备成功率和四靶点验证证明了可靠性,让药物重定位、精选化合物库筛选、自建库分析等场景都能从"生数据"一键起步。
与原版 jamdock-suite 的对照速查
| 环节 | jamdock-suite(原版) | semdock(扩展版) |
|---|---|---|
| 化合物库来源 | 仅 ZINC 数据库服务器 | 任意 SDF / SMILES / CSV 数据集 |
| 配体制备 | 不含(由 ZINC 出库即"成品") | RDKit 标准化 → Dimorphite-DL(pH 7.4)→ ETKDGv3 → MMFF94/UFF → Meeko |
| 对接引擎 | QuickVina 2(快约 2.3 倍) | AutoDock Vina(精度优先) |
| 并行方式 | 多线程共跑单任务 | 每配体独占一核(快约 30%) |
| 结果整理 | jamrank | sem_filter(三表输出 + 描述符)+ 可选 SimScore |
| 姿态收敛指标 | SimScore(jamrank) | SimScore(继承) |