はじめに
この記事は私が以前noteでまとめた内容の更新版です。
また、もともとの記事は、内藤先生の記事を参考にしています。
目次
はじめに
ゲノムアノテーションとは
Eukaryotic Non-Model Transcriptome Annotation Pipeline (EnTAP)とは
①EnTAPの環境を構築する
②GCCとCMakeのバージョン確認
③データベースのダウンロード
④EnTAPのインストール
⑤EnTAPのiniファイルの編集
⑥EnTAPのConfiguration作業
⑦シンボリックリンクの作成
⑧run用のiniファイルを作成する
⑨実行後、logを確認
⑩最後に、final resultをコピーする
ゲノムアノテーションとは
ゲノムアノテーション(genome annotation)とは、
DNA配列の中から遺伝子やその他の機能的な要素(例えば、転写開始点、エクソン、イントロン、調節領域など)を特定し、それらの機能や位置情報を記録するプロセスを指す。
単純にDNAの塩基配列を解読しただけでは、その配列がどのような意味や機能を持っているかはわからない。
これらの配列情報を「解釈」し、遺伝子の機能を明らかにするのにゲノムアノテーションが必要不可欠である。
ゲノムアノテーションは、主に構造アノテーションと機能アノテーションの2種類に分けられる。
構造アノテーション(Structural Annotation):
遺伝子、エクソン、イントロン、プロモーター、その他の配列要素の物理的位置(座標)を特定する。これには、既知の配列情報やコンピュータープログラムを使って新しい配列から遺伝子や転写要素を検出することが含まれる。
例:braker2、GeMoMa等
以下を参考にしました。
機能アノテーション(Functional Annotation):
構造アノテーションされた配列に基づき、各遺伝子やその産物の機能を推定または確認する。
これは主に、進化的保存性や機能に関するデータベースと照らし合わせて行われる。例えば、ホモログ(類似する遺伝子)の検索や、既知の遺伝子との比較を通じて遺伝子の機能を推定する。
Eukaryotic Non-Model Transcriptome Annotation Pipeline (EnTAP)とは
EnTAPは、DIAMOND blastを使ったアミノ酸配列の相同性検索に基づくアノテーションツールである。
従来の手法では、ターゲット生物の遺伝子をアノテーションする際、モデル生物でアノテーションされた遺伝子配列との相同性を調べ、その結果を手作業でまとめる必要があった。しかし、EnTAPは複数のデータベース(NCBIやUniprot)を使用して得られた相同性検索の結果を1つのファイルに集約してくれるため、作業が大幅に効率化される。
内藤先生がこちらの記事で述べられているように、例えば2倍体生物のGFFファイルなどから推定される遺伝子数は約4万〜5万種類あるが、実際にアノテーションされる遺伝子はそのうち約3万種類に限られる。EnTAPを使うことで、このようなアノテーションされない不要な遺伝子を解析対象から除外することもできる。
EnTAPは、2017年にベータ版(v0.7.4)がGithub上で公開され、2020年にはMolecular Biology Resourcesに学術論文として発表された。それ以来、改良が続けられ、2024年にはv1.4.0がリリースされている。自分が初めてEnTAPを使ったのは2022年で、そのときのバージョンはv0.10.8ベータ版だったが、現在のバージョンとは使い方が大きく変わっているため、この機会にまとめておくことにした。v0.10.8ベータ版の使い方については、こちらのnoteにまとめてある。
なお、Nextflowというワークフロー作成ツールを使った「EnTAP-nf」というバージョンもあるが、2022年で開発が止まっており、試してみたところ上手く動作しなかったため、ここでは扱わない。
以下にQ&Aとしてまとめているので、わかる方は教えてください。
以下のドキュメントを参考に、インストールを進める
①EnTAPの環境を構築する
今回は、conda を使ってEnTAP用の仮想環境を作成する。
最近のcondaのライセンス変更により、特定のユーザーや企業がcondaを使う際に課金対象となる場合があるため、その点に注意して環境を整える必要がある。
condaのライセンスについて詳しく知りたい場合は以下のリンクを参照し、自分が課金対象になるかどうかを確認しておくとよい。
conda create -n EnTAP -y
conda activate EnTAP
※EnTAPのコンパイルエラーを防ぐために、RSEM、TransDecoder、DIAMOND、INTERPROSCANは後でインストールすることを推奨する。
これらを先に入れてしまうと、依存関係の問題やバージョンの不整合によってエラーが発生するかもしれないので、EnTAPのセットアップが完了してから順次インストールする。
※もしローカル環境でRを使用している場合、EnTAPの実行中に必要なRパッケージが不足していることがある。その際は、エラーが表示されたパッケージを逐次インストールする必要がある。具体的には、以下のようにしてパッケージをインストールする。
if (!requireNamespace("BiocManager", quietly = TRUE))
+ install.packages("BiocManager")
BiocManager::install("パッケージ名")
これを実行することで、必要なRパッケージがインストールされ、エラーを解消できる。適切にパッケージが揃っていない場合は、"not found"といったエラーメッセージが出るので、該当するパッケージ名を確認してインストールを進める。
②GCCとCMakeのバージョン確認
GCC 4.8.1以上 と CMake 3.00以上が必要
gcc --version
cmake --version
gccおよびcmakeのバージョンが古い場合のアップデート手順
(1)gccのアップデート
condaで再インストールするのが無難だが、すでにローカル環境でインストールしている場合、競合が起こりエラーになる可能性がある。その場合、以下の手順でmambaを使ってgccをアップデートする。
mamba install -c "conda-forge/label/cf202003" gcc -y
EnTAP環境を開くと、長いメッセージが表示されるが、気にしなくてよい。これは次のファイルが原因。
~/miniconda3/envs/EnTAP/etc/conda/activate.d/activate-binutils_linux-64.sh
(2)cmakeのアップデート
cmakeは通常ローカルにインストールすることが少ないので、condaでインストールしても問題ない。
また、localにインストールする手順は以下を参考に。
※2024年以降の国立遺伝研サーバー内でgccやcmakeを独自にインストールすることはやめといたほうがよさそう。
③データベースのダウンロード
BLASTデータベースのセットアップ
(1)必要なディレクトリを作成
mkdir -p ~/blast
mkdir -p ~/blast/database_for_blast
mkdir -p ~/blast/database_for_blast/sequences && cd ~/blast/database_for_blast/sequences
(2)Uniprotのデータをダウンロード
wget \
https://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/complete/uniprot_sprot.fasta.gz
gunzip uniprot_sprot.fasta.gz
(2)TrEMBLデータをダウンロード
注意:ダウンロードには半日くらいかかる
wget \
https://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/complete/uniprot_trembl.fasta.gz
gunzip uniprot_trembl.fasta.gz
(3)RefSeqの植物データをダウンロード
植物のRefSeqタンパク質データを連番でダウンロードする
ダウンロードファイル数は最新のものをこちら1からどこまであるのかを確認する。
for i in `seq 1 63`; do wget https://ftp.ncbi.nlm.nih.gov/refseq/release/plant/plant.$i.protein.faa.gz; done
pigz -d -p 16 *.faa.gz
cat *.faa > plants.faa
(4)NCBI non-redundant (NR) データのダウンロード
注意:ダウンロードには数時間かかる
wget https://ftp.ncbi.nlm.nih.gov/blast/db/v5/v5/FASTA/nr.gz
(5)InterProScanデータベースのセットアップ
#必要なディレクトリに移動
cd ~/blast/database_for_blast/interproscan
#InterProScanのデータベースをダウンロード
#メジャー、マイナーのバージョンを設定
version_major=5.59
version_minor=91.0
CONDA_PREFIX=$HOME/miniconda3/envs/EnTAP/
# md5ファイルのダウンロード
wget \
http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/${version_major}-${version_minor}/interproscan-${version_major}-${version_minor}-64-bit.tar.gz.md5
ここまで来たら、データベース本体のダウンロード
注意:ダウンロードには3時間くらいかかる
wget \
http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/${version_major}-${version_minor}/interproscan-${version_major}-${version_minor}-64-bit.tar.gz
# チェックサムの確認
md5sum -c interproscan-${version_major}-${version_minor}-64-bit.tar.gz.md5
# 解凍
tar xvzf interproscan-${version_major}-${version_minor}-64-bit.tar.gz
ここまで来たら、展開されたディレクトリ内にあるdataディレクトリをEnTAP環境に移動する。
rm -rf $CONDA_PREFIX/share/InterProScan/data/
mv interproscan-${version_major}-${version_minor}/data $CONDA_PREFIX/share/InterProScan/
以下、必要な場合
(6)Pantherデータのダウンロード
wget ftp://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/data/panther-data-14.1.tar.gz
(7)STRINGデータのダウンロード
wget --no-check-certificate https://stringdb-static.org/download/protein.sequences.v11.0.fa.gz
wget --no-check-certificate https://stringdb-static.org/download/protein.links.full.v11.0.txt.gz #注意:3時間くらいかかる
wget --no-check-certificate https://stringdb-static.org/download/protein.info.v11.0.txt.gz
これらの手順で、相動性検索に必要なデータベースをローカル環境に準備することができる。
④EnTAPのインストール
(1)EnTAPをlocal下にインストールする
mkdir -p ~/local && cd ~/local
wget https://github.com/harta55/EnTAP/archive/refs/tags/v1.4.0.tar.gz
tar xzvf v1.4.0.tar.gz
(2)EnTAPをビルドする
cd ~/local/EnTAP-1.4.0
cmakeでCMakeLists.txtに従って"Makefile"を作る
cmake CMakeLists.txt -DCMAKE_INSTALL_PREFIX=${PWD}
#ビルド
sudo make
以下のエラーが起こった場合
エラーの内容
[ 2%] Building CXX object CMakeFiles/EnTAP.dir/src/main.cpp.o [ 4%] Building CXX object CMakeFiles/EnTAP.dir/src/ExceptionHandler.cpp.o [ 7%] Building CXX object CMakeFiles/EnTAP.dir/src/EntapGlobals.cpp.o [ 9%] Building CXX object CMakeFiles/EnTAP.dir/src/EntapConfig.cpp.o [ 12%] Building CXX object CMakeFiles/EnTAP.dir/src/EntapExecute.cpp.o [ 14%] Building CXX object CMakeFiles/EnTAP.dir/src/QuerySequence.cpp.o [ 17%] Building CXX object CMakeFiles/EnTAP.dir/src/FrameSelection.cpp.o [ 19%] Building CXX object CMakeFiles/EnTAP.dir/src/ExpressionAnalysis.cpp.o [ 21%] Building CXX object CMakeFiles/EnTAP.dir/src/SimilaritySearch.cpp.o [ 24%] Building CXX object CMakeFiles/EnTAP.dir/src/Ontology.cpp.o [ 26%] Building CXX object CMakeFiles/EnTAP.dir/src/GraphingManager.cpp.o [ 29%] Building CXX object CMakeFiles/EnTAP.dir/src/UserInput.cpp.o [ 31%] Building CXX object CMakeFiles/EnTAP.dir/src/database/SQLDatabaseHelper.cpp.o [ 34%] Building C object CMakeFiles/EnTAP.dir/src/database/sqlite3.c.o [ 36%] Building CXX object CMakeFiles/EnTAP.dir/src/frame_selection/ModGeneMarkST.cpp.o [ 39%] Building CXX object CMakeFiles/EnTAP.dir/src/frame_selection/AbstractFrame.cpp.o [ 41%] Building CXX object CMakeFiles/EnTAP.dir/src/expression/AbstractExpression.cpp.o [ 43%] Building CXX object CMakeFiles/EnTAP.dir/src/expression/ModRSEM.cpp.o [ 46%] Building CXX object CMakeFiles/EnTAP.dir/src/ontology/AbstractOntology.cpp.o [ 48%] Building CXX object CMakeFiles/EnTAP.dir/src/ontology/ModEggnog.cpp.o [ 51%] Building CXX object CMakeFiles/EnTAP.dir/src/ontology/ModInterpro.cpp.o [ 53%] Building CXX object CMakeFiles/EnTAP.dir/src/QueryData.cpp.o [ 56%] Building CXX object CMakeFiles/EnTAP.dir/src/FileSystem.cpp.o /home/ryoma/local/EnTAP-1.3.0/src/FileSystem.cpp:39:10: fatal error: zconf.h: No such file or directory 39 | #include | ^~~~~~~~~ compilation terminated. make[2]: *** [CMakeFiles/EnTAP.dir/build.make:384: CMakeFiles/EnTAP.dir/src/FileSystem.cpp.o] Error 1 make[1]: *** [CMakeFiles/Makefile2:142: CMakeFiles/EnTAP.dir/all] Error 2 make: *** [Makefile:136: all] Error 2以下を実行した後、再度ビルド
sudo apt-get install zlib1g-dev
sudo make
#指定したディレクトリにインストール
sudo make install
インストール後にEnTAPをシステムのPATHに加える
#ディレクトリ名を変える
mv ~/local/EnTAP-1.4.0 ~/local/EnTAP
#~/.bashrcにEnTAPのパスを追加する。
echo 'export PATH="$HOME/local/EnTAP/bin:$PATH"' >> ~/.bashrc
#~/.bashrcの設定を反映
source ~/.bashrc
(3)その他のソフトウェアのインストール
conda activate EnTAP
mamba install rsem TransDecoder diamond interproscan -y
mamba install bioconda::eggnog-mapper -y
pip install matplotlib #entap_graph.pyで使う
⑤EnTAPのiniファイルの編集
EnTAP の中に入っている entap_config.ini に書かれている種々のコマンドパスを編集する。
EnTAP v1.1.0よりentap_config.iniの一部がentap_run.paramsに分けられた。
ポイントを以下にまとめた。
以下のパスは実際のパスと異なるので、それぞれあるパスを入力する
- entap_config.ini
eggnog-map-data=/home/username/local/EnTAP/entap_outfiles/databases #この部分はeggnomg map dataがあるディレクトリのみ
entap-db-bin=/home/username/local/EnTAP/entap_outfiles/bin/entap_database.bin
- entap_run.params
out-dir=entap_outfiles #ここは任意で変更可能
database=/home/username/blast/database_for_blast/sequences/nr.fasta,/home/username/blast/database_for_blast/sequences/uniprot_sprot.fasta,/home/username/blast/database_for_blast/sequences/uniprot_trembl.fasta,/home/username/blast/database_for_blast/sequences/plants.faa
threads=20 #ここは、解析作業をローカル環境で行うか、サーバー上で行うかによって異なる
ちなみに、entap_database.bin, entap_database.db, eggnog.db, eggnog_proteins.dmndはconfiguration時に導入されるので安心。
⑥EnTAPのConfiguration作業
#conda環境activate
conda activate EnTAP
#移動
cd ~/local/EnTAP
#configuration
EnTAP --config --entap-ini ./entap_config.ini --run-ini ./entap_run.params
⑦シンボリックリンクの作成
シンボリックリンクを作成するコマンドとして、ln -sを用いる。
ここでは、
$HOME/local/EnTAP/entap_outfiles/bin
へのリンクを
$HOME/blast/database_for_blast/sequences
に作成する。
ln -s $HOME/local/EnTAP/entap_outfiles/bin $HOME/blast/database_for_blast/sequences
シンボリックリンクを解除したい場合は
unlink $HOME/blast/database_for_blast/sequences/entap_database
#unlink でシンボリックリンクを削除する(リンク先のファイルには影響なし)。
ここで、rmを使うと、リンク先のファイルも削除される。
⑧run用のiniファイルを作成する。
⑤EnTAPのiniファイルの編集と同様に、ポイントを以下にまとめた。
- entap_run.params
database=/home/username/database_for_blast/sequences/bin/nr.dmnd,/home/username/database_for_blast/sequences/bin/uniprot_sprot.dmnd,/home/username/database_for_blast/sequences/bin/uniprot_trembl.dmnd,/home/username/database_for_blast/sequences/bin/plants.dmnd
eggnog-contaminant=false
eggnog-dbmem=false
eggnog-contaminantについて
これを指定すると、EggNOGコンタミネーション解析のオン/オフを切り替えることができる。
eggnog-contaminant=true #EggNOGコンタミネーション解析実行
eggnog-contaminant=false #実行しない
この解析では、相同性検索で得られた分類群の情報をもとに、EggNOGのアノテーションが外来データ(不適切なデータ)としてマークされるべきかを判断する。ただし、この解析は必ず相同性検索と一緒に実行され、単独では実行しない。
また、本解析は相同性検索で指定された転写産物に一致するアラインメントが見つからなかった場合にのみ実行される。
おそらくふつうはこれを使うことはないはず。
テストデータ等でこれを使うと、以下のようなエラーが生じる。
Parsing ini file at: ./entap_run.params
Parsing ini file at: ./entap_config.ini
ini files parsed, debug logging will continue at: entap_outfiles/debug_2024Y10M14D-17h29m0s.txt
Error code: 10
Contaminant taxon(s) are required with the contam flag if running EggNOG contaminant analysis
eggnog-dbmemについて
EggNOG-mapperで「--dbmem」フラグを使用し、記憶容量に余裕がある場合は、これをtrueにするとよい。
すると、eggnog.dbのsqlite3データベース全体がメモリにロードされ、最大で44GBのメモリが必要になる場合がある。
しかし、これによりEggNOGアノテーションの処理速度が大幅に向上する。
⑧テスト用データを用いたテスト操作
entap_run.paramsを編集する
#特定のディレクトリに移動し、iniファイルをコピーする
cd ~/local/EnTAP/test_data
#entap_config.iniとentap_run.paramsをここにコピーしておく
cp ../entap_config.ini ./
cp ../entap_run.params ./
input=/home/username/local/EnTAP/test_data/protein_transdecoder.faa
#塩基配列を用いる場合は
#input=/home/username/local/EnTAP/test_data/nucleotide_trinity.fnn
threads=20 #ここは、解析作業をローカル環境で行うか、サーバー上で行うかによって異なる。
EnTAPの実行
EnTAP --runP --entap-ini ./entap_config.ini --run-ini ./entap_run.params
⑨実行後、logを確認
tail -n 20 entap_outfiles/log_file_{日付_時刻等}.txt
結果
例:
------------------------------------------------------
Final Annotation Statistics
------------------------------------------------------
Total Sequences: 39471
Similarity Search
Total unique sequences with an alignment: 34082
Total unique sequences without an alignment: 5389
Gene Families
Total unique sequences with family assignment: 34043
Total unique sequences without family assignment: 5428
Total unique sequences with at least one GO term: 25941
Total unique sequences with at least one pathway (KEGG) assignment: 6472
Totals
Total unique sequences annotated (similarity search alignments only): 716
Total unique sequences annotated (gene family assignment only): 677
Total unique sequences annotated (gene family and/or similarity search): 34759
Total unique sequences unannotated (gene family and/or similarity search): 4712
EnTAP has completed!
Total runtime (minutes): 1127
もともと、BRaKERで予測された遺伝子は、「ORF(オープンリーディングフレーム)が存在するから」という理由で抽出されたものであり、必ずしも「翻訳産物である」とは限らない。
最近では、参照データを持たない非翻訳産物がノンコーディングRNA(non-coding RNA)として機能することが明らかになってきており、これらを無視するのは適切でない。
私の場合、すべてのデータを参照ゲノム情報として扱い、解析の過程で必要に応じて選別している。
結局どのような解析をしたかをまとめると以下の通り
相同性検索(diamond v0.9.19使用)
- 使用データ:Uniprot_Swiss-prot、Uniprot_TrEMBL、RefSeqの植物データ、NCBI non-redundantデータ
- 検索対象:タンパク質の相同性
ファミリー検索(diamond v0.9.19使用)
- 使用データ:EggNOGデータベース
- 検索対象:タンパク質ファミリー
さらに、以下のアノテーションを取得した。 - タンパク質ドメイン(SMART/Pfam)
- Gene Ontology(GO)用語
- KEGGパスウェイ割り当て
EggNOGについて
5,000以上の完全なゲノムに教師なしクラスタリングを適用し、得られた遺伝子ファミリーを包括的に特徴づけ、解析することで、ネストした正相遺伝子グループ(NOG)を推定したデータベースである。
EggNOGは、ウェブインターフェースまたは一括ダウンロードによってアクセスできる各グループの379の分類レベルでの正相グループの割り当て、多重配列アラインメント、最尤樹、幅広い機能アノテーションを提供する。
⑩最後に、final resultをコピーする
cp entap_outfiles/final_results/final_annotations_lvl1.tsv ./EnTAP_final_annotation.tsv