Skip to main content

虚拟筛选软件的pythonic接口

项目描述

编解码器 CI 文件状态 PyPI 版本 DOI

pyscreener

高通量虚拟筛选软件的 Pythonic 接口

概述

这个存储库包含 pyscreener 的源代码,它是一个库和软件,用于通过 python 调用进行 HTVS

目录

安装

一般要求

  • 蟒蛇> = 3.8
  • numpy, openbabel, openmm, pdbfixer, ray, rdkit, scikit-learn, scipy, 和tqdm
  • 所有下载并位于您的 PATH 或特定环境变量路径下的相应软件(有关更多详细信息,请参阅外部软件。)

设置

  1. (如有必要)安装 conda
  2. conda env create -f environment.yml
  3. conda activate pyscreener
  4. pip install pyscreener(或者如果从源代码安装,pip install .
  5. 请按照以下相应说明获取预期软件

在运行之前pyscreener,请务必先激活环境:(conda activate pyscreener或您为环境命名的任何名称)

外部软件

  • vina类软件

    1. 安装ADFR Suite并添加prepare_receptor到您的 PATH。如果这一步成功,命令which prepare_receptor应该输出path/to/prepare_receptor。这可以通过以下任一方式完成:

      1. 将整个bin目录添加到您的路径(您应该在安装过程结束时看到一个命令)或

      2. prepare_receptorbin目录添加到您的 PATH 中,如下所述

    2. 安装以下任何对接软件:vina 1.1.2注意: pyscreener 不适用于 vina 1.2)、qvina2sminapsovina ,并确保所需的软件可执行文件位于您路径上的文件夹中

  • 码头6

    1. 获得 DOCK6 的许可证
    2. 从下载链接安装 DOCK6 并按照安装说明进行操作
    3. 确保安装正确后,将 DOCK6 环境变量指定为 DOCK6 父目录的路径,如下所述。这是从 tarball 解压缩的目录,通常命名为dock6. 它是包含 、 等子目录的文件夹bininstall
    4. 安装sphgen_cpp。在 linux 系统上,可以这样做:
      1. wget http://dock.compbio.ucsf.edu/Contributed_Code/code/sphgen_cpp.1.2.tar.gz
      2. tar -xzvf sphgen_cpp.1.2.tar.gz
      3. cd sphgen_cpp.1.2
      4. make
    5. 将 sphgen_cpp 可执行文件(应该是sphgen_cpp)放在binDOCK6 父目录的子目录中。如果您已经配置了环境变量,(在 linux 上)您可以运行:mv sphgen_cpp $DOCK6/bin
    6. 安装 chimera并将文件放在您的 PATH 中,如下所述

将可执行文件添加到您的 PATH

要将可执行文件添加到 PATH,您有三个选项:

  1. 在路径中已经存在的目录中创建指向可执行文件的符号链接:ln -s FILE -t DIR. 通常,~/bin~/.local/bin是好的目标目录(即DIR)。要查看当前路径上的目录,请键入echo $PATH。您的路径上通常会有很多目录,最好避免在主目录上方的任何目录中创建文件($HOME在大多数基于 *nix 的系统上)
  2. 将软件复制到路径上已经存在的目录中。类似的,虽然不如上面的首选:cp FILE DIR
  3. 将包含该文件的目录附加到您的 PATH:export PATH=$PATH:DIR中,其中DIR包含相关文件的目录。由于每次运行 pyscreener 时都必须配置 PATH,因此该命令也应该放在您的~/.bashrcor ~/.bash_profile(如果使用 bash shell)中,以避免每次登录时都需要运行该命令。注意:如果使用非 bash shell,具体文件会有所不同。

指定环境变量

要设置DOCK6环境变量,请运行以下命令:export DOCK6=path/to/dock6,其中path/to/dock6是上面提到的 DOCK6 父目录的完整路径。由于这个环境变量必须始终在运行 pyscreener 之前设置,因此该命令应放在您的~/.bashrcor~/.bash_profile中(如果使用 bash shell)以避免每次登录时都需要运行该命令。注意:如果使用非 bash shell ,具体文件会有所不同。

光线设置

pyscreenerray用作其并行后端。如果您计划仅在本地计算机上并行化软件,则无需执行任何操作。但是,如果您希望 (a.) 限制将运行 pyscreener 的核心数量或 (b.) 在分布式设置上运行它(例如,具有许多不同节点的 HPC),则必须手动启动 ray 集群运行 pyscreener 之前。

限制核心数量

为此,只需ray start --head --num-cpus N在启动 pyscreener 之前键入(N您希望允许 pyscreener 使用的内核总数在哪里)。不执行此步骤将使 pyscreener 可以访问本地计算机上的所有内核,从而可能会减慢其他应用程序的速度。

