sam格式詳細說明


原文鏈接 https://www.jianshu.com/p/386f520e5de1

 

The SAM Format Specification(sam格式說明)

1 The SAM Format Specification

sam是一種序列比對后的輸出格式,以tab作為分隔符,包括頭部信息和比對信息。其中頭部信息必須在比對信息之前。頭部信息的開頭是@,但是比對行不是。每一個比對行有11個重要的比對信息元素,如果比對位置和校准信息等。

1.1 An example

FCC0YG3ACXX:2:1103:1572:139769#GCTTAATG 99 chr10 60001 0 90M = 60390 479 GAATTCCTTGAGGCCTAAATGCATCGGGGTGCTCTGGTTTTGTTGTTGTTATTTCTGAATGACATTTACTTTGGTGCTCTTTATTTTGCG CCCFFFFFHHHHHJJJJJJJJIJJJJJJJ?HHGIJJJBFHIJIJIDHIHIEHJJIJJIJJJHHGHHHFFFFFFEDCEEECCDDDDEECDD XT:A:R NM:i:0 SM:i:0 AM:i:0 X0:i:2 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:90 XA:Z:chr18,+14415,90M,0; RG:Z:120618_I245_FCC0YG3ACXX_L2_SZAXPI010030-30

1.2 Terminologies and Concepts

1-based coordinate system

  • 從1開始數, SAM, GFF and Wiggle 用的是這個。

0-based coordinate system

  • 從0開始數, BAM, BED, and PSL用的是這個。

Phred scale

  • 給一個概率0 < p <= 1 , 值是一個 −10log10p,要做一個四舍五入

1.3 The header section

每個標題行以字符“@”開頭,后面是兩個字母的記錄類型代碼。在標題中,每一行都是由制表符分隔的,除了@CO行,每個數據字段都遵循格式“TAG:VALUE”,其中TAG是一個兩個字母的字符串,定義了內容和值的格式。每個標題行應該匹配:/ ^ @[A-Za-z][A-Za-z](\ t[A-Za-z][A-Za-z0-9]:[- ~]+)+ $ /或/ ^ @CO \ t。* /。包含小寫字母的標記保留給最終用戶。
下表給出了定義的記錄類型和標記。當記錄類型出現時,需要帶有“*”的標記。

Tag Description
@HD 首行,輸出文件的第一行
VN* 格式版本,接受的格式:/^[0-9]+.[0-9]+$/
SO 比對排序,有unknown (default), unsorted, queryname and coordinate,對於coordinate,排序的主鍵是RNAME,其順序由標題中的@SQ行順序定義,次要排序鍵是POS字段。對於RNAME和POS相等的對齊,順序是任意的。在RNAME字段中,所有帶有“*”的對齊都跟隨帶有其他值的對齊,但是其他的對齊順序是任意的。
Tag Description
@SQ 參考序列字典,@SQ行的順序定義了對齊排序順序。
SN* 參考序列名字(染色體)。每一個@SQ行必須含有一個去重的SN標簽。這個字段的值是用於RNAME和PNEXT比對的記錄。正則表達式[!-)+-<>-][!-]*
LN* 參考序列長度,范圍:[1,2,29 -1]
AS 基因組裝配標識符。
M5 MD5用大寫字母校驗序列,並去掉gap和空格
SP 物種
UR 序列的URI。這個值應該從一個標准的協議開始,e.ghttp:或ftp:,如果不是1️⃣這些協議作為開始,那么就應該是文件系統路徑
Tag Description
@RG read組,允許有多個無序的@行
ID* read組標識符。每一個@RG行必須含有一個去重的ID。ID這個值會被用來作為比對報告的RG標簽
CN 測序中心提供的read名稱
DS 描述
DT 測序的日期 (ISO8601 date or date/time)
FO 流的順序。核苷酸鹼基陣列,與每次讀取的每個流所使用的核苷酸相對應。多鹼基流以IUPAC格式編碼,非核苷酸流以各種其他字符編碼。格式:/ \ * | ACMGRSVTWYHKDBN + /
KS 與每次reads的鍵序列所對應的核苷酸鹼基數組
LB 文庫
PG 產生read組的程序
PI 預測的中值插入大小
PL 用於產生reads的平台/技術。Valid values: CAPILLARY, LS454, ILLUMINA, SOLID, HELICOS, IONTORRENT and PACBIO
PU 平台單元( Illumina or slide for SOLiD的flowcell-barcode.lane)。惟一標識符。
SM 樣本,用被測序的池命名
Tag Description
@PG 程序
ID* 程序記錄標識符。每個@PG線必須有一個唯一的ID, ID的值用於其他@PG線程的比對PG標簽和PP標簽。在合並SAM文件以處理沖突時,可以修改PG id。
PN 程序名字
CL 命令行
PP 以前的@PG-ID。必須匹配另一個@PG標題的ID標簽。可以使用PP標記鏈接@PG記錄,鏈中的最后一條記錄沒有PP標記。該鏈定義應用於對齊的程序的順序。在合並SAM文件以處理PG id沖突時,可以修改PP值。鏈中的第一個PG記錄(即SAM記錄中的PG標記所引用的記錄)描述了在SAM記錄上操作的最新程序。鏈中的下一個PG記錄描述了在SAM記錄上操作的下一個最新程序。SAM記錄上的PG ID不需要引用鏈中最新的PG記錄。它可以引用鏈中的任何PG記錄,這意味着SAM記錄已經被PG記錄中的程序操作過,並且程序通過PP標記引用。
VN 程序版本
@CO 單行的text描述,是一個任意的說明信息。允許多個@CO行無序排列

