BAM/SAM文件格式的一些小知識

BAM/SAM文件的一些小知識

前言

如果不是在陳老師這讀博五鲫,然后開始折騰BAM/SAM文件,我估計這輩子都不會了解到這么多東西吧

SAM/BAM簡介

See Wiki

Sequence Alignment Map (SAM) is a text-based format for storing biological sequences aligned to a reference sequence developed by Heng Li and Bob Handsaker et al.

  • SAM是李恒大佬在冷泉港鼓搗出來的一種文件格式巢钓,存儲了測序獲得的信息,map到基因組后的各種信息疗垛。SAM格式為純文本格式症汹,字里行間壓縮了極大的信息。
  • BAM則是SAM的二進制版贷腕,在SAM的基礎(chǔ)上運用二進制編碼背镇,又極大的壓縮了SAM文件的體積。

在這個文件基礎(chǔ)上泽裳,大家常用的各種alignment軟件基本都支持SAM/BAM格式瞒斩,圍繞著這個文件格式,李恒等還開發(fā)了多個軟件和不同語言版本的依賴庫涮总,以供大家使用該文本格式儲存信息胸囱,并且在該文件基礎(chǔ)上進行開發(fā)。

  • samtools: 對SAM/BAM等格式進行各種相關(guān)操作的軟件瀑梗,功能最豐富烹笔。
  • htslib: samtools的C接口,可以通過該庫抛丽,在C語言中完成samtools的同等功能谤职。
  • htsjdk: Java接口
  • pysam: Python接口

具體用法,推薦看各自的文檔亿鲜,比如javadoc或者python doc

格式

格式說明

以下為SAM格式示例(BAM格式參照SAM即可)

@HD VN:1.6 SO:coordinate
@SQ SN:ref LN:45
r001 99 ref 7 30 8M2I4M1D3M = 37 39 TTAGATAAAGGATACTG *
r002 0 ref 9 30 3S6M1P1I4M * 0 0 AAAAGATAAGGATA *
r003 0 ref 9 30 5S6M * 0 0 GCCTAAGCTAA * SA:Z:ref,29,-,6H5M,17,0;
r004 0 ref 16 30 6M14N5M * 0 0 ATAGCTTCAGC *
r003 2064 ref 29 17 6H5M * 0 0 TAGGC * SA:Z:ref,9,+,5S6M,30,1;
r001 147 ref 37 30 9M = 7 -39 CAGCGGCAT * NM:i:1

SAM文件主要由兩個部分構(gòu)成

  • header:標記了該SAM文件的一些基本信息允蜈,比如版本、按照什么方式排序的、Reference信息等等饶套。
  • 本體:每行為一個reads漩蟆,不同列記錄了不同的信息,列與列之間通過tab分隔凤跑。

每列的含義:

column
  1. QNAME:測序的reads的名字爆安。
  2. FLAG:二進制數(shù)字之和,不同數(shù)字代表了不同的意義仔引;比如正負鏈,R1/R2(雙端測序的哪一端)等褐奥。
  3. RNAME:map到參考基因組后的染色體名稱咖耘。
  4. POS:1-based 基因組起始位點。
  5. MAPQ:map的質(zhì)量撬码。
  6. CIGAR:一個數(shù)字與字母交替構(gòu)成的字符串儿倒,標記了這段reads不同位置的match情況。不同字母的含義后邊介紹呜笑。
  7. RNEXT:如果是pair-end測序夫否,這個為mate(另一端中對應(yīng)的)的read的染色體名稱;否則為下一條read的染色體名稱叫胁。
  8. PNEXT:同上凰慈,read對應(yīng)的起始位點。
  9. TLEN:模板的長度驼鹅。
  10. SEQ:序列微谓。
  11. QUAL:序列的質(zhì)量打分(fasta文件中的那個)。

flag的含義:

flag tests 查詢flag中具體數(shù)字含義输钩,以及測試flag內(nèi)容的網(wǎng)頁

flag

flag比較特殊的是一點在于flag最后的數(shù)字中包含了這個數(shù)即為true(包含該特性)豺型,不包含這個數(shù)字即為false(不包含該特性)。

檢測方法也比較巧妙买乃,通過二進制與進行計算姻氨。比如:16 and 16 -> 16。結(jié)果與測試的數(shù)字一致剪验,則表明flag中包含該數(shù)字肴焊。否則,不包含碉咆。

當然抖韩,不同語言版本的接口也直接提供了api來直接獲取這些特性,不必在進行人工的計算疫铜。

cigar的含義

cigar中會包含數(shù)字茂浮,代表了特定match持續(xù)了多少nt;以及不同的字符,代表了不同的match情況席揽。

cigar string examples:

30S512M216N12S (30nt soft clip -> 512nt exact match -> 216nt skipped region -> 12nt soft clip)
30S (30nt soft clip)
40M (40nt exact match)

其中不同的字符及其含義如下:


cigar from official

另一個版本的說明來源

cigar from blog

注意

雙端測序顽馋,正負鏈的問題