分布在多个节点

虽然这方面的精确说明会因 HPC 集群架构而异,但总体思路是在分配给您的作业的节点之间建立一个光线集群。我们提供了一个示例 SLURM 提交脚本 ( run_pyscreener_distributed_example.batch ) 来实现这一点,但您可能需要根据您的系统更改一些命令。有关这方面的更多信息,请参见此处。要让 pyscreener 连接到你的 ray 集群,你必须适当设置ip_headredis_password环境变量,哪里ip_head是你的 ray 集群的头地址,即IP:PORT哪里IP是头节点的 IP 地址PORT,是运行 ray 的端口.

pyscreener 编写了很多中间输入和输出文件(由于底层对接软件的固有规范。)鉴于 pyscreener 的主要终点是配体列表和相关分数(而不是特定的结合位姿),这些文件是写入每个节点的临时目录(由 确定tempfile.gettempdir())并在最后丢弃。如果您希望收集这些文件,请--collect-all在程序参数中传递标志或在屏幕完成时运行对象的collect_files()方法。VirtualScreen

注意:由于需要通过网络发送可能一堆文件,该VirtualScreen.collect_files()方法很慢。这个方法应该只在对象的生命周期内运行一次,因为多个中间调用将产生与单个最终调用相同的结果。VirtualScreen

注意tempfile.gettempdir()返回取决于特定环境变量值的路径(请参见此处)。您的系统上返回的值可能实际上不是您的有效路径!在这种情况下,您可能会遇到文件权限错误,并且必须在运行 pyscreener 之前询问您的系统管理员该值应指向的位置并相应地设置您的环境变量!

将 pyscreener 作为软件运行

!!请在运行 pyscreener 之前阅读整个部分!!

pyscreener 被设计为具有一个最小界面,其原则是高通量虚拟筛选旨在成为一种广泛的技术来衡量配体的好感性。考虑到这一点,真正需要的是以下几点:

  • screen-type您要运行的屏幕类型 ( ):vinadock分别用于 Vina 类型或 DOCK6 屏幕
  • 您感兴趣的受体的 PDB id 或特定结构的 PDB 文件
  • 包含您想要停靠的配体的文件,采用 SDF、SMI 或 CSV 格式
  • 对接盒的坐标(中心 + 大小)或包含先前结合配体坐标的 PDB 格式文件
  • 元数据模板,包含 JSON 格式字符串中特定于屏幕的选项。有关更多详细信息,请参阅下面的元数据部分。
  • 您希望并行化每个对接模拟的 CPU 数量。默认为 1,但 Vina 类型的软件可以利用多个 CPU 来实现更快的对接。一个通常好的值是介于28取决于您的计算设置之间。如果您正在逐个分子地对接,例如强化学习,那么您可能希望这与您的机器上的 CPU 数量一样多。

您还可以指定多种其他选项(包括如何在输出多个评分构象的情况下对配体进行评分,如何针对一组结构进行评分等)查看所有这些选项以及它们的作用,使用以下命令:pyscreener --help. 所有这些选项都可以在命令行或接受 YAML、INI 和argparse语法的配置文件中指定。示例配置文件位于integration-tests/configs中。

要检查一切是否正常工作并正确安装,首先像这样运行 pyscreener:pyscreener --config path/to/your/config --smoke-test

元数据模板

Vina 类型和 DOCK6 对接模拟具有许多独特的准备和模拟管道选项,这些选项在pyscreener. 目前,这两个对接软件系列仅支持其中几个选项,但未来的更新将增加对更多这些选项的支持。这些选项可以通过 JSON 结构指定给--metadata-template参数。以下是两种类型的停靠屏幕支持的选项列表(参数旁边括号中提供的默认选项)

  • 维娜型

    • software(= "vina"):您想使用哪种 Vina 类型的对接软件。当前支持的值:"vina""qvina", "smina""psovina"
    • extra(= ""):传递给 Vina 类型对接软件的所有额外命令行选项。例如,运行 Sminaextra="--force_cap ARG"或 PSOVina,extra="-w ARG"
  • 码头6

    • probe_radius(= 1.4):用于计算分子表面的探针的大小(有关详细信息,请参见此处)
    • steric_clash_dist(= 0.0):防止生成具有较大值的紧密表面接触的大球体
    • min_radius(= 1.4):用于生成球体的最小球体半径
    • max_radius(= 4.0): 最大 "..."
    • sphere_mode(= "box"):选择球体用于构建对接盒的方法。接受值:"largest",选择最大的球体簇;"box",选择预定义对接框中的所有球体;"ligand",使用先前对接/结合的配体的坐标来选择球体
    • docked_ligand_file(= ""):一个 MOL2 文件,其中包含先前对接/结合的配体的坐标
    • buffer(= 10.0):选择球体时要在配体周围添加的额外空间量(以埃为单位)
    • enclose_spheres(= True): 是通过封闭所有选定的球体来构建对接盒还是仅使用预定义对接盒内的球体