1.4 The alignment section: mandatory fields(必填)

每一個比對行有11個必填選項。這些字段都是以相同順序出現,而且必須出現,但是這些值可以為0或*(取決於字段)如果無法獲得相應的信息。下表概述了SAM格式的強制字段:

Col Field Type Regexp/Range Brief description
1 QNAME String [!-?A-~]{1,255} 查詢模板名稱
2 FLAG Int [0,2^16 -1] 位標記,template mapping情況的數字表示,每一個數字代表一種比對情況,這里的值是符合情況的數字相加總和
3 RNAME String *|[!-()+-<>-][!-]* 參考序列名稱
4 POS Int [0,2^29 -1] 基於1的最左比對位置
5 MAPQ Int [0,2^8 -1] MAPping質量
6 CIGAR String *|([0-9]+[MIDNSHPX=])+ CIGAR字符串
7 RNEXT String *|=|[!-()+-<>-][!-]* 比對到的參考(染色體)名字
8 PNEXT Int [0,2^29 -1] 配對到的第一個鹼基的位置
9 TLEN Int [-2 29 +1,2 29 -1] 可以理解為文庫插入片段長度
10 SEQ String *|[A-Za-z=.]+ 序列片段
11 QUAL String [!-~]+ phred -scale基本質量+33的ASCII碼

1.QNAME:查詢模板名稱。具有相同QNAME的read/片段被認為來自相同的模板。QNAME ' * '表示信息不可用。
2.FLAG 位標記,下表是每一個代號代表的意義:

Bit Description
1 read是pair中的一條(read表示本條read,mate表示pair中的另一條read)
2 pair一正一負完美的比對上
4 片段未比對上
8 mate沒有比對上
16 這條read反向比對
32 mate反向比對
64 這條read是read1
128 這條read是read2
256 第二次比對
512 沒有通過質量控制
1024 read是PCR或光學副本產生
2048 輔助比對結果
  • 0x4是唯一可靠的告訴我們片段未比對上,如果0x4出現了,RNAME, POS, CIGAR, MAPQ, 0x2, 0x10 和 0x100 和 0x20都是沒有的
  • 如果0x40和0x80都存在,片段就是線性模板的一部分,但是既不是第一部分也不是最后一個部分,如果0x40和0x80都不存在,模板中片段的索引是未知的。這可能發生在非線性模板中,或者索引在數據處理中丟失。
  • 0x100 意味着片段在某些分析中是不會被用到的。
  • 如果0x1不存在,0x2, 0x8, 0x20, 0x40 and 0x80也沒啥意義

