ゲノムブラウザ JBrowse2 で Gene model track のインポートをしてみた

GTF フォーマットは GFF3 フォーマットに変換しないと JBrowse2 にインポートできません。作業手順を紹介します。
2022.08.08

JBrowse2 に Gene model track のインポートする機会がありましたので実行手順をまとめます。

トラックをインポートすると以下の様なトラックが追加されます。

JBrowse 実行環境

以前、Docker コンテナで JBrowse の実行環境を作成しました。こちらをベースにトラックをインポートするために必要だったパッケージの追加と、各種ライブラリ、パッケージのバージョンを固定化して再現性ある実行環境を作成しました。

パッケージはtabixgffreadを新規追加しています。gffreadは APT 管理できるパッケージではなかったためソースファイルからビルドすることになりました。タグ指定で GitHub からクローンしたファイルをマルチステージビルドでバイナリファイルを生成し JBrowse コンテナへはバイナリファイルのみをコピーしています。また、ローカル環境で Web ブラウザから動作確認用にnpx serveのバージョンも固定化するため明示的に Dockerfile で指定しました。

Dockerfile

FROM node:lts-buster-slim as builder

WORKDIR /tmp

RUN apt-get update && apt-get install -y \
    g++ \
    git \
    make

RUN git clone https://github.com/gpertea/gffread -b v0.12.7 --depth 1 && make --directory /tmp/gffread release

FROM node:18.7.0-buster-slim

COPY --from=builder /tmp/gffread/gffread /usr/local/bin
RUN apt-get update && apt-get install -y \
    wget \
    genometools=1.5.10+ds-3 \
    samtools=1.9-4 \
    tabix=1.9-12~deb10u1 \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

RUN npm install -g \
    @jbrowse/cli@2.1.0 \
    serve@14.0.1

上記の Dockerfile から作成した JBrowse コンテナ(jb:v1)で以降の作業を進めていきます。

$ docker build -t jb:v1 .

補足: イメージサイズ

重量級のイメージになりました。

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
jb           v1        5d8bc432a8b4   4 days ago   755MB

JBrowse での作業

ローカル PC の準備

可視化するゲノムデータのサンプルのためにショウジョウバエのリファレンスゲノム(FASTA)をダウンロードします。

# 参考までに私の作業ディレクトリでのコマンド
$ cd /Users/ohmura.yasutaka/aws/work/jbrowse/jbrowse-import-track
$ mkdir References
$ cd References
$ wget http://ftp.ensembl.org/pub/release-107/fasta/drosophila_melanogaster/dna/Drosophila_melanogaster.BDGP6.32.dna_sm.toplevel.fa.gz

JBrowse コンテナの/workにローカルの作業ディレクトリをマウントして利用します。

$ docker run -it -p 3000:3000 -v /Users/ohmura.yasutaka/aws/work/jbrowse/jbrowse-import-track:/work jb:v1 bash

JBrowse コンテナ

ローカルディレクトリをマウントした/workディレクトリで作業を進めていきます。

$ cd /work

よく使う値は変数に設定します。リファレンスゲノムのファイル名や、バージョンは適時変更してください。

JBDIR=DroMel
JB_VER=v2.1.0
GENOME=References/Drosophila_melanogaster.BDGP6.32.dna_sm.toplevel.fa

FASTA ファイルにインデックス貼って FASTA ファイルを jbrowse コマンドで読み込みます。

jbrowse create -t $JB_VER $JBDIR
samtools faidx $GENOME
jbrowse add-assembly $GENOME --out $JBDIR --load copy

実行結果

JBDIR=DroMel変数で指定したディレクトリに以下のファイルが生成、コピーされます。

# cd DroMel
# ls -lh
total 146M
-rw-r--r--  1 root root 140M Aug  4 02:22 Drosophila_melanogaster.BDGP6.32.dna_sm.toplevel.fa
-rw-r--r--  1 root root  69K Aug  4 02:22 Drosophila_melanogaster.BDGP6.32.dna_sm.toplevel.fa.fai
-rw-r--r--  1 root root  32K Aug  4 02:22 asset-manifest.json
-rw-r--r--  1 root root  769 Aug  4 02:22 config.json
-rw-r--r--  1 root root  15K Aug  4 02:22 favicon.ico
-rw-r--r--  1 root root  570 Aug  4 02:22 index.html
-rw-r--r--  1 root root  294 Aug  4 02:22 manifest.json
-rw-r--r--  1 root root   57 Aug  4 02:22 robots.txt
drwxr-xr-x  5 root root  160 Aug  4 02:22 static
drwxr-xr-x 34 root root 1.1K Aug  4 02:22 test_data
-rw-r--r--  1 root root    5 Aug  4 02:22 version.txt

ここまで前回の実行内容と同じです。

トラックのインポート

サンプルインポート用に遺伝子アノテーションファイル(GTF)をダウンロードします。引き続き JBrowse コンテナで作業を続けます。

cd /work/References
wget http://ftp.ensembl.org/pub/release-107/gtf/drosophila_melanogaster/Drosophila_melanogaster.BDGP6.32.107.gtf.gz

新たに変数を追加します。

GTF=References/Drosophila_melanogaster.BDGP6.32.107.gtf
TRACK_NAME="Test-import-track"

GFF=`basename $GTF .gtf`.gff3
GFF_SORTED=`basename $GFF .gff3`.srt.gff3

事前準備

ここが肝です。今回は GTF フォーマットのファイルのため、GFF フォーマットに変換する必要があります。そして、GFF ファイルにインデックスを貼れば準備完了です。

  • gffreadコマンドで GTF から GFF3 へ変換
    • .gff3ファイルが新規生成される
  • 整形してソート
  • ソート済みの GFF3 ファイルをbgzipで圧縮
    • .srt.gff3.gzファイルが新規作成される
    • tabixコマンドの実行対象が bgzip で圧縮されている必要があるため
    • 参考:
  • tabixコマンドで GFF ファイル用の tabix インデックスを作成
    • .srt.gff3.gz.tbiファイルが新規作成される
gffread --keep-genes -E $GTF -L -o $GFF
awk '$1 ~ /^#/ {print $0;next} {print $0 | "sort -t\"\t\" -k1,1 -k4,4n"}' $GFF > $GFF_SORTED
bgzip $GFF_SORTED
tabix -p gff ${GFF_SORTED}.gz

インポート

やっとインポートできます。

jbrowse add-track ${GFF_SORTED}.gz --out $JBDIR --load copy --name $TRACK_NAME
jbrowse text-index --out $JBDIR --perTrack

ローカルサーバ

Web ブラウザで確認してみましょう。

cd $JBDIR
npx serve -n .

TRACK_NAME="Test-import-track変数で指定した名前のトラックが追加されています。

以上でインポートまでの一連の作業は終わりです。

おわりに

ゲノムブラウザを常用していないこともあり、トラックのインポート手順を忘れないように書き残しました。バージョン指定ガチガチのコンテナ環境も用意しましたので忘れたときはまた動かして思い出します。ただ、一番の課題は基礎知識がないところなので、今年は学生に混じって遺伝子統計学の夏季講習に参加してきます。

参考

GFF / GTF ファイル

bgzip

gffread

tabix