理解sam 與bam 文件

參考:堿基礦工
生信學苑

通常我們可能會看到.cram.sam.bam等多種序列比對的文件,其實他們的本質都源于sam。
bam 是sam 則是一種比gz更加高效的壓縮算法,可以很好的對sam 文件進行壓縮;
而cram則是bam的高壓縮格式(相比于BAM有著更高的壓縮率,能夠節省30%-50%的空間),IO效率比原來的BAM要略差(同樣慢30%左右),且CRAM和BAM可以通過samtools或者picard方便地實現互轉。

SAM

SAM 文件的全稱為SAM(The Sequencing Alignment/Map Format的英文簡稱),由sanger 定制,是以TAB 為分割符的文本格式。主要應用于測序序列mapping到基因組上的結果表示,也可以表示任意的多重比對的結果。

它是bwa比對輸出的標準格式,由于其是純文本內容,因此缺點便是內容巨大,比如一個人30x全基因組測序的sam大小超過600G,非常容易造成存儲爆滿。

因此開發者想到了壓縮sam 文件這一方法,而bam 格式也在層出不窮的各類壓縮文件中脫穎而出。

BAM

正如上面所說,bam的本質其實就是sam 文件的一種壓縮形式(因此二者實際上是同一文件的不同格式)。而bam 對于比對的結果也有著非常全面的記錄。

除此之外,bwa作者還為bam 專門開發了samtools,更便于處理bam文件,也增加了原有的拓展性。

查看文件

通常來說,sam文件可以像其他文本文件一樣直接查看(less等),但bam文件(為二進制文件)則需要借助samtools工具。

samtools view -h E_coli_K12.sorted.markdup.bam|less -SN
# h選項會將bam 的header 信息也一并輸出

記錄的信息

序列比對,至少應該包含以下的內容與信息。


一般來說,bma 文件分為兩個部分,headerrecord。(大部分的組學數據也都是按照這兩種內容分割來存儲數據的)

header 部分

header 部分信息不會太多,一般來說每一行以@開頭,里面主要包含了文件的各類參數信息。

@HD 說明符合標準的版本、對比序列的排列順序;
@SQ,參考序列說明(如果是人則是和參考序列一致的各個染色體的信息);
@RG,比對序列(reads)的說明;
@PG,使用的程序說明(操作過程與相關參數);
@CO,任意的說明信息(可有可無)。

@RG 主要是用于區分不同樣本的重要信息,它是測序數據合并的關鍵。

record 部分

record ,也叫 alignment section,是序列比對的內容,從header 往下record 部分的每一行都是一條read 的比對信息。并且read的每個信息都會用tab 分開,且一共有12列。



其中有幾個重要的信息。

flags

flag 主要記錄的是序列的比對信息。實際的flag 應為01 組成的二進制碼,一共有12位數字,12位數字分別代表12種0與1 對應的組合情況。(數值取值范圍也就是0~2048)


比如下圖這個數字

2209 = 100010100001,也就表示為PE測序(1),它的另一條配對read 反向互補后比對到參考序列(6),且為read2片段(8),最后,該read 還可能存在嵌合,也即比對的這部分可能只是來自于其中的一部分序列,supplementary alignment(12)。

一般來說,我們可以自己寫腳本,無非就是將原本的十進制數字提取出來,再轉化為二進制形式,最后再通過比對每一行的信息,通過 TRUE(1) 還是FALSE(0)的判斷,即可得到其表示的結果。比如若轉化后的二進制形式的第三位數字為1,則表示該read 沒有比對到參考序列上。

另外,python也提供了相應的包可以方便我們的bam 信息處理。

MAPQ 質量值

這個質量值和fastq 格式中的質量值的轉化與表示方式一樣,都是-10logP(P為錯比概率)。它是衡量read 比對質量的一個重要指標。

CIGAR

又稱“雪茄值”,全稱為,Compact Idiosyncratic Gapped Alignment Report,它和flag 類似,也通過幾個字符串,但表示了不同的read比對到參考序列的細節信息。CIGAR的標記字符有MIDNSHP=XB這10個。


比如167H134M表示,比對這條read 的開頭167bp被硬跳過了,且緊隨其后的134bp比對上了參考序列。另外并非M就是完全匹配,其也包括某些單堿基錯配。

其他信息

其他的還包括read 質量值,其實也就是囊括了fastq 文件的信息。有的時候fastq 文件也會存儲為uBam(un-mapping BAM)文件,這其實也就是沒有做過比對的BAM文件。

另外,除了前11列信息之外,metadata 的內容是不固定的。這點和不同的處理軟件輸出內容不同也有一定關系。

可視化查看

之前提到,bam 與sam 不同,它是一種壓縮后的二進制文件,因此需要使用samtools view進行查看。

此外我們還可以提取指定的某段序列的信息。

samtools view -h E_coli_K12.bam NC_000913.3:1000000-1000200

如果想要可視化,可以使用tview指令。這是samtools 自帶的終端工具。

samtools tview --reference in.fa in.bam

在該模式,鍵盤輸入g,就可以調整到對應位置。具體信息可以通過輸入?查看。

使用IGV可視化比對結果

http://www.igv.org/

將.bam 文件導入后,就可以可視化查看相關的比對結果。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。