ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

AutoDock Vina Python API 完全指南:Vina 类核心方法与亲和力图计算详解

AutoDock Vina Python API 完全指南:Vina 类核心方法与亲和力图计算详解 生物信息学科学计算科研【免费下载链接】AutoDock-VinaAutoDock Vina项目地址https://gitcode.com/gh_mirrors/au/AutoDock-Vina点击查看免费下载本篇技术指南系统梳理 AutoDock Vina 官方文档中面向 Python 的 API 参考页对应仓库中的 vina.rst该页面通过 Sphinxautomodule指令从vina.vina与vina.utils两个 Python 模块的 docstring 自动生成是使用 AutoDock Vina 进行分子对接、打分、局部优化与结果导出的权威接口说明。读完本文你将掌握Vina类的构造参数、三种内置打分函数vina / vinardo / ad4的权重体系、亲和力图affinity maps的生成与读写、打分/优化/对接/结果输出的完整调用链并能直接复跑仓库提供的首个 Python 对接脚本。文档定位一个由 docstring 自动生成的 API 参考页docs/source/vina.rst本身只包含两段automodule指令分别指向vina.vina与vina.utils模块并开启了:members:、:undoc-members:、:show-inheritance:三个选项意味着最终渲染出的 HTML 页面会完整列出两个模块中所有公开成员、非文档化成员与继承关系。这种“代码即文档”的组织方式由 docs/source/conf.py 中的 Sphinx 配置驱动使用sphinx.ext.autodoc与sphinx.ext.napoleon扩展支持 Google/Numpy 风格 docstring 渲染autodoc_member_order bysource保证 API 页面按源码定义顺序排列成员napoleon_include_init_with_doc True将构造函数__init__的 docstring 一并渲染进类文档通过sys.path.insert(0, os.path.abspath(../build/python))将 Python 包源码目录加入导入路径。因此本文所讲解的 API 细节全部来自 build/python/vina/vina.py 与 build/python/vina/utils.py 中的真实实现与 docstring可直接对照源码逐行验证。vina.vina模块Vina类全景vina.vina模块定义了对用户唯一的顶层类Vina它是连接 Python 与 AutoDock Vina C 核心的桥梁Python 侧负责参数校验、文件检查与结果后处理底层计算则委托给 SWIG 包装的 C 对象源码见 build/python/setup.py 中vina._vina_wrapper扩展的构建配置。from vina import Vina即从该模块导入见 build/python/vina/init.py。构造函数与全局参数Vina(sf_namevina, cpu0, seed0, no_refineFalse, verbosity1)参数类型默认值含义sf_namestrvina打分函数名仅支持vina、vinardo、ad4三者之一传入其他值会抛出ValueErrorcpuint0使用的 CPU 数量0表示使用全部可用核心seedint0随机数种子0表示随机选取no_refineboolFalse当提供了受体时是否不使用显式受体原子改用预计算网格进行1对接后的局部优化与打分、2--local_only任务、3--score_only任务verbosityint1输出级别0无输出、1正常输出、2详细输出源码实现要点vina.pysf_name会先被lower()归一化再校验合法性no_refine仅在vina/vinardo两种力场下生效ad4力场强制为False实例化后会立即从底层 C 对象获取实际的种子值并保存到self._seed。构造完成后可以用print(v)查看对接配置摘要受体、配体、打分函数、权重、盒子中心/尺寸/间距、种子等也可以调用v.info()获取结构化字典包含rigid_receptor、flex_receptor、ligands、scoring_function、weights、no_refine、box_center、box_size、box_spacing、box_even_elements、seed等键v.cite()则打印引用信息。三种打分函数与其默认权重Vina构造时根据sf_name设置对应的默认权重源码 vina.pyvinaVina 力场(-0.035579, -0.005156, 0.840245, -0.035069, -0.587439, 50, 0.05846)共 7 个权重vinardoVinardo 力场(-0.045, 0.8, -0.035, -0.6, 50, 0.05846)共 6 个权重ad4AutoDock4 力场(0.1662, 0.1209, 0.1406, 0.1322, 50)共 5 个权重。如果需要定制势能权重可以调用set_weights(weights)。该方法同样按力场校验权重个数vina必须为 7 个ad4/vinardo必须为 6 个不匹配时抛出ValueError。底层分别路由到set_vina_weights、set_ad4_weights、set_vinardo_weights源码 vina.py。输入设置受体与配体受体——set_receptor(rigid_pdbqt_filenameNone, flex_pdbqt_filenameNone)可同时指定刚性受体与柔性残基两个 PDBQT 文件也可以只传其中一个两者均传None会抛出ValueError文件不存在抛RuntimeError扩展名不是.pdbqt抛TypeError源码 vina.py。配体——set_ligand_from_file(pdbqt_filename)接受单个文件名或文件名列表列表/元组会被展开逐个校验仅支持 PDBQT 格式单配体直接传入底层多配体以列表形式传入源码 vina.py。配体——set_ligand_from_string(pdbqt_string)与前者等价但直接接受 PDBQT 格式的字符串或字符串列表适合从内存构造配体、无需落盘文件的场景非字符串元素会抛TypeError源码 vina.py。亲和力图计算、加载与写出compute_vina_maps(center, box_size, spacing0.375, force_even_voxelsFalse)是 Python 接口的核心功能之一用于按指定盒子计算亲和力图center盒子中心(x, y, z)单位埃Åbox_size盒子尺寸(a, b, c)单位埃各分量必须为正spacing网格间距默认0.375Å必须大于 0force_even_voxels强制体素数NPTS/NELEMENTS为偶数即网格点数为奇数默认False。源码校验vina.py中心与尺寸必须为长度 3 的序列尺寸分量必须为正、间距必须大于 0否则抛ValueError。计算完成后内部保存_center、_box_size、_spacing并以np.ceil(box_size / spacing)估算体素数量若开启force_even_voxels还会将奇数体素各维度加 1 补成偶数。一个关键行为差异在 docking_python.rst 中有明确说明compute_vina_maps()的结果取决于配体是否已加载——先加载配体再计算只为该配体所需的原子类型生成亲和力图未加载配体直接计算为 Vina 力场定义的全部原子类型共 22 种生成亲和力图便于后续批量对接/虚拟筛选时无需预先知道配体的原子类型。load_maps(map_prefix_filename)用于加载已存在的亲和力图文件要求存在prefix.*.map形式的文件否则抛RuntimeError源码 vina.py。write_maps(map_prefix_filenamereceptor, gpf_filenameNULL, fld_filenameNULL, receptor_filenameNULL, overwriteFalse)用于写出亲和力图未先计算或加载过亲和力图会抛RuntimeError默认不允许覆盖已有.map文件需显式传overwriteTrue体素数为奇数时禁止写出错误信息会明确提示“Set force_even_voxels to True when computing vina maps”源码 vina.py。上述能力与仓库example/basic_docking/solution中由 AutoGrid 生成的*.map、*.gpf、*.fld文件体系对应方便用户在预计算网格与 Vina 内建网格计算之间自由切换。打分、局部优化与构象随机化score(unbound_energyNone)对当前构象打分返回 numpy 数组。可选参数unbound_energy用于传入配体游离态能量。打分精度统一为小数点后 3 位与坐标精度保持一致。optimize(max_steps0)执行快速的 BFGS 局部能量优化。max_steps0默认时步数上限按启发式取(25 num_movable_atoms) / 3负数会抛ValueError。返回优化后构象的能量数组。randomize(max_steps10000)对输入配体构象进行随机化max_steps为生成并挑选最优构象的步数。能量数组的列含义Vina/Vinardo 力场[total, lig_inter, flex_inter, other_inter, flex_intra, lig_intra, torsions, lig_intra best pose]AutoDock4 力场ad4[total, lig_inter, flex_inter, other_inter, flex_intra, lig_intra, torsions, -lig_intra]两者差别仅在最后一列Vina/Vinardo 报告“配体内部能量的最优构象值”ad4 报告其相反数。对接全局搜索dock(exhaustiveness8, n_poses20, min_rmsd1.0, max_evals0)执行全局搜索优化蒙特卡洛采样底层调用 C 的global_search见 parallel_mc.cpp 相关实现exhaustiveness蒙特卡洛运行次数默认 8必须 ≥ 1n_poses生成并保留的构象数默认 20必须 0min_rmsd构象间最小 RMSD 距离Å默认 1.0用于去重max_evals最大评估次数默认 0 表示采用启发式规则负数抛ValueError源码 vina.py。结果获取与写出对接完成后可用四类方法取结果poses(n_poses9, energy_range3.0, coordinates_onlyFalse)返回 PDBQT 格式字符串多构象按打分排序或当coordinates_onlyTrue时返回形如(n_poses, n_atoms, 3)的坐标数组源码中通过将 C 返回的一维坐标reshape为三维并保留 3 位小数见 vina.py。energies(n_poses9, energy_range3.0)返回各构象的能量数组行对应构象、列对应能量分量取值 3 位小数。列含义同前Vina/Vinardo 为[total, inter, intra, torsions, intra best pose]AutoDock 为[total, inter, intra, torsions, -intra]。write_poses(pdbqt_filename, n_poses9, energy_range3.0, overwriteFalse)将对接得到的构象写入 PDBQT 文件。n_poses与energy_range均需为正目标文件已存在时默认拒绝覆盖源码 vina.py。write_pose(pdbqt_filename, remarks, overwriteFalse)写出单个构象如randomize或optimize之后的当前构象remarks可附加 REMARKS 记录。n_poses与energy_range的协作逻辑值得注意写出/返回的构象数量是“前n_poses个且与最优构象能量差不超过energy_range默认 3.0 kcal/mol”的交集因此实际结果数量可能少于n_poses需要更多结果时可调大energy_range。vina.utils模块文件可写性检查vina.utils目前只提供一个工具函数check_file_writable(fnm)用于判断目标路径是否可写入逻辑如下源码 utils.py路径已存在是普通文件则检查写权限os.access(fnm, os.W_OK)对符号链接同样有效是目录则返回False路径不存在检查父目录写权限父目录为空时回退到当前目录.若父目录可写则认定目标文件可创建。该函数被write_pose、write_poses内部复用写出结果前先检查可写性不可写即抛RuntimeError随后再叠加overwrite语义防止覆盖已存在文件。实战从零跑通第一个 Python 对接脚本仓库在 example/python_scripting/first_example.py 提供了完整可运行的首个示例配套讲解见 docking_python.rst所需输入文件1iep_receptor.pdbqt、1iep_ligand.pdbqt均在同一目录下from vina import Vina v Vina(sf_namevina) v.set_receptor(1iep_receptor.pdbqt) v.set_ligand_from_file(1iep_ligand.pdbqt) v.compute_vina_maps(center[15.190, 53.903, 16.917], box_size[20, 20, 20]) # Score the current pose energy v.score() print(Score before minimization: %.3f (kcal/mol) % energy[0]) # Minimized locally the current pose energy_minimized v.optimize() print(Score after minimization : %.3f (kcal/mol) % energy_minimized[0]) v.write_pose(1iep_ligand_minimized.pdbqt, overwriteTrue) # Dock the ligand v.dock(exhaustiveness32, n_poses20) v.write_poses(1iep_ligand_vina_out.pdbqt, n_poses5, overwriteTrue)在包含依赖环境的终端中于example/python_scripting目录执行python first_example.py即可运行。脚本的关键流程与本文 API 一一对应初始化Vina(sf_namevina)选用 Vina 力场CPU 数默认全部可用也可cpu1限定单核加载输入set_receptorset_ligand_from_file加载 PDBQT 受体与配体若受体含柔性侧链可写成v.set_receptor(rigid.pdbqt, flex.pdbqt)生成网格compute_vina_maps以给定中心与 20×20×20 Å 盒子计算亲和力图打分与优化score()输出当前构象总分optimize()做局部 BFGS 最小化以消除配体自身及与受体的空间冲突对接与导出dock(exhaustiveness32, n_poses20)执行 32 轮蒙特卡洛采样并保留 20 个构象最后write_poses(..., n_poses5)只写出按分数排序的前 5 个构象能量差受默认energy_range3.0约束。注意一个易混淆点dock(n_poses20)决定搜索期间保留的构象数write_poses(n_poses5)决定写出数量两者独立设置。若希望写出全部 20 个构象需将write_poses的n_poses调至 20并保证其与最优构象的能量差在energy_range范围内。底层实现从 Python 到 C 的调用链Vina类并非自行实现对接算法而是通过 SWIG 包装调用 AutoDock Vina 的 C 核心。从 build/python/setup.py 可以确认扩展名vina._vina_wrapper由 SWIG 接口文件vina/autodock_vina.i与 18 个 C 源文件编译而成覆盖vina.cpp、monte_carlo.cpp、parallel_mc.cpp、quasi_newton.cpp、mutate.cpp、non_cache.cpp、cache.cpp、ad4cache.cpp、grid.cpp、parse_pdbqt.cpp等核心模块SWIG 以-shadow模式生成“pythonic”包装层vina.py 顶部的from .vina_wrapper import Vina as _Vina即该包装层编译依赖 Boost-lboost_thread、-lboost_serialization、-lboost_filesystem、-lboost_program_options需要 C14 编译器包的 Python 侧依赖numpy1.18、setuptools50.3、wheel、packaging要求 Python ≥ 3.5。因此Vina的每个方法最终都映射到 C 层对应的计算流程dock→global_search并行蒙特卡洛见 parallel_mc.cpp、optimize→ BFGS 局部优化quasi_newton.cpp、compute_vina_maps→ Vina 力场网格计算grid.cpp。Python 层主要负责参数合法性校验、文件读写保护与 numpy 化结果返回把复杂的数值计算全部交给经多年优化的 C 实现。常见错误速查结合源码中的异常路径以下是高频错误场景与触发条件异常触发条件ValueError构造时sf_name不是 vina/vinardo/ad4set_weights权重个数与力场不匹配compute_vina_maps中心/尺寸不是三元组、尺寸非正或间距 ≤ 0dock/write_poses/poses/energies的n_poses、min_rmsd、exhaustiveness、energy_range等参数越界RuntimeError受体/配体文件不存在找不到prefix.*.map亲和力图未计算网格就write_maps体素数为奇数时写出网格目标输出文件已存在且未开启overwrite目标路径不可写TypeError受体/配体文件扩展名不是.pdbqtset_ligand_from_string传入非字符串元素进一步阅读Python 脚本实战教程docs/source/docking_python.rst含逐行讲解与运行说明Vina类完整源码与 docstringbuild/python/vina/vina.py工具函数实现build/python/vina/utils.pyPython 包构建与 SWIG 绑定配置build/python/setup.py底层 C 核心对接搜索 src/lib/parallel_mc.cpp、局部优化 src/lib/quasi_newton.cpp、网格计算 src/lib/grid.cpp基础对接教程与现成输入输出样例example/basic_docking含受体/配体 PDBQT 与 AutoGrid 生成的亲和力图文件可对照write_maps/load_maps的输出格式。赞分享生物信息学科学计算科研【免费下载链接】AutoDock-VinaAutoDock Vina项目地址https://gitcode.com/gh_mirrors/au/AutoDock-Vina点击查看免费下载相关推荐AutoDock-Vina虚拟筛选Python API使用指南AutoDock Vina虚拟筛选Python API使用指南 AutoDock Vina是一款广泛使用的分子对接软件其Python绑定接口为自动化虚拟筛选提生物信息学科学计算科研AutoDock-Vina对接中异常高亲和力问题的分析与解决AutoDock Vina对接中异常高亲和力问题的分析与解决 问题现象 在使用AutoDock Vina进行分子对接时用户遇到了一个异常现象计算得到的结合自生物信息学科学计算科研【免费下载】 **AutoDock Vina 安装与配置完全指南**AutoDock Vina 安装与配置完全指南 项目基础介绍 AutoDock Vina 是一个开源的分子对接程序由Oleg Trott博士在分子图形实验室生物信息学科学计算科研上一篇如何使用JUCE实现专业级音频可视化与硬拷贝输出完整指南下一篇掌握Nuclide批量重命名API高效插件开发指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表