M1 Macにdocker版 fuannotateの環境を作る

菌類を初めとする真核生物の遺伝子予測を行うfunannotateをMacで行う場合には、dockerまたはconda環境で使用可能です。ここではdocker版をM1 Macにインストールする方法を解説します。

Fuannotateの説明は
Github: https://github.com/nextgenusfs/funannotate
公式ガイド: https://funannotate.readthedocs.io/en/latest/index.html
を参考にしてください。

# 準備
brewやwgetがインストールされていなければ、インストールする。

### brewのインストール
ターミナルにbrewがインストールされている場合はスキップしてください。

brewがインストールされているか確かめる方法
``` bash
$ which brew
/opt/homebrew/bin/brew
```
インストールされていればパスが（上記とは異なるかもしれませんが）、インストールされていない場合は、
```bash
command not found
```
と出ます。
インストールされていない場合には、こちらのHPから
https://brew.sh/ja/　
インストールできます。
インストール方法は２つあり、どちらか選んでください。

##### ①コマンドを打つ方法
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
これで完了。

##### ② pkgからインストールする方法（少し手間です）
こちらから .pkg版をダウンロードします。
https://github.com/Homebrew/brew/releases/tag/4.4.9
インストーラーを起動すると、最後に小さなポップアップが出て、PATHを足すようにメッセージが出ますので、ウインドウを閉じずにそれをコピーしておいてください。
私の場合は、ターミナルのシェルがbashでしたので、
```bash
$ echo $SHELL
/bin/bash
$ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' > .bashprofile
$ source .bashrc
```
をターミナルで打ちます。デフォルトでzshを使用している場合は、
```
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' > .zprofile
source .zshrc
```
となります。
インストールが成功していれば
```
which brew
```
でパスが出てくるはずです。

### wgetのインストール
whichコマンドでインストールされているか確認。
```
$ which wget
/usr/local/bin/wget
```
コマンドが見つからないというメッセージが出たら、brewでインストールします。

```bash
brew install wget
```
メッセージがダラダラでると思いますが、warningとかerrorとか怪しい感じのメッセージが出ず、which wgetをしてパスが表示されたらインストール完了です。


## dockerのインストール
最新版を https://www.docker.com/ja-jp/ から ダウンロードします。

## docker版 fuannotateのインストール
そのままdocker pullをするとM1 macはアーキテクチャがamd64対応でないため、インストールできません。そこで以下の方法で対応します。

