2个版本
0.1.1 | 2024年6月19日 |
---|---|
0.1.0 | 2024年6月11日 |
#88 在 生物学 中
用于 diced-py
1.5MB
836 行
🔪🧅 Diced
MinCED算法的Rust重实现,用于检测环境数据中的CRISPR实例。
🗺️ 概述
MinCED是由Connor T. Skennerton开发的一种方法,用于识别孤立和宏基因组组装基因组中的成簇规律间隔短回文重复序列(CRISPRs)。它源于CRISPR识别工具[1]。它使用快速扫描算法来识别候选重复序列,并结合扩展步骤来查找基因组中具有CRISPR重复序列的最大覆盖区域。
Diced是MinCED方法的Rust重实现,以原始Java代码为参考。它产生与MinCED完全相同的结果,修正了一些错误(minced#35),并且速度更快。Diced实现作为Rust库提供,以方便使用。
这是Rust版本,还有一个Python包可供使用。
📋 特性
- 库接口:Rust实现被编写为库,以方便在其他项目中重用。它用于使用PyO3实现Python库,以生成本地扩展。
- 零拷贝:当提供简单的
str
引用时,迭代候选CRISPRs的Scanner
是零拷贝,但它也支持智能指针后面的数据,如Rc<str>
或Arc<str>
。 - 快速字符串匹配:Java 实现使用手写的 Boyer-Moore 算法[2],而 Rust 实现使用标准库中的
str::find
方法,该方法实现了 双向算法[3]。此外,可以使用memchr
crate 作为memmem
函数的快速 SIMD 兼容实现。
💡 示例
Diced 支持字符串格式的任何序列。
let mut reader = std::fs::File::open("tests/data/Aquifex_aeolicus_VF5.fna")
.map(std::io::BufReader::new)
.map(noodles_fasta::Reader::new)
.unwrap();
let record = reader.records().next().unwrap().unwrap();
let seq = std::str::from_utf8(record.sequence().as_ref()).unwrap();
for crispr in diced::Scanner::new(&seq) {
println!("{} to {}: {} repeats", crispr.start(), crispr.end(), crispr.len());
for repeat in crispr.repeats() {
println!(" - at {}: {}", repeat.start(), repeat.as_str());
}
}
💭 反馈
⚠️ 问题跟踪器
发现了一个错误?有增强请求吗?如果您需要报告或询问,请访问 GitHub 问题跟踪器。如果您正在报告错误,请尽可能提供有关问题的信息,并尝试在简单、易于复现的情况下重现相同的错误。
📋 更新日志
此项目遵循 语义版本控制,并提供符合 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 recognition tool (CRT): a tool for automatic detection of clustered regularly interspaced palindromic repeats'. BMC bioinformatics, 8, 209. PMID:17577412 doi:10.1186/1471-2105-8-209.
- Boyer, R. S. 和 Moore, J. S. (1977). 'A fast string searching algorithm'. Commun. ACM 20, 10 762–772. doi:10.1145/359842.359859
- Crochemore, M. & Perrin, D. (1991). 'Two-way string-matching'. J. ACM 38, 3, 650–674. doi:10.1145/116825.116845