测试您的环境设置

要测试您的环境是否在路径和环境变量方面设置正确,请pyscreener像这样运行:

pyscreener --smoke-test --screen-type SCREEN_TYPE --metadata-template TEMPLATE

如上所述的位置SCREEN_TYPE和值METADATA_TEMPLATE

如果检查通过,那么您的环境设置正确。

使用 pyscreener 作为库

要检查是否pyscreener设置正确,您可以运行以下命令:

>>> import pyscreener as ps

>>> software = "..."
>>> metadata = {...}

>>> ps.check_env(software, metadata)
...

其中 software 是您打算使用的软件的名称,而 metadata 是包含元数据模板的字典。有关可能的键值对的详细信息,请参阅元数据模板部分。

pyscreener 的对象模型依赖于四个类:

  • CalculationData:一个简单的对象,包含所有类型的对接计算(例如,Vina、DOCK6 等)共有的对接计算的粗略规范:SMILES 字符串、目标受体、对接盒的中心/大小、元数据、和结果。
  • CalculationMetadata: 一个包含软件特定字段的不起眼的对象。例如,Vina 类型的计算需要一个software参数,而 DOCK6 计算需要许多不同的参数来制备受体。最重要的是,元数据将始终包含两个抽象类型的字段:prepared_ligandprepared_receptor
  • DockingRunner:一个静态对象,它定义了一个接口来准备和运行对接计算。每种计算类型都定义了自己的DockingRunner实现。
  • DockingVirtualScreen:组织虚拟屏幕的对象。在高层次上,虚拟是一系列对接计算,其中包含为分子集合执行的一些模板参数集,并分布在一些计算资源集上。ADockingVirtualScreen作为参数 a DockingRunner,一个受体列表(用于可能的集成对接)和一组模板的模板值CalculationData。它定义了一个__call__()方法,该方法采用解压缩的 SMILES 字符串列表,CalculationData为每个分子构建对象,并将这些对象提交给光线簇中的各种资源进行准备和计算(请参阅光线设置)。

要在 python 代码中使用 执行对接调用pyscreener,您必须首先DockingVirtualScreen通过工厂pyscreener.virtual_screen函数或手动初始化一个对象来初始化一个对象。以下部分将展示如何从 Python 解释器内部执行计算的示例。

例子

以下代码片段将使用预定义的对接盒和 Autodock Vina将苯(SMILES 字符串"c1ccccc1")与 D4 多巴胺受体(PDB ID )对接5WIU

>>> import ray
>>> ray.init()
[...]
>>> import pyscreener as ps
>>> metadata = ps.build_metadata("vina")
>>> virtual_screen = ps.virtual_screen("vina", ["integration-tests/inputs/5WIU.pdb"], (-18.2, 14.4, -16.1), (15.4, 13.9, 14.5), metadata, ncpu=8)
{...}
>>> scores = virtual_screen("c1ccccc1")
>>> scores
array([-4.4])

上述示例的一些注意事项:

  • 输入 PDB 文件在使用前必须是干净的。您也可以传入一个 PDB ID(例如pdbids=["5WIU"]),但您必须知道相应 PDB 文件的停靠框的坐标。这通常意味着下载 PDB 文件并手动检查它以获得更可靠的结果,但如果您需要,它就在那里。
  • 您可以通过在 PDB 文件中提供这些坐标,从先前结合的配体的坐标构建对接,例如
    vs = ps.virtual_screen("vina", ["integration-tests/inputs/5WIU.pdb"], None, None, metadata, ncpu=8, docked_ligand_file="path/to/DOCKED_LIGAND.pdb")
    
  • ray 在库的后端处理任务分配。ray.init()如果你只是像我们上面那样打电话,你不需要手动启动它。这样做只是为了突出根据您自己的需要(即分布式设置)初始化光线的能力。
  • 要使用包含配体的输入文件,您必须使用LigandSupply该类并访问该.ligands属性,例如,
    supply = ps.LigandSupply(['integration-tests/inputs/ligands.csv'])
    virtual_screen(supply.ligands)
    

有关更多示例,请查看示例文件夹!

测试

  1. pip install pytest
  2. pytest

版权

版权所有 (c) 2021,大卫格拉夫

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

pyscreener-1.2.2.tar.gz (365.3 kB 查看哈希

已上传 source

内置分布

pyscreener-1.2.2-py3-none-any.whl (51.6 kB 查看哈希

已上传 py3