sam/bam 是一種序列比對格式標准,由sanger制定,是以TAB為分割符的文本格式。主要應用於測序序列mapping到基因組上的結果表示,當然也可以表示任意的多重比對結果。通常是把FASTQ文件格式的測序數據比對到對應的參考基因組版本得到的。
header 部分
sam 分為兩部分,注釋信息(header section )和比對結果部分 (alignment section)。通常是把FASTQ文件格式的測序數據比對到對應的參考基因組版本得到的。注釋信息並不是SAM文件的重點,是該SAM文件產生以及被處理過程的一個記錄,規定以@開頭,用不同的tag表示不同的信息,主要有:
- @HD,說明符合標准的版本、對比序列的排列順序;
- @SQ,參考序列說明;
- @RG,比對上的序列(read)說明;
- @PG,使用的程序說明;
- @CO,任意的說明信息。
samtools 查看 header 命令
samtools view -H <.bam>
比對部分
比對部分我們主要看前 11 列
-
QNAME: read 名稱
-
FLAG: 概括出一個合適的標記,不同的數字代表不同的含義
第二列是對應的十六進制數,對應的二進制如下
- 1 :代表這個序列采用的是PE雙端測序
- 2: 代表這個序列和參考序列完全匹配,沒有插入缺失
- 4: 代表這個序列沒有mapping到參考序列上
- 8: 代表這個序列的另一端序列沒有比對到參考序列上,比如這條序列是R1,它對應的R2端序列沒有比對到參考序列上
- 16:代表這個序列比對到參考序列的負鏈上
- 32 :代表這個序列對應的另一端序列比對到參考序列的負鏈上
- 64 : 代表這個序列是R1端序列, read1;
- 128 : 代表這個序列是R2端序列,read2;
- 256: 代表這個序列不是主要的比對,一條序列可能比對到參考序列的多個位置,只有一個是首要的比對位置,其他都是次要的
- 512: 代表這個序列在QC時失敗了,被過濾掉了
- 1024: 代表這個序列是PCR重復序列
- 2048: 代表這個序列有一部分嵌合了 PCR 引物
最終的數值是符合上面條條件的數字加起來的值,比如 \(99 = 1+2+32+64\),
也可以用二進制運算給算出來:>>> bin(99) '0b1100011' # 其實就是 0000 0000 0001 + 0000 0000 0010 + 0000 0010 0000 + 0000 0100 0000
我們也可以通過這個值快速計算是不是完全匹配,或者判斷是否符合其他條件
>>> 99 & 2 2 # 返回為真值就代表是完全匹配
-
RNAME: 參考基因組的染色體名稱
-
POS: 比對到參考基因組上的位置
-
MAPQ: 比對質量, 255 表示比對質量不可用
-
CIGAR:
- “M”表示 match或 mismatch;
- “I”表示 insert;
- “D”表示 deletion;
- “N”表示 skipped(跳過這段區域);
- “S”表示 soft clipping(被剪切的序列存在於序列中);
- “H”表示 hard clipping(被剪切的序列不存在於序列中);
- “P”表示 padding;
- “=”表示 match;
- “X”表示 mismatch(錯配,位置是一一對應的);
-
RNEXT: read2 在參考序列上的染色體名稱,如果沒有就用 "*", 相同"="
-
PNEXT: read2 在參考序列上的位置
-
TLEN: 插入片段的長度
-
SEQ: read 序列
-
QUAL: read 質量
比對部分的其他信息
從第 12 列開始信息就不固定了, 格式是 TAG:TYPE:VALUE
大家了解一下就好
參考資料
https://samtools.github.io/hts-specs/SAMv1.pdf
https://samtools.github.io/hts-specs/SAMtags.pdf