samtools merge の並列化と sort へのパイプライン処理

今日から5月。絶好のデータ解析日和ということで(^_^)。 TopHatの結果を処理するコマンドは以前はやっつけでinteractiveに処理していたが、バッチ化というか並列化というか。中間ファイルがかさばるのでパイプライン処理して一気にsortされたファイルだけを出力しようということで先日覚えた-(マイナス)オプションの練習がてら。 状況としては、TopHatの結果のBAMファイルがhoge1,hoge2,hoge3のようなディレクトリの中にaccepted_hits.bamというファイルで入っているのが前提で、そのディレクトリがあるところと同じ階層にhoge.bamというファイル名で新規のソートされたBAMファイルを作成する。

1
2
3
4
5
6
#!/bin/sh
type=$1
p=4
tmp=/tmp
samtools merge -@ $p - ${type}*/accepted_hits.bam 
| samtools sort -@ $p -T $tmp/$type.$$ -o $type.bam -

というスクリプトをsamtools-merge_sort.shという名前で保存して、 [shell] sh samtools-merge_sort.sh hoge [/shell] として実行する。 意外にも並列化される部分が多く、かなりの時短率。しかしながら、やはりファイルのIOがネックの模様。 バイナリファイルでもパイプライン処理というのはなんとなく想定の外だったが、完全に単なる思い込み。そういったところを改革していくべし。


Written by bonohu in misc on 月 01 5月 2017.