2 个版本
0.1.0-beta.2 | 2023年11月22日 |
---|
81 在 生物学
5.5MB
1.5K SLoC
jam-rs
这只是另一个 minhash (jam) 实现。一个高性能的 minhash 变体,可以在非常短的时间内筛选极大型(宏基因组)数据集。实现了 sourmash 中描述的 ScaledMinHash / FracMinHash 算法的一部分。
与传统的实现(如 sourmash 或 mash)不同,这个版本试图通过(可选地)引入对较小序列的偏向性,来估计小序列在大集合中的包含性。这旨在在几秒或几分钟内筛选数TB的数据。
安装
通过 crates.io 发布预发布版来安装它(您需要安装 cargo
和 rust-toolchain
,最简单的方法是通过 rustup.rs)
cargo install jam-rs
如果您想要最新的开发版本,可以通过 git 安装
cargo install --git https://github.com/St4NNi/jam-rs
比较
- 多种算法:xxhash3、ahash-fallback(对于 kmer < 32)和传统的 murmurhash3
- 没有 jaccard 相似度,因为当比较小嵌入序列与大集合时,这没有意义
- 额外的过滤和草图选项,以提高大型组装宏基因组集中小序列的特异性和敏感性
缩放方法
多种不同的缩放方法
- FracMinHash (
fscale
): 将哈希空间限制在u64::MAX
/fscale
的(较低)最大分数内 - KmerCountScaling (
kscale
): 将整体最大哈希数限制在kscale
的倍数上 -> 10 表示存储了所有 k-mer 的 1/10 - MinMaxAbsoluteScaling (
nscale
): 限制每个序列记录的最小或最大哈希数
如果同时使用 KmerCountScaling
和 MinMaxAbsoluteScaling
,将保证每个序列记录的最小哈希数量。FracMinHash
和 KmerCountScaling
生成类似的结果,第一个主要用于 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