Docker-composeで解析（RNAseq)

# Docker-composeで解析（RNAseq)
これを見ればあなたもすぐにRNAseq解析ができる！！
※Dockerインストール済みの場合

前回に引き続き、解析ツールをDocker-composeで作成してみた。
[Docker-composeを使ってみよう](https://qiita.com/petadimensionlab/items/6df222732d275bcd1b55)
# 今回やりたいこと
RNAseq解析
docker-composeでsraファイルをbamファイルにしてみせます。


### 手順

```
sra 
↓（parallel-fastq使用）
fastq
↓（fastp使用）
trim.fastq
↓（STAR使用）
bamファイル
（全てbiocontainerのコンテナを使用）
```
biocontainersのリポジトリURL:[biocontainers](https://biocontainers.pro/#/registry)

内容としては、下記リンクのスクリプトと同様のことができます。※exec_bam2readcount_STAR.Rを除く。
下記スクリプトを動かすためには様々なパッケージのインストールが必要になりますね・・・。
GitHub：https://github.com/petadimensionlab/STAR

参考URL:
RNAseq解析について：[遺伝子発現量解析RNA-Seq](https://bi.biopapyrus.jp/rnaseq/)

### 持ち物・下準備
・リードデータ(SRR7508944.sra)
・genome
・アノテーションファイル
をホストPC内任意のディレクトリに保存。（***ディレクトリ構成は下記の通り***　参照）
※今回の対象データ：SRR7508944

・genomeとアノテーションファイル名を同じ名前に変更しておこう。
例）genome=TAIR10.fa、annotation=TAIR10.gff3

参考URL:
持ち物の中身の詳細：[STAR による RNA-Seq リードのマッピングSTAR (A. thaliana, paired-end RNA-Seq)](https://bi.biopapyrus.jp/rnaseq/mapping/star/star-paired.html)

### ディレクトリ構成は下記の通り

```
.（/yourlocal_dir）
├── docker-compose.yml
├── .env
├── input/     　　# リードデータ.sra保存
├── （output/）  　# 解析結果の出力ファイル用ディレクトリ（docker-composeをスタートさせると作成）
└──  STARidx/ 　#genome、アノテーション保存　（STARindexの保存先）
```

# Docker-compose.yml 作成


#### docker-compose.ymlの中身

```yaml:docker-compose.yml
#env in .env file
version: "3"
services:
  parallel-fastq:
    image: quay.io/biocontainers/parallel-fastq-dump:${VER_1}
    container_name: parallel-fastq
    tty: true
    volumes:
      - ${DIR}:/tmp/wk
    working_dir: /tmp/wk
    command: >
      bash -c "parallel-fastq-dump --sra-id input/${ID}.sra --threads ${THREADS} --split-files --gzip &&
      mkdir -p output/${ID} &&
      mv *.fastq.gz output/${ID}/"

  fastp:
    image: quay.io/biocontainers/fastp:${VER_2}
    container_name: fastp
    tty: true
    volumes:
      - ${DIR}:/tmp/wk
    working_dir: /tmp/wk
    command: sh wait-for-it.sh output/${ID}/${ID}_1.fastq.gz fastp -w ${THREADS} -h output/${ID}/${ID}.html -j output/${ID}/${ID}.json -i output/${ID}/${ID}_1.fastq.gz -I output/${ID}/${ID}_2.fastq.gz -o output/${ID}/${ID}_trim_paired_1.fastq.gz -O output/${ID}/${ID}_trim_paired_2.fastq.gz

  star:
    image: quay.io/biocontainers/star:${VER_3}
    container_name: star
    tty: true
    volumes:
      - ${DIR}:/tmp/wk
    working_dir: /tmp/wk
    command: >
      bash -c "sh wait-for-it.sh output/${ID}/${ID}.html STAR --runThreadN ${THREADS} --runMode genomeGenerate --genomeDir STARidx --genomeFastaFiles STARidx/${SPECIES}.fa --sjdbGTFfile STARidx/${SPECIES}.gff3 ${STARidxopt} &&
      STAR --runThreadN  ${THREADS} --readFilesCommand gunzip -c --genomeDir STARidx --readFilesIn output/${ID}/${ID}_1.fastq.gz output/${ID}/${ID}_2.fastq.gz --outFileNamePrefix output/${ID}/${ID}. ${STARopt}"

```

#### .envの中身
```text:.env
VER_1=0.6.5--py_0 #バージョン
VER_2=0.20.0--hdbcaa40_0 #バージョン
VER_3=2.7.1a--0 #バージョン
THREADS=6 #スレッド
DIR=/yourlocal_dir #ローカルのディレクトリ
ID=SRR7508944 #対象データのID
SPECIES=TAIR10 #対象データの種類
STARidxopt=--sjdbOverhang 100 --genomeSAindexNbases 12 #STARコマンドのオプション
STARopt=--outFilterMultimapScoreRange 1 --outFilterMultimapNmax 10 --outFilterMismatchNmax 5 --alignIntronMax 500000 --alignMatesGapMax 1000000 --sjdbScore 2 --alignSJDBoverhangMin 1 --genomeLoad NoSharedMemory --limitBAMsortRAM 0 --outFilterMatchNminOverLread 0.33 --outFilterScoreMinOverLread 0.33 --sjdbOverhang 100 --outSAMstrandField intronMotif --outSAMattributes NH HI NM MD AS XS --outSAMunmapped Within --outSAMtype BAM Unsorted --outSAMheaderHD @HD VN:1.4 #STARコマンドのオプション
```

#### さて、docker-compose.ymlの解説です。
ざっくり解説すると、
　３つのコンテナイメージをコンテナ化し　（＝parallel-fastq・fastp・star）
　マウントするディレクトリはどれも同じで　（＝ホストは.envに記載した”/yourlocal_dir”・コンテナはそれぞれtmp/wk）
　それぞれコマンドを与えている。（＝それぞれcommand以下に記述）
 

##### それぞれのコマンドのざっくり解説は下記にて。

内容→[SRA Toolkitのfastq-dumpを並列実行して高速化する parallel-fastq-dump](http://kazumaxneo.hatenablog.com/entry/2018/11/25/000000)

```
・parallel-fastq
　SRR7508944.sra　から　SRR7508944_1.fastq.gz・SRR7508944_2.fastq.gz　を出力。
```
内容→[高速なfastqの前処理パイプライン fastp](http://kazumaxneo.hatenablog.com/entry/2018/05/21/111947)

```
・fastp
　SRR7508944_1.fastq.gz・SRR7508944_2.fastq.gz　から　SRR7508944_trim_paired_1.fastq.gz・SRR7508944_trim_paired_2.fastq.gz・SRR7508944.json・SRR7508944.html を出力。

```
内容→
[高速なRNA seqのマッピングツール STAR](http://kazumaxneo.hatenablog.com/entry/2017/08/24/094337)

```
・star
1. index作成。
2. SRR7508944_trim_paired_1.fastq.gz・SRR7508944_trim_paired_2.fastq.gz　から　SRR7508944.Aligned.out.bam・そのたlogファイル　を出力。
```

sraファイルがbamファイルになりましたね。


# 動かしてみよう！
genomeとか探すんめんどくせ。って方、下記Githubからどぞー！
.env　の`/yourlocal_dir`を変更するだけ！
※sraは容量でかいのでアップロードできませんでした。自力でダウンロードしてください。（`docker run --rm -v /yourlocal_dir/Docker_compose_STAR/input:/root/ncbi/public/sra inutano/sra-toolkit prefetch SRR7508944`でダウンロードできます。）

Github：https://github.com/petadimensionlab/Docker_compose_STAR

### 動かし方
まず、docker-conpose.ymlのあるディレクトリに移動。
`cd /yourlocal_dir`

起動
イメージがない場合は自動でインストールしてくれます。
`docker-compose up -d`

logをみる。
途中経過もわかる。
`docker-compose logs`

終わったらおしまい。
いらないので捨てましょう。　
`docker-compose rm -f`

これであなたもRNAseq解析ができた（はず）！！

# もっと詳しくDocker-compose.ymlを知りたい方
### fastpとstarのcommandに書いてる`wait-for-it.sh`ってなに？
→順番にコンテナのコマンドが動作するようにシェルスクリプトです。（いっぺんにコンテナが動き出すといろいろやばいです。）

#### wait-for-it.shの中身
```shell:wait-for-it.sh
#!/bin/sh

set -e

waitfile="$1"
shift
cmd="$@"

until test -e $waitfile
do
	>$2 echo "Waiting for file [$waitfile]."
	sleep 1
done

>&2 echo "Found file [$waitfile]."
exec $cmd
```
#### command記入例
```yaml=
  コンテナ①:
  （略）
    command: touch test.txt 
  コンテナ②:
  (略)
    command: sh wait-for-it.sh test.txt touch test2.txt
```
説明：コンテナ①でできる予定のファイル(text.txt)の存在を確認するまでコンテナ②は待機、ファイル(text.txt)見つけたら指定したコマンド（touch test2.txt）動かす。

参考URL:[docker-composeでDBの起動完了を待ってからWebアプリを実行する](https://qiita.com/shiena/items/47437f4f7874bf70d664)

### tty: ture ってなに？
→起動したコンテナが落ちないようにするためです。

参考URL:[docker-compose up したコンテナを起動させ続ける方法](https://qiita.com/sekitaka_1214/items/2af73d5dc56c6af8a167)


# そのた
STARを使用しているので、PCのメモリ・CPUをよく確認して動かしましょう。
→仮想環境でも自分のPCのスペック以上のことはできません。。。

スペック最強PC！！なのに動きません。
→Dockerの設定を変更しましょう。
　右上（Macの場合）のクジラクリック→Preferences → Advancedで設定できます。
 参考URL:　[macOSでDocker環境構築](https://qiita.com/mufasa/items/9356187a3bcb20b64e82)

使用したいデータに置き換えてやってみようー！！
（！注意！本件のはペアードエンド用となります。）
 
# 7.おまけのおまけ
沢山sampleがデータあるとき用のpythonスクリプトを作成しました。
このpythonを動かしてほったらかしにできますzzz(( _ _ ))..zzzZZ
※ついでにSRAデータもinstallできる特典付き！！
※まさかの未完！！（:pick:失敗したので工事中:pick:）

# おわり
おわりではないけどおわり。
工事終了しましたら、「おまけのおまけ」が更新されます。