2 个版本

0.1.1 2024年6月19日
0.1.0 2024年6月11日

#286 in 生物学

GPL-3.0-or-later

475KB
335

🔪🧅 Diced Star me

A Rust 重新实现 MinCED 算法,以在环境数据中检测 CRISPRs 实例。

Actions Coverage License PyPI Bioconda AUR Wheel Python Versions Python Implementations Source GitHub issues Docs Changelog Downloads

🗺️ 概述

MinCED 是由 Connor T. Skennerton 开发的一种方法,用于在分离和宏基因组组装基因组中识别 Clustered Regularly Interspaced Short Palindromic Repeats (CRISPRs)。它源于 CRISPR 识别工具 [1]。它使用快速扫描算法来识别候选重复序列,并结合扩展步骤来找到基因组中具有 CRISPR 重复序列的最大覆盖区域。

Diced 是 MinCED 方法的 Rust 重新实现,以原始 Java 代码为参考。它产生与 MinCED 完全相同的结果,修复了一些错误,并且运行速度更快。Diced 实现作为 Rust 库提供,方便使用。

这是 Python 版本,同时还有一个可用的 Rust crate

📋 特性

  • 库接口:Rust 实现作为库编写,以促进在其他项目中的重用。它用于使用 PyO3 实现 Python 库并生成本地扩展。
  • 单一依赖:Pyrodigal 以 Python 包的形式分发,因此您可以将它作为依赖项添加到您的项目中,无需担心 Prodigal 二进制文件是否存在于最终用户机器上。
  • 零拷贝:如果提供简单的 str 引用,则遍历候选 CRISPRs 的 Scanner 是零拷贝的,但它也支持智能指针后面的数据,如 RcArc
  • 快速字符串匹配:Java实现使用手写实现的Boyer-Moore算法[2],而Rust实现使用标准库中的str::find方法,该方法是双向算法[3]的实现。此外,可以使用memchrcrate作为memmem函数的快速SIMD实现。

💡 示例

Diced支持字符串格式的任何序列。

import Bio.SeqIO
import diced

record = Bio.SeqIO.read("diced/tests/data/Aquifex_aeolicus_VF5.fna", "fasta")
sequence = str(record.seq)

for crispr in diced.scan(sequence):
    print(
        crispr.start,
        crispr.end,
        len(crispr.repeats),
        crispr.repeats[0],
    )

💭 反馈

⚠️ 问题跟踪器

发现了一个bug?有一个增强请求吗?如果您需要报告或询问某事,请前往GitHub问题跟踪器。如果您正在提交一个bug,请尽量提供尽可能多的有关问题的信息,并尝试在简单、易于复现的情况下重现相同的bug。

📋 更新日志

本项目遵循语义版本控制,并提供了更新日志,该日志遵循Keep a Changelog格式。

⚖️ 许可证

本库提供开源GPLv3许可证,或更高版本。本实现代码源自MinCED源代码,同样在GPLv3下可用。

本项目与原始MinCED作者没有任何关联、赞助或其它形式的认可。它是由Martin Larralde在他的博士项目期间在莱顿大学医学中心Zeller团队开发的。

📚 参考文献

  • Bland, C.,Ramsey, T. L.,Sabree, F.,Lowe, M.,Brown, K.,Kyrpides, N. C.,& Hugenholtz, P. (2007). 'CRISPR识别工具(CRT):一种用于自动检测成簇规律间隔回文重复序列的工具'. 生物信息学杂志,8,209. PMID:17577412 doi:10.1186/1471-2105-8-209.
  • Boyer, R. S. 和 & Moore, J. S. (1977). '快速字符串搜索算法'. ACM通讯,20,10 762–772. doi:10.1145/359842.359859
  • Crochemore, M. & Perrin, D. (1991). '双向字符串匹配'. J. ACM 38, 3, 650–674. doi:10.1145/116825.116845

依赖项

~5–10MB
~75K SLoC