2 个版本
0.1.1 | 2023年4月9日 |
---|---|
0.1.0 | 2023年2月7日 |
#122 in 生物学
每月 396 次下载
在 2 个包中使用(通过 galah)
4.5MB
4.5K SLoC
skani - 为 MAGs 和数据库提供准确、快速的核苷酸身份计算
简介
skani 是一个程序,用于从 DNA 序列(contigs/MAGs/基因组)中计算平均核苷酸身份(ANI),ANI > ~80%。
skani 使用近似映射方法(无需基对级对齐)来获取 ANI。它的速度比基于 BLAST 的方法快得多,几乎一样准确。skani 提供以下功能:
-
对 MAGs 准确的 ANI 计算。skani 对不完整和中质量的宏基因组组装基因组(MAGs)是准确的。草图方法(例如 Mash),可能会低估不完整 MAGs 的 ANI。
-
对齐分数结果。skani 输出基因组对齐的分数,而草图方法则不会。
-
快速计算。索引/草图方法比 Mash 快 3 倍左右,而查询速度比 FastANI 快约 25 倍(但比 Mash 慢)。
-
高效数据库搜索。使用单个处理器和约 6 GB 的 RAM 查询 >65000 个原核生物基因组的预处理的数据库只需几秒钟。从基因组序列构建数据库需要几分钟到一小时。
安装
选项 1:从源码构建
需求
- rust 编程语言和相关工具(如 cargo)是必需的,并假定已在 PATH 中。
- 一个 C 编译器(例如 GCC)
- make
构建需要几分钟(取决于核心数)。
git clone https://github.com/bluenote-1577/skani
cd skani
# If default rust install directory is ~/.cargo
cargo install --path . --root ~/.cargo
skani dist refs/e.coli-EC590.fasta refs/e.coli-K12.fasta
# If ~/.cargo doesn't exist use below commands instead
#cargo build --release
#./target/release/skani dist refs/e.coli-EC590.fasta refs/e.coli-K12.fasta
选项 2:预构建的 x86-64 Linux 静态编译的可执行文件
我们为 x86-64 Linux 系统提供预构建的静态编译可执行文件。也就是说,如果您在使用 x86-64 Linux 系统,您可以只需下载二进制文件并运行它,而无需安装任何东西。
要使用 skani 的最新版本
wget https://github.com/bluenote-1577/skani/releases/download/latest/skani
chmod +x skani
./skani -h
注意:二进制文件是用不同的库集编译的(musl 而不是 glibc),可能会影响性能(略有)。可能不是什么大问题。
有关获取特定版本的 skani 的信息,请参阅 发布 页面。
选项 3:Conda(conda 版本:0.1.0 - 源版本:0.1.0)
conda install -c bioconda skani
注意:skani 正在快速开发中,conda 版本可能已过时;请参阅上方的版本状态。
快速入门
# compare two genomes for ANI.
# all options take -t for multi-threading.
skani dist genome1.fa genome2.fa -t 5
# compare multiple genomes
skani dist -q query1.fa query2.fa -r reference1.fa reference2.fa -o all-to-all_results.txt
# construct database and do memory-efficient search
skani sketch genomes_to_search/* -o database
skani search query1.fa query2.fa ... -d database
# use sketch from "skani sketch" output as drop-in replacement
skani dist database/query.fa.sketch database/ref.fa.sketch
# construct distance matrix for all genomes in folder
skani triangle genome_folder/* > skani_ani_matrix.txt
# we provide a script in this repository for clustering/visualizing distance matrices.
# requires python3, seaborn, scipy/numpy, and matplotlib.
python scripts/clustermap_triangle.py skani_ani_matrix.txt
教程和手册
skani 基本使用信息
有关使用特定 skani 子命令的更多信息,请参阅上方的指南。
skani 教程
skani 高级使用信息
有关如何优化 skani 的灵敏度/速度等主题的更多信息,请参阅上方的高级使用指南。
- 优化 skani 的灵敏度/速度
- 使用 skani 处理长读长
- 使 skani 在大数据集上更节省内存
输出
如果两个基因组的结果对齐分数小于 15%,则不输出。
实际上,这意味着只有 ANI 大于 ~82% 的结果才能可靠地输出(使用默认参数)。有关如何比较 ANI 较低的基因组的信息,请参阅skani 高级使用指南。
search
和 dist
的默认输出如下
Ref_file Query_file ANI Align_fraction_ref Align_fraction_query Ref_name Query_name
refs/e.coli-EC590.fasta refs/e.coli-K12.fasta 99.39 93.95 93.37 NZ_CP016182.2 Escherichia coli strain EC590 chromosome, complete genome NC_007779.1 Escherichia coli str. K-12 substr. W3110, complete sequence
- Ref_file:参考文件的名称。
- Query_file:查询文件的名称。
- ANI:ANI。
- Aligned_fraction_query/reference:查询/参考对齐覆盖的分数。
- Ref/Query_name:参考/查询文件中第一条记录的 ID。
引用
Jim Shaw 和 Yun William Yu. 通过 skani 的稀疏链式连接快速且稳健的宏基因组序列比较。bioRxiv(2023)。https://doi.org/10.1101/2023.01.18.524587。已提交。
更新
v0.1.0 版本发布 - 2023-02-07。
我们在预印本修订版的新的实验中添加了新的实验(扩展数据图 11-14)。我们表明 skani 与 MUMmer 有很好的 AF 相关性,并且它对简单的真核 MAGs 工作得相当不错,特别是使用 --slow
选项(见下文)。
主要
- 添加 ANI 偏差校正 - skani 现在使用一个基于 MAGs 训练的回归模型的偏差校正步骤,以给出更准确的 ANI。旧版本给出了稳健的,但略微高估的 ANI,特别是在 95-97% 的范围内。偏差校正默认启用,但可以使用
--no-learned-ani
禁用。 - 更准确的对齐分数 - 将链式算法更改为提供更准确的对齐分数(AF)估计。之前的版本有更大的变异性,并且低估了某些组装的对齐分数。
次要
- 小型 contig/基因组默认值得到改进 - 应该更敏感,以便它们不会默认被过滤。
- 重复 k-mer 遮蔽得到改进 - 更智能的设置,应该对真核基因组更有效;对原核基因组影响不大。
- 添加
--fast
和--slow
模式 - 分别是-c 200
和-c 30
的别名。 - 更多的非 x86_64 构建应该工作 - 之前有一个错误,导致 skani 在非 x86_64 架构上无法正常工作。现在它似乎至少可以在 ARM64 架构上成功构建。
功能请求,问题
skani 由我(Jim Shaw)积极开发。我非常愿意满足简单的功能请求(不同类型的输出等)。请随意在我的 github 存储库上打开一个带有功能请求的问题。如果您发现任何错误,请打开一个问题或给我发电子邮件(在我的网站上)。
从Rust或Python调用skani
Rust API
如果您想将skani作为Rust库使用,请查看这里的最小示例:https://github.com/bluenote-1577/skani-lib-example。当前文档非常简略(https://docs.rs/skani/0.1.0/skani/),我无法保证API的稳定性。
Python绑定
如果您想从Python调用skani,请参阅由Martin Larralde编写的pyskani Python接口和skani绑定。注意:我本人未参与pyskani项目,不对输出的正确性提供保证。
依赖项
约20MB
约358K SLoC