Fast Whole-Genome Similarity (ANI) Estimation
FastANI
FastANI 是一款用于快速无比对计算全基因组平均核苷酸一致性(ANI)的工具。ANI 定义为两个微生物基因组间共享的直系同源基因对的平均核苷酸一致性。FastANI 支持完整基因组组装和 draft 基因组组装的两两比较。其基本流程与 Goris 等人 2007 年 描述的方法类似。然而,它避免了耗时的序列比对,而是使用 Mashmap 作为基于 MinHash 的序列映射引擎,来计算直系同源映射和比对一致性估计。根据我们对完整基因组和 draft 基因组的实验,其准确性与 基于 BLAST 的 ANI 求解器 相当,且速度提升了两到三个数量级。因此,它适用于大量基因组对的两两 ANI 计算。关于其速度、准确性和潜在应用的更多细节,请参见:“High Throughput ANI Analysis of 90K Prokaryotic Genomes Reveals Clear Species Boundaries”。
下载与编译
从 Github 克隆本软件,并按照 INSTALL.txt 编译代码。您也可以通过 最新发布版本 下载适用于 Linux 或 OSX 的无依赖二进制文件。
用法摘要
- 生成帮助页面。 快速查看软件用法及可用的命令行选项。
$ ./fastANI -h
- 一对一模式。 计算单个查询基因组与单个参考基因组之间的ANI:
$ ./fastANI -q [QUERY_GENOME] -r [REFERENCE_GENOME] -o [OUTPUT_FILE]
此处 QUERY_GENOME 和 REFERENCE_GENOME 指的是 fasta 或多 fasta 格式的查询基因组组装序列。gzip 压缩的 fasta 文件同样适用。
- 一对多。 计算单个查询基因组与多个参考基因组之间的 ANI:
$ ./fastANI -q [QUERY_GENOME] --rl [REFERENCE_LIST] -o [OUTPUT_FILE]
对于上述使用场景,REFERENCE_LIST 应为一个文件,其中包含参考基因组的目录路径,每行一个路径。
- 多对多。 当存在多个查询基因组和多个参考基因组时:
$ ./fastANI --ql [QUERY_LIST] --rl [REFERENCE_LIST] -o [OUTPUT_FILE]
同样,QUERY_LIST 和 REFERENCE_LIST 是包含基因组路径的文件,每行一个路径。
输出格式。在上述所有使用场景中,OUTPUT_FILE 将包含制表符分隔的行,内容包括查询基因组、参考基因组、ANI 值、双向片段映射计数以及总查询片段数。(相对于查询基因组的)比对分数即为映射数与总片段数的比值。用户还可以通过提供 --matrix 参数,额外获得一个 .matrix 文件,其中的一致性值以 phylip 格式的下三角矩阵 排列。注意:如果 ANI 值远低于 80%,则不会报告该基因组对的 ANI 输出。这种情况应在氨基酸水平进行计算。
data 文件夹中提供了两个基因组组装,可用于快速测试运行。
我们建议用户对其输入的基因组组装(包括参考基因组和查询基因组)进行充分的质量检查,尤其是 N50 应≥10 Kbp。
示例运行
- 一对一。此处,我们计算 data 文件夹中提供的 Escherichia coli 和 Shigella flexneri 基因组之间的 ANI。
$ ./fastANI -q data/Shigella_flexneri_2a_01.fna -r data/Escherichia_coli_str_K12_MG1655.fna -o fastani.out
期望在控制台中按以下格式输出日志:
$ ./fastANI -q data/Shigella_flexneri_2a_01.fna -r data/Escherichia_coli_str_K12_MG1655.fna -o fastani.out
>>>>>>>>>>>>>>>>>>
Reference = [data/Escherichia_coli_str_K12_MG1655.fna]
Query = [data/Shigella_flexneri_2a_01.fna]
Kmer size = 16
Fragment length = 3000
Threads = 1
ANI output file = fastani.out
>>>>>>>>>>>>>>>>>>
....
....
INFO, skch::main, Time spent post mapping : 0.00310319 sec
输出结果保存在文件fastani.out中,该文件是通过上述命令中的-o选项指定的。
$ cat fastani.out
data/Shigella_flexneri_2a_01.fna data/Escherichia_coli_str_K12_MG1655.fna 97.7507 1303 1608
上述输出表明,S. flexneri 和 E. coli 基因组之间的 ANI 估计值为 97.7507。在来自 S. flexneri 基因组的总共 1608 个序列片段中,有 1303 个被比对为直系同源匹配。
可视化两个基因组之间的保守区域
FastANI 支持可视化两个基因组之间计算得到的双向映射。
获取此可视化结果需要使用 FastANI 进行一对一比较(如上文所述),但需额外提供 --visualize 标志。
此标志会强制 FastANI 输出一个映射文件(带有 .visual 扩展名),其中包含所有双向映射的信息。
最后,仓库中提供了一个 R 脚本,该脚本使用 genoPlotR 包来绘制这些映射。
这里我们展示使用两个基因组的示例运行:Bartonella quintana(GenBank: CP003784.1)和 Bartonella henselae(NCBI Reference Sequence: NC_005956.1)。
$ ./fastANI -q B_quintana.fna -r B_henselae.fna --visualize -o fastani.out
$ Rscript scripts/visualize.R B_quintana.fna B_henselae.fna fastani.out.visual
使用上述命令,我们会得到一个名为 fastani.out.visual.pdf 的绘图文件,如下所示。每条红色线段表示两个基因组之间的双向映射,指示它们的进化保守区域。另请参见此页面。
并行化
FastANI(v1.1 及更高版本)支持多线程,有关如何配置线程数的信息,请参阅帮助页面。若要在单个计算节点之外实现 FastANI 的并行化,用户还可以选择将参考数据库简单地分成多个块,并将其作为并行进程执行。我们在代码库中提供了一个脚本,用于为此目的随机拆分数据库。
ANI 计算中的不对称性
FastANI 的一个已知局限性是,对于一对基因组(A,B),根据将哪个基因组用作查询序列、哪个用作参考序列,它会报告两个不同的 ANI 值。示例请参见issue #36。实际上,这两个 ANI 值之间的差异很小。但在 --matrix 输出格式中,每个基因组对只报告一个 ANI 值,该值代表两个值的平均值。
故障排除
欢迎用户通过提交Github issue来报告与 FastANI 相关的任何问题或反馈。