2 个版本
0.1.1 | 2024年6月19日 |
---|---|
0.1.0 | 2024年6月11日 |
#286 in 生物学
475KB
335 行
🔪🧅 Diced
A Rust 重新实现 MinCED 算法,以在环境数据中检测 CRISPRs 实例。
🗺️ 概述
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
是零拷贝的,但它也支持智能指针后面的数据,如Rc
或Arc
。 - 快速字符串匹配:Java实现使用手写实现的Boyer-Moore算法[2],而Rust实现使用标准库中的
str::find
方法,该方法是双向算法[3]的实现。此外,可以使用memchr
crate作为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