samtools version | head -2
BAMファイルのヘッダーを変更したい場合には、samtools reheader
コマンドが利用できる。
使用しているsamtools
のバージョン
samtools 1.21
Using htslib 1.21
BAMファイルのヘッダーを変更したい
インターネット上のどこかから誰か他の人がマッピングしたBAMファイルをダウンロードしてきた。 リードのカバレッジを計算してBIGWIGファイルに出力し、ゲノムブラウザで見ようとしたがうまく見られなかった。 ダウンロードしたBAMファイルのヘッダーを、samtools head
で確認すると、 どうやらマッピングに使用した参照ゲノム配列の配列名が自分のゲノムブラウザのものと異なるようだった。
samtools head temp.bam
@HD VN:1.6 SO:coordinate
@SQ SN:1 LN:30427671
@SQ SN:2 LN:19698289
@SQ SN:3 LN:23459830
@SQ SN:4 LN:18585056
@SQ SN:5 LN:26975502
@SQ SN:M LN:366924
@SQ SN:C LN:154478
例えば、@SQ SN:1 LN:30427671
とあるように第一染色体の配列名は1
となっている。 これを@SQ SN:Chr1 LN:30427671
のように変更して、配列名をChr1
に変更したい。
samtools reheader
コマンド
samtools reheader
コマンドを使うと、SAM/BAMファイルのヘッダーを変更することができる。
コマンドのヘルプメッセージは以下。
samtools reheader
Usage: samtools reheader [-P] in.header.sam in.bam > out.bam
or samtools reheader [-P] -i in.header.sam file.cram
or samtools reheader -c CMD in.bam
or samtools reheader -c CMD in.cram
Options:
-P, --no-PG Do not generate a @PG header line.
-i, --in-place Modify the CRAM file directly, if possible.
(Defaults to outputting to stdout.)
-c, --command CMD Pass the header in SAM format to external program CMD.
コマンド(-c
オプション)で変更する
先ほどのBAMファイルのヘッダーを変更してみよう。やり方としては以下の2通りある。
- 正しいヘッダーを持つ別のBAMファイルを用意してそのヘッダーをコピーする。
- ヘッダーを書き換えるコマンドを指定して変更する。
ここでは2つ目のコマンドで書き換える方法で変更してみる。 以下のように-c
オプションにsed
でヘッダーを書き換えるコマンドを指定した。
samtools reheader -c 'sed -e "s/@SQ\tSN:/@SQ\tSN:Chr/"' temp.bam | \
samtools head
@HD VN:1.6 SO:coordinate
@SQ SN:Chr1 LN:30427671
@SQ SN:Chr2 LN:19698289
@SQ SN:Chr3 LN:23459830
@SQ SN:Chr4 LN:18585056
@SQ SN:Chr5 LN:26975502
@SQ SN:ChrM LN:366924
@SQ SN:ChrC LN:154478
@PG ID:samtools PN:samtools VN:1.21 CL:samtools reheader -c sed -e "s/@SQ\tSN:/@SQ\tSN:Chr/" temp.bam
うまくヘッダーを書き換えることができた。