#min-hash #生物信息学 #宏基因组学 #jaccard #包含

bin+lib jam-rs

这只是 Rust 中另一个 (基因组) minhash (Jam) 实现

2 个版本

0.1.0-beta.22023年11月22日

81生物学

MIT 许可证

5.5MB
1.5K SLoC

Rust License Crates.io Codecov Dependency status

jam-rs

这只是另一个 minhash (jam) 实现。一个高性能的 minhash 变体,可以在非常短的时间内筛选极大型(宏基因组)数据集。实现了 sourmash 中描述的 ScaledMinHash / FracMinHash 算法的一部分。

与传统的实现(如 sourmashmash)不同,这个版本试图通过(可选地)引入对较小序列的偏向性,来估计小序列在大集合中的包含性。这旨在在几秒或几分钟内筛选数TB的数据。

安装

通过 crates.io 发布预发布版来安装它(您需要安装 cargorust-toolchain,最简单的方法是通过 rustup.rs

cargo install jam-rs

如果您想要最新的开发版本,可以通过 git 安装

cargo install --git https://github.com/St4NNi/jam-rs

比较

  • 多种算法:xxhash3ahash-fallback(对于 kmer < 32)和传统的 murmurhash3
  • 没有 jaccard 相似度,因为当比较小嵌入序列与大集合时,这没有意义
  • 额外的过滤和草图选项,以提高大型组装宏基因组集中小序列的特异性和敏感性

缩放方法

多种不同的缩放方法

  • FracMinHash (fscale): 将哈希空间限制在 u64::MAX / fscale 的(较低)最大分数内
  • KmerCountScaling (kscale): 将整体最大哈希数限制在 kscale 的倍数上 -> 10 表示存储了所有 k-mer 的 1/10
  • MinMaxAbsoluteScaling (nscale): 限制每个序列记录的最小或最大哈希数

如果同时使用 KmerCountScalingMinMaxAbsoluteScaling,将保证每个序列记录的最小哈希数量。FracMinHashKmerCountScaling 生成类似的结果,第一个主要用于 sourmash 兼容性。

用法

$ jam
Just another (genomic) minhasher (jam), obviously blazingly fast

Usage: jam [OPTIONS] <COMMAND>

Commands:
  sketch  Sketch one or more files and write result to output file (or stdout)
  merge   Merge multiple input sketches into a single sketch
  dist    Estimate distance of a (small) sketch against a subset of one or more sketches as database. Requires all sketches to have the same kmer size
  help    Print this message or the help of the given subcommand(s)

Options:
  -t, --threads <THREADS>  Number of threads to use [default: 1]
  -f, --force              Overwrite output files
  -h, --help               Print help (see more with '--help')
  -V, --version            Print version

草图

最简单的方法是使用 jam sketch 命令。该命令接受一个或多个输入文件(fastx / fastx.gz)或一个包含完整输入文件列表的 .list 文件。并将所有输入草图到特定的输出草图文件。

$ jam sketch
Sketch one or more files and write the result to an output file (or stdout)

Usage: jam sketch [OPTIONS] [INPUT]...

Arguments:
  [INPUT]...  Input file(s), one directory or one file with list of files to be hashed

Options:
  -o, --output <OUTPUT>        Output file
  -k, --kmer-size <KMER_SIZE>  kmer size, all sketches must have the same size to be compared [default: 21]
      --fscale <FSCALE>        Scale the hash space to a minimum fraction of the maximum hash value (FracMinHash)
      --kscale <KSCALE>        Scale the hash space to a minimum fraction of all k-mers (SizeMinHash)
  -t, --threads <THREADS>      Number of threads to use [default: 1]
  -f, --force                  Overwrite output files
      --nmin <NMIN>            Minimum number of k-mers (per record) to be hashed, bottom cut-off
      --nmax <NMAX>            Maximum number of k-mers (per record) to be hashed, top cut-off
      --format <FORMAT>        Change to other output formats [default: bin] [possible values: bin, sourmash]
      --algorithm <ALGORITHM>  Change the hashing algorithm [default: default] [possible values: default, ahash, xxhash, murmur3]
      --singleton              Create a separate sketch for each sequence record
  -h, --help                   Print help

距离

计算一个或多个输入与大量数据库草图之间的距离。可选地指定匹配 kmers 的最小百分比截止值。如果不指定输出,则将结果打印到 stdout。

$ jam dist
Estimate containment of a (small) sketch against a subset of one or more sketches as database. Requires all sketches to have the same kmer size

Usage: jam dist [OPTIONS] --input <INPUT>

Options:
  -i, --input <INPUT>        Input sketch or raw file
  -d, --database <DATABASE>  Database sketch(es)
  -o, --output <OUTPUT>      Output to file instead of stdout
  -c, --cutoff <CUTOFF>      Cut-off value for similarity [default: 0.0]
  -t, --threads <THREADS>    Number of threads to use [default: 1]
  -f, --force                Overwrite output files
      --stats                Use the Stats params for restricting results
      --gc-lower <GC_LOWER>  Use GC stats with an upper bound of x% (gc_lower and gc_upper must be set)
      --gc-upper <GC_UPPER>  Use GC stats with an lower bound of y% (gc_lower and gc_upper must be set)
  -h, --help                 Print help

合并

将多个草图合并成一个大的草图。

$ jam merge
Merge multiple input sketches into a single sketch

Usage: jam merge [OPTIONS] --output <OUTPUT> [INPUTS]...

Arguments:
  [INPUTS]...  One or more input sketches

Options:
  -o, --output <OUTPUT>    Output file
  -t, --threads <THREADS>  Number of threads to use [default: 1]
  -f, --force              Overwrite output files
  -h, --help               Print help

许可

本项目采用 MIT 许可证。有关更多信息,请参阅 LICENSE 文件。

免责声明

jam-rs 仍在积极开发中,尚未准备好用于生产。使用风险自负。

致谢

本工具深受 finch-rs/许可sourmash/许可 的启发。如果您需要一个更成熟的生态系统,具有经过良好测试的哈希函数和更多功能,请查看它们。

依赖关系

~7–11MB
~215K SLoC