通常シーケンサからの配列データ(FASTQファイルなど)を取得した後、アライメントツールを使用してリファレンスゲノムに対して各リード配列をマッピングすることになります。そんなアライメントしたリードの情報を格納するためのデータフォーマットが、本日紹介するSAM (Sequence Alignment/Map) フォーマットになります。
SAMファイルは多くの情報を保持することになるため、そのサイズも比較的大きくなる傾向があります。FASTQファイルは.gz形式で圧縮して保存される一方、SAMファイルは独自の圧縮形式であるBinaly Alignment Map (BAM) フォーマット、若しくはCRAMフォーマットとして圧縮して保持されることが一般的です。
SAM フォーマットは@から始まるヘッダー行と、それに続く以下の11列から構成されるアライメントセクションによって構成されており、アライメントセクション中の各行はリード1本1本のマッピング結果を示しています。
BAM/SAMフォーマットの歴史
Heng Li と Bob Handsaker による下記の論文により仕様が発表されました。
以来、NGSデータを保存するためのフォーマットとして幅広く使用され、Genome Analysis Toolkit(GATK)やBroad Institute、Wellcome Sanger Institute、および1000 GenomesProjectにも用いられました。
今や誕生10年を迎えています。
ヘッダー
各ヘッダー行は@
から始まる二文字のアルファベットからなり、@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をよく使う(後日紹介!)