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_rangeshit_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_allquery_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’ 可能會產生不同的座標和片段集合。