metagenome シークエンスから高速に各readの系統を推定するKraken2[環境構築]

# Krakenとは
k-merを用いて多数の配列に対してそれぞれの配列の系統を高速に推定するtoolです。

2019年の末に後続のKraken2の論文がｐublish されました

Kraken2とKrakenとの差分としては
	1. k-mer/LCAとのindex が大きすぎて負担になっていたので、k-merのminimizerを使うことでLCAとの対応を損なわずindexを圧縮した
	2. proteinや16s db への対応
	3. hash table を使うことによって高速化(1%未満のqueryのfalse positiveは許容してね）その分早く、memory efficientになった
という感じでこだわりが無ければKraken2を使ってよいと思います。

# Krakenアルゴリズム
1. readから指定のk に対してすべてのk-mer をrefseq db の近いものにmappingしてunique っぽいk-merごとに近縁種を同定する
2. それぞれのreadを mappingされたk-merから重み付けをしてどの分類群に当てはめればいいかを決める
(NCBI refseqのdb からclade-specific k-merを取得して分類します)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253261/f685c833-419c-5d23-95cb-dca1da1e5eba.png)

アルゴリズム概略図
Wood DE, Salzberg SL: Kraken: ultrafast metagenomic sequence classification using exact alignments. Genome Biology 2014, 15:R46.より引用

# 環境構築
conda でやるならば biocondaのpage(https://anaconda.org/bioconda/kraken2）
から行えるが、公式でcondaをサポートする気がないようなので（github のissue で答えていた)
ソースコードから展開する手法を紹介する

```install.sh
wget http://github.com/DerrickWood/kraken2/archive/v2.0.8-beta.tar.gz
tar -zxvf v2.0.8-beta.tar.gz
cd kraken2-2.0.8-beta/
sh install_kraken2.sh ../ # 一つ上の階層に展開する
```

以上を実行して
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253261/70ee2071-683d-a278-f510-cf7860d8973d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253261/5c989139-e665-e3a9-3d43-9d553e3b4c31.png)
上記のmessageが出ればOK
指定したフォルダ以下に以下のようにscript群が展開されているはず


# 必要なDBのダウンロード
Krakenを実行するためには４つのdb が必要となる
database.kdb: kmerとtaxon の関係性を示すもの(mapping) 1vs 1 のはず
database.idx: step1でk-merを探すために必要なminimizer(seed配列）
taxonomy/nodes.dmp: taxonomy tree structure + ranks (重みづけの表、おそらく分類が上にいくほど大雑把になるほど重くなる）
taxonomy/names.dmp: 系統の名前の表

それぞれのdbをまとめたセットとして公式が管理しているDBをhttps://ccb.jhu.edu/software/kraken2/index.shtml?t=downloads　からダウンロードすることができる
MiniKraken db : 5.5Gb
Standard Kraken db : ~30Gb
その他、Kraken2から対応するようになった16Sのファイルもダウンロードすることができる

Standard,MiniKrakenDBを使った際にどのくらいのパフォーマンスがでるか示した表が以下です（kraken HPより）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253261/aa4a72c5-a7c7-a664-b39c-04922c0737f6.png)

今回はminikraken2をダウンロードする

```db_download.sh
# 場所はコマンドで指定するのでどこでもいいが、Kraken2以下に保存する
wget ftp://ftp.ccb.jhu.edu/pub/data/kraken2_dbs/old/minikraken2_v2_8GB_201904.tgz
# .tgz で保存されるので展開(.tar.gz と同じ）
tar -xzvf minikraken2_v2_8GB_201904.tgz 
```

# 解析の実行
実行時にはdbとinputの配列を指定する
minikraken2の場合だとdefaulｔで8Gbのメモリを確保するので、それ以上のメモリを確保するようにする

```classify.sh
# classifyの実行
/kraken_path/kraken2/kraken2 --db minikraken2_v2_8GB_201904_UPDATE /sequence_path/~~.fa
```

メモリが足りないときのエラー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253261/d962f0f0-580f-42c1-63a1-ac36a1f07646.png)

>Loading database information...Failed attempt to allocate 8,000,000,000bytes;
you may not have enough free memory to load this database.
If your computer has enough RAM, perhaps reducing memory usage from
other programs could help you load this database?
classify: unable to allocate hash table memory

# 参考
[Kraken2のgithub wiki](https://github.com/DerrickWood/kraken2/wiki/Manual)
[Kraken2HP](https://ccb.jhu.edu/software/kraken2/index.shtml?t=downloads)
[Kraken2の論文](https://genomebiology.biomedcentral.com/articles/10.1186/s13059-019-1891-0)
[Kraken2のアルゴリズムやコマンドについて概説したサイト](https://learn.gencore.bio.nyu.edu/metgenomics/shotgun-metagenomics/taxonomic-classification/)
[少し古いですが各種の系統推定のtoolを比較した論文](https://genomebiology.biomedcentral.com/articles/10.1186/s13059-017-1299-7)