Introduction
Kraken 是可将分类标签分配给DNA序列的一种序列分类器,是基于k-mer精确比对,并采用最低公共祖先(lowest common ancestor ,LCA)投票结果快速宏基因组DNA序列进行物种注释的软件。
注:LCA,是当给定一个有根树T时,对于任意两个结点u、v,找到一个离根最远的结点x,使得x同时是u和v的祖先,x 便是u、v的最近公共祖先。
Kraken 2 differs from Kraken 1 in several important ways:
- Only minimizers of the k-mers in the query sequences are used as database queries. Similarly, only minimizers of the k-mers in the reference sequences in the database's genomic library are stored in the database. We will also refer to the minimizers as l-mers, where l <= k. All k-mers are considered to have the same LCA as their minimizer's database LCA value.
- Kraken 2 uses a compact hash table that is a probabilistic data structure. This means that occasionally, database queries will fail by either returning the wrong LCA, or by not resulting in a search failure when a queried minimizer was never actually stored in the database. By incurring the risk of these false positives in the data structure, Kraken 2 is able to achieve faster speeds and lower memory requirements. Users should be aware that database false positive errors occur in less than 1% of queries, and can be compensated for by use of confidence scoring thresholds.
- Kraken 2 has the ability to build a database from amino acid sequences and perform a translated search of the query sequences against that database.
- Kraken 2 utilizes spaced seeds in the storage and querying of minimizers to improve classification accuracy.
- Kraken 2 provides support for "special" databases that are not based on NCBI's taxonomy. These are currently limited to three popular 16S databases.
Because Kraken 2 only stores minimizers in its hash table, and k can be much larger than l, only a small percentage of the possible l-mers in a genomic library are actually deposited in the database. This creates a situation similar to the Kraken 1 "MiniKraken" databases; however, preliminary testing has shown the accuracy of a reduced Kraken 2 database to be quite similar to the full-sized Kraken 2 database, while Kraken 1's MiniKraken databases often resulted in a substantial loss of per-read sensitivity.
If you use Kraken 2 in your own work, please cite either the Kraken 2 paper and/or the original Kraken paper as appropriate. Thank you!
System Requirements
-
Disk space: 标准库需要 100 GB 磁盘空间. 其中, 基因组文库需要42 GB,NCBI分类信息库需要 26 GB , Kraken 2的紧凑哈希表需要29 GB。
注意:磁盘格式最好使用NFS .
-
Memory: 为有效运行,Kraken 2 需要的足够的内存 (初始化紧凑哈希表) . 虽然可以通过 ramdisk 完成,但 Kraken 2 默认将数据库加载到进程本地 RAM 中;
--memory-mapping
切换到kraken2
将避免这样做。 默认的database 大小为29 GB (as of Jan. 2018), d按需求可能稍微更大一些. -
Dependencies:
Kraken 2
需求sed
,find
以及wget
,其中还包含了主要语言使用perl
编写的有很多bash脚本
。核心程序使用C++11
编写, 所以需要支持C++11
的g++
来对其进行编译 . 多线程的处理使用的是OpenMP
. 下载NCBI通过wget
和rsync
完成.Unlike Kraken 1, Kraken 2 does not use an external k-mer counter. However, by default, Kraken 2 will attempt to use the
dustmasker
orsegmasker
programs provided as part of NCBI's BLAST suite to mask low-complexity regions (see [Masking of Low-complexity Sequences]).MacOS NOTE: MacOS and other non-Linux operating systems are not explicitly supported by the developers, and MacOS users should refer to the Kraken-users group for support in installing the appropriate utilities to allow for full operation of Kraken 2. We will attempt to use MacOS-compliant code when possible, but development and testing time is at a premium and we cannot guarantee that Kraken 2 will install and work to its full potential on a default installation of MacOS.
In particular, we note that the default MacOS X installation of GCC does not have support for OpenMP. Without OpenMP, Kraken 2 is limited to single-threaded operation, resulting in slower build and classification runtimes.
-
Network connectivity: Kraken2的标准库由
FTP
和rsync
从NCBI 的FTP服务器下载并建立。 If you're working behind a 代理, you may need to set certain environment variables (such asftp_proxy
orRSYNC_PROXY
) in order to get these commands to work properly.Kraken 2脚本默认使用
rsync
for most downloads; however, you may find that your network situation prevents use of rsync. In such cases, you can try the--use-ftp
option tokraken2-build
to force the downloads to occur via FTP. -
MiniKraken: At present, users with low-memory computing environments can replicate the "MiniKraken" functionality of Kraken 1 in two ways: first, by increasing the value of k with respect to l (using the
--kmer-len
and--minimizer-len
options tokraken2-build
); and secondly, through downsampling of minimizers (from both the database and query sequences) using a hash function. This second option is performed if the--max-db-size
option tokraken2-build
is used; however, the two options are not mutually exclusive. In a difference from Kraken 1, Kraken 2 does not require building a full database and then shrinking it to obtain a reduced database.
Installation
Kraken 2 包含两个主要的脚本 (kraken2
and kraken2-build
), along with several programs and smaller scripts. As part of the installation process, all scripts and programs are installed in the same directory. After installation, you can move the main scripts elsewhere, but moving the other scripts and programs requires editing the scripts and changing the $KRAKEN2_DIR
variables in the main scripts.
Once an install directory is selected, you need to run the following command in the directory where you extracted the Kraken 2 source:
./install_kraken2.sh $KRAKEN2_DIR
(Replace $KRAKEN2_DIR
above with the directory where you want to install Kraken 2's programs/scripts.)
The install_kraken2.sh
script should compile all of Kraken 2's code and setup your Kraken 2 program directory. Installation is successful if you see the message "Kraken 2 installation complete.
"
Once installation is complete, you may want to copy the main Kraken 2 scripts into a directory found in your PATH
variable (e.g., "$HOME/bin
"):
cp $KRAKEN2_DIR/kraken2{,-build,-inspect} $HOME/bin
After installation, you're ready to either create or download a database.
Kraken 2 Databases
Kraken2 数据库是一个文件夹包含了至少3个文件:
-
hash.k2d
: 包含到分类单元映射的最小化器 -
opts.k2d
: 包含有关用于构建数据库的选项的信息 -
taxo.k2d
: 包含用于构建数据库的分类信息
以上三个文件都不是人类可读的格式。 其他文件也可能作为数据库构建过程的一部分出现,如果需要,可以在成功构建数据库后删除。
在与 Kraken 2 交互时,不必直接引用任何这些文件,而只需提供存储它们的目录的名称。 Kraken2 允许使用标准数据库和自定义数据库; 这些分别在下面的 [标准 Kraken2 数据库] 和 [自定义数据库] 部分中进行了描述。
Standard Kraken 2 Database
To create the standard Kraken 2 database, you can use the following command:
kraken2-build --standard --db $DBNAME
(Replace "$DBNAME
" above with your preferred database name/location. Please note that the database will use approximately 100 GB of disk space during creation, with the majority of that being reference sequences or taxonomy mapping information that can be removed after the build.)
这将下载 NCBI 分类信息,以及 RefSeq 中细菌、古细菌和病毒域的完整基因组,以及人类基因组和一组已知载体 (UniVec_Core)。 下载所有这些数据后,构建过程开始; 这可能是最耗时的步骤。 如果您有多个处理核心,则可以使用多个线程运行此进程,例如:
kraken2-build --standard --threads 24 --db $DBNAME
构建过程本身有两个主要步骤,每个步骤都需要传递参考库的内容:
- Estimation of the capacity needed in the Kraken 2 compact hash table. This uses a low-memory method to reliably estimate the number of minimizers present in the reference library given the selected parameters k and l.
- Population of the hash table (and conversion of the taxonomy to an internal format). This step is a second pass over the reference library to find minimizers and then place them in the database.
(There is one other preliminary step where sequence IDs are mapped to taxonomy IDs, but this is usually a rather quick process and is mostly handled during library downloading.)
Unlike Kraken 1's build process, Kraken2 does not perform checkpointing after the estimation step. This is because the estimation step is dependent on the selected k and l values, and if the population step fails, it is likely because k needs to be increased (reducing the overall memory requirements).
Classification
To classify a set of sequences, use the kraken2
command:
kraken2 --db $DBNAME seqs.fa
默认情况下,输出将发送到标准输出,应在命令行中指定包含要分类的序列的文件。 也可以使用特殊文件名通过标准输入提供序列 /dev/fd/0
.
The kraken2
参数选项:
-
Multithreading:
--threads NUM
线程数 -
Quick operation: 与搜索序列中所有的 l-mers不同,在第一个数据库命中后即停止分类; 使用
--quick
启用此模式。 -
Hit group threshold:选项
--minimum-hit-groups
将允许您在声明分类序列之前找到多个命中组(一组重叠的 k-mer,它们共享在哈希表中找到的公共最小化器),这可以 在测试序列是否属于特定基因组时,对自定义数据库特别有用。 -
Sequence filtering: 分类或未分类的序列可以发送到文件以供以后处理,分别使用
--classified-out
和--unclassified-out
选项。 -
Output redirection: 可以使用标准 shell 重定向(
|
或>
)或使用--output
来定向输出。 -
Compressed input: Kraken 2 可以通过指定
--gzip-compressed
或--bzip2-compressed
的正确开关来处理 gzip 和 bzip2 压缩文件作为输入。 -
Input format auto-detection:如果在命令行上指定常规文件(即不是管道或设备文件)作为输入,Kraken2 将尝试在分类之前确定输入的格式。 您可以通过显式指定
--gzip-compressed
或--bzip2-compressed
来禁用此功能。 请注意,使用字符设备文件/dev/fd/0
从标准输入(又名stdin
)读取将不允许自动检测。 -
Paired reads: Kraken 2 无需在读取之间使用“N”字符将配对连接在一起,而是能够在识别配对信息的同时单独处理配对。 对
kraken2
使用--paired
选项将向kraken2
指示提供的输入文件是成对的读取数据,并且将从成对的文件中同时读取数据。--paired
的使用也会影响--classified-out
和--unclassified-out
选项; 用户应该在提供给这些选项的文件名中提供一个#
字符,它将被kraken2
替换为 "_1
" 和 "_2
" ,并适当地分布在两个文件中。 例如:kraken2 --paired --classified-out cseqs#.fq seqs_1.fq seqs_2.fq
将分类对中的第一个读取放入
cseqs_1.fq
中,并将这些对中的第二次读取放入cseqs_2.fq
中。要获得完整的选项列表,请使用
kraken2 --help
。
Output Formats
Standard Kraken Output Format
由 Kraken2 分类的每个序列(或序列对,在成对读取的情况下)都会产生一行输出。 Kraken 2 的输出行包含五个制表符分隔的字段;从左到右,它们是:
-
“C”/“U”:一个字母代码,表示序列是分类的还是未分类的。
-
序列 ID,从 FASTA/FASTQ 头中获得。
-
用于标记序列的Kraken 2分类 ID ;如果序列未分类,则为 0。
-
以bp为单位的序列长度。在成对读取数据的情况下,这将是一个字符串,其中包含以 bp 为单位的两个序列的长度,由管道字符分隔,例如“98|94”。
-
以空格分隔的列表,指示序列中每个 k-mer 的 LCA 映射。例如,“562:13 561:4 A:31 0:1 562:3”表示:
- 前 13 个 k-mers 映射到分类 ID #562
- 接下来的 4 个 k-mers 映射到分类 ID #561
- 接下来的 31 个 k-mers 包含一个不明确的核苷酸
- 下一个 k-mer 不在数据库中
- 最后 3 个 k-mers 映射到分类 ID #562
请注意,成对的读取数据将在此列表中包含一个“
|:|
”标记,以指示一个读取的结束和另一个读取的开始。当 Kraken 2 针对蛋白质数据库运行时(参见 [翻译搜索]),LCA 命中列表将包含查询每个序列的所有六帧的结果。阅读帧数据由“
-:-
”标记分隔。
Kraken 1 提供了一个 kraken-translate
和 kraken-report
脚本来将输出更改为不同的格式。通过使用kraken2 --use-names
,Kraken 2 将用科学名称和括号中的分类 ID 替换分类 ID 列(例如,“Bacteria (taxid 2)”而不是“2”),产生类似Kraken 1 的 kraken-translate
脚本的功能。示例报告功能现在作为 kraken2
脚本的一部分存在,使用了 --report
选项;示例报告格式如下所述。
Sample Report Output Format
与 Kraken 1 一样,Kraken 2 提供两种格式的样本范围结果。 Kraken 2 的标准样本报告格式以制表符分隔,每个分类单元一行。输出的字段,从左到右,如下:
- 植根于该分类单元的进化枝覆盖的碎片百分比
- 植根于该分类单元的进化枝所覆盖的片段数量
- 直接分配给该分类单元的片段数
- 等级代码,表示 (U)nclassified, (R)oot, (D)omain, (K)ingdom, (P)hylum, (C)lass, (O)rder, (F)amily, (G) enus,或(S)物种。不在这 10 个等级中的任何一个的分类群都有一个等级代码,该等级代码是通过使用最接近祖先等级的等级代码和一个表示与该等级距离的数字形成的。例如,“G2”是一个等级代码,表示一个分类单元在属和种之间,而祖父母分类单元处于属等级。
- NCBI分类ID号
- 缩进的学名
根据分类法指定的树结构,科学名称使用空格缩进。
默认情况下,没有分配(或低于)它们的读取的分类群将不会产生任何输出。但是,如果希望显示所有分类单元,可以使用 --report-zero-counts
来执行此操作。如果您希望对报告进行进一步的下游分析,并希望比较样本,这可能会很有用。按分类 ID 排序(使用sort -k5,5n
)可以在报告之间提供一致的行顺序。
此外,Kraken2 还提供了可与 --report
结合使用的选项 --use-mpa-style
。此选项以类似于 MetaPhlAn 的输出格式提供输出。使用此选项的输出每行提供一个分类单元,在 Kraken2 的标准样本报告格式中使用小写版本的等级代码(“U”和“R”除外),两个下划线和分类单元的科学名称(例如,“d_Viruses”)。给出了每个分类单元(考虑的八个等级)的完整分类,每个等级的名称用竖线字符分隔(例如,“d__Viruses|o_Caudovirales”)。在这个版本的分类单元科学名称之后是一个选项卡,以及分配给以该分类单元为根的进化枝的片段数量。
Translated Search
Kraken2 允许用户执行六帧翻译搜索,类似于著名的 BLASTX 程序。 为此,Kraken2 使用减少的 15 个氨基酸字母表并将氨基酸最小化符存储在其数据库中。 将所有 6 帧的 LCA 结果组合在一起以产生一组 LCA 命中,然后以与 Kraken 正常操作相同的方式对其进行解析。
要构建蛋白质数据库,应将 --protein
选项提供给kraken2-build
(与--standard
一起,或者如果构建自定义数据库,则与所有步骤一起)。
Custom Databases
某些情况下标准数据库可能无法满足的需求,Kraken 2 还允许创建自定义数据库。要构建自定义数据库,需要以下步骤:
- 安装分类。 仅使用 NCBI 分类法:
kraken2-build --download-taxonomy --db $DBNAME
以上命令将以accession number
下载分类单元图,包括了来自 NCBI 的分类名称和树信息。这些文件可以在 $DBNAME/taxonomy/
中找到。如果需要修改分类法,可以编辑该目录下的names.dmp
和nodes.dmp
文件;还需要适当地修改 *.accession2taxid
文件。
一些标准的基因组文库集具有与之相关的分类信息,并且不需要分类单元图的登录号即可成功构建数据库。这些库包括所有通过 --download-library
选项可用的库(见下一点),但 plasmid
和非冗余数据库除外。如果您没有使用自定义序列(请参阅 --add-to-library
选项)并且没有使用“质粒”或非冗余数据库库之一,您可能希望跳过将登录号下载到分类单元地图。这可以通过将 --skip-maps
传递给 kraken2-build --download-taxonomy
命令来完成。
-
安装一个或多个参考库。通过“kraken2-build”可以轻松获得几组标准基因组/蛋白质组:
-
archaea
:RefSeq 完整的古菌基因组/蛋白质组 -
bacteria
: RefSeq 完整的细菌基因组/蛋白质组 -
plasmid
:RefSeq质粒核苷酸/蛋白质序列 -
viral
:RefSeq 完整的病毒基因组/蛋白质组 -
human
:GRCh38 人类基因组/蛋白质组 -
fungi
:RefSeq 完整的真菌基因组/蛋白质组 -
plant
:RefSeq完整的植物基因组/蛋白质组 -
protozoa
:RefSeq 完整的原生动物基因组/蛋白质组 -
nr
:NCBI 非冗余蛋白质数据库 -
nt
:NCBI 非冗余核苷酸数据库 -
UniVec
:NCBI 提供的可能污染测序项目和/或组件的载体、接头、接头和引物序列数据库 -
UniVec_Core
:选择 UniVec 的一个子集,以最大限度地减少对矢量数据库的误报命中 - NCBI 不再支持
env_nr
和env_nt
,因此不再提供下载。
要下载和安装其中任何一个,请使用
--download-library
,例如:kraken2-build --download-library bacteria --db $DBNAME
通过发出多个
kraken2-build --download-library
命令,可以在构建之前将多个库下载到数据库中,例如:kraken2-build --download-library archaea --db $DBNAME kraken2-build --download-library viral --db $DBNAME
上述命令将准备一个包含古细菌和病毒基因组的数据库;但是,在下载这些库以实际构建数据库后,仍需要使用
--build
选项(见下文)。(请注意,下载
nr
需要使用--protein
选项,并且UniVec
和UniVec_Core
与--protein
选项不兼容。)<font color=red>也可以添加其他基因组</font>,但这样的基因组必须满足某些要求:
- 序列必须在 FASTA 文件中(允许多 FASTA)
- 每个序列的 ID(
>
和标题行上的第一个空白字符之间的字符串)必须包含一个NCBI accession number 以允许 Kraken2 查找正确的分类群,或者使用明确的分配分类kraken:taxid
(见下文)。
<font color=red>不是从 NCBI 下载的序列可能需要明确分配其分类信息</font>。这可以使用序列 ID 中的字符串
kraken:taxid|XXX
来完成,将XXX
替换为所需的分类单元 ID。例如,要将已知的接头序列放入分类单元 32630(“synthetic construct”)中,您可以使用以下命令:>sequence16|kraken:taxid|32630 Adapter sequence CAAGCAGAAGACGGCATACGAGATCTTCGAGTGACTGGAGTTCCTTGGCACCCGAGAATTCCA
kraken:taxid
字符串必须以序列 ID 开头或紧跟在管道字符 (|
) 之前。 以这种方式显式分配分类 ID 将覆盖 NCBI 提供的accession number 映射。如果您的基因组满足上述要求,那么您可以使用
--add-to-library
开关将每个序列添加到数据库的基因组库中,例如:kraken2-build --add-to-library chr1.fa --db $DBNAME kraken2-build --add-to-library chr2.fa --db $DBNAME
请注意,如果要添加的文件列表,您可以在
bash
中执行类似的操作:for file in chr*.fa do kraken2-build --add-to-library $file --db $DBNAME done
或者甚至添加在目录
genomes
中找到的所有*.fa
文件:find genomes/ -name '*.fa' -print0 | xargs -0 -I{} -n1 kraken2-build --add-to-library {} --db $DBNAME
如果您有多个处理器,您可能还会发现
xargs
的-P
选项对于并行添加许多文件很有用。)- 一旦你的文库下载完成,你需要建立数据库。 这可以通过以下命令完成:
kraken2-build --build --db $DBNAME
By default, the values of k and l are 35 and 31, respectively (or 15 and 12 for protein databases). These values can be explicitly set with the
--kmer-len
andminimizer-len
options, however. Note that the minimizer length must be no more than 31 for nucleotide databases, and 15 for protein databases. Additionally, the minimizer length l must be no more than the k-mer length. There is no upper bound on the value of k, but sequences less than k bp in length cannot be classified.Kraken 2 also utilizes a simple spaced seed approach to increase accuracy. A number s < l/4 can be chosen, and s positions in the minimizer will be masked out during all comparisons. Masked positions are chosen to alternate from the second-to-last position in the minimizer; e.g., s = 5 and l = 31 will result in masking out the 0 positions shown here:
--threads
选项在这里也有助于减少构建时间。默认情况下,k 和 l 的值分别为 35 和 31(或蛋白质数据库的 15 和 12)。 然而,这些值可以使用
--kmer-len
和minimizer-len
选项显式设置。 请注意,<font color=red>核苷酸数据库的最小长度(I)不得超过 31,蛋白质数据库的最小长度不得超过 15。 此外,最小长度 l 不得超过 k-mer 长度。 k 的值没有上限,但长度小于 k bp 的序列无法分类。</font>Kraken2 还利用简单的间隔种子方法来提高准确性。 可以选择一个数字 s < l/4,并且在所有比较过程中,最小化器中的 s 位置将被屏蔽。 选择掩蔽位置以从最小化器中的倒数第二个位置交替; 例如,s = 5 和 l = 31 将导致屏蔽此处显示的 0 位置:
111 1111 1111 1111 1111 1101 0101 0101
默认情况下,s = 7 用于核苷酸数据库,k = 0 用于蛋白质数据库。 这可以使用
--minimizer-spaces
选项以及kraken2-build
的--build
任务来更改。可以使用
kraken2-build --help
获得kraken2-build
的完整选项列表。构建数据库后,如果要减少数据库的磁盘使用量,可以使用
kraken2-build
的--clean
选项从数据库目录中删除中间文件。 -
Masking of Low-complexity Sequences
低复杂度序列,例如“ACACACACACACACACACACACACAC”已知存在于许多不同的生物体中,并且在比对中使用的信息通常较少; BLAST 程序通常默认屏蔽这些序列。使用此屏蔽有助于防止 Kraken2 的结果出现误报,因此我们将此功能作为默认选项添加到 Kraken2 的库下载/添加过程中。
Kraken2 使用两个程序来执行低复杂度的序列掩蔽,都可以从 NCBI 获得:dustmasker
用于核苷酸序列,segmasker
用于氨基酸序列。这些程序作为 NCBI BLAST+ 套件的一部分提供。如果在尝试使用 kraken2-build
时这些程序未安装在本地系统和用户的 PATH 中,则数据库构建将失败。不想安装这些程序的用户可以将 kraken2-build
的--no-masking
选项与--download-library
、--add-to-library
中的任何一个结合使用,或 --standard
选项;使用 --no-masking
选项将在构建 Kraken 2 数据库期间跳过低复杂度序列的屏蔽。
Special Databases
Kraken2提供了使用来自各种外部数据库的数据构建 Kraken2 数据库的能力。 这些外部数据库可能不遵循 NCBI 分类法,因此可以进行自动创建适用于 Kraken2 的分类法的机制(尽管此类分类法可能与 NCBI 不同)。
要构建这些Special
数据库,请使用以下命令:
kraken2-build --db $DBNAME --special TYPE
where the TYPE
string is one of the database names listed below.
目前,提供的“special”Kraken 2 数据库支持仅限于一些公共 16S 序列数据库的预打包解决方案,但未来可能会增长。
16S Databases
对于有针对性的 16S 测序项目,使用全基因组数据的普通 Kraken 2 数据库可能会使用比必要更多的资源。从仅包含 16S 数据的精心策划的基因组库创建的 Kraken 2 数据库可以为此类项目提供更有效的解决方案和更准确的预测集。我们为从三个公开可用的 16S 数据库构建 Kraken 2 数据库提供支持:
-
Greengenes(Kraken 2 数据库名称:
greengenes
),使用所有可用的 16S 数据。 -
RDP(Kraken 2 数据库名称:
rdp
),使用细菌和古细菌 16S 数据。 -
SILVA(Kraken 2 数据库名称:
silva
),使用 Small subunit NR99 序列集。
请注意,这些数据库可能对其数据有许可限制,您有责任确保遵守这些限制;请访问数据库的网站了解更多详情。 kraken2-build
脚本仅使用公开可用的 URL 来下载数据,然后将该数据转换为与 Kraken 2 兼容的形式。
此外,如果您在研究中使用这些数据库之一,请访问相应数据库的网站以确定适当和最新的引用。
Confidence Scoring
目前,我们还没有为 Kraken 2 开发带有概率解释的置信度分数。但是,我们开发了一个简单的评分方案,它为我们带来了很好的结果,我们通过使用kraken2
的 --confidence
选项。我们使用的方法允许用户在 [0,1] 区间内指定阈值分数;然后分类器将向上调整标签,直到标签的分数(如下所述)达到或超过该阈值。如果分类树根部的标签的分数不超过阈值,则在应用此阈值时,Kraken 2 将序列称为未分类。
序列标签的分数是分数 C/Q,其中 C 是映射到以标签为根的进化枝中 LCA 值的 k-mer 的数量,Q 是 *k 的数量序列中的 *-mers 缺少不明确的核苷酸(即,它们是针对数据库查询的)。考虑前面给出的 Kraken 2 输出中的 LCA 映射示例:
"562:13 561:4 A:31 0:1 562:3" 表示:
- 前 13 个 k-mers 映射到分类 ID #562
- 接下来的 4 个 k-mers 映射到分类 ID #561
- 接下来的 31 个 k-mers 包含一个不明确的核苷酸
- 下一个 k-mer 不在数据库中
- 最后 3 个 k-mers 映射到分类 ID #562
在这种情况下,ID #561 是#562 的父节点。在这里,这个序列的标签 #562 的得分为 C/Q = (13+3)/(13+4+1+3) = 16/21。 #561 标签的得分为 C/Q = (13+4+3)/(13+4+1+3) = 20/21。如果用户指定的 --confidence
阈值超过 16/21,分类器会将原始标签从 #562 调整为 #561;如果阈值大于 20/21,则序列将变为未分类。
Inspecting a Kraken 2 Database's Contents
kraken2-inspect
脚本允许用户获取有关 Kraken 2 数据库内容的信息。 kraken2-inspect
的输出格式与使用 kraken2
的 --report
选项生成的报告相同。 不像kraken2
的--report
选项那样报告分类到给定分类单元或进化枝的输入数据中有多少读取,kraken2-inspect
脚本将报告数据库中映射的最小化器的数量 到各种分类群/进化枝。 例如,示例数据库中kraken2-inspect
输出的前五行可能如下所示:
$ kraken2-inspect --db EXAMPLE_DB | head -5
100.00% 1770368409 1581179 R 1 root
96.50% 1708407622 58003 R1 131567 cellular organisms
91.28% 1615910070 985309 D 2 Bacteria
43.89% 777062062 1312736 P 1224 Proteobacteria
18.62% 329590216 555667 C 1236 Gammaproteobacteria
该输出表明,数据库中的 555667 个最小化子直接映射到 Gammaproteobacteria 类(taxid #1236),并且数据库的 329590216(18.62%)个最小化子映射到根植于 Gammaproteobacteria 的进化枝中的分类单元。 有关 kraken2-inspect
选项的更多信息,请使用其 --help
选项。
Distinct minimizer count information
KrakenUniq 项目扩展了 Kraken1,其中包括报告输入测序数据中与每个分类单元相关的不同 k-mer 数量的估计值。这使用户可以更好地确定 Kraken 的分类是由于分布在整个参考基因组中的读数,还是由于参考基因组的一小部分(因此可能是假阳性)。
由于 KrakenUniq 的开发人员 Florian Breitwieser 的慷慨允许部分 KrakenUniq 源代码在 Kraken2 的 MIT 许可下获得许可,这种独特的计数估计现在可以在 Kraken 2 中使用。Martin Steinegger 和 Ben Langmead 的开发工作帮助将此功能引入Kraken2。
目前,此功能是可选的实验性功能——这意味着我们以后可能会以不向后兼容该功能的先前版本的方式对其进行更改。
要使用此功能,只需运行带有附加的 --report-minimizer-data
标志以及 --report
的 kraken2
脚本,例如:
kraken2 --db $DBNAME --report k2_report.txt --report-minimizer-data \
--output k2_output.txt sequence_data.fq
这会将标准 Kraken 2 输出(格式如 [标准 Kraken 输出格式] 中所述)放在 k2_output.txt
中,并将报告信息放在 k2_report.txt
中。 在报告文件中,将出现另外两个列,例如:
normal report format:
36.40 182 182 S2 211044 Influenza A virus (A/Puerto Rico/8/1934(H1N1))
modified report format:
36.40 182 182 1688 18 S2 211044 Influenza A virus (A/Puerto Rico/8/1934(H1N1))
在这个修改后的报告格式中,第四和第五个新列是两个新列,分别代表在读取序列中发现与分类单元相关的最小化子的数量(1688),以及与分类单元相关的不同最小化子数量的估计在读取的序列数据 (18) 中。这表明尽管 182 个读数被归类为属于 H1N1 流感,但只有 18 个不同的最小化因子导致了这 182 个分类。
带有 --report-minimizer-data
标志的格式类似于 [Sample Report Output Format] 中描述的格式,但略有不同。这种新格式的字段从左到右是:
- 植根于该分类单元的进化枝覆盖的碎片百分比
- 植根于该分类单元的进化枝所覆盖的片段数量
- 直接分配给该分类单元的片段数
- 与该分类单元相关的读取数据中的最小化器数量(新)
- 与此分类单元相关的读取数据中不同最小化器数量的估计(新)
- 等级代码,表示 (U)nclassified, (R)oot, (D)omain, (K)ingdom, (P)hylum, (C)lass, (O)rder, (F)amily, (G) enus,或(S)物种。不在这 10 个等级中的任何一个的分类单元都有一个等级代码,该等级代码是通过使用最接近祖先等级的等级代码和一个表示与该等级距离的数字形成的。例如,“G2”是一个等级代码,表示一个分类单元在属和种之间,而祖父母分类单元处于属等级。
- NCBI分类ID号
- 缩进的学名
我们决定将此作为可选功能,以免破坏处理 Kraken 2 标准报告格式的现有软件。但是,可以使用以下命令将此新格式转换为标准报告格式:
cut -f1-3,6-8 k2_new_report.txt > k2_std_report.txt
如上所述,这是一个实验功能。 我们打算继续开发此功能,如果我们确定有必要,可能会更改新格式和/或其信息。
有关此功能中使用的数据结构及其与 Kraken 交互的背景信息,请阅读 KrakenUniq 论文,并请引用 如果您将此功能用作您工作的一部分,请阅读该论文。
Kraken 2 Environment Variables
kraken2
和 kraken2-inpsect
脚本支持使用一些环境变量来帮助减少命令行长度:
-
KRAKEN2_NUM_THREADS
:如果--threads
选项未提供给kraken2
,则此变量的值(如果已设置)将用作运行kraken2
的线程数 . (此变量不影响kraken2-inspect
。) -
KRAKEN2_DB_PATH
:很像PATH
变量被你的 shell 用于可执行文件,KRAKEN2_DB_PATH
是一个冒号分隔的目录列表,如果命名的数据库没有,则会搜索你命名的数据库 有一个斜杠 (/
) 字符。 默认情况下,Kraken 2 假定此变量的值为“.
”(即当前工作目录)。 此变量可用于在多用户系统中创建 Kraken 数据库的一个(或多个)中央存储库。 bash 中的示例用法:
export KRAKEN2_DB_PATH="/home/user/my_kraken2_dbs:/data/kraken2_dbs:"
这将导致按以下顺序搜索三个目录:
1./home/user/my_kraken2_dbs
2./data/kraken2_dbs
当前工作目录(由空字符串作为KRAKEN2_DB_PATH
字符串中的第三个冒号分隔的字段引起)
找到名称匹配时,将停止搜索数据库; 如果 KRAKEN2_DB_PATH
中的两个目录具有相同名称的数据库,则首先搜索到的两个目录将作为数据库。
如果使用上述变量和值,并且存在数据库/data/kraken2_dbs/mainDB
和./mainDB
,则
kraken2 --db mainDB sequences.fa
将使用 /data/kraken_dbs/mainDB
对 sequences.fa
进行分类; 相反,如果您想使用当前目录中的“mainDB”,则需要指定该数据库的目录路径以规避搜索,例如:
kraken2 --db ./mainDB sequences.fa
请注意,可以通过使用任何绝对路径名(以 /
开头)或相对路径名(包括至少一个 /
)作为数据库名称来跳过 KRAKEN2_DB_PATH
目录列表。
-
KRAKEN2_DEFAULT_DB
:如果没有使用--db
选项提供数据库,则将使用此变量中命名的数据库。 使用此变量,如果您只有一个通常使用的数据库,则可以避免使用--db
,例如 在 bash 中:
export KRAKEN2_DEFAULT_DB="/home/user/kraken2db"
kraken2 sequences.fa > kraken2.output
这将使用 /home/user/kraken2db
数据库对 sequences.fa
进行分类。
请注意,如果您没有将 KRAKEN2_DEFAULT_DB
设置为绝对或相对路径名,KRAKEN2_DEFAULT_DB
的值也将在 KRAKEN2_DB_PATH
值的上下文中解释。 鉴于本节前面的示例,以下内容:
export KRAKEN2_DEFAULT_DB="mainDB"
kraken2 sequences.fa
将使用 /data/kraken_dbs/mainDB
对 sequences.fa
进行分类。
网友评论