雙端測序很麻煩,mate和read兩條序列的flag信息基本都是完全相反的幌羞,包括strand等信息寸谜。那么如何判斷這一對reads測到的到底是哪條鏈就成了問題。

  • 最穩(wěn)妥的方法是属桦,通過GT/AG規(guī)則來確定熊痴。缺點就是你很難提取到GT/AG這個序列,最起碼在我的測試中如此聂宾。
    • 在我的理解中果善,cigar中的I、D系谐、N三個字符代表的區(qū)域不計入位點序列中巾陕。那么N區(qū)域的第一個位點周邊的序列即為內(nèi)含子周邊的序列,然而在這個位點周邊纪他,很難獲取到標準的GT/AG序列及其互補序列鄙煤。可能由junctions的突變造成的茶袒,即N區(qū)域并不一定是標注的內(nèi)含子區(qū)域
    • STAR應(yīng)該是通過這個途徑識別鏈方向的
      alignSJstitchMismatchNmax   0 -1 0 0
          4*int>=0: maximum number of mismatches for stitching of the splice junctions (-1: no limit).
                                  (1) non-canonical motifs, (2) GT/AG and CT/AC motif, (3) GC/AG and CT/GC motif, (4) AT/AC and GT/AT motif.
      
  • 另外就是根據(jù)readNegativeStrand和mateNegativeStrand梯刚,配合以First in pair以及second in pair進行判斷。
    • 這個辦法弹谁,依賴于是否確定R1和R2的建庫方式和建庫方向乾巧,如果我們確定R1是某個特定方向,那么我們就能夠通過這四個參數(shù)的組合獲取到正確的方向预愤。
    • 目前我已知的regtools就是通過這種途徑進行鏈的識別的沟于。
      //Get the strand from the bitwise flag
      void JunctionsExtractor::set_junction_strand_flag(bam1_t *aln, Junction& j1) {
          uint32_t flag = (aln->core).flag;
          
          // 從flag中提取出readNegativeReversed,mateNegativeReversed, first in pair和second in pair的信息
          int reversed = (flag >> 4) % 2;
          int mate_reversed = (flag >> 5) % 2;
          int first_in_pair = (flag >> 6) % 2;
          int second_in_pair = (flag >> 7) % 2;
          
          // 下面就是判斷正負鏈的過程
          // strandness_ is 0 for unstranded, 1 for RF, and 2 for FR
          int bool_strandness = strandness_ - 1;
          int first_strand = !bool_strandness ^ first_in_pair ^ reversed;
          int second_strand = !bool_strandness ^ second_in_pair ^ mate_reversed;
          
          char strand;
          if (first_strand){
              strand = '+';
          } else {
              strand = '-';
          }
          
          //cerr << "flag is " << flag << endl;
          // if strand inferences from first and second in pair don't agree, we've got a problem
          if (first_strand == second_strand){
              j1.strand = string(1, strand);
          } else {
              j1.strand = string(1, '?');
          }
          //cerr <<"flag strand is " << j1.strand << endl;
          return;
      }
      
    • 根據(jù)參數(shù)推測植康,hisat2可能也是這個方式旷太。
      --fr/--rf/--ff     -1, -2 mates align fw/rev, rev/fw, fw/fw (--fr)
      
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市销睁,隨后出現(xiàn)的幾起案子供璧,更是在濱河造成了極大的恐慌,老刑警劉巖冻记,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睡毒,死亡現(xiàn)場離奇詭異,居然都是意外死亡冗栗,警方通過查閱死者的電腦和手機演顾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門供搀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人钠至,你說我怎么就攤上這事葛虐。” “怎么了棉钧?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵屿脐,是天一觀的道長。 經(jīng)常有香客問我宪卿,道長的诵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任佑钾,我火速辦了婚禮奢驯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘次绘。我一直安慰自己,他們只是感情好撒遣,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布邮偎。 她就那樣靜靜地躺著,像睡著了一般义黎。 火紅的嫁衣襯著肌膚如雪禾进。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天廉涕,我揣著相機與錄音泻云,去河邊找鬼。 笑死狐蜕,一個胖子當著我的面吹牛宠纯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播层释,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼婆瓜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贡羔?” 一聲冷哼從身側(cè)響起廉白,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乖寒,沒想到半個月后猴蹂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡楣嘁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年磅轻,在試婚紗的時候發(fā)現(xiàn)自己被綠了珍逸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡瓢省,死狀恐怖弄息,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情勤婚,我是刑警寧澤摹量,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站馒胆,受9級特大地震影響缨称,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜祝迂,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一睦尽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧型雳,春花似錦当凡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至冤荆,卻和暖如春朴则,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钓简。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工乌妒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人外邓。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓撤蚊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親坐榆。 傳聞我的和親對象是個殘疾皇子拴魄,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • wes定義: 全外顯子組測序,是利用目標序列捕獲技術(shù)席镀, 將全基因組編碼基因外顯子區(qū)域的DNA捕獲并富集后匹中,進行高通...
    鳳凰_0949閱讀 4,297評論 0 7
  • Introduction What is Bowtie 2? Bowtie 2 is an ultrafast a...
    wzz閱讀 5,704評論 0 5
  • fastafasta格式是最基本的表示序列信息(核苷酸或者蛋白質(zhì))的格式。這里簡單介紹下豪诲,fasta格式的文件通常...
    tianzhanlan閱讀 4,895評論 0 10
  • 夜半你的倩影總是入夢 都不可再假裝糊涂 簡直是甜蜜的捉弄 叫人難以輕言放棄 明知道隔著阻礙萬千 注定了是坎坷折磨 ...
    花少顏閱讀 301評論 1 0
  • 今天道路依舊難行顶捷,我慢吞吞行駛車輛來到孩子托付班,接她回家路上屎篱,說有一個好消息一個壞消息服赎,問我想聽哪一...
    兆木兆木閱讀 190評論 0 0