跳转到主要内容

Cython绑定和Python接口到SWORD(Smith Waterman On Reduced Database),一种快速数据库搜索的启发式方法。

项目描述

🐍🗡️ PySWRD Stars

Cython绑定和Python接口到SWORD(Smith Waterman On Reduced Database),一种快速数据库搜索的方法。

Actions Coverage License PyPI Bioconda AUR Wheel Python Versions Python Implementations Source Mirror Issues Docs Changelog Downloads

🗺️ 概述

在目标序列数据库中搜索序列涉及将序列与所有目标对齐以找到得分最高的序列,这具有很高的计算成本。多年来已经提出了几种使用预筛选的方法。在BLAST[1]中,从查询中提取k-mer,并且只有包含相对于得分矩阵的高得分k-mer的目标才会进行实际对齐。

SWORD[2]提出了一种基于短错配k-mer完美哈希的预筛选。从查询序列生成的k-mer也包括与错配的k-mer,以提高灵敏度。当在目标序列中发现k-mer时,SWORD计算其所在的对角线,类似于FASTA[3]。然后根据目标序列在相同对角线上遇到的击中次数选择目标序列。然后通过平台加速的Opal[4]库处理成对对齐。

PySWRD是一个Python模块,它使用Cython将绑定到SWORD的启发式筛选部分。它实现了用户友好的Pythonic接口,用于构建启发式筛选,以块的方式处理数据库,并生成通过筛选器的目标索引。生成的索引可用于使用PyOpal进行成对对齐,就像原始的C++实现一样,使用Opal

  • 无二进制依赖:PySWRD作为Python包分发,因此您可以将其添加到您的项目中,无需担心SWORD二进制文件是否存在于最终用户机器上。
  • 无中间文件:所有操作都在内存中发生,在您控制的Python对象中,因此您不需要使用子进程和临时文件调用SWORD CLI。
  • 更好的可移植性:仅使用SWORD的启发式筛选器使代码与本地CPU功能无关,而SWORD和Opal需要SIMD。PySWRD将SIMD编译和动态调度委托给PyOpal,以便更容易安装该包。它还受益于PyOpal的更广泛平台支持,与原始Opal相比,它支持Windows和Aarch64 CPU。

🔧 安装

PySWRD适用于所有现代Python版本(3.6+)。

它可以直接从PyPI安装,该网站托管Linux、MacOS和Windows的预构建x86-64轮子以及用于使用Cython编译源代码的代码。

$ pip install pyswrd

💡 示例

PySWRD不提供I/O,因此必须通过其他库(如Biopython)加载要使用的序列。PySWRD只需要将序列作为Python字符串提供

targets = [
    'MAFSAEDVLKEYDRRRRMEALLLSLYYPNDRKLLDYKEWSPPRVQVECPK', 
    'MSIIGATRLQNDKSDTYSAGPCYAGGCSAFTPRGTCGKDWDLGEQTCASG', 
    'MASNTVSAQGGSNRPVRDFSNIQDVAQFLLFDPIWNEQPGSIVPWKMNRE', 
    'MYQAINPCPQSWYGSPQLEREIVCKMSGAPHYPNYYPVHPNALGGAWFDT', 
    'MARPLLGKTSSVRRRLESLSACSIFFFLRKFCQKMASLVFLNSPVYQMSN'
]
queries = [
    'MASNTVSAQGGSNRPVRDFSNIQDVAQFLLFDPIWNEQPG', 
    'MSFKVYDPIAELIATQFPTSNPDLQIINNDVLVVSPHKIT', 
    'MEQVPIKEMRLSDLRPNNKSIDTDLGGTKLVVIGKPGSGK'
]

使用高级的search函数,该函数将内部类包装在一个函数中,以快速运行内存中所有序列的许多对多搜索。它期望序列作为Python字符串的可迭代对象,并产生通过E值和对齐阈值的击中

import pyswrd
for hit in pyswrd.search(queries, targets):
    print(hit.query_index, hit.target_index, hit.score, hit.evalue)

