Palmsonntagmorgen

NGSデータを使った解析と、その周辺。

【DROMPAplus】Dockerを使ったparse2wig+

そういえばDROMPAplusの紹介記事を全然書いていないことに気づきました。 最近はDockerイメージからのDROMPAplusの使い方をたびたび質問いただくので、今日はDockerを使ったDROMPAplusの使い方を紹介します。

なお、旧バージョンのDROMPA3とDROMPAplusの違いについては以下を参照してください。

rnakato.hatenablog.jp

本記事でやること

以下の記事ではDROMPA3に含まれるparse2wigの使い方を紹介しました。

rnakato.hatenablog.jp

この記事を docker parse2wig+ に切り替えてみましょう。 なお、Dockerそのもののインストールについては↓の記事を参照してください。

【Win】【Mac】【Linux】Dockerのインストール 【2019年7月現在】 - Palmsonntagmorgen

Dockerイメージのダウンロード

rnakato/ssp_drompa という名前でDockerイメージを提供しています。 以下のコマンドでイメージをローカルにダウンロードしてください。

 $ docker pull rnakato/ssp_drompa

ちなみに本イメージにはDROMPAplusのほか、SSPとDROMPA3も含まれています。

 $ docker run --rm -it rnakato/ssp_drompa ls
DROMPA3  DROMPAplus  SSP

BAMファイルダウンロード

BAMファイルのダウンロードは特に変更はありません。

 $ wget http://hgdownload.soe.ucsc.edu/goldenPath/hg19/encodeDCC/wgEncodeUwTfbs/wgEncodeUwTfbsHelas3CtcfStdAlnRep1.bam

Genome table作成

自分でGenome tableを作成する方法は以下の記事を参照してください。

genome tableを作成する - Palmsonntagmorgen

本Dockerイメージでは、/home/DROMPAplus/data/genometable/ ディレクトリに代表的なGenome tableファイルが含まれています。

 $ docker run --rm -it rnakato/ssp_drompa ls /home/DROMPAplus/data/genometable/
genometable.dm6.txt   genometable.hg38.txt  genometable.sacCer3.txt
genometable.hg19.txt  genometable.mm10.txt

実行

ローカルの場合

ダウンロードしたBAMファイルをparse2wig+でパースする場合、ローカルにインストールしたDROMPAplusなら以下のコマンドで実行可能です。

 $ parse2wig+ -i wgEncodeUwTfbsHelas3CtcfStdAlnRep1.bam -o Ctcf --gt genometable.txt 
======================================
parse2wig+ version 1.8.8

Input file: wgEncodeUwTfbsHelas3CtcfStdAlnRep1.bam
Output prefix: parse2wigdir+/Ctcf
Output format: BIGWIG
Binsize: 100 bp
Genome-table file: /work/Database/UCSC/hg19/genome_table
Single-end mode: fragment length will be estimated by strand-shift profile
PCR bias filtering: ON
        10000000 reads used for library complexity

Total read normalization: NONE
Number of threads: 1
======================================
Parsing wgEncodeUwTfbsHelas3CtcfStdAlnRep1.bam...

DROMPA3の時と比較して、--gt がハイフン2つになっていることに注意してください。

Dockerの場合

一方Dockerでは同じコマンドを打ち込むとエラーになります。

 $ docker run --rm -it rnakato/ssp_drompa parse2wig+ -i wgEncodeUwTfbsHelas3CtcfStdAlnRep1.bam -o Ctcf --gt genometable.txt 
Error: Could not open genometable.txt.

genometable.txtが見つかりませんと出ます。dockerコマンドはカレントディレクトリを自動でマウントしないため、オプションで明示的にマウントしなければコマンドからgenometable.txtと入力BAMファイルが見えません。

マウントするには -vオプションを追加します。ここでは例として、カレントディレクトリをコンテナ内の /mnt ディレクトリにマウントします。(長くなるので2行に分割します)

 $ docker run --rm -it -v $(pwd):/mnt rnakato/ssp_drompa parse2wig+ \
   -i /mnt/wgEncodeUwTfbsHelas3CtcfStdAlnRep1.bam -o Ctcf --gt /mnt/genometable.txt 

======================================
parse2wig+ version 1.8.8

Input file: /mnt/wgEncodeUwTfbsHelas3CtcfStdAlnRep1.bam
Output prefix: parse2wigdir+/Ctcf
Output format: BIGWIG
Binsize: 100 bp
Genome-table file: /mnt/genometable.txt
Single-end mode: fragment length will be estimated by strand-shift profile
PCR bias filtering: ON
        10000000 reads used for library complexity

Total read normalization: NONE
Number of threads: 1
======================================
Parsing /mnt/wgEncodeUwTfbsHelas3CtcfStdAlnRep1.bam...

$(pwd) がカレントディレクトリを示しています。他にも、/Users をマウントしたければ -v /Users:/mnt でOKです。

コンテナ内の/mntディレクトリにマウントしているので、ホスト側のカレントディレクトリにあるファイルは/mnt以下に存在するように見えます。よって、コマンドの入力BAMファイルとgenometable.txtの前に/mnt/をつける必要があります。

出力ディレクトリオプションをつける

実は上記のコマンドにはまだ問題があります。parse2wig+はデフォルトでカレントディレクトリに parse2wigdir+を作成し、その中に結果を出力しますが、コンテナ内のカレントディレクトリはホスト側から見えません。このままでは出力結果を手に入れることができません。

そこでここでは --odirオプションを追加して /mnt/parse2wigdir+ に結果が出力されるようにします。

 $ docker run --rm -it -v $(pwd):/mnt rnakato/ssp_drompa parse2wig+ \
   -i /mnt/wgEncodeUwTfbsHelas3CtcfStdAlnRep1.bam -o Ctcf --gt /mnt/genometable.txt \
   --odir /mnt/parse2wigdir+
... (コマンド完了)
 $ ls parse2wigdir+
Ctcf.100.bw  Ctcf.100.tsv

無事ファイルが生成されました。

おまけ:Docker内genometableを利用する

上で述べたように、本Dockerイメージにはgenometable.txtが含まれています。これを使えば別途genometableを用意することなくparse2wig+を実行できます。

 $ docker run --rm -it -v $(pwd):/mnt rnakato/ssp_drompa parse2wig+ \
   -i /mnt/wgEncodeUwTfbsHelas3CtcfStdAlnRep1.bam -o Ctcf --odir /mnt/parse2wigdir+ \
   --gt /home/DROMPAplus/data/genometable/genometable.hg19.txt
... (コマンド完了)
 $ ls parse2wigdir+
Ctcf.100.bw  Ctcf.100.tsv

まとめ

Dockerからparse2wig+を起動する方法を紹介しました。 Dockerからコマンドを実行する場合、「カレントディレクトリのファイルが見えない」という点で困ってしまう方が多いようです。-vコマンドを使ったマウントは最初はホスト側とコンテナ側のディレクトリの関係を考えるのがややこしいですが、慣れてしまえば平気になります。

なお、dockerコマンドを使って生成されたファイルは所有者権限がrootになってしまうという問題があります。これを回避する方法を次回紹介します。