funannotateを遺伝研スパコンにインストールする

# funannotateとは

- [funannotate](https://github.com/nextgenusfs/funannotate)はゲノム配列とその他必要なファイル（fastq, bamなど）を用意すれば、ワンストップで遺伝子アノテーション（構造アノテーションと機能アノテーション）ができてしまうというツール
- 色々な既存アノテーション用ツールのwrapper
- もともと菌類（fungi）用に開発されたが、真核生物にも使える（とはいえいろいろ難しいかもしれない;追記参照）
- ツールの説明はkazumaxneoさんのブログが詳しい→[リンクはこちら](http://kazumaxneo.hatenablog.com/entry/2020/10/05/073000)（日本語）
- singularityのコンテナではうまく動かなかったのでインストールを試みた

## 前提
- 遺伝研スパコン利用
- スパコンの個人アカウント使用 (/your/path/に置き換えています）
- /your/path/以下にminiconda3をインストール済み
- 以下のコマンドでメモリ容量多めにしてqloginしておく

```
$ qlogin -l mem_req=20G,vmem=20G
```

## インストール
### conda本体のアップデートとbaseのアップデート
これをやっておかないと、依存パッケージが入らないことが多い

```
#conda環境のupdate
$ conda update conda && conda update --all 
```

（conda clean --allもここでやっておくといいかもしれない）

### 仮想環境にfunannotateをインストール
GithubのDockerfileからcondaのレシピをとってきて、その通りにパッケージのバージョンを指定する
それぞれのパッケージのバージョン指定が厳格
condaインストールのデフォルトで入るaugusutusのバージョン3.4では動かないことに注意

```
$ conda create -c conda-forge -c bioconda -c defaults -n funannotate "python>=3.6,<3.9" funannotate "augustus=3.3" "trinity==2.8.5" "evidencemodeler==1.1.1" "pasa==2.4.1" "codingquarry==2.0" "proteinortho==6.0.16"
```

結構時間がかかるので放置
インストールがうまくいくと以下のようなメッセージが出る

```
##########################################################################################
All Users:
  You will need to setup the funannotate databases using funannotate setup.
  The location of these databases on the file system is your decision and the
  location can be defined using the FUNANNOTATE_DB environmental variable.
  
  To set this up in your conda environment you can run the following:
    echo "export FUNANNOTATE_DB=/your/path" > /your/path/miniconda3/envs/funannotate/etc/conda/activate.d/funannotate.sh
    echo "unset FUNANNOTATE_DB" > /your/path/miniconda3/envs/funannotate/etc/conda/deactivate.d/funannotate.sh
  
  You can then run your database setup using funannotate:
    funannotate setup -i all
    
  Due to licensing restrictions, if you want to use GeneMark-ES/ET, you will need to install manually:
  download and follow directions at http://topaz.gatech.edu/GeneMark/license_download.cgi
  ** note you will likely need to change shebang line for all perl scripts:
    change: #!/usr/bin/perl to #!/usr/bin/env perl
     
      
Mac OSX Users:
  Augustus and Trinity cannot be properly installed via conda/bioconda at this time. However,
  they are able to be installed manually using a local copy of GCC (gcc-8 in example below).

  Install augustus using this repo:
    https://github.com/nextgenusfs/augustus
  
  To install Trinity v2.8.6, download the source code and compile using GCC/G++:
    wget https://github.com/trinityrnaseq/trinityrnaseq/releases/download/v2.8.6/trinityrnaseq-v2.8.6.FULL.tar.gz
    tar xzvf trinityrnaseq-v2.8.6.FULL.tar.gz
    cd trinityrnaseq-v2.8.6
    make CC=gcc-8 CXX=g++-8
    echo "export TRINITY_HOME=/your/path" > /your/path/miniconda3/envs/funannotate/etc/conda/activate.d/trinity.sh
    echo "unset TRINITY_HOME" > /your/path/miniconda3/envs/funannotate/etc/conda/deactivate.d/trinity.sh    

##########################################################################################
```

### データベースPATHの設定
上記メッセージの通りにコマンドを入力
PATHも自分の環境に合わせたものが自動で出てくるのでそれに従う
以下の例では、`/your/path/funannotatedb`　にfunannotate用のデータベースを作成する

```
$ echo "export FUNANNOTATE_DB=/your/path/funannotatedb" > /your/path/miniconda3/envs/funannotate/etc/conda/activate.d/funannotate.sh
$ echo "unset FUNANNOTATE_DB" > /your/path/miniconda3/envs/funannotate/etc/conda/deactivate.d/funannotate.sh
```

### 仮想環境をアクティベートし、仮想環境内のpipを使って最新版にする
 
```
$ conda clean --all
$ conda activate funannotate
$ python -m pip install git+https://github.com/nextgenusfs/funannotate.git
```

以下のようなメッセージが出たら更新完了らしい

```
Installing collected packages: xlrd, docopt, funannotate
  Attempting uninstall: funannotate
    Found existing installation: funannotate 1.8.3
    Uninstalling funannotate-1.8.3:
      Successfully uninstalled funannotate-1.8.3
Successfully installed docopt-0.6.2 funannotate-1.8.4 xlrd-1.2.0
```

###  追加DBの設定
以下のコマンドでfanannotate用のデータベースが設定できる
コアダンプになる時はスクリプトにしてqsubで投入する

```
$ funannotate setup -i all
```
インストールされたデータベースの確認

```
$ funannotate database #メモリ20GBならコマンド動く

Funannotate Databases currently installed:

  Database          Type        Version      Date         Num_Records   Md5checksum                     
  merops            diamond     12.0         2017-10-04          5009   a6dd76907896708f3ca5335f58560356
  uniprot           diamond     2021_01      2021-02-10        564277   ed8d1f5be298f1c497fbdcafebfe2dad
  dbCAN             hmmer3      9.0          2020-08-04           641   04696dfba1c3bb82ff9b72cfbb3e4a65
  pfam              hmmer3      33.1         2020-04            18259   228db640818af54066a1c23404a3ba38
  repeats           diamond     1.0          2021-02-19         11950   4e8cafc3eea47ec7ba505bb1e3465d21
  go                text        2021-02-01   2021-02-01         47210   093c97951359558c45f216ee4a222374
  mibig             diamond     1.4          2021-02-19         31023   118f2c11edde36c81bdea030a0228492
  interpro          xml         84.0         2021-02-11         38549   1ba3eb51aa4b4f57f0f812e6374d3a2a
  busco_outgroups   outgroups   1.0          2021-02-19             8   6795b1d4545850a4226829c7ae8ef058
  gene2product      text        1.65         2020-10-05         33749   0f2d46d3f7d1f08a87c1d4fec1eb05bb

To update a database type:
	funannotate setup -i DBNAME -d /your/path/funannotatedb --force

To see install BUSCO outgroups type:
	funannotate database --show-outgroups

To see BUSCO tree type:
	funannotate database --show-buscos
```

BUSCOのspiciesはデフォルトでfungiしか入っていないので、哺乳類ゲノムのためにmammaliaを入れた

```
$ funannotate setup -i all -b mammalia
```

他の生物種のsetを入れたい場合は

```
$ funannotate database --show-buscos
```

でオプション-bの後に入力する名前を確認していれる

DBのアップデートは以下のコマンドでできる

```
#funannotate setup -i all　--update　
```

### 依存パッケージの準備（GeneMark-ES）

GeneMark-ESを`/your/path/`にインストールする
こちらの[サイト](http://topaz.gatech.edu/GeneMark/license_download.cgi)で名前、メールアドレスなど登録すると、ソースコードとkeyのダウンロードページにいく
linux_64のコードとkey（gm_key_64.gz)を両方DLしておく
gm_key_64.gz は解凍して ~/.gm_key_64 としてホームディレクトリにコピー
ソースコードフォルダの中のgm_keyではダメなので注意

`conda activate funannotate` した状態で

```
$ cd /your/path/gmes_linux_64
$ ./check_install.bash
```

足りないモジュールをcpanで入れる
注）おそらく仮想環境funannotateでは以下の2つが足りないと言われるのではないかと思われる

```
The following Perl modules are required:
   MCE::Mutex
   Math::Utils
```

conda（funannotate)のcpanを使って、上記Perlモジュールをインストール

```
$ cpan
> install MCE::Mutex
> install Math::Utils
> q
```

確認

```
$ ./check_install.bash
Checking GeneMark-ES installation
All required components for GeneMark-ES were found
```
上記メッセージが出たらOK

**追記**（2021-06-05)
GeneMark-ESの実行中にYAML.pmがない`Can't locate YAML.pm in @INC`というエラーが出た
condaのPerlモジュールが読み込めてない可能性あり
[funannotateのissue](https://github.com/nextgenusfs/funannotate/issues/242)を参考に、GeneMark-ESがあるディレクトリに移動し、以下のスクリプトを実行した

```
./change_path_in_perl_scripts.pl '/usr/bin/env perl'
```
これで動くといいんだけど...
(なおGeneMark-ES抜きでもpredict自体は進む）



### インストールのチェック
多くの依存パッケージがあるので、
正しくインストールされているかどうかチェック用のコマンド`funannotate check`が用意されている
以下のようなスクリプト`check_install.sh`を作る

```check_install.sh
#$ -S /bin/bash
#$ -pe def_slot 2
#$ -cwd
#$ -l mem_req=25G,s_vmem=25G
#$ -l d_rt=192:00:00
#$ -l s_rt=192:00:00


conda activate funannotate

export GENEMARK_PATH=/your/path/gmes_linux_64/
export PATH=$PATH:/your/path/gmes_linux_64/
export PATH=$PATH:/your/path/signalp-4.1

funannotate check --show-versions > check.txt 
```

qsubで実行する

```
$ qsub check_install.sh

$ more check.txt 
-------------------------------------------------------
Checking dependencies for 1.8.4
-------------------------------------------------------
You are running Python v 3.7.10. Now checking python packages...
biopython: 1.78
goatools: 1.0.15
matplotlib: 3.3.4
natsort: 7.1.1
numpy: 1.20.1
pandas: 1.2.2
psutil: 5.8.0
requests: 2.25.1
scikit-learn: 0.24.1
scipy: 1.5.3
seaborn: 0.11.1
All 11 python packages installed


You are running Perl v b'5.026002'. Now checking perl modules...
Bio::Perl: 1.007002
Carp: 1.38
Clone: 0.42
DBD::SQLite: 1.64
DBD::mysql: 4.046
DBI: 1.642
DB_File: 1.855
Data::Dumper: 2.173
File::Basename: 2.85
File::Which: 1.23
Getopt::Long: 2.5
Hash::Merge: 0.300
JSON: 4.02
LWP::UserAgent: 6.39
Logger::Simple: 2.0
POSIX: 1.76
Parallel::ForkManager: 2.02
Pod::Usage: 1.69
Scalar::Util::Numeric: 0.40
Storable: 3.15
Text::Soundex: 3.05
Thread::Queue: 3.12
Tie::File: 1.02
URI::Escape: 3.31
YAML: 1.29
threads: 2.15
threads::shared: 1.56
All 27 Perl modules installed


Checking Environmental Variables...
$FUNANNOTATE_DB=/your/path/funannotatedb
$PASAHOME=/your/path/pasa-2.4.1
$TRINITY_HOME=/your/path/trinity-2.8.5
$EVM_HOME=/your/path/evidencemodeler-1.1.1
$AUGUSTUS_CONFIG_PATH=/your/path/miniconda3/envs/funannotate/config/
$GENEMARK_PATH=/your/path/gmes_linux_64/
All 6 environmental variables are set
-------------------------------------------------------
Checking external dependencies...
PASA: 2.4.1
CodingQuarry: 2.0
Trinity: 2.8.5
augustus: 3.3.3
bamtools: bamtools 2.5.1
bedtools: bedtools v2.30.0
blat: BLAT v36
diamond: 2.0.7
ete3: 3.1.2
exonerate: exonerate 2.4.0
fasta: no way to determine
glimmerhmm: 3.0.4
gmap: 2017-11-15
gmes_petap.pl: 4.64_lic
hisat2: 2.2.1
hmmscan: HMMER 3.3.2 (Nov 2020)
hmmsearch: HMMER 3.3.2 (Nov 2020)
java: 11.0.8-internal
kallisto: 0.46.1
mafft: v7.475 (2020/Nov/23)
makeblastdb: makeblastdb 2.2.31+
minimap2: 2.17-r941
proteinortho: 6.0.16
pslCDnaFilter: no way to determine
salmon: salmon 0.14.1
samtools: samtools 1.10
signalp: 4.1
snap: 2006-07-28
stringtie: 2.1.4
tRNAscan-SE: 2.0.7 (Oct 2020)
tantan: tantan 26
tbl2asn: no way to determine, likely 25.X
tblastn: tblastn 2.2.31+
trimal: trimAl v1.4.rev15 build[2013-12-17]
trimmomatic: 0.39
	ERROR: emapper.py not installed
```

`emapper.py`はEggnog（COG検索のmapper）で、現行バージョンのパーサがない（仕様が変わったので中の人のやる気がないらしい）ため、別にインストールして結果ファイルだけあとでオプションで加えて実行してほしいと[Github](https://github.com/nextgenusfs/funannotate/issues/551)にあった

Eggnogはv1.0.3をPython2の仮想環境を作ってインストールしなくてはならない
funannotate predict を実行するだけならemapper.pyはいらないのかも？

## 追記
- ゲノムサイズ**2.5GBの哺乳類ゲノム**を入れると、augustusの実行中にコアダンプして止まってしまった（500GBメモリ確保したのに）
- 全部入れるからダメなのかと思って染色体1本だけにしても、やっぱりaugustusの実行中コアダンプして止まってしまった
- 既存のbamを入れたら「合わない」と怒られたので、fastqから始めたほうがいいのかもしれない
- 上記理由で**本当にこの環境で動くのかどうかはまだ保証できない**
- もう少し**小さいゲノムサイズの生物種**で試す必要がある（実際に運用できているところでは、**菌類とか藻類などの1GB未満のゲノムサイズ**の生物種で実施していると聞いた）
- Eggnogのインストールをしたら追記予定

## 更新記録
- 2020-06-05 GeneMark-ESの設定について追記しました 
- 2022-03-07 `/home/hogehoge/`を`/your/path/`に置き換え