可以向pyswrd.search传递不同的参数,并将它们传递给SWORD筛选器和Opal对齐。例如,要使用PAM70矩阵而不是BLOSUM62以快速模式运行SWORD而不是默认的敏感模式,请使用

for hit in pyswrd.search(queries, targets, scorer_name="PAM70", score_threshold=0, kmer_length=5):
    print(hit.query_index, hit.target_index, hit.score, hit.evalue)

默认情况下支持多线程,使用本地机器上报告的每个CPU的线程,但可以使用threads参数更改

for hit in pyswrd.search(queries, targets, threads=1):
    print(hit.query_index, hit.target_index, hit.score, hit.evalue)

如果愿意自行管理数据或想使用不同的对齐器,也可以直接使用pyswrd.HeuristicFilter类。

⏱️ 基准测试

下表显示了使用196个蛋白质作为查询(uniprot_sprot196.fasta)对内存中预先加载的12,701个蛋白质数据库(uniprot_sprot12071.fasta)运行pyswrd.search的时间

threads=1 线程数=2 线程数=4 线程数=8 线程数=12
最大候选数=10 0.87秒 0.83秒 0.83秒 0.80秒 0.76秒
最大候选数=50 0.98秒 0.91秒 0.98秒 0.97秒 1.04秒
最大候选数=100 1.24秒 1.33秒 1.44秒 1.63秒 1.67秒
最大候选数=500 1.86秒 1.83秒 1.95秒 2.09秒 2.15秒
最大候选数=1000 2.87秒 2.64秒 2.83秒 2.82秒 2.90秒
最大候选数=5000 9.33秒 8.11秒 7.59秒 6.60秒 6.06秒
最大候选数=15000 21.50秒 15.85秒 14.74秒 11.83秒 11.34秒
最大候选数=30000 23.44秒 16.13秒 14.61秒 12.47秒 11.08秒
无过滤(Opal) 31.38秒 23.60秒 19.57秒 15.43秒 14.60秒
BLAST+ (blastp) 7.46秒 4.97秒 4.01秒 3.63秒 3.66秒

max_candidates参数控制SWORD启发式过滤器的严格性,减少了Opal进行的总比对数量,但代价是降低了敏感性(见SWORD补充图S1和S2。)。

SWORD在fast模式下默认使用15,000个候选者,在sensitive模式下默认使用30,000个候选者。这已在包含超过5.4M个序列的NCBI NR数据库上进行基准测试;对于较小数据库或序列冗余较少的数据库,可能可以选择更小的max_candidates值,而不会损失敏感性。

💭 反馈

⚠️ 问题跟踪器

发现了一个错误?有增强请求吗?如果您需要报告或询问,请访问GitHub问题跟踪器。如果您正在提交一个错误,请尽可能提供关于问题的信息,并尝试在一个简单且易于复制的环境中重现相同的错误。

🏗️ 贡献

欢迎贡献!有关更多详细信息,请参阅CONTRIBUTING.md

📋 更新日志

本项目遵循语义版本控制,并提供了一个符合Keep a Changelog格式的更新日志

⚖️ 许可证

本库根据GNU通用公共许可证v3.0提供。SWORD由Robert Vaser编写,并按照GPLv3条款分发。有关更多信息,请参阅vendor/sword/LICENSE。SWORD根据MIT许可证重新分发附加库。

本项目与SWORD作者无任何关联、赞助或支持。它是由Martin Larralde在欧洲分子生物学实验室(EMBL)的Zeller团队攻读博士期间开发的。

📚 参考文献

项目详情


下载文件

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

源代码发行版

pyswrd-0.2.0.tar.gz (114.8 kB 查看哈希值)

上传时间 源代码

构建发行版

pyswrd-0.2.0-pp310-pypy310_pp73-win_amd64.whl (2.3 MB 查看哈希值)

上传时间 PyPy Windows x86-64

pyswrd-0.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ x86-64

