RNA-seqその3、trimmomatic
分割したFastqファイルのクリーニングをする
mecobalamin.hatenablog.com
trimmomaticについて
Trimmomatic | FASTQ クリーニングツール
trimmomaticを実行するとファイルへのアクセスがとても多い
windowsのタスクマネージャーを見ると
解析するデータが大きいのもあって
ディスクが100%近くでアクティブになる
HDDには良くない感じに見える
まず下準備としてRAMディスクを用意する
これは壊れても交換しやすいディスクがあれば別にいらないと思う
ubuntuには標準でRAMディスクがあるが、
wslのtmpfsはエミュレーションしているだけらしい
Does tmpfs really work? : bashonubuntuonwindows
なのでwindowsで動くRAMディスクをインストールする
「ImDisk Virtual Disk Driver」システムメモリ上に仮想ディスクを作成できるツール - 窓の杜
インストールしたけど場所がわからない。。。。
コントロールパネルで表示を小さいアイコンにすると
ImDisk Virtual Disk Driverのアイコンが見つかるので
ショートカットをデスクトップに作っておく
PCを再起動後にImDiskを実行する
wslを起動した状態だとマウントできないみたい
10GのRAMディスクを作成
ドライブ名はR
wslのターミナルを起動して
dfコマンドでRAMディスクにマウントできていることを確認する
マウント先はImDiskで設定したR
$ df Filesystem 1K-blocks Used Available Use% Mounted on R: 10485756 1432936 9052820 14% /mnt/r
ImDiskでボリュームを削除してもマウントが残ってたりする
RAMディスクを作ったり消したりしたらPCの再起動をしとくのが良さげ
RAMディスクを作ってマウントできてなければ手動でマウントする
それとImDiskで削除する前にアンマウントする
それぞれのコマンドはこれ
$ sudo mount -t drvfs r: /mnt/r $ sudo umount /mnt/r
作ったRAMディスクをテンポラリディスクとして使用する
ここから本題
trimmomaticの処理は以下の流れで行う
- copy files to tmp directory
- fastqc
- trimmomatic
- fastq-stats
- remove unnecessary string
- prinseq-lite
trimmomaticの前後でやっているのはシークエンスデータの統計データの取得
クリーニングの前後でデータの比較を行うための処理をやっている、
そうなんだけど見てもまだよくわからない。。。。
とりあえず使ったスクリプトだけ掲載
アダプターが取り除かれた配列が
"trim_"のついたディレクトリに保存される
#!/bin/bash cd $HOME/usr/scripts/ w_dir="$HOME/usr/data" scripts_dir="$HOME/usr/scripts" tmp_dir="/mnt/r/tmp" list_name="list_sra.txt" list_dir="${scripts_dir}" list_raw=$(cat ${list_dir}/${list_name} | wc -l) list_file=$(cat ${list_dir}/${list_name} | sed 's/\.sra//g' ) postfix="fastq" quality="15" adapter="$HOME/miniconda3/share/trimmomatic-0.38-1/adapters/TruSeq3-PE.fa" for i in ${list_file} do echo "analyze ${i}" trim_dir="${w_dir}/trim_${i}/trim" stats_dir="${w_dir}/trim_${i}/stats" fastqc_dir="${w_dir}/trim_${i}/fastqc" prinseq_dir="${w_dir}/trim_${i}/ps" mkdir -p ${trim_dir} mkdir -p ${stats_dir} mkdir -p ${fastqc_dir} mkdir -p ${prinseq_dir} mkdir -p ${tmp_dir} in_dir="${w_dir}/raw/div_${i}" div_list="${in_dir}/list_div_${i}.txt" infile_1=$(grep _1_ ${div_list}) for j in ${infile_1} do infile_2=${j/_1_/_2_} logfile=${j/_1_/_} echo "copy files to tmp directory" cp ${in_dir}/${j} ${tmp_dir}/ cp ${in_dir}/${infile_2} ${tmp_dir}/ echo "fastqc began" for k in ${j} ${infile_2} do fastqc --nogroup -o ${fastqc_dir} ${tmp_dir}/${k} done echo "finished." echo "trimmomatic began" trimmomatic \ PE \ ${tmp_dir}/${j} \ ${tmp_dir}/${infile_2} \ ${tmp_dir}/trim${quality}_${j}.${postfix} \ ${tmp_dir}/trim${quality}_${j}.${postfix}-unique.out \ ${tmp_dir}/trim${quality}_${infile_2}.${postfix} \ ${tmp_dir}/trim${quality}_${infile_2}.${postfix}-unique.out \ ILLUMINACLIP:${adapter}:2:30:10 \ LEADING:3 \ TRAILING:3 \ SLIDINGWINDOW:4:${quality} MINLEN:36 \ &> ${trim_dir}/trim_${logfile}.log echo "finished." echo "fastq-stats began" for k in ${j} ${infile_2} do fastq-stats \ ${tmp_dir}/${k} >\ ${stats_dir}/raw_${k}.stats fastq-stats \ ${tmp_dir}/trim${quality}_${k}.${postfix} >\ ${stats_dir}/trim_${k}.stats done echo "finished." rm ${tmp_dir}/${j} rm ${tmp_dir}/${infile_2} echo "remove unnecessary string" for k in ${j} ${infile_2} do #sed -i".bak" '/length/s/^\+.*/+/' ${tmp_dir}/trim${quality}_${k}.${postfix} #mv ${tmp_dir}/trim${quality}_${k}.${postfix} ${tmp_dir}/rename_${k}.${postfix} #mv ${tmp_dir}/trim${quality}_${k}.${postfix}.bak ${tmp_dir}/trim${quality}_${k}.${postfix} cat ${tmp_dir}/trim${quality}_${k}.${postfix} | sed '/length/s/^\+.*/+/' \ > ${tmp_dir}/rename_${k}.${postfix} done echo "finished." mv ${tmp_dir}/trim${quality}_* ${trim_dir}/ echo "prinseq-lite began" prinseq-lite.pl \ -fastq ${tmp_dir}/rename_${j}.${postfix} \ -fastq2 ${tmp_dir}/rename_${infile_2}.${postfix} \ -out_format 3 \ -derep 24 \ -log ${prinseq_dir}/${logfile}.log \ -out_good ${tmp_dir}/ps_${logfile}_gd \ -out_bad ${tmp_dir}/ps_${logfile}_bd \ -trim_tail_right 5 \ -min_len 30 mv ${tmp_dir}/rename_* ${trim_dir} mv ${tmp_dir}/ps_${logfile}_* ${prinseq_dir} done rm -r ${tmp_dir} done
27 Feb. 2019修正
adapterのファイル名をSEからPEに修正した
14 April 2019追記
ファイルの容量がRAMディスクよりも大きいと
エラーを吐かずにスクリプトが止まる
今回は10GBでは足りず、16GBまで増やす必要があった
RAMディスクの容量を変えたあとに
PCの再起動をせずにスクリプトを実行したところ
ディスクをうまく認識できなかったみたいで
一瞬ファイルの書き込みがあって
実行中のまま反応がなくなった
その後が変な状況になってしまった
crtl + cでスクリプトは止められず
tmuxを終了してもjobが残っていたようだ
ターミナルを終了してPCの再起動をしても
ubuntuは生きていたようで強制終了するかの選択肢がでてきた
強制終了を選んでも再起動のまましばらく先に進まず。。。
結局電源ボタン長押しで再起動
一応PCは再起動してほかも問題なく動いてくれているけれど
次回もそうだとは限らないので
RAMディスク周りをいじるときは
その前後でPCとターミナルの再起動をしておく
そもそもRAMディスクを使うのは
データを入れているHDDの保護のためなので、
テンポラリに使えるディスクがあればいい
USBメモリとか?
気になるのは書き込み速度
あとで試す
追記ここまで
30 May 2019追記
余分な文字列を削除するコマンドのところで
やり直してみたらエラーが出る
sedのテンポラリファイルを移動か削除のときにパーミッションエラーが出てる
コメントアウトして別の方法でやってみたらうまくできたみたいなのでそっちも残す
追記ここまで