#ani #nucleotide #identity #calculations #accurate #sequences #genomes

bin+lib skani

skani 是一种用于计算宏基因组序列(如宏基因组组装基因组(MAGs))之间 ANI 的快速工具。它非常快,对不完整和碎片化具有很强的鲁棒性,能够提供准确的 ANI 估计。

2 个版本

0.1.1 2023年4月9日
0.1.0 2023年2月7日

#122 in 生物学

Download history 15/week @ 2024-03-10 13/week @ 2024-03-17 2/week @ 2024-03-24 33/week @ 2024-03-31 1/week @ 2024-04-07 11/week @ 2024-04-14 2/week @ 2024-04-21 6/week @ 2024-04-28 12/week @ 2024-05-19 13/week @ 2024-05-26 8/week @ 2024-06-02 371/week @ 2024-06-09 14/week @ 2024-06-16 1/week @ 2024-06-23

每月 396 次下载
2 个包中使用(通过 galah

MIT/Apache

4.5MB
4.5K SLoC

skani - 为 MAGs 和数据库提供准确、快速的核苷酸身份计算

简介

skani 是一个程序,用于从 DNA 序列(contigs/MAGs/基因组)中计算平均核苷酸身份(ANI),ANI > ~80%。

skani 使用近似映射方法(无需基对级对齐)来获取 ANI。它的速度比基于 BLAST 的方法快得多,几乎一样准确。skani 提供以下功能:

  1. 对 MAGs 准确的 ANI 计算。skani 对不完整和中质量的宏基因组组装基因组(MAGs)是准确的。草图方法(例如 Mash),可能会低估不完整 MAGs 的 ANI。

  2. 对齐分数结果。skani 输出基因组对齐的分数,而草图方法则不会。

  3. 快速计算。索引/草图方法比 Mash 快 3 倍左右,而查询速度比 FastANI 快约 25 倍(但比 Mash 慢)。

  4. 高效数据库搜索。使用单个处理器和约 6 GB 的 RAM 查询 >65000 个原核生物基因组的预处理的数据库只需几秒钟。从基因组序列构建数据库需要几分钟到一小时。

安装

选项 1:从源码构建

需求

  1. rust 编程语言和相关工具(如 cargo)是必需的,并假定已在 PATH 中。
  2. 一个 C 编译器(例如 GCC)
  3. 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 教程

  1. 教程:设置一个用于搜索的 65000 个原核基因组数据库

  2. 教程:使用 skani 进行 MAGs 的菌株水平聚类,以及为什么 Mash/FastANI 存在问题

skani 高级使用信息

有关如何优化 skani 的灵敏度/速度等主题的更多信息,请参阅上方的高级使用指南

  • 优化 skani 的灵敏度/速度
  • 使用 skani 处理长读长
  • 使 skani 在大数据集上更节省内存

输出

如果两个基因组的结果对齐分数小于 15%,则不输出。

实际上,这意味着只有 ANI 大于 ~82% 的结果才能可靠地输出(使用默认参数)。有关如何比较 ANI 较低的基因组的信息,请参阅skani 高级使用指南

searchdist 的默认输出如下

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