pyswrd-0.2.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl (2.3 MB 查看哈希值)

上传时间 PyPy macOS 10.12+ x86-64

pyswrd-0.2.0-pp39-pypy39_pp73-win_amd64.whl (2.3 MB 查看哈希值)

上传时间 PyPy Windows x86-64

pyswrd-0.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ x86-64

pyswrd-0.2.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl (2.3 MB 查看哈希值)

上传时间 PyPy macOS 10.12+ x86-64

pyswrd-0.2.0-pp38-pypy38_pp73-win_amd64.whl (2.3 MB 查看哈希值)

上传于 PyPy Windows x86-64

pyswrd-0.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ x86-64

pyswrd-0.2.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl (2.3 MB 查看哈希值)

上传于 PyPy macOS 10.12+ x86-64

pyswrd-0.2.0-pp37-pypy37_pp73-win_amd64.whl (2.3 MB 查看哈希值)

上传于 PyPy Windows x86-64

pyswrd-0.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ x86-64

pyswrd-0.2.0-pp37-pypy37_pp73-macosx_10_12_x86_64.whl (2.3 MB 查看哈希值)

上传于 PyPy macOS 10.12+ x86-64

pyswrd-0.2.0-cp312-cp312-win_amd64.whl (2.3 MB 查看哈希值)

上传于 CPython 3.12 Windows x86-64

pyswrd-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ x86-64

pyswrd-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl (2.3 MB 查看哈希值)

上传于 CPython 3.12 macOS 10.12+ x86-64

pyswrd-0.2.0-cp311-cp311-win_amd64.whl (2.3 MB 查看哈希值)

上传于 CPython 3.11 Windows x86-64

pyswrd-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

pyswrd-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl (2.3 MB 查看哈希值)

上传于 CPython 3.11 macOS 10.12+ x86-64

pyswrd-0.2.0-cp310-cp310-win_amd64.whl (2.3 MB 查看哈希值)

上传于 CPython 3.10 Windows x86-64

pyswrd-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64

pyswrd-0.2.0-cp310-cp310-macosx_10_12_x86_64.whl (2.3 MB 查看哈希值)

上传于 CPython 3.10 macOS 10.12+ x86-64

pyswrd-0.2.0-cp39-cp39-win_amd64.whl (2.3 MB 查看哈希值)

上传于 CPython 3.9 Windows x86-64

pyswrd-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ x86-64

pyswrd-0.2.0-cp39-cp39-macosx_10_12_x86_64.whl (2.3 MB 查看哈希值)

上传于 CPython 3.9 macOS 10.12+ x86-64

pyswrd-0.2.0-cp38-cp38-win_amd64.whl (2.3 MB 查看哈希值)

上传于 CPython 3.8 Windows x86-64

pyswrd-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ x86-64

pyswrd-0.2.0-cp38-cp38-macosx_10_12_x86_64.whl (2.3 MB 查看哈希值)

上传于 CPython 3.8 macOS 10.12+ x86-64

pyswrd-0.2.0-cp37-cp37m-win_amd64.whl (2.3 MB 查看哈希值)

上传时间 CPython 3.7m Windows x86-64

pyswrd-0.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.9 MB 查看哈希值)

上传时间 CPython 3.7m manylinux: glibc 2.17+ x86-64

pyswrd-0.2.0-cp37-cp37m-macosx_10_12_x86_64.whl (2.3 MB 查看哈希值)

上传时间 CPython 3.7m macOS 10.12+ x86-64

pyswrd-0.2.0-cp36-cp36m-win_amd64.whl (2.3 MB 查看哈希值)

上传时间 CPython 3.6m Windows x86-64

pyswrd-0.2.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.9 MB 查看哈希值)

上传时间 CPython 3.6m manylinux: glibc 2.17+ x86-64

pyswrd-0.2.0-cp36-cp36m-macosx_10_12_x86_64.whl (2.3 MB 查看哈希值)

上传时间 CPython 3.6m macOS 10.12+ x86-64

由以下支持