生信格式之sam、bam

一、sam、bam簡介

1、sam

  • Sequence Alignment/Map format,直譯就是序列比對格式;

  • 序列比對是測序結果分析中最基礎的一步操作,它主要基于參考序列信息回答了每條reads來自人的哪條染色體的哪個區域;


    sequence mapping
  • 目前的比對軟件很多,例如bwa,star,bowtie2,算法也各有差異,但究其比對結果都是以sam純文本格式展現;

  • 在sam格式中,對比對情況、比對質量、PE雙端比對等各種比對可能結果都有全面的記錄,具體會在下面介紹。

2、bam

  • 簡單來說,bam格式就是sam的二進制版本;
  • 因為,sam最大的缺點就是文件體積太大,而bam格式可完整保留sam信息同時,可明顯降低文件大?。凰砸话銉H保留bam文件進行后續分析。
  • samtools可實現sam與bam間的轉換,以及查看bam內容,具體操作示例見筆記最后

3、序列比對小例子

  • 如下圖所示,準確來說是5條reads的比對結果,其中具體比對情況為--


    image.png

    (1)r001/1與r001/2是PE測序的pair/mate reads,現在遇到的基本都是雙端測序;
    (2)r002、r003、r004都是單獨的一條read(在這個圖片結果是這樣,也許對應的pair reads比對到很遠的位置,甚至其它染色體上);
    (3)r003出現兩次是因為其可比對到參考序列的不同位置,但是注意 -r003表示是其reverse reads比對上的;
    (4)reads序列中的大寫字母表示與參考序列對應堿基相同,小寫字母則表示不一致;星號或點號表示考慮insert/delete情況,reads才能比對到參考序列中;

  • 而sam格式有系統的規則,可簡潔、全面的描述上述比對結果,如下圖所示。


    image.png

在PE雙端測序中 pair reads與mate pairs概念基本相同,區別見https://www.biostars.org/p/77293/

2、sam格式剖析

image.png

2.1 header部分(optimal)

  • @開頭為標志,從不同角度為比對結果補充信息;
  • 常見的有以下四類


    sam header
  • (1)@HD 如果有,必須放在第一行
    VN表示sam格式的版本號,SO說明比對結果是否排序了
  • (2)@SQ 說明參考基因組的情況,一般會有很多行
    SN表示染色體名字,對應比對結果的RNAME列;LN表示該染色體的長度
  • (3)@PG則說明比對軟件情況
    ID表示程序ID號(一般與PN相同),PN表示軟件名,VN表示軟件版本號,CL表示產生該sam的命令語句
  • (4)@RG主要說明測序樣本信息
    ID,在一條lane只有一個sample情況下,可用flowcell+lane序號表示;SM表示sample名;LB表示原始測序文庫名;PL表示測序平臺

2.2 alignment section(required)

  • alignment section是sam的主體部分,其中那個每行代表一次比對結果,以及對應詳細的比對信息。
  • 如下圖,每條alignment record可分為9大部分,11+n列(metadata不固定)


    alignment record
第一列:read name

在雙端測序,一般至少有兩條相同記錄的read name(pair reads),但有時會有很多條(>2)記錄是因為

  • 首先是Chimeric alignment情況,就是類似最一開始介紹的r003的比對情況,由于序列的特性,可能比對到不同的比較合適區域;
  • 然后是Multiple mapping情況,這主要是由于reads序列與基因組的重復序列特征導致的(在人基因組中約占20%)。
    read name
第二列:flag
  • 簡單來說就是設置該條reads的比對屬性;
  • 表示某條reads是否有12條特征中的1至多條(多選題),結果用10進制數值加和表示
    image.png

    簡單理解所有選項含義---
    1表示是雙端測序;
    2表示pair reads均比對到了參考序列(good!)
    4表示這條read沒比對到參考序列
    8表示這條read的mate read沒比對到參考序列
    16表示這條read是reverse(反向)比對到參考序列的
    32表示這條read的mate read是reverse(反向)比對到參考序列的'
    64表示這條read是pair read的第一條read(左邊的)
    128表示這條read是pair read的第二條read(右邊的)
    256表示是這條read的Multiple mapping reads比對情況

其余三種情況比較少見,不作記錄了。關于secondary alignment與supplementary alignment的區別我認為就是分別對應Multiple mapping reads與Chimeric alignment比對情況。詳見https://sourceforge.net/p/samtools/mailman/message/33235303/

  • 某一加和結果數值只會是一組屬性特征值的和,不會出現不同組合均能加和等于一個特定和的結果;
  • 例如下圖,具體flag值含義參考上面解釋
    113=1+16+32+64
    369=1+16+32+64+256
    117=1+16+32+128
    417=1+32+128+256
    image.png

這個網頁https://broadinstitute.github.io/picard/explain-flags.html提供了根據輸入的結果flag來分解原特征組合的功能,挺方便的。

