BAM/SAMファイル - アライメント情報を格納するためのフォーマット

f:id:kimoppy126:20201023001926p:plain

通常シーケンサからの配列データ(FASTQファイルなど)を取得した後、アライメントツールを使用してリファレンスゲノムに対して各リード配列をマッピングすることになります。そんなアライメントしたリードの情報を格納するためのデータフォーマットが、本日紹介するSAM (Sequence Alignment/Map) フォーマットになります。

SAMファイルは多くの情報を保持することになるため、そのサイズも比較的大きくなる傾向があります。FASTQファイルは.gz形式で圧縮して保存される一方、SAMファイルは独自の圧縮形式であるBinaly Alignment Map (BAM) フォーマット、若しくはCRAMフォーマットとして圧縮して保持されることが一般的です。

SAM フォーマットは@から始まるヘッダー行と、それに続く以下の11列から構成されるアライメントセクションによって構成されており、アライメントセクション中の各行はリード1本1本のマッピング結果を示しています。

BAM/SAMフォーマットの歴史

Heng Li と Bob Handsaker による下記の論文により仕様が発表されました。

pubmed.ncbi.nlm.nih.gov

以来、NGSデータを保存するためのフォーマットとして幅広く使用され、Genome Analysis Toolkit(GATK)やBroad Institute、Wellcome Sanger Institute、および1000 GenomesProjectにも用いられました。

今や誕生10年を迎えています。

www.kimoton.com

ヘッダー

各ヘッダー行は@から始まる二文字のアルファベットからなり、@CO以外は、TAG:VALUEの形式が続きます。正規表現で表すと下記の二つが該当します。 - /^@(HD|SQ|RG|PG)(\t[A-Za-z][A-Za-z0-9]:[ -~]+)+$/ - /^@CO\t.*/

詳細は公式仕様の1.3章を参照してください。 各タグはそれぞれ下記を表しています。

TAG 説明
@HD フォーマットのバージョンやソートの情報といったファイルレベルのメタデータ。存在する場合、ファイルの先頭に記載される。
@SQ リファレンス配列の情報。アライメントのソート順を規定している。
@RG リードグループ。ライブラリの情報やサンプルの情報、シーケンサの情報などが含まれる。複数のリードグループ行が存在し得る。
@PG 実行されたプログラムに関する情報
@CO コメント。UTF-8文字コードが使用される。複数のコメント行が存在し得る。

アライメントセクション

SAMフォーマットのアライメントセクションは11列からなるタブ区切りのフィールドであらわされます。

列番号 列名 説明
1 QNAME リードの名前。SAMファイル中では、この値はユニークとなる。取得できなかった場合、'*'となる。
2 FLAG mapped/unmapped read, pairing,などマッピングの状態を示すビット値。
3 RNAME リファレンス配列の名前。マッピングされなかったリードは * となる。左から数えて最初にマッチした塩基のポジション。マッピングされなかったリードは0となる。
4 POS マッピングされたポジション。1始まり。マッピングされなかったリードは0となる。
5 MAPQ マッピングクオリティー。マッピングポジションが誤っている確率の常用対数に-10を掛けた値。255はマッピングクオリティが得られなかったことを示す。
6 CIGAR リファレンスに対し、どのようにアライメントされたかを示す。これは複数の要素を含む。各要素はoperator とnumberからなる。次節の説明参照
7 MNAME paired-endの場合、もう一方のリードの名前を示す。"="の場合、もう一方のリードも同じ名前であることを示す。
8 MPOS 最もよくマッピングされたポジションを示す。
9 TLEN 全てのセグメントが同一のリファレンス配列にマッピングされた場合、最も左側にマップされた塩基から最も右側にマップされた塩基までの長さが計算される (end − start + 1)。マップされたか否かはCIGARフォーマットから判別される(したがってsoft-clipped部分は含まれない)。最も左のセグメントは正の符号が、最も右のセグメントは負の符号がつく。この列は、対応するリードがどこにアラインされているかを把握するために存在する。コンセンサスの取れた定義は存在せず、ファイルの出力に使用したツールなどに依存している。
10 SEQ リファレンスとして使用されるリード中の配列。"*" でない場合、CIGAR列のM/I/S/=/Xを足したものになる。
11 QUAL リードのクオリティー。fasta/q format中のものと同じ(Phredクオリティスコア + 33 をASCIIコードにエンコードした値)

最初の11列は下記の順序で常に存在し、何らかの影響によりこれらの情報が得られなかった場合、その列は 0 若しくは * のプレースホルダーで埋められます。

SAMファイル内では、すべての情報は+ストランドを対象としており、5 '末端から3'末端に向かっています。 そのため、ペアエンドリードを用いたシーケンスが行われた場合は、下記のような変換が行われたうえでファイル中に格納されることになります。

                           (R2)3'<----------5'
5'----------->3'(R1)
5'------------------------------------------- 3' (RefSeq)

                               5'---------->3'(R2)
5'----------->3'(R1)
5'------------------------------------------- 3' (RefSeq)

Concise Idiosyncratic Gapped Alignment Report (CIGAR)

SAMファイル内において、アライメントの情報はCIGARと呼ばれるフォーマットにエンコードされます。
このフォーマットでは、リファレンス配列とリード配列との関係性を示すアルファベットと、その関係性がいくつ連続しているかを示す数値のプレフィックスで構成表されます。

CIGARフォーマットで使用されるアルファベット

M, I, Dは標準CIGARフォーマットで使用されており、その他は拡張CIGARフォーマットにて使用されます。

CIGAR 意味
M リファレンス配列にアラインされたリード(個々の塩基がリファレンス配列と同じであるとは限らない)
I リファレンス配列への挿入
D リファレンス配列への欠失
N ギャップ
S soft-clippedなリード。リファレンス配列にアラインされていない両端のリード。配列はレコードとして記録されている。
H hard-clippedなリード。リファレンス配列にアラインされていない両端のリード。配列はレコードとして記録されていない。
P パディング。denovoアライメントの際に登場する。リファレンス配列で欠失している箇所の欠失。
= リファレンス配列にアラインされたかつ配列がマッチ
X リファレンス配列にアラインされたかつ配列がミスマッチ

例えば下記のようなリファレンス配列、リード配列の関係性があった場合、

    REF: AGCTAGCATCGTGTCGCCCGTCTAGCATACGCATGATCGACTGTCAGCTAGTCAGACTAGTCGATCGATGTG
    READ:       gggGTGTAACC-GACTAGgggg

3つのソフトクリップ、8つのマッチ、1つのギャップ、6つのマッチ、4つのソフトクリップが連なっているため、CIGARフォーマットでは「3S8M1D6M4S」と表されます。

これだけは知っておくべきBAM/SAMファイル

上記細かいSAMファイルのフォーマットに関してツラツラ書きましたが、実際知っておくべきは下記のようなことになるかと思います。

  • BAM/SAMファイルはアライメントしたリードの情報を格納するためのフォーマットである
  • BAMファイルはSAMファイルを独自の圧縮形式にしたフォーマットである
  • BAM/SAMファイルを扱う際はSAMtoolsをよく使う(後日紹介!)

参考