3.RNAME:比對的參考序列名稱,如果@SQ頭部行存在,RNAME(如果不是“*”)必須出現在一個 SQ-SN標記中。沒比對上此處就是“*”。然而,一個未必對的片段也有一個坐標以便排序。如果RNAME 是“*”,也就沒有 POS 和 CIGAR。

4.POS:於1的第一個匹配基的最左映射位置。參考序列中的第一個基的坐標是1。對於沒有坐標的未映射讀取,POS設置為0。如果POS為0,RNAME和CIGAR也就沒有意義。

5.MAPQ:mapping質量,等於−10log 10Pr(映射位置是錯的),四舍五入到最近的整數,值255表示映射質量特別差。

6.CIGAR:CIGAR字符串。下表為CIGAR字符串的解釋(‘*’表示無值)

Op BAM Description
M 0 比對匹配(可以是序列匹配或不匹配)
I 1 插入到參考
D 2 從參考刪除
N 3 參考的跳過的區域
S 4 軟剪切(被剪切的序列存在於序列中)
H 5 硬剪切(被剪切的序列不存在於序列中)
P 6 填充(從填充引用中無聲刪除)
= 7 序列匹配
X 8 序列不匹配
  • H 值出現在最初或者最后操作中
  • S 可證在他們和CIRAG末尾字符串中只有H操作
  • 對於mRNA到基因組的比對,一個N操作符代表內含子。對於其他類型的比對,沒有定義N的解釋。
  • M/I/S/=/X操作的長度之和等於SEQ的長度。

7.RNEXT::mate的reference sequence name,實際上就是mate比對到的染色體號,若是沒有mate,則是*

8.PNEXT:如果沒有這個信息(沒比對上)就是0

9.TLEN:如果R1端的read和R2端的read能夠mapping到同一條Reference序列上(即第三列RNAME相同),則該列的值表示第8列減去第4列加上第6列的值,R1端和R2端相同id的reads其第九列值相同,但該值為一正一負,R1文件的reads和R2文件的reads,相同id的reads要相對來看。在進行該第列值的計算時,如果取第6列的數值,一定要取出現M的值,S或H的值不能取。

10.SEQ:reads片段。如果序列不存在,就是*。如果不是*,這個序列的長度等於CIGAR中 M/I/S/=/X的總和。=表示他的基礎字段(如開始為1),和參考序列的基礎字段相同。

11.QUAL:鹼基質量加33的ASCII碼(與Sanger FASTQ格式中的質量字符串相同)。一個鹼基質量是基於錯誤率的phred-scaled等於−10log 10Pr(鹼基是錯的)。這個字段可以是“*”。如果它不是*,那么seq也不是“*”,它的長度與SEQ的長度得一致。

1.5 The alignment section: optional fields

這里所有的字段都是依照TAG:TYPE:VALUE的格式, TAG的標記是兩個字符,匹配為/[A-Za-z][A-Za-z0-9]/。在一個比對行每個TAG只可以出現一次。一個TAG含有返回給客戶的小寫字母。

Type Regexp matching VALUE Description
A [!-~] 可印刷字符
i [-+]?[0-9]+ 32位整數
f [-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)? 單精度浮點數
Z [ !-~]+ 可打印字符串,包括空格
H [0-9A-F]+ 十六進制格式的字節數組
B cCsSiIf+ 整數或數字數組

對於整數或數字數組(類型' B '),第一個字母表示以下逗號分隔數組中的數字類型。TYPE表示TAG對應值的類型,可以是字符串、整數、字節、數組等。
下表顯示了預定義的標記。你可以自由添加新標簽,如果你的新標簽很有趣,可以給samtools發郵件。請注意,以“X”、“Y”和“Z”開頭的標記或任何位置包含小寫字母的標記都保留給本地使用,在本規范的任何未來版本中都不會正式定義。

字符 含義
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 比對上的錯配鹼基的字符串表示


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM