Contig Annotation Tool (CAT)和Bin Annotation Tool (BAT)是用于对已知和(高度)未知微生物的长 DNA 序列和宏基因组组装基因组 (MAG/bin) 进行分类的管道,由当代宏基因组学研究生成。这两个程序的核心算法都涉及基因调用、预测 ORF 与蛋白质数据库的映射,以及基于各个 ORF 分类的整个重叠群/MAG 的基于投票的分类。如果文件格式正确,则可以从中间步骤运行 CAT 和 BAT。
描述该算法以及广泛基准的论文可以在 https://doi.org/10.1186/s13059-019-1817-x 上找到。如果您在研究中使用 CAT 或 BAT,如果您能引用我们的话那就太好了:
读取注释工具 (RAT)使用 CAT 和 BAT 输出估计宏基因组的分类组成。描述 RAT 和基准的手稿可以在 https://doi.org/10.1038/s41467-024-47155-1 找到。如果您在研究中使用 RAT,如果您能引用以下内容那就太好了:
引用代码本身:
Python 3,https://www.python.org/。
钻石,https://github.com/bbuchfink/diamond。
浪子,https://github.com/hyattpd/Prodigal。
RAT 进一步要求(CAT 和 BAT 不需要):
BWA,https://github.com/lh3/bwa。
SAMtools,http://www.htslib.org/download/。
CAT、BAT 和 RAT 已在 Linux 系统上经过全面测试,也应该在 macOS 上运行。
无需安装。您可以通过提供绝对路径来运行 CAT、BAT 和 RAT:
$ ./CAT_pack/CAT_pack --help
或者,如果将 CAT_pack 目录中的文件添加到$PATH
变量,则可以从任何位置运行 CAT、BAT 和 RAT:
$ CAT_pack --version
要开始使用 CAT/BAT/RAT,您必须在系统上获取数据库文件。您可以下载预先构建的数据库文件,也可以自己生成它们。
要下载数据库文件,请在 tbb.bio.uu.nl/tina/CAT_pack_prepare/ 上找到最新版本,下载并解压,然后就可以开始了!
NCBI 编号:
$ wget tbb.bio.uu.nl/tina/CAT_pack_prepare/20240422_CAT_nr.tar.gz
$ tar -xvzf 20240422_CAT_nr.tar.gz
对于 GTDB:
$ wget tbb.bio.uu.nl/tina/CAT_pack_prepare/20231120_CAT_gtdb.tar.gz # release 214
$ tar -xvzf 20231120_CAT_gtdb.tar.gz
您可以自己构建一个新的数据库,而不是使用预先构建的数据库。 download
模块可用于下载和处理原始数据,为构建新的CAT包数据库做准备。这将确保满足所有输入依赖项并为CAT_pack prepare
正确格式化。
目前,支持两个数据库:NCBI 的 nr 和基因组分类数据库 (GTDB) 蛋白质。
$ CAT_pack download -db nr -o path/to/nr_data_dir
将从 NCBI 的 ftp 站点下载包含蛋白质序列、它们到出租车的映射以及分类信息的 fasta 文件。
$ CAT_pack download -db gtdb -o path/to/gtdb_data_dir
GTDB 下载页面提供了构建 CAT 包数据库所需的文件。
CAT_pack download
获取必要的文件并进行一些额外的处理以使它们为CAT_pack prepare
:
nodes.dmp
和names.dmp
文件。gtdb_proteins_aa_reps.tar.gz
中提取蛋白质序列,并进行一轮重复数据删除。重复数据删除减少了 DIAMOND 数据库中的冗余,从而简化了对齐过程。根据蛋白质序列的 MD5 和及其长度的组合来识别精确的重复序列。仅保留一个代表性序列,所有重复序列均编码在 fasta 标头中。 CAT_pack prepare
稍后将使用此信息在.fastaid2LCAtaxid
文件中适当分配蛋白质序列的 LCA。root
下人工连接,以生成all.tree
文件。该文件不被 CAT 包使用,但对于下游分析可能会派上用场。文件的下载和处理成功完成后,您可以使用CAT_pack prepare
构建 CATpack 数据库。
对于所有可用的命令行选项,请参阅
$ CAT_pack download -h
和
$ CAT_pack prepare -h
对于自定义 CAT pack 数据库,您必须在启动CAT_pack prepare
运行之前准备好以下输入。
包含您想要包含在数据库中的所有蛋白质序列的 fasta 文件。
一个names.dmp
文件,其中包含出租车类与其等级和学名的映射。格式必须与 NCBI 标准names.dmp
相同(使用t|t
作为字段分隔符)。
一个例子如下:
1 | root | scientific name |
2 | Bacteria | scientific name |
562 | Escherichia coli | scientific name |
nodes.dmp
文件,描述分类树中节点的子父关系及其(官方)排名。格式必须与 NCBI 标准nodes.dmp
相同(使用t|t
作为字段分隔符)。一个例子如下:
1 | 1 | root |
2 | 1 | superkingdom |
1224 | 2 | phylum |
1236 | 1224 | class |
91437 | 1236 | order |
543 | 91347 | family |
561 | 543 | genus |
562 | 561 | species |
有关nodes.dmp
和names.dmp
文件的更多信息,请参阅NCBItaxdump_readme.txt。
accession.version taxid
。一个例子看起来像这样
accession.version taxid
protein_1 562
protein_2 123456
一旦满足上述所有要求,您就可以运行CAT_pack prepare
。所有输入都需要显式指定才能使CAT_pack prepare
工作,例如:
$ CAT_pack prepare
--db_fasta path/to/fasta
--names path/to/names.dmp
--nodes path/to/nodes.dmp
--acc2tax path/to/acc2taxid.txt.gz
--db_dir path/to/output_dir
将创建一个如下所示的output_dir
output_dir
├── 2023-11-05_CAT_pack.log
├── db
│ ├── 2023-11-05_CAT_pack.dmnd
│ ├── 2023-11-05_CAT_pack.fastaid2LCAtaxid
│ └── 2023-11-05_CAT_pack.taxids_with_multiple_offspring
└── tax
├── names.dmp
└── nodes.dmp
笔记:
db
和tax
,其中包含所有必需的文件。tax
目录中的nodes.dmp
和names.dmp
是从其原始位置复制的。这是为了确保 CAT、BAT 和 RAT 的-t
标志起作用。<YYYY-MM-DD>_CAT_pack
。您可以使用--common_prefix
选项对其进行自定义。对于所有可用的命令行选项,请参阅
$ CAT_pack prepare -h
后续 CAT/BAT/RAT 运行需要数据库文件。它们只需要生成/下载一次或每当您想要更新数据库时即可。
分别运行 CAT/BAT/RAT:
$ CAT_pack contigs # Runs CAT.
$ CAT_pack bins # Runs BAT.
$ CAT_pack reads # Runs RAT.
如果您不确定程序有哪些选项,您可以随时将--help
添加到命令中。这是让您开始使用 CAT、BAT 或 RAT 的好方法。
$ CAT_pack --help
$ CAT_pack contigs --help
$ CAT_pack summarise --help
如果您不确定需要哪些输入文件,您可以只运行 CAT/BAT/RAT,因为如果格式不正确,则会生成相应的错误消息。
在系统上获得数据库文件后,您可以运行 CAT 来注释您的重叠群集:
$ CAT_pack contigs -c {contigs fasta} -d {database folder} -t {taxonomy folder}
将生成多个输出文件和一个日志文件。最终的分类文件将被称为out.CAT.ORF2LCA.txt
和out.CAT.contig2classification.txt
。
或者,如果您已经有预测的蛋白质 fasta 文件和/或比对表(例如之前运行的结果),您可以将它们提供给 CAT,然后 CAT 将跳过已完成的步骤并从那里开始:
$ CAT_pack contigs -c {contigs fasta} -d {database folder} -t {taxonomy folder} -p {predicted proteins fasta} -a {alignment file}
预测蛋白质 fasta 文件中的标头必须类似于>{contig}_{ORFnumber}
,以便 CAT 可以将重叠群与 ORF 偶联。比对文件必须以制表符分隔,第一列是查询的 ORF,第二列是蛋白质登录号,第 12 列是位分数。
要在一组 MAG 上运行 BAT:
$ CAT_pack bins -b {bin folder} -d {database folder} -t {taxonomy folder}
或者,BAT 可以在单个 MAG 上运行:
$ CAT_pack bins -b {bin fasta} -d {database folder} -t {taxonomy folder}
将生成多个输出文件和一个日志文件。最终的分类文件将被称为out.BAT.ORF2LCA.txt
和out.BAT.bin2classification.txt
。
与 CAT 类似,如果已经执行过一次基因预测和比对,则可以从中间步骤运行 BAT:
$ CAT_pack bins -b {bin folder} -d {database folder} -t {taxonomy folder} -p {predicted proteins fasta} -a {alignment file}
如果您之前已对 MAG 源自的重叠群集运行过 CAT,则可以使用之前预测的蛋白质和比对文件对 MAG 进行分类。
$ CAT_pack contigs -c {contigs fasta} -d {database folder} -t {taxonomy folder}
$ CAT_pack bins -b {bin folder} -d {database folder} -t {taxonomy folder} -p {predicted proteins fasta from contig run} -a {alignment file from contig run}
这是在一组 MAG 上运行 CAT 和 BAT 的好方法,无需进行两次蛋白质预测和比对!
ORF2LCA 输出如下所示:
开放阅读框 | 命中次数 (r: 10) | 血统 | 位分数 |
---|---|---|---|
重叠群_1_ORF1 | 7 | 1;131567;2;1783272 | 574.7 |
其中谱系是 ORF 分类的完整分类谱系,位分数是分配给 ORF 进行投票的最高命中位分数。 BAT ORF2LCA 输出文件有一个额外的列,其中 ORF 链接到它们所在的 MAG。
contig2classification 和 bin2classification 输出如下所示:
重叠群或容器 | 分类 | 原因 | 血统 | 谱系分数(f:0.3) |
---|---|---|---|---|
重叠群_1 | 出租车分配 | 基于 14/15 ORF | 1;131567;2;1783272 | 1.00; 1.00; 1.00; 0.78 |
重叠群_2 | 已分配出租车 (1/2) | 基于 10/10 ORF | 1;131567;2;1783272;17id98711;1117;307596;307595;1890422;33071;1416614;1183438* | 1.00;1.00;1.00;1.00;1.00;1.00;1.00;1.00;1.00;1.00;0.23;0.23 |
重叠群_2 | 出租车分配 (2/2) | 基于 10/10 ORF | 1;131567;2;1783272;1798711;1117;307596;307595;1890422;33071;33072 | 1.00;1.00;1.00;1.00;1.00;1.00;1.00;1.00;1.00;1.00;0.77 |
重叠群_3 | 没有分配出租车 | 未找到 ORF |
其中谱系分数表示每个分类的位分数支持的分数。 contig_2 有两个分类。如果f参数选择低于 0.5,就会发生这种情况。有关加星号分类的说明,请参阅用星号标记暗示性分类分配。
要将名称添加到任一输出文件中的出租车,请运行:
$ CAT_pack add_names -i {ORF2LCA / classification file} -o {output file} -t {taxonomy folder}
这将向您显示,例如 contig_1 被分类为 Terrabacteria 组。仅获得官方等级(即超级王国,门,...):
$ CAT_pack add_names -i {ORF2LCA / classification file} -o {output file} -t {taxonomy folder} --only_official
或者,另一种选择:
$ CAT_pack add_names -i {ORF2LCA / classification file} -o {output file} -t {taxonomy folder} --only_official --exclude_scores
如果您使用正式名称命名 CAT 或 BAT 分类文件,则可以获得分类摘要,其中计算重叠群支持分类单元的 ORF 的总长度和数量,以及 MAG 分类中每个遇到的分类单元的 MAG 数量:
$ CAT_pack summarise -c {contigs fasta} -i {named CAT classification file} -o {output file}
$ CAT_pack summarise -i {named BAT classification file} -o {output file}
CAT_pack summarise
目前不支持分类文件,其中某些重叠群/MAG 具有多个分类(如上面的 contig_2)。
当我们想要自信地进入分类可能的最低分类级别时,一个重要的假设是,在该级别上,分类之间可能会出现冲突。也就是说,如果存在冲突的分类,算法会通过提升一个级别来使分类更加保守。既然没有,我们就可以相信低级分类。然而,并不总是可能出现冲突,因为在某些情况下,数据库中不存在该进化枝的其他序列。例如,Dehalococcoidaceae 科就是如此,在我们的数据库中,它是 Dehalococcoidales 目的唯一代表。因此,在这里我们不能自信地说科级别的分类比目级别的分类更正确。对于这些情况,CAT 和 BAT 用星号标记谱系,从最低级别分类开始,一直到可能发生冲突的级别,因为进化枝包含带有数据库条目的多个分类单元。建议用户更仔细地检查加星号的分类群,例如通过分析预测的 ORF 和命中之间的序列同一性,或将谱系向上移动到可信分类(即没有星号的第一个分类)。
如果您不希望输出文件中出现星号,可以将--no_stars
标志添加到 CAT 或 BAT。
CAT 和 BAT 可能需要一段时间才能运行,并且可能使用大量 RAM 和磁盘空间。根据您最看重的内容,您可以调整 CAT 和 BAT,以最大化其中一项并最小化其他项。分类算法本身速度快,并且对内存和磁盘空间友好。最昂贵的步骤是与 DIAMOND 对齐,因此调整对齐参数将产生最大的影响:
-n / --nproc
参数允许您选择要部署的核心数量。--sensitive
标志在敏感模式下运行 DIAMOND。这将提高灵敏度,但会使对准速度显着变慢。--block_size
参数设置得较低将减少内存和临时磁盘空间的使用。将其设置得更高会提高性能。--index_chunks
设置为 1(当前默认值)。该参数对临时磁盘空间的使用没有影响。--tmpdir
参数指定临时 DIAMOND 文件的位置。获取有关运行准备实用程序的帮助:
$ CAT_pack prepare --help
使用默认参数设置在重叠群集上运行 CAT,部署 16 个核心以进行 DIAMOND 比对。使用正式名称命名重叠群分类输出,并创建摘要:
$ CAT_pack contigs -c contigs.fasta -d db/ -t tax/ -n 16 --out_prefix first_CAT_run
$ CAT_pack add_names -i first_CAT_run.contig2classification.txt -o first_CAT_run.contig2classification.official_names.txt -t tax/ --only_official
$ CAT_pack summarise -c contigs.fasta -i first_CAT_run.contig2classification.official_names.txt -o CAT_first_run.summary.txt
对从这些重叠群分箱的 MAG 集运行 BAT,重复使用先前在重叠群分类期间生成的蛋白质预测和 DIAMOND 比对文件:
$ CAT_pack bins -b bins/ -d db/ -t tax/ -p first_CAT_run.predicted_proteins.faa -a first_CAT_run.alignment.diamond -o first_BAT_run
使用自定义参数设置再次运行重叠群分类算法,并使用谱系中的所有名称命名输出,不包括分数:
$ CAT_pack contigs --range 5 --fraction 0.1 -c contigs.fasta -d db/ -t tax/ -p first_CAT_run.predicted_proteins.faa -a first_CAT_run.alignment.diamond -o second_CAT_run
$ CAT_pack add_names -i second_CAT_run.contig2classification.txt -o second_CAT_run.contig2classification.names.txt -t tax/ --exclude_scores
使用自定义参数设置在一组 MAG 上运行 BAT,抑制冗长且不写入日志文件。接下来,将名称添加到 ORF2LCA 输出文件:
$ CAT_pack bins -r 3 -f 0.1 -b bins/ -s .fa -d db/ -t tax/ -p first_CAT_run.predicted_proteins.faa -a first_CAT_run.alignment.diamond --o second_BAT_run --quiet --no_log
$ CAT_pack add_names -i second_BAT_run.ORF2LCA.txt -o second_BAT_run.ORF2LCA.names.txt -t tax/
我们经常结合使用 CAT / BAT 来探索 MAG 内可能存在的污染。
$ CAT_pack contigs -c ../bins/interesting_MAG.fasta -d db/ -t tax/ -o CAT.interesting_MAG
$ CAT_pack bins -b ../bins/interesting_MAG.fasta -d db/ -t tax/ -p CAT.interesting_MAG.predicted_proteins.faa -a CAT.interesting_MAG.alignment.diamond -o BAT.interesting_MAG
具有与 MAG 分类不同的分类信号的重叠群可能是污染。
或者,您可以通过将f参数设置为较低值,从 MAG 角度查看污染:
$ CAT_pack bins -f 0.01 -b ../bins/interesting_MAG.fasta -d db/ -t tax/ -o BAT.interesting_MAG
$ CAT_pack add_names -i BAT.interesting_MAG.bin2classification.txt -o BAT.interesting_MAG.bin2classification.names.txt -t tax/
BAT 将输出至少有 1% 支持的任何分类信号。低分分歧信号是明显的污染迹象!
RAT 通过整合来自 MAG、重叠群和读数的分类信号来估计宏基因组的分类组成。从 6.0 版本开始,RAT 已添加到 CAT 包中。要使用 RAT,您需要 CAT 包数据库文件(有关更多信息,请参阅入门)。
RAT 使用 MAG/bins、contig 和 read 生成集成的配置文件。要指定应集成哪些元素,请使用--mode
参数。 --mode
的可能字母为m
(对于 MAG)、 c
(对于重叠群)和r
(对于读取)。除了单独的r
之外,这三个字母的所有组合都是可能的。要运行 RAT 的完整工作流程,请指定模式、读取文件、contig 文件、bin 文件夹和数据库文件:
$ CAT_pack reads --mode mcr -b bin_folder/ -c contigs.fasta -1 forward_reads.fq.gz -2 reverse_reads.fq.gz -d db/ -t tax/
目前,RAT支持单端读取文件以及双端读取文件。目前不支持隔行读取文件。 RAT 将在重叠群和 MAG 上运行 CAT 和 BAT,将读数映射回重叠群,然后尝试单独注释任何未映射的读数。如果您已经有排序的映射文件,则可以提供它,RAT 将跳过映射步骤:
$ CAT_pack reads --mode mcr -b bin_folder/ -c contigs.fasta --bam1 mapping_file_sorted.bam -1 forward_reads.fq.gz -2 reverse_reads.fq.gz -d db/ -t tax/
如果 CAT 和/或 BAT 已在您的数据上运行,您可以将输出文件提供给 RAT 以跳过 CAT 和 BAT 运行:
$ CAT_pack reads --mode mcr -b bin_folder/ -c contigs.fasta -1 forward_reads.fq.gz -2 reverse_reads.fq.gz -d db/ -t tax/ --c2c CAT_contig2classification_file.txt --b2c BAT_bin2classification_file.txt
同样,如果先前的 RAT 运行在未映射的读取已使用 Diamond 与数据库对齐后崩溃,您可以提供中间文件以继续运行:
$ CAT_pack reads --mode mcr -b bin_folder/ -c contigs.fasta -1 forward_reads.fq.gz -2 reverse_reads.fq.gz -d db/ -t tax/ --c2c CAT_contig2classification_file.txt --b2c BAT_bin2classification_file.txt --alignment_unmapped unmapped_alignment_file.diamond
RAT 运行完成后,您可以在丰度文件上运行 add_names(仅适用于使用 nr 数据库的 RAT 运行):
$ CAT_pack add_names -i RAT.completete_abundance_file.txt -o RAT.completete_abundance_file_with_names.txt -t tax/
与 CAT 和 BAT 类似,所有依赖项的路径可以通过参数提供:
$ CAT_pack reads --mode mcr -b bin_folder/ -c contigs.fasta -1 forward_reads.fq.gz -2 reverse_reads.fq.gz -d db/ -t tax/ --path_to_samtools /path/to/samtools
RAT 输出包括:
--mode
中不带r
)。