9 个版本
0.1.8 | 2022年7月19日 |
---|---|
0.1.7 | 2022年4月8日 |
0.1.5 | 2021年8月25日 |
0.1.4 | 2021年2月26日 |
0.1.1 | 2020年7月7日 |
#107 in 生物学
每月下载 24 次
155KB
2.5K SLoC
rust-fmlrc
此仓库包含 FMLRC v2 的源代码,基于原始 FMLRC 使用的相同方法。在基准测试中,FMLRC v1 和 v2 之间的结果几乎相同,但测试表明 v2 相比 v1 使用了约 50% 的运行时间和 CPU 时间。
安装
所有安装选项都假设您已安装 Rust 以及 Rust 的 cargo
包管理器。
从 Cargo
cargo install fmlrc
fmlrc2 -h
fmlrc2-convert -h
从 GitHub
git clone https://github.com/HudsonAlpha/rust-fmlrc.git
cd rust-fmlrc
#testing optional, some tests will fail if ropebwt2 is not installed or cannot be found on PATH
cargo test --release
cargo build --release
./target/release/fmlrc2 -h
./target/release/fmlrc2-convert -h
使用方法
BWT 构建
msbwt2 构建方法
对于大多数用户,建议使用 msbwt2 包来 构建 BWT。这种方法通常更简单(只需一个命令)且更灵活(一次接受 FASTQ 和 FASTA 文件)。虽然它在内存和 CPU 使用方面通常与 ropebwt2
构建方法(见下文)具有竞争力,但它没有并行化并且通常运行速度较慢。
ropebwt2 构建方法
如果您熟悉更复杂的 shell 命令,则可以使用 ropebwt2
来构建 BWT。
对于 大多数 短读数据集,这种方法比 msbwt2-build
更快,但更复杂(需要多个管道命令)且灵活性较差(以下示例中固定为 FASTQ)。给定一个或多个带有额外标签的准确读取的 FASTQ 文件(reads.fq.gz
,标签为 [reads2.fq.gz ...]
),您可以使用此包中的以下命令在 comp_msbwt.npy
创建 BWT。请注意,此命令需要安装 ropebwt2 可执行文件
gunzip -c reads.fq.gz [reads2.fq.gz ...] | \
awk 'NR % 4 == 2' | \
sort | \
tr NT TN | \
ropebwt2 -LR | \
tr NT TN | \
fmlrc2-convert comp_msbwt.npy
注意:如果您 仅 使用 BWT 进行校正,则可以删除上述命令中的 sort
。这将显著减少构建时间,但会丢失 BWT 的读取恢复属性。
校正
假设已构建准确的读取BWT(comp_msbwt.npy
)并且存在未校正的读取数据(fasta/fastq,gzip可选,uncorrected.fq.gz
),调用FMLRC v2相当简单
fmlrc2 [OPTIONS] <comp_msbwt.npy> <uncorrected.fq.gz> <corrected_reads.fa>
目前,仅支持输出读取数据的未压缩FASTA格式。
需要考虑的选项
-h
- 查看完整选项列表并退出-k
,--K
- 设置要使用的k-mer大小,默认为[21, 59]
;所有值在校正之前按升序排序-t
,--threads
- 要使用的校正线程数(默认:1)-C
,--cache_size
- 预计算的序列长度(即C-mers);这将通过减少查询的CPU时间
O(C)
来减少,但增加缓存内存使用量O(6^C)
;默认的8
使用约25MB;如果内存不是问题,考虑使用10
,使用约1GB的缓存占用(或如果内存真的不是问题,更大)
FMLRC v2的核心差异
- 在Rust中实现,而不是C++ - 这带来了Rust的所有好处,包括
cargo
,例如轻松安装二进制文件以及支持结构/函数和文档 - 无限制的
k
/K
参数 - FMLRC v1仅允许为k
设置1或2个大小;FMLRC v2可以根据需要设置任意多次,增加CPU时间(例如,使用k=[21, 59, 79]
)的3次校正) - 调用缓存 - FMLRC v2预先计算了给定大小的所有k-mers。这通过减少对FM索引的调用显著减少了运行时间。
- 输入处理 - 由于needletail,未校正的读取数据可以是FASTA/FASTQ格式,可能是或可能不是gzip压缩的。
- 单元测试 - FMLRC v2通过标准的Rust测试框架进行单元测试(即
cargo test
)
基准测试
到目前为止,所有基准测试都集中在相对较小的E. coli数据集上,以验证正确性。此数据集的文件可以在原始的fmlrc示例中找到。用于fmlrc v1和fmlrc v2的BWT和未校正长读取文件完全相同。ELECTOR用于评估结果。所有fmlrc执行都是在配备Apple M1 Pro处理器的Macbook Pro上运行的(使用8个线程/进程),具有16GB的RAM。使用Mac OSX time
收集运行时间。除了FMLRC v2中的-C 10
之外,所有参数都设置为默认值。
以下表格总结了结果。实际的修正几乎完全相同(总结指标中没有反映出的细微差异)。然而,从实时和CPU时间角度考虑,FMLRC v2的运行时间不到一半。虽然没有明确测量,但FMLRC v2由于10-mer缓存(-C 10
),额外使用了约1GB的内存。
指标 | FMLRC v1.0.0 | FMLRC2 v0.1.6(《-C 10》) | FMLRC2 v0.1.7(《-C 10》) |
---|---|---|---|
召回率 | 0.9830 | 0.9830 | 0.9830 |
精确度 | 0.9821 | 0.9821 | 0.9821 |
实时时间 | 3m38.067s | 1m24.219s | 1m14.720s |
CPU时间 | 27m23.652s | 8m49.680s | 8m15.823s |
参考
FMLRC v2目前没有预印本或论文。如果您使用FMLRC v2,请引用FMLRC v1的论文
王,杰里米·R. 和 哈尔特,詹姆斯 和 勒纳德,伦纳德 和 琼斯,科宾·D. FMLRC:使用FM索引的混合长读错误纠正。BMC生物信息学,2018。19 (1) 50。
许可证
根据您的选择,许可协议为以下之一
- Apache许可证,版本2.0(《LICENSE-APACHE》或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(《LICENSE-MIT》或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,您提交的任何旨在包含在本作品中的有意贡献,应如上所述双重许可,不附加任何额外条款或条件。
依赖
约15–26MB
~371K SLoC