這是基於BioStars上 betsy.s.collins的問題。您可以在此處
找到原始帖子。有人對BWA生成的BAM文件中的其他標籤或過濾步驟有任何建議嗎?映射到一個位置?一個示例應用程序是為 TULIP彙編器/腳手架找到種子,該種子最適合映射到獨特基因組位置的讀段。
“唯一映射讀段”的概念是負載術語,大多數資料來源都建議通過MAPQ進行過濾。但是,將BWA用作讀取映射器時,這種方法似乎不起作用。
這是基於BioStars上 betsy.s.collins的問題。您可以在此處
找到原始帖子。有人對BWA生成的BAM文件中的其他標籤或過濾步驟有任何建議嗎?映射到一個位置?一個示例應用程序是為 TULIP彙編器/腳手架找到種子,該種子最適合映射到獨特基因組位置的讀段。
“唯一映射讀段”的概念是負載術語,大多數資料來源都建議通過MAPQ進行過濾。但是,將BWA用作讀取映射器時,這種方法似乎不起作用。
要從BWA映射的BAM文件中排除所有可能的多映射讀取,看來您需要在未壓縮的SAM字段上使用 grep
:
samtools視圖-h mapping.bam | grep -v -e'XA:Z:'-e'SA:Z:'| samtools視圖-b > unique_mapped.bam
解釋如下……
我將假設一種情況,其中有一個生物信息學家被提供了一個映射的BAM文件。由BWA製作,無法獲得原始讀物。一種高效的解決方案是從BAM文件中提取映射的讀段,並使用使用MAPQ得分指示多個映射的其他映射器重新映射。
...
我對BWA輸出的理解是,如果讀段完美地映射到多個基因組位置,則兩個位置的映射質量(MAPQ)得分都很高。許多人期望映射到至少兩個位置的讀段最多(最多)有50%的概率映射到這些位置之一(即MAPQ = 3)。由於BWA不會這樣做,因此很難使用適用於其他對齊程序的MAPQ過濾器從BWA結果中過濾出多映射讀取。這很可能就是為什麼Biostars [
下面是我從BWA mem對齊中獲得的示例行剛剛做了。這些是Illumina的讀取映射到具有很多重複序列的寄生蟲基因組:
ERR063640.7 16 tig00019544 79974 21 21M2I56M1I20M * 0 0 TATCACATATCATCCGACTCAGCTCGACGAGTACAATGCTAATTTAACACTTAGAATGCCCGGCAATGAAATTCGTTTTCCGTCAATTCTTGAAAATTTC <AABBEGABFJKKKIM7GHKKJK>JLKLDGMHLIMIHHCGIJKKLJKLNJGLLLKLILKLMFNDLKGHJEKMKKMIJHGLOJLLLKIJLKKJEJLIGG>D NM:ⅰ :4 MD:Z:83A13 AS:i:77 XS:i:67 XA:Z:tig00019544,-78808,21M2I56M1I20M,6; tig00019544,-84624,79M1I20M,6; tig00019544,-79312,33M4I42M1I20M,8; 代碼>
BWA mem已發現該特定讀物ERR063460.7映射到至少三個不同的位置:tig00019544,tig00019544和tig00019544。請注意,此讀取的MAPQ為21,因此即使讀取映射到多個位置,也不能使用MAPQ來確定。
但是,通過 XA 標記。也許只對包含 XA
標記的行進行過濾就可以排除乘法映射讀取。 samtools視圖
手冊頁建議 -x
將過濾出特定標記:
$ samtools視圖-x XA output.bam |的grep'^ ERR063640 \ 0.7 [[:空間:]]'ERR063640.7 16 tig00019544 79974 21 21M2I56M1I20M * 0 0 TATCACATATCATCCGACTCAGCTCGACGAGTACAATGCTAATTTAACACTTAGAATGCCCGGCAATGAAATTCGTTTTCCGTCAATTCTTGAAAATTTC <AABBEGABFJKKKIM7GHKKJK>JLKLDGMHLIMIHHCGIJKKLJKLNJGLLLKLILKLMFNDLKGHJEKMKKMIJHGLOJLLLKIJLKKJEJLIGG>D NM:I:4 MD:Z:83A13為:I:77 XS:I:67 代碼>
...,因此它過濾出了標籤(即,該標籤不再存在於SAM輸出中),但沒有過濾出 read 。在FLAG字段中沒有有用的位來指示多個基因組映射(我知道也可以過濾以排除讀取的序列),因此我不得不求助於其他措施。
在這種特殊情況下,我可以在未壓縮的SAM輸出上使用 grep -v
來排除具有 XA
標記的對齊行(並在以後重新壓縮為BAM,以便保持整潔):
$ samtools視圖-h output.bam | grep -v'XA:Z:'| samtools視圖-b > output_filtered.bam $ samtools視圖output_filtered.bam | grep'^ ERR063640 \ .7 [[:space:]]'<no output>
萬歲!讀取已過濾。稍微說一下,此 grep
搜索具有相當大的計算量:它正在一行中某處尋找帶有文本 XA:Z:
的字符串。實際捕獲所有情況。某些受虐狂可能會在以後出現,並決定將其所有讀物稱為 HAXXA:Z:AWESOME!:<readNumber>
,在這種情況下,需要對該grep搜索進行調整確保在 XA:Z:
之前有一個空格(或更具體地說,是製表符)。
現在,我要檢查 any 重複的讀取名稱,只是為了確保:
$ samtools視圖output_filtered.bam | awk'{print $ 1}'|排序Uniq -dERR063640.1194ERR063640.1429ERR063640.1761ERR063640.2336ERR063640.2825ERR063640.3458ERR063640.4421ERR063640.4474ERR063640.4888ERRERR640640.49ERR063640.4974ERR063640.5070ERR063640.5130ERR063640.5300ERR063640.5868ERRERR640.6116ERR063640.6063ERR063640.606306306306306306306306306306306306306306363 7900ERR063640.8115ERR063640.8405ERR063640.911ERR063640.9206ERR063640.9765ERR063640.9986
哦...該死。我想知道它們是什麼:
$ samtools視圖output_filtered.bam |的grep'^ ERR063640.3458 [[:空間:]]'ERR063640.3458 16 tig00002961 5402 60 58S38M * 0 0 AGGTACCATTCGATAGAGGGAGAAAGGCACTACTAAAGATTTTGCCACATTTGCTATATCCGTATCGCGAAGATCAGGACTTACTCCGCAGAAGAA DD6HFFJBKFH = KDILKLGLJEKLKGFJIH8IKHLLMJEK:L:HBGJIHJKFLLKIHJDHLNKCK; KMKGMFKJILIIIMKI9JLKKHEJFII CC NM:I:0 MD:Z:38 AS:ⅰ :38 XS:I:0 SA:Z:tig00002377,202353, - ,14M3I5M1I35M38S,19,5; ERR063640.3458 2064 tig00002377 202353 19 14M3I5M1I35M38H * 0 0 AGGTACCATTCGATAGAGGGAGAAAGGCACTACTAAAGATTTTGCCACATTTGCTATA DD6HFFJBKFH = KDILKLGLJEKLKGFJIH8IKHLLMJEK:L:HBGJIHJKFLLKIHJ NM:I:5 MD位:Z :5G48 AS:i:35 XS:i:27 SA:Z:tig00002961,5402,-,58S38M,60,0;
啊哈!補充比對,它使用 official SA
標籤[嵌合比對中的其他規範比對]。這些情況似乎是單個讀取被拆分並映射到多個位置的情況。請注意,在這種情況下, 這兩個比對的MAPQ得分仍然超過3 。聽起來,發問者也希望擺脫這些情況。這次,也有標準標誌字段來處理這些情況(0x800:輔助對齊)。僅僅過濾補充對齊是不夠的,因為應該刪除兩者讀取映射,而不是僅僅刪除那些偶然被標記為輔助映射的映射。
幸運的是,BWA似乎將 SA
標記放入包含補充比對的所有讀取中(如果不是這種情況,我相信有人會對此進行糾正)。因此,我在 SA
搜索中添加了一個附加的 grep
過濾器:
$ samtools視圖-h output.bam | grep -v -e'XA:Z:'-e'SA:Z:'| samtools視圖-b > output_filtered.bam $ samtools視圖output_filtered.bam | awk'{print $ 1}'|排序uniq -d<no output>
完成。十分簡單! < / sarcasm>
......使用不同的定位器的原始“高效”解決方案現在看起來還不錯。
對於更快,更穩定的 $ sup>實現,sambamba可以使用以下一種方法來處理此問題:
sambamba視圖-t 12 -h -f bam -F “ mapping_quality > = 1,而不是(未映射或secondary_alignment),並且不是([XA]!= null或[SA]!= null)”。test.bwa-mem.bam -o test-uniq.bam
有關進一步使用的詳細信息,請參見手冊和 sambamba synatx。$:除了
grep
緩慢的搜索,可能會返回錯誤的正 del>否定命中(上面@gringer的回复)。我也不認為基於awk
的方法可靠,因為XA,SA等字段是 SAM格式的可選字段,而不是按位置固定的字段。