はじめに
SAM/BAM ファイル形式についてごく簡単にまとめます。
SAM/BAM形式とは
bwa, STAR, hisat2 などのalignerで、FASTQファイルをリファレンスゲノムにマッピングした際に生成されるファイルです。Sam(Sequence Alignment/Map)はテキスト形式で、Bam(Binary Alignment/Map)はバイナリ形式です。
公式の仕様書
SAM/BAMは BWA や Samtools の開発者の Heng Li さんが策定したファイル形式です。
- 元論文 The Sequence Alignment/Map format and SAMtools
- Heng Li's blog SAM/BAM/samtools is 10 years old
公式によるサンプル
アラインメントが以下のようだった場合
Coor 12345678901234 5678901234567890123456789012345
ref AGCATGTTAGATAA**GATAGCTGTGCTAGTAGGCAGTCAGCGCCAT
+r001/1 TTAGATAAAGGATA*CTG
+r002 aaaAGATAA*GGATA
+r003 gcctaAGCTAA
+r004 ATAGCT..............TCAGC
-r003 ttagctTAGGC
-r001/2 CAGCGGCAT
対応するSamファイルは以下のようになる
@HD VN:1.6 SO:coordinate
@SQ SN:ref LN:45
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:
SAM/BAM形式
SAMはテキスト形式、BAMはバイナリ形式である。
各カラムの意味
1〜11は必須カラムで、項目がない場合は * または 0 を記入する。
カラム番号 | カラム名 | タイプ | 意味 |
---|---|---|---|
1 | QNAME | String | リードの名前 |
2 | FLAG | Int | アライメントの結果(後述) |
3 | RNAME | String | リファレンスゲノムの名前 染色体番号など |
4 | POS | Int | リードがマップされた開始位置 |
5 | MAPQ | Int | マッピングクオリティスコア |
6 | CIGAR | String | マッピング状況(後述) |
7 | RNEXT | String | ペアエンドの場合、相手方のリード名 |
8 | PNEXT | Int | ペアエンドの場合、相手方のマップされた開始位置 |
9 | TLEN | Int | ペアエンドの場合、インサートの長さ |
10 | SEQ | String | 塩基配列データ |
11 | QUAL | String | Sequence Quality |
12 | マッピングソフトによる追加情報 |
参考:Dr. Bonoの生命科学データ解析
ヘッダー部分
「@」で始まるタグのあとに、アラインメントに関する情報が記載されている。
@HD | ヘッダー | |
VN | SAMフォーマットのバージョン | |
SO | アライメントのソート順。unknown, unsorted, queryname または coordinate のいずれか記載される | |
GO | グループ。none, query(QNAMEによって), reference(RNAME/POSによって) | |
SS | Sub-sorting order | |
@SQ | リファレンス | |
SN | リファレンス配列の名前 | |
LN | リファレンス配列の長さ | |
AH | Indicates that this sequence is an alternate locus. | |
AN | Alternative reference sequence names. | |
AS | ゲノムアセンブリーID | |
DS | 説明(Description) | |
M5 | MD5 checksum | |
SP | 生物種 | |
TP | 分子トポロジー linear circular | |
UR | 配列のURI http ftp | |
@RG | リードグループ | |
ID | リードグループID | |
BC | バーコード配列 | |
CN | sequencing center | |
DS | 説明(Description) | |
DT | 日付 | |
FO | Flow order | |
KS | ||
LB | Library | |
PG | 使用したプログラム | |
PI | Predicted median insert size | |
PL | プラットフォーム CAPILLARY LS454 ILLUMINA SOLID HELICOS IONTORRENT ONT PACBIO | |
PM | プラットフォーム(自由記述) | |
PU | Platform unit | |
SM | サンプル | |
@PG | プログラム | |
PN | プログラムの名前 | |
CL | 使用したコマンド | |
DS | 説明(Description) | |
VN | プログラムのバージョン |
Flag
Integer | Binary | Description |
---|---|---|
1 | 000000000001 | ペアリードがある |
2 | 000000000010 | 両方マップされている |
4 | 000000000100 | read1 はマップされていない |
8 | 000000001000 | read2(相方) はマップされていない |
16 | 000000010000 | read1 は逆相補鎖にマップされている |
32 | 000000100000 | read2(相方) は逆相補鎖にマップされてる |
64 | 000001000000 | read1 である |
128 | 000010000000 | read2 である |
256 | 000100000000 | 複数個所にマップされている |
512 | 001000000000 | マッピングQVが低い |
1024 | 010000000000 | PCR or optical duplicate |
2048 | 100000000000 | supplementary alignment (e.g. aligner specific, could be a portion of a split read or a tied region) |
- 参照元 http://crusade1096.web.fc2.com/sam.html (一部改変)
フラグの意味が知りたい場合下記の samtools
のコマンドが使用できる。
samtools flags 2064
# 0x810 2064 REVERSE,SUPPLEMENTARY
CIGAR
CIGARはinsertion, deletion, softclipなどの位置を表す。
M | 参照配列に張り付いたリード。ただし、個々の塩基が参照配列と同じかどうかは感知しない。 |
I | 挿入。 |
D | 欠失。 |
N | 間が飛んでいる。mRNAではイントロンがメイン。 |
S | ソフトクリップ。張り付いていない端っこのリード。何が張り付いていないのかは明記されている。 |
H | ハードクリップ。張り付いていない端っこのリード。何が張り付いていないのかは不明。 |
P | padding。張り付いたリードの側で何かの欠失が起こっている。de novoがメイン? |
= | 参照配列に張り付いたリードのうち、参照配列と同じ塩基。 |
X | 参照配列に張り付いたリードのうち、参照配列とは違う塩基。 |
基本操作
samtools
は -@ 4
などと書くとマルチコアで動いてくれることが多い。
SAM → BAM
samtools view -bS file.sam > file.bam
BAM → SAM
samtools view sample.bam > sample.sam
BAMファイルをソート
samtools sort sample.bam > sample.sort.bam
BAM indexを作成
samtools index sample.sort.bam
SAM/BAM 関連ツール
日本語情報では上坂さんのサイトの情報が圧倒的
この記事は以上です。
(この記事は17日のアドベントカレンダーのための下準備です)