SAM文件格式
SAM(The Sequence Alignment / Map format)格式,即序列比對文件的格式,詳細介紹文檔
以下內容參考2019年1月SAM文件說明文檔,具體細節請關注最新文檔說明
SAM文件由兩部分組成:頭部信息和比對信息,都是以tab鍵分隔。
-
頭部信息介紹
每個標題行以字符"@"開頭,后面是兩個字母的記錄類型代碼。在標題中,每一行都是由制表符分隔的。除了@CO行,每個數據字段都遵循格式"TAG:VALUE",其中TAG是兩個字母組成的字符串,定義了內容和值的格式。每個標題行應該匹配:/^ @(HD|SQ|RG|PG)(\t[A-Za-z][A-Za-z0-9]:[-~]+)+$ /或/^@CO\t.*/。小寫字母是保留給用戶自定義內容使用的,不會在任何版本定義中出現。以下給出了定義的記錄類型和標記。當以下TAG標簽出現"*"時,表示該TAG是必須的,如@SQ必須有SN和LN字段。- @HD 首行,輸出文件的第一行
VN* 格式版本,接受的格式:/^[0-9]+.[0-9]+$/
SO 比對排序類型,有unknown (default), unsorted, queryname和coordinate,對於coordinate,排序的主鍵是RNAME,其順序由標題中的@SQ行順序定義,次要排序鍵是POS字段。如果RNAME和POS相同,順序是任意隨機的。# 例如 @HD VN:1.4 SO:coordinate
- @SQ 參考序列字典,@SQ行的順序定義了比對文件排序順序。
SN* 參考序列名字(染色體)。每一個@SQ行必須含有一個去重的SN標簽。這個字段的值是用於RNAME和PNEXT比對的記錄。正則表達式[!-)+-<>-][!-]*
LN* 參考序列長度,范圍:[$1,2^{31}-1$
]
AS 基因組裝配標識符。
M5 MD5算法校驗序列碼
SP 物種
UR 參考序列的URI。這個值從一個標准的協議開始,例如,http:或ftp:,如果不是這些協議作為開始,那么就應該是文件系統路徑# 例如 @SQ SN:chr1 LN:249250621 M5:1b22b98cdeb4a9304cb5d48026a85128 UR:file:/opt/biosoft/ref/sv/hg19_ref_genome.primary-assembly.fa
- @RG Read Group,1個樣本的測序結果為1個Read Group。允許有多個無序的@RG行
ID* read group標識符。每一個@RG行必須含有一個唯一的ID。
CN 測序中心提供的read名稱
DS 描述
DT 測序的日期 (ISO8601 date or date/time)
LB 文庫名
PL 用於產生reads的平台/技術。可用值: CAPILLARY, LS454, ILLUMINA, SOLID, HELICOS, IONTORRENT and PACBIO
PU 平台單元(flowcell-barcode.lane for Illumina or slide for SOLiD)。唯一標識符。
SM 樣本名@RG ID:1 LB:Lib PL:Illumina SM:sample_L001 PU:Lane
- @PG 比對所使用的軟件程序及版本
ID* 程序記錄標識符。每個@PG必須有一個唯一的ID
PN 程序名字
CL 比對操作的命令行內容
VN 程序版本# 例如 @PG ID:bwa PN:bwa VN:0.7.12-r1039 CL:bwa mem -t 4 -M /opt/ref/hg19.fa read1.fq.gz read2.fq.gz
- @CO 單行的text描述,是一個任意的說明信息。允許多個@CO行無序排列
- @HD 首行,輸出文件的第一行
-
比對信息介紹
比對信息部分(alignment section),每一行表示一個片段(segment)的比對信息,包括11個必須的字段(mandatory fields)和一個可選的字段,字段之間用tab分割。必須的字段有11個,順序固定,不可用時,根據字段定義,可以為'0'或者'*',這是11個字段包括:1. QNAME 比對片段的(template)的編號;read name,read的名字通常包括測序平台等信息 # eg.E00528:375:HN2JTCCXY:8:1123:5457:24479 2. FLAG 位標識,template mapping情況的數字表示,每一個數字代表一種比對情況,這里的值是符合情況的數字相加總和 # eg.16 3. RNAME 參考序列的編號,如果頭部注釋中對SQ-SN進行了定義,這里必須和其保持一致,另外對於沒有mapping上的序列,這里是'*'; # eg.chr1 4. POS 比對上的位置,注意是從1開始計數,沒有比對上,此處為0; # eg.36576599 5. MAPQ mapping的質量,比對的質量分數,越高說明該read比對到參考基因組上的位置越唯一; # eg.42 6. CIGAR 簡要比對信息表達式(Compact Idiosyncratic Gapped Alignment Report),其以參考序列為基礎,使用數字加字母表示比對結果,match/mismatch、insertion、deletion 對應字母 M、I、D。比如3S6M1P1I4M,前三個鹼基被剪切去除了,然后6個比對上了,然后打開了一個缺口,有一個鹼基插入,最后是4個比對上了,是按照順序的; # eg.36M 表示36個鹼基在比對時完全匹配 ###注:第七列到第九列是mate的信息,若是單末端測序這幾列均無意義### 7. RNEXT 配對片段(即mate)比對上的參考序列的編號,沒有另外的片段,這里是'*',同一個片段,用'='; # eg.* 8. PNEXT 配對片段(即mate)比對到參考序列上的第一個鹼基位置,若無mate,則為0; # eg.0 9. TLEN Template(文庫插入序列)的長度,最左邊的為正,最右邊的為負,中間的不用定義正負,不分區段(single-segment)的比對上,或者不可用時,此處為0(ISIZE,Inferred fragment size.詳見Illumina中paired end sequencing 和 mate pair sequencing,是負數,推測應該是兩條read之間的間隔(待查證),若無mate則為0); # eg.0 10. SEQ 序列片段的序列信息,如果不存儲此類信息,此處為'*',注意CIGAR中M/I/S/=/X對應數字的和要等於序列長度; # eg.CGTTTCTGTGGGTGATGGGCCTGAGGGGCGTTCTCN 11. QUAL 序列的質量信息, read質量的ASCII編碼。格式同FASTQ一樣。 # eg.F-?DD<,EEFFEEC?F5FA7FAF8FAF;F@E:DF>FEEAFFFFFCFFC4EFDFDDFEFE=EFFF 12.第十二列及之后:Optional fields,以tab建分割。 # eg.AS:i:-1 XN:i:0 XM:i:1 XO:i:0 XG:i:0 NM:i:1 MD:Z:35T0 YT:Z:UU
-
FLAG取值
FLAG(十進制) | Bitwise(二進制) | 十六進制 | 內容描述 |
---|---|---|---|
1 | 0000 0000 0001 | 0x1 | 代表PE測序,如果是0,代表SE測序 |
2 | 0000 0000 0010 | 0x2 | 代表正常比對,如果是PE測序,還代表PE的兩條read之間的比對距離沒有明顯的偏離插入片段長度 |
4 | 0000 0000 0100 | 0x4 | 代表這個序列沒有mapping到參考序列上 |
8 | 0000 0000 1000 | 0x8 | 代表這個序列的另一端序列沒有比對到參考序列上,比如這條序列是R1,它對應的R2端序列沒有比對到參考序列上 |
16 | 0000 0001 0000 | 0x10 | 代表這個序列比對到參考序列的負鏈上 |
32 | 0000 0010 0000 | 0x20 | 代表這個序列對應的另一端序列比對到參考序列的負鏈上 |
64 | 0000 0100 0000 | 0x40 | 代表這個序列是R1端序列,read1 |
128 | 0000 1000 0000 | 0x80 | 代表這個序列是R2端序列,read2 |
256 | 0001 0000 0000 | 0x100 | 代表這個序列不是主要的比對,一條序列可能比對到參考序列的多個位置,只有一個是首要的比對位置,其他都是次要的 |
512 | 0010 0000 0000 | 0x200 | 該read沒有通過質量控制 |
1024 | 0100 0000 0000 | 0x400 | 代表這個序列是PCR重復序列 |
2048 | 1000 0000 0000 | 0x800 | 這條read可能存在嵌合,這個比對的部分只是來自其中的一部分序列(Supplementary alignment) |
1. 關於Supplementary的定義,可以看文檔對chimeric alignment(嵌合比對)的描述
chimeric alignment:“嵌合比對” 的形成是由於一條測序read比對到基因組上時分別比對到兩個不同的區域,而這兩個區域基本沒有overlap。因此它在sam文件中需要占用多行記錄顯示。只有第一個記錄被稱作"representative",其他的都是"supplementary"【Chimeric reads are also called split reads】
2. FLAG舉例說明
FLAG 419 表示PAIREED(1), PROPER_PAIR(2),MREVRSE(32),READ2(128),SECONDARY(256),其中
PAIRED 代表這條序列采用雙端測序, 其值為1;
PROPER_PAIR 代表這條序列完全匹配, 其值為2;
MREVRSE 代表這條序列對應的另一端序列比對到參考序列的負鏈上,其值為32;
READ2 代表這條序列是R2端序列,其值為128
SECONDARY 代表這條序列不是primary alignment, 其值為256
1 + 2 +32 +128 + 256 = 419
3. bam2fq
根據FLAG搞清楚了序列究竟是R1端還是R2端之后,還有一點值得注意的地方,samtools還提供了一個bam2fq的功能,根據bam文件抽取比對時采用的fastq序列
在bam文件中,第10列代表的是序列,第11列代表的是序列的質量,根據第二列的flag還可以確定序列是R1還是R2,但是當序列本身比對到參考序列的負鏈時,
即flag 包含16時,bam文件中記錄的序列是原始序列的反向互補序列,而且質量值也是反向的,所以根據這樣的序列還原時要小心一點,以flag為339的序列為例,
因為339包含了REVERSE,所以對應的序列應該是第10列序列的反向互補序列,鹼基質量值為第11列的反向序列,
- CIGAR字符串
Op BAM 描述 消耗待比對序列 消耗參考序列
M 0 位置能比對上 yes yes
I 1 相對參考序列有插入 yes no
D 2 相對參考序列有缺失 no yes
N 3 從參考序列上跳過一段 no yes
S 4 軟切割(被切割的序列保留在SEQ中) yes no
H 5 硬切割(被切割的序列不出現在SEQ中) no no
P 6 補丁(打了補丁的參考序列中的沉默缺失) no no
= 7 read鹼基與參考序列相同 yes yes
X 8 read鹼基與參考序列不同 yes yes
1. "消耗查詢序列"與"消耗參考序列"分別指CIGAR是否引起比對沿着查詢序列和參考序列的方向向前前進一個或幾個鹼基;
2. H 只能出現在CIGAR的開始或最后;
3. S的兩邊必為H,否則必須位於CIGAR的兩端;
4. 對於mRNA到基因組的比對,N表示內含子。對於其他類型的比對,N的解釋未被定義;
5. MIS=X的長度和應該等於SEQ長度。
-
比對信息第12列及之后:可選字段
所有的可選字段服從TAG:TYPE:VALUE格式,其中TAG是兩個字符組成的字符串,符合正則表達式/[A-Za-z][A-Za-z0-9]/。每個TAG在一個比對行中只能出現一次。小寫字母組成的TAG保留給終端用戶自定義。在可選字段中,TYPE是大小寫敏感的單個字母,用來定義VALUE的格式TYPE 相應VALUE的正則表達式 描述 A [!-~] 可打印字符 i [-+]?[0-9]+ 有符號的整數(SAM格式對這里整數的范圍沒有要求,但BAM要求范圍是[-2^31, 2^32 ],所以SAM也得在這個范圍內) f [-+]?[0-9]*.?[0-9]+([eE][-+]?[0-9]+)? 單精度浮點數 Z [ !-~]* 可打印字符串,包括空格 H ([0-9A-F][0-9A-F])* 十六進制格式的二進制數列表(例如,二進制列表[0x1a, 0xe3, 0x1]對應十六進制串 ‘1AE301’) B [cCsSiIf](,[-+]?[0-9]*.?[0-9]+([eE][-+]?[0-9]+)?)* 整數或數字數組 對於一個整數或數字列表(類型B),第一位字母指明后面逗號分隔的列表的數字類型,可以是‘cCsSiIf’中的一個,分別對應int8 t (有符號的8位整數), uint8 t (無符號的8位整數), int16 t, uint16 t, int32 t, uint32 t and float(Explicit typing eases format parsing and helps to reduce the file size when SAM is converted to BAM)。輸入輸出過程中,如果其他類型也能與列表兼容,列表元素的類型可能會改變。
-
可選字段:預定義的標簽(tags)
在SAM可選字段說明中有描述,其中描述了已有的標准TAG字段和自定義字段的細節。以X、Y、Z開頭的TAG和包含小寫字母的TAG保留為終端用戶自定義使用,不會在本說明未來版本中正式定義。## 例如 AS:i 匹配的得分 XS:i 第二好的匹配的得分 YS:i mate 序列匹配的得分 XN:i 在參考序列上模糊鹼基的個數 XM:i 錯配的個數 XO:i gap open的個數,針對於比對中的插入和缺失 XG:i gap 延伸的個數,針對於比對中的插入和缺失 NM:i 編輯距離。但是不包含頭尾被剪切的序列。一般來說等於序列中error base的個數 YF:i 該reads被過濾掉的原因。可能為LN(錯配數太多,待查證)、NS(read中包含N或者.)、SC(match bonus低於設定的閾值)、QC(failing quality control,待證) YT:Z 值為UU表示不是pair中一部分(單末端?)、CP(是pair且可以完美匹配)、DP(是pair但不能很好的匹配)、UP(是pair但是無法比對到參考序列上) MD:Z 比對上的錯配鹼基的字符串表示 ## 比對軟件會定義一些自定義可選字段,比如BWA,詳細情況請查看bwa說明文檔 ## bwa定義,如 XT:A: 比對Type: Unique/Repeat/N/Mate-sw 如 XT:A:U 表示唯一比對 XM:i: 比對中mismatch的數目 ...