7 个版本

0.0.11 2024 年 5 月 13 日
0.0.10 2023 年 12 月 7 日
0.0.9 2023 年 6 月 7 日
0.0.8 2023 年 4 月 18 日
0.0.5 2022 年 3 月 21 日

#36 in 生物学

27 每月下载量
用于 2 crates

MIT/ApacheGPL-2.0 许可协议

585KB
9K SLoC

一些 Kmer 计数工具

该软件包主要致力于作为库用于 crate gsearch,用于分类原核基因组。

它提供以下工具

  • 32 基因的上至 32 个 Kmers 的简单表示,以 2 或 4 位压缩表示存储在 u32 或 u64 中,以简化效率和有效性。

  • 带有 Bloom 和 Cuckoo 过滤器的基本 Kmer 线程计数工具。

  • 使用最新的各种敏感哈希算法(请参阅 sketching 模块和 crate probminhash)对序列进行草图绘制。

  • 一个质量服务器。二进制可执行文件 qualityloader 从 Fastq 文件中加载质量并作为服务器运行,响应基本请求,如返回给定序列号的质量序列,或序列的块,或简单地返回给定其在序列中的排名的基。

  • 一些基本统计信息输出,例如基分布、读取长度分布。

它有一个 Julia 伴侣,提供对输出统计信息的交互式访问或对基和质量的序列的交互式检查。

Kmer 压缩和计数

基目前以 2 位编码。
Kmer 可以存储 32 位或 64 位字,从而以 2 位字母表提供压缩表示,最多 32 个基因。
Kmer 和压缩 Kmer 分别由 trait KmerTCompressedKmerT 表示。Kmer 与其在计数方法中的反向互补序列相关联。

Kmer 计数是多线程的,并在 Cuckoo 过滤器中过滤唯一的 kmer 以节省内存。唯一的 kmers 以坐标(序列和序列中的位置)的形式输出到单独的文件中。存储在 Bloom 过滤器中的多个 kmers 以它们的重复次数输出到另一个文件中。请参阅 kmercount 模块。

数据的哈希和草图绘制

可以通过计算序列之间的共同 Kmers 来估计序列之间的相似性

  • 使用 Ertl 论文中描述的 superminhash、probminhash 和 hyperloglog 算法,如 probminhash 中实现。
  • 来自Shrivastava的优化致密化方法(pmlr-2017)或Mai等人提出的“反向”优化致密化方法(pmlr-2020)
  • 提供了带有概率Jaccard指数的算法Probminhash系列,考虑到了Kmer的多重性。对于非常长的序列,如果保留大型Kmer的计数过于占用内存,可以使用SetSketch(基于HyperLogLog的sketcher)或SuperMinHash算法,这些算法也包含在probminhash crate中,并使用通常的Jaccard度量。

  • probminhash算法用于对数据文件进行完整的光谱绘制,其中每个序列的签名都存放在一个文件中。这个文件可以重新处理以检查基于概率Jaccard指数的读取邻近区域。参见模块seqsketchjaccard.rsseqblocksketch
    例如,在一个8核(超线程i7 @2.3Ghz)笔记本电脑上,读取、生成8个基Kmer并绘制746333个长读取(来自4.38 Gbases ONT fastq文件,Cf FAB49164_rel3)需要51秒,每个读取请求200个sketch。

  • 获得的签名可以发送到Ann以根据Jaccard概率度量研究读取邻近性。请参阅本crate中的(最小)可执行文件datasketcher和crate hnsw_rs

一些其他标准工具

  • Nthash:这是一个递归哈希,在以下文献中描述:"ntHash:递归核苷酸哈希"
    Mohamadi Chu Birol BioInformatics 2016。它被实现在我们所有的压缩kmer类型上。

一个最小的模块aautils

此模块提供了氨基酸序列的非压缩表示,以及压缩Kmer的生成(最多12个氨基酸,5位基编码在一个u64中)。
此模块目前是最小的。它以与DNA序列相同的方式绘制AA序列的光谱。

有关序列的一些基本统计信息

  1. 读取长度分布。
    一个文件,给出了长度函数中的读取数量。

  2. 基分布。
    一个矩阵(100, 4),给出了行i和列j(1,2,3,4)中的读取数量,其中基(a,c,g,t)对应于列j的顺序,以百分比i出现。

此文件可以通过Julia包Genomics重新加载(cf BaseDistribution.jl)

质量

质量被重新映射到[0..7]范围内的值,以便它们只需要3位存储空间,并存储在小波矩阵中。映射是非均匀的,将范围[0x25,0x37]映射到[1,6]。
数据的质量部分存储在一个处理质量请求的进程中

质量服务器

服务器通过以下命令在服务器机器上启动
qualityloader -f filename [ -p portnum] [ --wavelet].

服务器默认监听端口4766,选项"--wavelet"请求波束压缩。

安装

只需从crates.io下载。qualityloader目标依赖于由witzmq功能提供的libzmq(和libsodium)。要获取整个编译版本,请使用cargo build --release --features="withzmq

依赖项

~18–47MB
~782K SLoC