alignment record
第三列&第四列:read的位置
  • RNAME: Reference sequence NAME of the alignment;與header部分的@SQ SN保持一致;
  • POS: read比對到參考序列(染色體)的最左邊位置(基于染色體,且為1-based);
  • 如果只有pairs reads的一個成功比對到參考序列,那么未比對的reads的
    RNAME與POS應與比對上的reads的描述一致;
  • 如果pair reads均未成功比對到參考序列上,則RNAME列均為*,POS列均為0
    unmapped reads

簡單來說1-based就是序列第一個堿基序號為1,例如SAM, VCF, GFF and Wiggle formats等;0-based就是序列第一個堿基序號為0,例如 BAM, BCFv2, BED, and PSL formats等。

第五列:MAPQ
  • MAPping Quality. It equals ?10log 10 Pr{mapping position is wrong}, rounded to the nearest
    integer.
  • 一般來說MAPQ值越大,表示MAPping Quality越高;但255表示不可計算該read的MAPQ(我理解就是指unmapped的reads)
第六列:CIGAR
  • 這一列主要來描述序列的具體比對情況,以堿基為單位,主要有如下圖幾種比對類型
    image.png

    M表示read堿基比對到了參考序列的堿基上(有趣的是允許夾雜mismatch的情況,為SNP variant calling基礎)
    I相比于參考序列,read里插入insert了新堿基
    D相比于參考序列,read里刪除了部分堿基
    N比較特殊一般用于mRNA-seq結果里,表示比對到了intron內含子區域;
    S/H表示read序列兩端基本沒能比對到參考序列,而中間部分可以比對的情況;具體區別可參考http://www.aigenetic.com/index.php/2018/03/19/soft-clip-%E4%B8%8E-hard-clip%E7%9A%84%E5%90%AB%E4%B9%89%E6%8F%8F%E8%BF%B0/
    P針對是多條reads比對到同一參考序列區域,其中有一條reads存在insert的情況,具體見https://davetang.org/wiki/tiki-index.php?page=SAM#Padded_alignment
  • Sum of lengths of the M/I/S/=/X operations shall equal the length of SEQ,其中=X不常見。并且第四列read的起始位置也是從M/I/S/=/X開始計算的

其實總結來看,NS/H分別表示了兩種特殊比對情況spliced alignment與clipped alignment,前者是中間沒比對上,而兩端比對上了;后者使中間比對上,而兩端沒比對上。

clipped alignment -- 3S8M1D6M4S

spliced alignment -- 9M32N8M

  • 舉個例子,如下圖表示3 bases aligned followed by 1 base deleted, 2 next ones aligned, 1 base inserted and the last one aligned.


    image.png
alignment record
第七、八、九列:描述mate read信息
  • RNEXT是該read的mate read比對到的參考染色體,有三種情況;
    (1)=:read與mate read比對到同一染色體上;
    (2)若mate read比對到其它染色體上,則用相應的染色體名稱即可(SN
    (3)若mate read未比對成功,用*表示
  • PNEXT是該read的mate read比對到的參考染色體的起始位置;
  • TLEN列主要描述pair reads的"相隔距離",如下圖。
    (1)僅考慮M/I/=/X(excludes soft-clipped bases)情況;
    (2)pair reads的該列絕對值相同,只是左邊的reads為正值,右邊的reads為負值;
    (3)如果pair reads分別比對到不同染色體上,那么該值就是0
    image.png

特殊的TLEN:Note: these two definitions agree in most alignments, but differ in the case of overlaps where the first segment aligns beyond the start of the last segment.


image.png
第十、十一列:序列信息
  • 第十列:原始序列組成,等于原來fastq的第二行;
  • 第十一列:序列的Phred質量值,等于原來fastq的第四行;詳見之前fastq的筆記。
第12+n列:metadata(optimal)
  • TAG:TYPE:VALUE格式:TAG表示標簽名,一般是兩個大寫字母;TYPE表示VALUE的數據類型;VALUE表示該read的VALUE值
  • Predefined standard tags可參考:https://samtools.github.io/hts-specs/SAMtags.pdf
  • BWA mem比對結果產生的TAG結果為例,解釋如下圖。
    image.png

至此,關于sam格式的基本介紹大致如上,主要參考了http://samtools.github.io/hts-specs/SAMv1.pdf教程手冊,其中還有很多深入的知識,值得以后深入探索~~

image.png

三、samtools轉換sam、bam

  • sam轉bam
samtools view -bS SRR1663608.sam > SRR1663608.bam
  • bam轉sam
samtools view -h -o SRR1663608.sam SRR1663608.bam
  • bam結果統計
#查看bam
samtools view -h SRR1663608.bam | more
#the number of records (alignments) 
samtools view -c SRR1663608.bam
#Displays basic alignment stats based on flag
samtools flagstat SRR1663608.bam

更多關于sam/bam格式的操作,可見之間生信技能樹Jimmy大神布置的一些練習題,我自己也做了,詳見Linux生信練習3--sam/bam


筆記圖片大多來自網上,侵刪~ 筆記中如有錯誤之處,歡迎指出!

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,048評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,414評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,169評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,722評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,465評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,823評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,813評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,000評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,554評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,295評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,513評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,722評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,125評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,430評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,237評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,482評論 2 379

推薦閱讀更多精彩內容