samtools で sam/bam ファイルを操作する

samファイルはシーケンスリードがゲノムのどの位置にあるかを記述するファイル形式であり、様々なシーケンス解析のツールで利用されている。samファイルはテキスト形式のデータであり、ファイルサイズが大きくなったり、ソフトウェアから効率的に個々のデータにアクセスすることが難しい。そこでbam形式というバイナリ形式のファイルを作成することで、ファイルサイズの縮小、アクセスの高速化、リードのゲノム座標でのソートによるアクセスの効率化が期待できる。bai形式は bam のインデックスファイルで、このファイルをプログラムが参照することで、効率的に bam file にアクセスできる。

samtools 1.x 系のインストール

HTSlibが必要なので先にインストールする。

wget https://github.com/samtools/htslib/releases/download/1.3/htslib-1.3.tar.bz2
tar jxvf htslib-1.3.tar.bz2
cd htslib-1.3
./configure --prefix=$HOME/opt/local
make 
make install
export LD_LIBRARY_PATH=$HOME/opt/local/lib:$$LD_LIBRARY_PATH  # 必要なら

次に samtools をインストールする。

wget https://github.com/samtools/samtools/releases/download/1.3/samtools-1.3.tar.bz2
tar jxvf samtools-1.3.tar.bz2
cd samtools-1.3
./configure --prefix=$HOME/opt/local
make 
make install
export PATH=$HOME/opt/local/bin:$$PATH  # 必要なら

sam を bam に変換し index を作成する

シーケンスリードのゲノムマッピングツールであるbowtie2や HISAT2, Tophat もsamファイルを出力する。これをbam形式変換するには、samtoolsを利用することで簡単にできる。

samtools sort -@ 8 -O bam -o hoge.sort.bam hoge.sam # sam を sort しながら bam へ変換
samtools index hoge.sort.bam

-T オプションを使えば、ソートするときに発生するテンポラリファイルを作るディレクトリを指定できる。 たぶんSSDのディスクなど高速にアクセスできるディレクトリを指定すると、ソートが早くなるはず。

以下は、上の手順と同じ結果になる。

samtools view -@ 8 -bS hoge.sam > hoge.bam  # sam を bam に変換
samtools sort -@ 8 -o hoge.sort hoge.bam    # bam をソート
samtools index hoge.sort.bam                # index を作成する hoge.sort.bam.bai に保存

-@ は計算に利用するCPUコア数を指定する。index 作成ではこのオプションは使えない。

この方法だとsort 前後のファイルが残る。ディスクに余裕がない場合は、以下のようにすると、sort したファイルを上書き保存できる。

$ samtools sort -@ 8 hoge.bam -o hoge

2016/05/08: samからbamへの操作について加筆 2016/04/19; 1.x系に修正