##### Dockerアプリケーションの設定
Dockerのアプリケーションを開き、__Settings__(右上の歯車マーク）をクリックし、__General__ のページを下の方にスクロールすると、__Virtual Machine Options__ があります。
ここが
__✓ “Apple Virtualization framework”__
__✓ Use Rosetta for x86_64/amd64 emulation on Apple Silicon__
にチェックされていることを確認します。チェックされていなければチェックして、右下の __"apply & restart"__ をクリックします。

##### funannotateをインストールする
以下のコマンドを打ちます。--platformオプションが必須です。
```bash
docker pull --platform linux/amd64 nextgenusfs/funannotate
```
ダウンロードが始まります。何分かかかると思います。
終わったら、ラッパーであるfunannotate-dockerをインストールします。
```bash
$ wget -O funannotate-docker https://raw.githubusercontent.com/nextgenusfs/funannotate/master/funannotate-docker
```

実行権限を付加
```
$ chmod +x funannotate-docker
```

実行権限が変更されているか確認
```
$ ls -al
total 8
drwx------+  3 PC01  staff   96B  3 27  2024 Desktop
drwx------+  3 PC01  staff   96B  3 27  2024 Documents
drwx------+  5 PC01  staff   160B 12  3 14:47 Downloads
drwx------@ 86 PC01  staff   2.7K 12  3 10:11 Library
drwx------   4 PC01  staff   128B  3 29  2024 Movies
drwx------+  4 PC01  staff   128B 12  2 21:41 Music
drwx------+  4 PC01  staff   128B  3 27  2024 Pictures
drwxr-xr-x+  4 PC01  staff   128B  3 27  2024 Public
-rwxr-xr-x   1 PC01  staff   930B 12  3 14:52 funannotate-docker
```
funannotate-dockerの左側が、こんな感じになっていれば大丈夫です。

## fuannotateのテスト
ヘルプ画面を出してみます。
```bash
$ ./funannotate-docker -help
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

Usage:       funannotate <command> <arguments>
version:     1.8.17

Description: Funannotate is a genome prediction, annotation, and comparison pipeline.

Commands:  
  clean       Find/remove small repetitive contigs  
  sort        Sort by size and rename contig headers  
  mask        Repeatmask genome assembly
  
  train       RNA-seq mediated training of Augustus/GeneMark  
  predict     Run gene prediction pipeline  
  fix         Fix annotation errors (generate new GenBank file)  
  update      RNA-seq/PASA mediated gene model refinement  
  remote      Partial functional annotation using remote servers  
  iprscan     InterProScan5 search (Docker or local)  
  annotate    Assign functional annotation to gene predictions  
  compare     Compare funannotated genomes
  
  util        Format conversion and misc utilities  
  setup       Setup/Install databases  
  test        Download/Run funannotate installation tests  
  check       Check Python, Perl, and External dependencies [--show-versions]  
  species     list pre-trained Augustus species  
  database    Manage databases  
  outgroups   Manage outgroups for funannotate compare

Written by Jon Palmer (2016-2022) nextgenusfs@gmail.com with contributions by Jason Stajich jasonstajich.phd@gmail.com
```
アーキテクチャに関する警告が出ますが、ヘルプ画面が出ればOKです。

次にtestコマンドを使って、実行をテストしてみます。

```bash
$ ./funannotate-docker test -t predict
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
#########################################################
Running `funannotate predict` unit testing
Downloading: https://osf.io/te2pf/download?version=1 Bytes: 1489808
CMD: funannotate predict -i test.softmasked.fa --protein_evidence protein.evidence.fasta -o annotate --augustus_species saccharomyces --cpus 2 --species Awesome testicus
#########################################################
-------------------------------------------------------
[Dec 03 03:32 PM]: OS: Debian GNU/Linux 10, 8 cores, ~ 8 GB RAM. Python: 3.8.12
[Dec 03 03:32 PM]: Running funannotate v1.8.17
[Dec 03 03:32 PM]: GeneMark not found and $GENEMARK_PATH environmental variable missing. Will skip GeneMark ab-initio prediction.
[Dec 03 03:32 PM]: Skipping CodingQuarry as no --rna_bam passed
[Dec 03 03:32 PM]: Parsed training data, run ab-initio gene predictors as follows:
 Program   Training-Method
 augustus   pretrained   
 glimmerhmm  busco      
 snap     busco      
[Dec 03 03:32 PM]: Loading genome assembly and parsing soft-masked repetitive sequences
[Dec 03 03:32 PM]: Genome loaded: 6 scaffolds; 3,776,588 bp; 19.75% repeats masked
/venv/lib/python3.8/site-packages/funannotate/aux_scripts/funannotate-p2g.py:14: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
 from pkg_resources import parse_version
[Dec 03 03:32 PM]: Mapping 1,065 proteins to genome using diamond and exonerate
[Dec 03 03:32 PM]: Found 1,505 preliminary alignments with diamond in 0:00:03 --> generated FASTA files for exonerate in 0:00:00
   Progress: 1505 complete, 0 failed, 0 remaining      
[Dec 03 03:33 PM]: Exonerate finished in 0:00:56: found 1,270 alignments
[Dec 03 03:33 PM]: Running BUSCO to find conserved gene models for training ab-initio predictors
[Dec 03 03:48 PM]: 373 valid BUSCO predictions found, validating protein sequences
[Dec 03 03:50 PM]: 370 BUSCO predictions validated
[Dec 03 03:50 PM]: Running Augustus gene prediction using saccharomyces parameters
   Progress: 11 complete, 0 failed, 0 remaining     
[Dec 03 03:54 PM]: 1,485 predictions from Augustus
[Dec 03 03:54 PM]: Pulling out high quality Augustus predictions
[Dec 03 03:54 PM]: Found 371 high quality predictions from Augustus (>90% exon evidence)
[Dec 03 03:54 PM]: Running SNAP gene prediction, using training data: annotate/predict_misc/busco.final.gff3
[Dec 03 03:54 PM]: 1,491 predictions from SNAP
[Dec 03 03:54 PM]: Running GlimmerHMM gene prediction, using training data: annotate/predict_misc/busco.final.gff3
[Dec 03 03:58 PM]: 1,771 predictions from GlimmerHMM
[Dec 03 03:58 PM]: Summary of gene models passed to EVM (weights):
 Source     Weight  Count
 Augustus    1    1325 
 Augustus HiQ  2    372  
 GlimmerHMM   1    1771 
 snap      1    1491 
 Total     -    4959 
[Dec 03 03:58 PM]: EVM: partitioning input to ~ 35 genes per partition using min 1500 bp interval
   Progress: 47 complete, 0 failed, 0 remaining     
[Dec 03 04:11 PM]: Converting to GFF3 and collecting all EVM results
[Dec 03 04:11 PM]: 1,687 total gene models from EVM
[Dec 03 04:11 PM]: Generating protein fasta files from 1,687 EVM models
[Dec 03 04:11 PM]: now filtering out bad gene models (< 50 aa in length, transposable elements, etc).
[Dec 03 04:11 PM]: Found 134 gene models to remove: 0 too short; 0 span gaps; 134 transposable elements
[Dec 03 04:11 PM]: 1,553 gene models remaining
[Dec 03 04:11 PM]: Predicting tRNAs
[Dec 03 04:11 PM]: 112 tRNAscan models are valid (non-overlapping)
[Dec 03 04:11 PM]: Generating GenBank tbl annotation file
[Dec 03 04:11 PM]: Collecting final annotation files for 1,665 total gene models
[Dec 03 04:11 PM]: Converting to final Genbank format
[Dec 03 04:11 PM]: Funannotate predict is finished, output files are in the annotate/predict_results folder
[Dec 03 04:11 PM]: Your next step might be functional annotation, suggested commands:
-------------------------------------------------------
Run InterProScan (manual install): 
funannotate iprscan -i annotate -c 2

Run antiSMASH (optional): 
funannotate remote -i annotate -m antismash -e youremail@server.edu

Annotate Genome: 
funannotate annotate -i annotate --cpus 2 --sbt yourSBTfile.txt
-------------------------------------------------------
         
[Dec 03 04:11 PM]: Training parameters file saved: annotate/predict_results/saccharomyces.parameters.json
[Dec 03 04:11 PM]: Add species parameters to database:

 funannotate species -s saccharomyces -a annotate/predict_results/saccharomyces.parameters.json

#########################################################
SUCCESS: `funannotate predict` test complete.
#########################################################
```
最後に“SUCCESS”が出れば、動作テストが終了し、本番に進めます。 


#