美文网首页
Kraken2建库及使用

Kraken2建库及使用

作者: xiaoji_hb | 来源:发表于2024-04-18 09:16 被阅读0次

Kraken软件可以通过序列对样本进行物种注释,kraken2在该软件基础之上做了一些更新,其中包括注释的加速、支持氨基酸序列的注释等其他特性。

软件安装、基本使用以及专有数据库的下载,可以直接查看官网说明,很详细。链接https://github.com/DerrickWood/kraken2/blob/master/docs/MANUAL.markdown

在有部分研究结果的基础上,我们可以把自己积累的数据加到已有的数据库中,用来搭建更适合自己数据分析的数据库。在使用自己序列建库之前,需要先至少安装一个已有的kraken2数据库。

下载物种注释信息

kraken2-build --download-taxonomy --db kraken2_dbtest

下载的文件放在kraken2_dbtest目录

下载物种数据库

kraken2-build --download-library bacteria --db kraken2_dbtest

向数据库中添加自己的序列

kraken2-build --add-to-library test.genomic.fna --db kraken2_dbtest

添加自己的序列时,需要指定taxid等信息,如果没有这些信息,会报以下错误

$ kraken2-build --add-to-library test.genomic.fna --db kraken2_dbtest
Use of uninitialized value $taxid in pattern match (m//) at scan_fasta_file.pl line 43, <> line 1.
Use of uninitialized value $taxid in concatenation (.) or string at scan_fasta_file.pl line 47, <> line 1.
Use of uninitialized value $taxid in pattern match (m//) at scan_fasta_file.pl line 43, <> line 5.
Use of uninitialized value $taxid in concatenation (.) or string at scan_fasta_file.pl line 47, <> line 5.
Masking low-complexity regions of new file... done.
Added "test.genomic.fna" to library (test2)

此时有两种方法可以解决

  • 修改序列名

这种方法最简单,直接处理我们提供序列的id,添加对应的taxid信息,示例如下

>seq1|kraken:taxid|999999991  seq1
···
>seq2|kraken:taxid|999999992  seq2
···
>seq3|kraken:taxid|999999993  seq3
···
>seq4|kraken:taxid|999999994  seq4
···

添加的taxid需要注意,不能与原有数据库中的taxid有重复。

  • 修改已有的taxonomy文件

这种方法不需要修改自己的序列,可以直接将提供序列的信息加入到taxonomy和library两个目录中的注释文件内。

taxonomy目录下存在多个注释文件,如下载的RefSeq数据库中包含以下文件

citations.dmp
delnodes.dmp
division.dmp
gc.prt
gencode.dmp
images.dmp
merged.dmp
names.dmp
nodes.dmp
nucl_gb.accession2taxid
nucl_wgs.accession2taxid
prelim_map.txt
readme.txt

各文件中的内容及各列含义,可以参照目录下的readme.txt文件。根据readme.txt文件的说明,将自己的序列信息添加到文件中,需要修改的文件名包括names.dmp、nodes.dmp、accession2taxid和nucl_gb.accession2taxid文件。

# names.dmp
3059595 |   Entrophosporales    |       |   scientific name |
91234567891 |    seq1   |       |   scientific name |
91234567892 |   seq2    |       |   scientific name |
91234567893 |   seq3    |       |   scientific name |
91234567894 |   seq4    |       |   scientific name |

# nodes.dmp
3059595 |   214506  |   order   |       |   4   |   1     code compliant    |
91234567891 |   1   |   no rank |   |   8   |   0   |
91234567892 |   1   |   no rank |   |   8   |   0   |
91234567893 |   1   |   no rank |   |   8   |   0   |
91234567894 |   1   |   no rank |   |   8   |   0   |

# nucl_gb.accession2taxid
Z99999  Z99999.1    77601   3399750
NC_099991   NC_099991.1 91234567891 912345678911
NC_099992   NC_099992.1 91234567892 912345678921
NC_099993   NC_099993.1 91234567893 912345678931
NC_099994   NC_099994.1 91234567894 912345678941

library目录主要修改map文件,文件名prelim_map.txt。

# prelim_map.txt
ACCNUM  NC_067270.1 NC_067270
ACCNUM  NC_099991.1 NC_099991
ACCNUM  NC_099992.1 NC_099992
ACCNUM  NC_099993.1 NC_099993
ACCNUM  NC_099994.1 NC_099994

修改完成后,重新构建数据库索引即可。

$ kraken2-build --add-to-library test.genomic.fna --db kraken2_dbtest
Masking low-complexity regions of new file... done.
Added "test.genomic.fna" to library (kraken2_dbtest)

数据库构建完成后,建库目录会生成hash.k2dopts.k2dtaxo.k2d三个文件,其他文件可以删除。

添加自己的序列时,建议直接修改序列名,会方便很多。第二种方法对格式有要求,格式不对建库会失败。另外,自己序列在指定taxid时,不能太大,否则在运行时会超限,返回结果与建库序列的taxid不一致。

物种注释

数据库构建完毕后,可以使用如下命令进行注释。

# 输入序列为fasta
kraken2 --db kraken2_dbtest test.fna --report k2_report.txt --use-names >kraken2_anno.output 2>kraken2_anno.error

# 输入序列为fastq (PE测序)
kraken2 --db kraken2_dbtest test.fq --paired --report k2_report.txt --use-names >kraken2_anno.output 2>kraken2_anno.error
  • output文件

kraken2_anno.output文件会记录每条序列的注释结果,示例如下

C   NZ_BANN01000056.1   Streptococcus parauberis KCTC 11980BP (taxid 1260132)  353  1301:2 91061:7 1301:35 1260132:36 1301:47 1260132:40 91061:3 1260132:34 91061:5 1239:13 91061:2 1260132:39 1301:9 91061:5 1783272:1 91061:2 186826:5 91061:17 1260132:10 0:7
C   NZ_QDLQ01000070.1   Salmonella enterica (taxid 28901)   442 28901:408
C   NZ_MOXO01000049.1   Ensifer adhaerens (taxid 106592)    36028   0:2824 133448:2 0:22 28901:1 0:5837 200452:12 0:89 106592:10 0:121 286:5 0:1475 1236:5 656:2 0:9 656:1 0:96 286:3 0:321 106592:5 0:15690 1299326:2 0:2779 595497:5 0:2025 106592:5 0:1513 1224:2 106592:5 0:181 2:3 0:67 1619950:3 0:11 169292:1 0:582 106592:3 0:1 106592:2 0:310 106592:1 0:18 1716172:4 0:78 106592:5 0:1858
U   NZ_MOXO01000052.1   unclassified (taxid 0)  34220   0:2408 106592:5 0:31773
U   NZ_MOXO01000075.1   unclassified (taxid 0)  29561   0:1499 106592:2 0:28026

第一列表明该序列是否被注释,C表示注释成功,U表示注释失败;第二列为待注释序列的id,来源于输入文件;第三列是物种的taxid,默认只输出taxid,此处物种的名字+taxid是因为使用了--use-names参数;第四列为序列长度,如果是PE测序的fastq序列,该列为两个数,表示两条配对reads各自的长度,如150|150;其他各列为各种统计结果

  • report文件

k2_report.txt文件会记录注释的统计结果,示例如下

 95.07  58411   58411   U       0       unclassified
  4.93  3028    1408    R       1
  0.15  91      91      R1      26517   Salmonella enterica
  0.14  89      89      R1      12689
  0.13  80      80      R1      11033

第一列是序列占比;第二列是比对到数据库目标序列的序列条数(covered to taxid);第三列为有注释结果的序列条数(assigned to taxid);第四列是注释结类型,包括 (U)nclassified、(R)oot、(D)omain、(K)ingdom、(P)hylum、(C)lass、(O)rder、(F)amily、(G)enus和(S)pecies;第五列为序列的taxid;最后一列为物种名(该信息如果数据库里有可以获取,没有的话留空)。

参考文章

[1] https://ccb.jhu.edu/software/kraken2/index.shtml?t=manual

[2] https://github.com/DerrickWood/kraken2

相关文章

  • 巡护轨迹生成

    巡护轨迹生成 使用postgres数据库及空间扩展函数,得到巡护轨迹数据及巡护里程数 1.建表 t_app_gri...

  • Oracle XE中不支持WMSYS.WM_CONCAT的应对

    遇到的问题: 使用Oracle 11g XE 部署一个已有的应用,发现在该应用的建库脚本及应用中的数据库访问中都有...

  • mysql建库建表3

    mysql建库建表 数据库创建相关常用语句 创建数据库 切换到数据库 dbone; 查看当前使用的数据库 如果不存...

  • 极简Querydsl入门

    1 数据库准备 使用MySQL数据库。 1.1 创建名为learnsql的数据库 建库语句 使用刚刚创建的lear...

  • snpEff安装及建库

    snpEff安装及使用: 1.安装(推荐这种方法而不是conda) 参考: http://pcingola.git...

  • (1)单细胞测序前沿、应用、通识

    内容来自菲沙基因讲座。如有侵删 单细胞转录组建库原理 建库原理——3‘端【只做单细胞时使用】 建库原理——5‘端【...

  • MySQL 生成累计乘积

    备注:测试数据库版本为MySQL 8.0 如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数...

  • MySQL 计算不包含最大值最小值

    备注:测试数据库版本为MySQL 8.0 如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数...

  • MySQL计算中间值

    备注:测试数据库版本为MySQL 8.0 如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数...

  • MySQL 确定哪些是叶节点、分子节点、根节点

    备注:测试数据库版本为MySQL 8.0 如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数...

网友评论

      本文标题:Kraken2建库及使用

      本文链接:https://www.haomeiwen.com/subject/gexexjtx.html