SAM/BAMファイルのヘッダー

SAM/BAMファイルのヘッダセクションについてと、BAMファイルのヘッダを確認する方法
samtools
SAM/BAM
Bioinfomatics
Published

October 18, 2024

SAM/BAMファイルのヘッダ行

SAM/BAMファイルにはリードデータの前にヘッダセクションが含まれており、このヘッダはデータの解釈や解析に必要なメタデータを提供する。

SAMファイルのヘッダ行は例えば以下のようになっている。 ヘッダセクションは、@で始まる行で構成され、各行は2文字のタグで識別される。

@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
@PG ID:samtools PN:samtools VN:1.21 CL:samtools view -h temp.bam

以下にヘッダで使われる5種類のレコードタイプと、よく使われる気がするタグについてリストアップした。 太字のタグはそのレコードを使う場合に必須のタグである。

  • @HD ファイル全体のメタデータ。もし存在するなら一行だけ、かつ最初の行に書く。
    • VN フォーマットのバージョン。書式は^[0-9]+\.[0-9]+$
    • SO リードのソート順。
  • @SQ マッピングした場合の参照配列。記載した配列の順番が位置ソートにも適用される。
    • SN 配列名
    • LN 配列長
  • @RG リードグループ
    • ID リードグループのID
    • PN プログラム名
    • VN プログラムバージョン
    • CL 実行時のコマンドライン
  • @PG プログラムレコード
    • ID プログラムレコードのID
  • @CO コメント

BAMファイルのヘッダーを確認する方法

ここではsamtoolsを使用してBAMファイルのヘッダー行を表示する方法をいくつか紹介する。 使用しているsamtoolsのバージョン

samtools version | head -2
samtools 1.21
Using htslib 1.21

確認に使用するBAMファイル。 SAMファイルの仕様書にある例をそのまま使った。

samtools view -h temp.bam
@HD VN:1.6  SO:coordinate
@SQ SN:ref  LN:45
@PG ID:samtools PN:samtools VN:1.21 CL:samtools view -Sb temp.sam
@PG ID:samtools.1   PN:samtools PP:samtools VN:1.21 CL:samtools view -h temp.bam
r001    99  ref 7   30  8M2I4M1D3M  =   37  39  TTAGATAAAGGATACTG   *
r002    0   ref 9   30  3S6M1P1I4M  *   0   0   AAAAGATAAGGATA  *
r003    0   ref 9   30  5S6M    *   0   0   GCCTAAGCTAA *   SA:Z:ref,29,-,6H5M,17,0;
r004    0   ref 16  30  6M14N5M *   0   0   ATAGCTTCAGC *
r003    2064    ref 29  17  6H5M    *   0   0   TAGGC   *   SA:Z:ref,9,+,5S6M,30,1;
r001    147 ref 37  30  9M  =   7   -39 CAGCGGCAT   *   NM:i:1

samtools view -H

まずはsamtools viewコマンドに-Hオプションを指定することで、 渡したBAMファイルのヘッダのみ表示することができる。

samtools view -H temp.bam
@HD VN:1.6  SO:coordinate
@SQ SN:ref  LN:45
@PG ID:samtools PN:samtools VN:1.21 CL:samtools view -Sb temp.sam
@PG ID:samtools.1   PN:samtools PP:samtools VN:1.21 CL:samtools view -H temp.bam

そのまま使用するとヘッダコマンドを指定するためのコマンド(samtools view -H)の履歴が残る。 これを残さないようにするには、--no-PGフラグをつけて実行する。

samtools view -H --no-PG temp.bam
@HD VN:1.6  SO:coordinate
@SQ SN:ref  LN:45
@PG ID:samtools PN:samtools VN:1.21 CL:samtools view -Sb temp.sam

samtools head

samtools headコマンドにBAMファイルを渡すことでヘッダを表示することができる。 こちらのコマンドを使うと、samtools view -Hと異なりコマンド履歴がヘッダに残らない。

samtools head temp.bam
@HD VN:1.6  SO:coordinate
@SQ SN:ref  LN:45
@PG ID:samtools PN:samtools VN:1.21 CL:samtools view -Sb temp.sam

samtools view -h

すでに使用しているが、samtools view -hだとヘッダセクションに加えてリード行も全て出力する。 普通はリード行は非常に多いはずなので、lessheadコマンドと組み合わせて使うことが多いだろう。

samtools view -h temp.bam
@HD VN:1.6  SO:coordinate
@SQ SN:ref  LN:45
@PG ID:samtools PN:samtools VN:1.21 CL:samtools view -Sb temp.sam
@PG ID:samtools.1   PN:samtools PP:samtools VN:1.21 CL:samtools view -h temp.bam
r001    99  ref 7   30  8M2I4M1D3M  =   37  39  TTAGATAAAGGATACTG   *
r002    0   ref 9   30  3S6M1P1I4M  *   0   0   AAAAGATAAGGATA  *
r003    0   ref 9   30  5S6M    *   0   0   GCCTAAGCTAA *   SA:Z:ref,29,-,6H5M,17,0;
r004    0   ref 16  30  6M14N5M *   0   0   ATAGCTTCAGC *
r003    2064    ref 29  17  6H5M    *   0   0   TAGGC   *   SA:Z:ref,9,+,5S6M,30,1;
r001    147 ref 37  30  9M  =   7   -39 CAGCGGCAT   *   NM:i:1