通常我們可能會看到.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 文件分為兩個部分,header
與record
。(大部分的組學數據也都是按照這兩種內容分割來存儲數據的)
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可視化比對結果
將.bam 文件導入后,就可以可視化查看相關的比對結果。