日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Edit Distance编辑距离(NM tag)- sam/bam格式解读进阶

發布時間:2025/4/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Edit Distance编辑距离(NM tag)- sam/bam格式解读进阶 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

sam格式很精煉,幾乎包含了比對的所有信息,我們平常用到的信息很少,但特殊情況下,我們會用到一些較為生僻的信息,關于這些信息sam官方文檔的介紹比較精簡,直接看估計很難看懂。

今天要介紹的是如何通過bam文件統計比對的indel和mismatch信息

首先要介紹一個非常重要的概念--編輯距離

定義:從字符串a變到字符串b,所需要的最少的操作步驟(插入,刪除,更改)為兩個字符串之間的編輯距離。

(2016年11月17日:增加,有點誤導,如果一個插入有兩個字符,那編輯距離變了幾呢?1還是2?我又驗證了一遍:確實是2

這也是sam文檔中對NM這個tag的定義。

?

編輯距離是對兩個字符串相似度的度量(參見文章:Edit Distance)

舉個栗子:兩個字符串“eeba”和“abca”的編輯距離是多少?

根據定義,通過三個步驟:1.將e變為a 2.刪除e 3.添加c,我們可以將“eeba”變為“abca”

所以,“eeba”和“abca”之間的編輯距離為3

?

回到序列比對的問題上

下面是常見的二代比對到ref的結果(bwa):

D00360:96:H2YLYBCXX:1:2110:18364:84053 353 seq1_len154_cov5 1 1 92S59M8I17M1D6M1D67M seq30532_len2134_cov76 1 0 AAAAAAAAAAAAAAAAAAAAAAAACCCTGTCTCTAATAAAATACAAACAATTAGCCGGGCATGGTGGCACGCGCCTTTAGTCCCAGCTACTAGGGAGGCTGAGGCAGGGGAATTGTTTGAACCCGGGAGGTGGAGGTTGCAGTGAGCGGAGTTTTTTTCACTGCACTCCAGCCTGGTGACAAATCAAAAATCCATTTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAACAAA DDDDDHIIIIIIII<EHHII?EHH0001111111<11<DEH1D1<FH1D<<<C<@GEHD</<11<101<1D<<C<E0D11<<1<D?1F1CC1DE110C0D1011100////0DD<1=@1=FGHCDHH<FG<D0<<<EF?CE<00<<0<D//0;<:D/;///;8F.;/.8.8......88.9........-8BBGADHIIHD?>D?HH<,>=HHDD,5CHDCDHD><,,,--8----8-8-- NM:i:25 MD:Z:16A21C16C0A3T15^A6^G1G0T0G3C2T0G1C41A4A2A3 AS:i:49 XS:i:42 SA:Z:seq13646_len513_cov63,125,-,103S125M21S,1,11; RG:Z:chr22

這是ref序列

>seq1_len154_cov5 GGGAGGCTGAGGCAGGAGAATTGTTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCAAGATTGCACTCCAGCCTGGATGACAAGAGTGAAACTCTGTCTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

cigar字段包含了序列比對的簡化信息,M(匹配比對,包含match和mismatch),=(純match),X(純mismatch),I(插入),D(刪除),還有N、P和S、H。(注:目前只在blasr比對結果中見過=和X)

根據cigar字段可以統計indel信息,但是無法統計mismatch。

這個時候就可以用到NM tag了,mismatch = NM – I - D = 25 – 8 – 1 – 1 = 15

有興趣的可以對著cigar數一遍,下面是我無聊數著的結果,也是15個

?

使用python的pysam模塊可以很容易的提取出每個比對結果的NM信息

參見之前的帖子:pysam - 多種數據格式讀寫與處理模塊(python)

?

再次驗證一遍:證明NM=len(mismatch) + len(insertion) + len(deletion), 而不是 count(mismatch) + count(insertion) + count(deletion) (count的意思是三個堿基的insertion算一個)

>>> bam_file = pysam.AlignmentFile(infile, "rb") >>> for line in bam_file: ... if 300 < line.query_alignment_length < 500: ... break ... >>> line.query_alignment_length 321 >>> line.seq 'CTCTTCATCACGTCACTTGTCCATGTCAATGGCTACAGGTTGGAAGTTTGGCCGCGGAGGGTGGGCAGGCAAGAGAAAGAAATCAGATAGGGCAGATGGTAGGGTAAAAGGAGGGGGTTAAGTGCAAATTGTCTACTGTTTGCAAATGGGAAGCATGTGATTGTTAAAATTTATACGATAAACCTTCTCATCATGTTGAGTCTCATGCTTGCGCCAAGAAGATCGGGTTCGGCGGGTCAAGCTGATAAGCAACTTGGGCAGCAAAGTCGTTCAGTGATACAAAATCATGTGCAAAAATCACAAGCATTCTTATAAACACCA' >>> line.cigarstring '5148H3M1I2M1I4M2I3M3I3M1D2M1I4M3I1M1I4M1D10M1D5M4I4M3D1M3I18M1I1M1I1M1I4M4D2M1I2M2I4M2I4M1I4M5I4M1I9M1I14M3I1M1I2M2I7M2I7M3I2M1I5M2I1M1I2M1I1M1I4M5I3M1I2M3I1M1I4M4I3M4I2M2I1M3I19M3I10M2I4M1I11M1D27M2I6M25212H' >>> line.reference_name 'Backbone_1' >>> line.reference_start 7164 >>> line.reference_end 7413 >>> line.get_tag('NM') 100

取出了一條長度適中的比對結果,cigar字段比較全面。

取出了比對上的ref:

>>> ref = 'CTCTCTCACCACTCCTATTCAACACAGTGTTGGAAGTTCTGGACAGGGCAATCAGGCAAGAGAAAGAAATAAAGGGTATTCAATTAGGAAAAGAGGAAGTCAAATTGTCCCCGTTTGCAGATGACATGATTGTATATTTAGAAAACCCCACTGTTTCAGCCCCAAATCTCCTTAAGCTGATAAGCAACTTCAGCAAAGTCTCAGGATACAAAATCAATGTGCAAAAATCACAAGCATTCTTATACACCA'

先通過我自己寫的cigar校正函數校正:

def formatSeqByCigar(seq, cigar):'''Input: query_alignment_sequence and cigar from sam fileOutput: formatSeqPurpose: make sure the pos is one to one correspondence(seq to ref)'''formatSeq = ''pointer = 0; qstart = 0; qend = -1; origin_seq_len = 0if cigar[0][0] == 4 or cigar[0][0] == 5:qstart = cigar[0][1]if cigar[-1][0] == 4 or cigar[-1][0] == 5:qend = - cigar[-1][1] - 1 # fushu countfor pair in cigar:operation = pair[0]cigar_len = pair[1]if operation == 0: # 0==MformatSeq += seq[pointer:(pointer+cigar_len)]pointer += cigar_lenorigin_seq_len += cigar_lenelif operation == 1: # 1==Ipointer += cigar_lenorigin_seq_len += cigar_lenelif operation == 2: # 2==DformatSeq += 'D'*cigar_lenelif operation == 4 or operation == 5: # 5==Horigin_seq_len += cigar_lencontinueelse:print (cigar)raise TypeError("There are cigar besides S/M/D/I/H\n")return formatSeq, qstart, qend, origin_seq_len

然后分別計算deletion和mismatch:

>>> i = 0 >>> count = 0 >>> while i < len(ref):if formatSeq[i] != ref[i]:count += 1i += 1>>> count 17 >>> formatSeq.count('D') 11

可以看出deletion有11個,退出mismatch有6個。

隨手一推insertion有83個。

>>> cigarstring = '5148H3M1I2M1I4M2I3M3I3M1D2M1I4M3I1M1I4M1D10M1D5M4I4M3D1M3I18M1I1M1I1M1I4M4D2M1I2M2I4M2I4M1I4M5I4M1I9M1I14M3I1M1I2M2I7M2I7M3I2M1I5M2I1M1I2M1I1M1I4M5I3M1I2M3I1M1I4M4I3M4I2M2I1M3I19M3I10M2I4M1I11M1D27M2I6M25212H' >>> cigarstring.count('I') 41 >>> cigarstring.count('D') 6

用count計算顯然不對。

驗證成功

?

真切的明白了計算機有多么偉大,如果要是你肉眼去比對去數的話,我估計你會立馬崩潰。

總結

以上是生活随笔為你收集整理的Edit Distance编辑距离(NM tag)- sam/bam格式解读进阶的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www.四虎com | 久久av影视 | 17c精品麻豆一区二区免费 | 青青草原在线免费观看视频 | 国产最爽的乱淫视频国语对白 | 日本三级午夜理伦三级三 | 日本理论中文字幕 | 国产麻豆影视 | 中国免费毛片 | 奶波霸巨乳一二三区乳 | 天天看天天干 | 国模无码一区二区三区 | 亚洲天天视频 | 久久久资源 | 色播在线观看 | 色哟哟国产精品 | 大陆农村乡下av | 亚洲不卡影院 | 好色先生视频污 | 6080电视影片在线观看 | 中国人与拘一级毛片 | 日本三级吃奶头添泬无码苍井空 | 婷婷丁香六月 | 少妇一级淫片免费看 | 欧美日韩国产黄色 | 国产亚洲综合精品 | 搞黄网站在线观看 | 大胸美女被爆操 | 超碰免费成人 | 丁香婷婷在线 | 国产毛毛片 | 婷婷调教口舌奴ⅴk | av资源网址 | 日韩国产在线 | 日韩欧美精品一区二区 | 亚洲在线精品 | 91色视频 | 杏导航aⅴ福利网站 | 精品国产一区二区三区无码 | 国产91福利 | 夜夜躁狠狠躁 | 毛片在线视频观看 | www.久久久.com| 青草超碰| 天天做日日做 | 亚洲天堂aaa | 久久精精品久久久久噜噜 | 不卡在线一区二区 | 国产美女无遮挡永久免费 | 69视频在线播放 | 色吧视频 | 久久福利精品 | 亚洲三级黄色片 | h片在线观看 | 国产91免费观看 | 亚洲乱仑| 青青草免费观看 | 91黄色片 | 国产精品日日摸夜夜爽 | 国产精品99精品无码视亚 | 亚洲精品手机在线 | 久草资源网站 | 大肉大捧一进一出好爽视频动漫 | va在线播放 | 农村激情伦hxvideos | 农民工hdxxxx性中国 | 男女啪啪毛片 | www日本视频| 亚洲精品一区二三区不卡 | 亚洲欧美一区二区精品久久久 | 日韩精品成人无码专区免费 | 亚洲a在线观看 | 欧美激情黄色 | 怡红院最新网址 | 成人xxx | 成人黄色免费看 | 懂色av蜜臀av粉嫩av分 | 三级视频网 | 国产免费一区二区三区视频 | 在线看av网址 | 日韩精品一区二区三区色欲av | 欧美aⅴ视频 | 日韩国产一区二区 | 30一40一50女人毛片 | 九九热精品视频在线播放 | 亚洲综合激情另类小说区 | 简单av在线| 国产美女无遮挡免费视频 | 一二三区视频 | 337p日本欧洲亚洲大胆张筱雨 | 欧美日本韩国一区二区三区 | 国产av无码专区亚洲av毛片搜 | 国产成人无码一区二区在线观看 | 欧美日韩另类在线 | 国产成人三级一区二区在线观看一 | 麻豆视频免费在线观看 | 蜜桃成熟时李丽珍国语 | 日韩av中文字幕在线免费观看 | 综合xx网 |