#纠错 #读取 #长读 #基因组学 #bwt #原始 #fm-index

bin+lib fmlrc

FM-index 长读校正器 - Rust 实现

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 次

MIT/Apache

155KB
2.5K SLoC

Crates.io Crates.io Crates.io Build status

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格式。

需要考虑的选项

  1. -h - 查看完整选项列表并退出
  2. -k--K - 设置要使用的k-mer大小,默认为[21, 59];所有值在校正之前按升序排序
  3. -t--threads - 要使用的校正线程数(默认:1)
  4. -C--cache_size - 预计算的序列长度(即C-mers);这将通过减少查询的CPU时间O(C)来减少,但增加缓存内存使用量O(6^C);默认的8使用约25MB;如果内存不是问题,考虑使用10,使用约1GB的缓存占用(或如果内存真的不是问题,更大)

FMLRC v2的核心差异

  1. Rust中实现,而不是C++ - 这带来了Rust的所有好处,包括cargo,例如轻松安装二进制文件以及支持结构/函数和文档
  2. 无限制的k/K参数 - FMLRC v1仅允许为k设置1或2个大小;FMLRC v2可以根据需要设置任意多次,增加CPU时间(例如,使用k=[21, 59, 79])的3次校正)
  3. 调用缓存 - FMLRC v2预先计算了给定大小的所有k-mers。这通过减少对FM索引的调用显著减少了运行时间。
  4. 输入处理 - 由于needletail,未校正的读取数据可以是FASTA/FASTQ格式,可能是或可能不是gzip压缩的。
  5. 单元测试 - 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许可证定义的,您提交的任何旨在包含在本作品中的有意贡献,应如上所述双重许可,不附加任何额外条款或条件。

依赖

约15–26MB
~371K SLoC