Bio.SearchIO.ExonerateIO 套件
子模組
模組內容
Bio.SearchIO 支援 Exonerate 輸出格式。
此模組新增了對處理 Exonerate 輸出的支援。Exonerate 是一個用於成對序列比對的通用工具,它允許您使用幾種不同的模型來比對序列。
Bio.SearchIO.ExonerateIO 已在以下 Exonerate 版本和模型上進行測試
版本:2.2
模型:- affine:local - cdna2genome - coding2coding - est2genome - genome2genome - ner - protein2dna - protein2genome - ungapped - ungapped:translated
雖然模型測試並不詳盡,但 ExonerateIO 應該能夠處理所有 Exonerate 模型。如果您遇到無法解析的檔案,請提交錯誤報告。
有關 Exonerate 的更多資訊,請參閱其首頁:www.ebi.ac.uk/~guy/exonerate/
支援的格式
純文字比對 - ‘exonerate-text’ - 解析、索引
Vulgar 行 - ‘exonerate-vulgar’ - 解析、索引
Cigar 行 - ‘exonerate-cigar’ - 解析、索引
在 Exonerate 上,這些輸出格式並非彼此互斥。例如,您可能在同一個檔案中同時擁有純文字和 vulgar 輸出。然而,ExonerateIO 一次只能處理其中一種。例如,如果您的檔案同時包含純文字和 vulgar 行,則必須選擇 ‘exonerate-text’ 或 ‘exonerate-vulgar’ 來解析它。
由於 cigar 格式的規範,許多比對的特徵(如內含子或移碼)可能會被折疊成單一特徵(在這種情況下,它們被標記為 ‘D’,代表 ‘deletion’)。解析器不會嘗試猜測它遇到的 D 標籤是真正的刪除還是折疊的特徵。因此,使用 ‘exonerate-cigar’ 進行解析或索引可能會產生與 ‘exonerate-text’ 或 ‘exonerate-vulgar’ 不同的結果。
exonerate-text
純文字輸出 / C4 比對是 ‘–showalignemnt’ 旗標觸發的輸出。與其他兩種輸出格式相比,此格式包含最多的資訊,具有比對的完整查詢和命中序列。
以下是 ExonerateIO 可以處理的 C4 輸出比對的一些範例(座標未按比例寫入)
1. simple ungapped alignments
1 : ATGGGCAATATCCTTCGGAAAGGTCAGCAAAT : 56
||||||||||||||||||||||||||||||||
1319275 : ATGGGCAATATCCTTCGGAAAGGTCAGCAAAT : 1319220
2. alignments with frameshifts:
129 : -TGCCGTTACCAT----GACGAAAGTATTAAT : 160
-CysArgTyrHis----AspGluSerIleAsn
#||||||||||||####|||||||||||||||
#CysArgTyrHis####AspGluSerIleAsn
1234593 : GTGCCGTTACCATCGGTGACGAAAGTATTAAT : 1234630
3. alignments with introns and split codons:
382 : {A} {CC}AAA : 358
AAA{T} >>>> Target Intron 3 >>>> {hr}LysATGAGCGATGAAAATA
|| { }++ 55423 bp ++{ } ! ||| ||||||||||
AAC{L}gt.........................ag{eu}AspTTGAATGATGAAAATA
42322 : {C} {TG}GAT : 97769
4. alignments with NER blocks
111 : CAGAAAA--< 31 >--CTGCCCAGAAT--< 10 >--AACGAGCGTTCCG- : 184
| |||||--< NER 1 >--| ||||| | |--< NER 2 >--||| | ||||||-
297911 : CTGAAAA--< 29 >--CCGCCCAAAGT--< 13 >--AACTGGAGTTCCG- : 297993
ExonerateIO 廣泛使用 HSPFragment 模型來處理非無間隙比對。對於任何單個 HSPFragment,如果 ExonerateIO 看到內含子、NER 區塊或移碼,它會將片段分成兩個 HSPFragment 物件,並適當地調整每個物件的起始和結束座標。
您可能會注意到,Exonerate 始終使用三個字母的氨基酸代碼來顯示蛋白質序列。如果蛋白質本身是查詢序列的一部分,例如在 protein2dna 模型中,ExonerateIO 會將蛋白質序列轉換為使用單個字母代碼。這是因為儲存序列的 SeqRecord 物件僅設計用於單字母序列。如果 Exonerate 也輸出底層的核苷酸序列,它將以三聯體的列表形式儲存到 aln_annotation
條目中。
如果蛋白質序列不是實際比對的一部分,例如在 est2genome 或 genome2genome 模型中,ExonerateIO 將保留三個字母的代碼,並將它們儲存為 aln_annotation
條目。在這些情況下,命中和查詢序列可以直接用作 SeqRecord 物件,因為它們是單字母的核苷酸代碼。然後,三個字母的蛋白質序列會以條目的形式儲存在 aln_annotation
字典中。
對於 ‘exonerate-text’,ExonerateIO 提供以下物件屬性
物件 |
屬性 |
值 |
---|---|---|
QueryResult |
description |
查詢序列描述 |
id |
查詢序列 ID |
|
model |
比對模型 |
|
program |
‘exonerate’ |
|
Hit |
description |
命中序列描述 |
id |
命中序列 ID |
|
HSP |
hit_split_codons |
命中序列中拆分密碼子座標的列表 |
score |
比對分數 |
|
query_split_codons |
查詢序列中拆分密碼子座標的列表 |
|
HSPFragment |
aln_annotation |
比對相似度字串、命中序列註解和/或查詢序列註解 |
hit |
命中序列 |
|
hit_end |
命中序列結束座標 |
|
hit_frame |
命中序列讀取框架 |
|
hit_start |
命中序列起始座標 |
|
hit_strand |
命中序列鏈 |
|
query |
查詢序列 |
|
query_end |
查詢序列結束座標 |
|
query_frame |
查詢序列讀取框架 |
|
query_start |
查詢序列起始座標 |
|
query_strand |
查詢序列鏈 |
請注意,您也可以使用預設的 HSP 或 HSPFragment 屬性。例如,要檢查結果的內含子座標,您可以使用 query_inter_ranges
或 hit_inter_ranges
屬性
>>> from Bio import SearchIO
>>> fname = 'Exonerate/exn_22_m_genome2genome.exn'
>>> all_qresult = list(SearchIO.parse(fname, 'exonerate-text'))
>>> hsp = all_qresult[-1][-1][-1] # last qresult, last hit, last hsp
>>> hsp
HSP(...)
>>> hsp.query_inter_ranges
[(388, 449), (284, 319), (198, 198), (114, 161)]
>>> hsp.hit_inter_ranges
[(487387, 641682), (386207, 487327), (208677, 386123), (71917, 208639)]
在這裡您可以看到,對於查詢和命中內含子,每個元組中的座標始終為(起始、結束),其中起始 <= 結束。但是,當您將每個元組與下一個元組進行比較時,座標會減小。這表示查詢和命中序列都位於負鏈上。Exonerate 以遞減的方式輸出負鏈結果;起始座標始終大於結束座標。ExonerateIO 會保留片段的整體順序,但使用自己的標準來儲存個別片段的起始和結束座標。
您可能還會注意到,query_inter_ranges
中的第三個元組是 (198, 198),兩個完全相同的數字。這表示查詢序列在該位置沒有任何間隙。間隙僅存在於命中序列中,我們可以看到第三個元組包含 (208677, 386123),約為 177k 個鹼基的間隙。
另一個範例是使用 hit_frame_all
和 query_frame_all
來查看比對中是否有任何移碼
>>> from Bio import SearchIO
>>> fname = 'Exonerate/exn_22_m_coding2coding_fshifts.exn'
>>> qresult = next(SearchIO.parse(fname, 'exonerate-text'))
>>> hsp = qresult[0][0] # first hit, first hsp
>>> hsp
HSP(...)
>>> hsp.query_frame_all
[1, 2, 2, 2]
>>> hsp.hit_frame_all
[1, 1, 3, 1]
在這裡您可以看到,整個比對共有三個移碼。第一個發生在查詢序列中,在第一個片段之後(1 -> 2 位移),第二個發生在命中序列中,在第二個片段之後(1 -> 3 位移),最後一個也發生在命中序列中,在最後一個片段之前(3 -> 1 位移)。
還有其他預設的 HSP 屬性,您可以利用它們來簡化工作流程。有關更多詳細資訊,請參閱 HSP 物件文件。
exonerate-vulgar
vulgar 格式提供了一種緊湊的方式來表示 Exonerate 建立的比對。一般來說,它包含與純文字輸出相同的資訊,但 ‘model’ 資訊和實際序列本身除外。您可以預期使用 ‘exonerate-text’ 和 ‘exonerate-vulgar’ 取得的座標是相同的。兩種格式也使用相同的觸發器建立 HSPFragment:內含子、NER 區塊和/或移碼。
exonerate-cigar
cigar 格式提供了 Exonerate 比對更緊湊的表示方式。然而,這會付出失去資訊的代價。例如,在 cigar 格式中,內含子被視為簡單的刪除。這使得解析器無法區分簡單的刪除或內含子區域。因此,與 ‘exonerate-vulgar’ 或 ‘exonerate-text’ 相比,‘exonerate-cigar’ 可能會產生不同的座標和片段集合。