6 个版本 (破坏性)
0.5.0 | 2024年4月9日 |
---|---|
0.4.0 | 2023年7月21日 |
0.3.0 | 2021年6月15日 |
0.2.1 | 2020年8月4日 |
0.1.0 | 2018年8月17日 |
#666 in 解析器实现
在 vcfverifier 中使用
20KB
284 行
faimm
使用内存映射文件对索引过的 fasta 进行随机访问。
用法
此 crate 通过使用内存映射文件读取序列数据来提供索引过的 fasta 访问。它旨在访问基因组大小 fasta 文件上的序列数据,并基于碱基坐标提供随机访问。由于索引过的 fasta 文件每行使用有限数量的碱基(有时是特定平台的换行符)分隔,因此您不能直接使用 mmap 可用的字节。
使用基于零的碱基坐标的 mmap 视图提供访问。然后可以使用此视图遍历碱基(表示为 u8
)或解析成字符串。还提供简单的 GC 计数。
访问序列数据不需要 IndexedFasta
可变。这使得它很容易共享。
示例
use faimm::IndexedFasta;
let fa = IndexedFasta::from_file("test/genome.fa").expect("Error opening fa");
let chr_index = fa.fai().tid("ACGT-25").expect("Cannot find chr in index");
let v = fa.view(chr_index,0,50).expect("Cannot get .fa view");
//count the bases
let counts = v.count_bases();
//or print the sequence
println!("{}", v.to_string());
局限性
解析器使用简单的 ASCII 掩码(64..128)来允许字符,不应用任何 IUPAC 转换或验证。此范围之外的内容将被静默忽略。这意味着无效的 fasta
也将被解析。存在相应的 .fai
文件提供了有效 fasta 的假设。需要 Rust >=1.64
替代方案
Rust-bio 提供了合格的索引过的 fasta 读取器。主要区别在于它有一个内部缓冲区,因此在执行读取操作时需要可变。faimm 也更快。如果您想要基于记录的访问(没有 .fai 索引文件)rust-bio 或 seq_io 提供了这种访问。
性能
在人类参考(GRCh38)上计算外显子组目标区域(231_410 个区域)的 GC 含量大约需要 0.7 秒(暖缓存),略快于 bedtools nuc(0.9s 可能是一个更可靠的实现)和 rust-bio(1.3s 与示例相同的实现)。一些测试表明,使用 SIMD 也可以提高计数性能,但尚未发布。
依赖关系
~1MB
~17K SLoC