Bio.pairwise2 模組

使用動態規劃演算法進行成對序列比對。

此模組提供了獲取兩個序列之間全域和局部比對的函數。全域比對會找出兩個序列中所有字元之間最佳的一致性。局部比對則只找出最佳比對的子序列。局部比對必須具有正分數才能報告,並且它們不會擴展到「零計數」的匹配。這表示局部比對始終會以正計數的匹配開始和結束。

在進行比對時,您可以指定匹配分數和間隙懲罰。匹配分數表示序列中兩個字元比對之間的相容性。高度相容的字元應給予正分數,不相容的字元應給予負分數或 0。間隙懲罰應為負數。

此模組中比對函數的名稱遵循 <比對類型>XX 的慣例,其中 <比對類型> 為 “global”(全域)或 “local”(局部),而 XX 是一個 2 個字元的代碼,表示它採用的參數。第一個字元表示匹配(和不匹配)的參數,第二個字元表示間隙懲罰的參數。

匹配參數為

CODE  DESCRIPTION & OPTIONAL KEYWORDS
x     No parameters. Identical characters have score of 1, otherwise 0.
m     A match score is the score of identical chars, otherwise mismatch
      score. Keywords ``match``, ``mismatch``.
d     A dictionary returns the score of any pair of characters.
      Keyword ``match_dict``.
c     A callback function returns scores. Keyword ``match_fn``.

間隙懲罰參數為

CODE  DESCRIPTION & OPTIONAL KEYWORDS
x     No gap penalties.
s     Same open and extend gap penalties for both sequences.
      Keywords ``open``, ``extend``.
d     The sequences have different open and extend gap penalties.
      Keywords ``openA``, ``extendA``, ``openB``, ``extendB``.
c     A callback function returns the gap penalties.
      Keywords ``gap_A_fn``, ``gap_B_fn``.

所有不同的比對函數都包含在 align 物件中。例如

>>> from Bio import pairwise2
>>> alignments = pairwise2.align.globalxx("ACCGT", "ACG")

為了提高可讀性,所需的參數可以使用可選的關鍵字

>>> alignments = pairwise2.align.globalxx(sequenceA="ACCGT", sequenceB="ACG")

結果是兩個字串之間的比對列表。每個比對都是一個具名元組,由兩個比對後的序列、分數以及比對的起始和結束位置組成

>>> print(alignments)
[Alignment(seqA='ACCGT', seqB='A-CG-', score=3.0, start=0, end=5), ...

您可以透過索引或名稱存取比對的每個元素

>>> alignments[0][2]
3.0
>>> alignments[0].score
3.0

若要取得比對的精美列印輸出,請使用模組的 format_alignment 方法

>>> from Bio.pairwise2 import format_alignment
>>> print(format_alignment(*alignments[0]))
ACCGT
| || 
A-CG-
  Score=3

所有比對函數都具有下列引數

  • 兩個序列:字串、Biopython 序列物件或清單。清單對於提供包含由多個字母編碼的殘基的序列非常有用。

  • penalize_extend_when_opening:布林值(預設值:False)。是否在開啟間隙時計算延伸懲罰。如果為 false,則間隙 1 只會受到「開啟」懲罰,否則會受到「開啟+延伸」懲罰。

  • penalize_end_gaps:布林值。是否計算比對末端的間隙。預設情況下,它們會為全域比對計算,但不會為局部比對計算。將 penalize_end_gaps 設定為 (布林值、布林值) 可讓您分別指定是否應計算比對末端兩個序列的間隙。

  • gap_char:字串(預設值:'-')。要在傳回的比對中用作間隙字元的字元。如果您的輸入序列是清單,您必須將此變更為 ['-']

  • force_generic:布林值(預設值:False)。始終使用通用的、非快取的動態規劃函數(速度較慢!)。用於偵錯。

  • score_only:布林值(預設值:False)。僅取得最佳分數,不復原任何比對。函數的傳回值是分數。速度更快且使用更少的記憶體。

  • one_alignment_only:布林值(預設值:False)。僅復原一個比對。

比對函數的其他參數取決於所呼叫的函數。一些範例

  • 尋找兩個序列之間最佳的全域比對。相同的字元給予 1 分。不匹配或間隙不扣分。

    >>> for a in pairwise2.align.globalxx("ACCGT", "ACG"):
    ...     print(format_alignment(*a))
    ACCGT
    | || 
    A-CG-
      Score=3
    
    ACCGT
    || | 
    AC-G-
      Score=3
    
  • 與之前相同,但使用局部比對。請注意,format_alignment 只會顯示序列的比對部分,以及起始位置。

    >>> for a in pairwise2.align.localxx("ACCGT", "ACG"):
    ...     print(format_alignment(*a))
    1 ACCG
      | ||
    1 A-CG
      Score=3
    
    1 ACCG
      || |
    1 AC-G
      Score=3
    

    若要還原 format_alignemt 的「歷史」行為,即也顯示兩個序列的未比對部分,請使用新的關鍵字參數 full_sequences

    >>> for a in pairwise2.align.localxx("ACCGT", "ACG"):
    ...     print(format_alignment(*a, full_sequences=True))
    ACCGT
    | || 
    A-CG-
      Score=3
    
    ACCGT
    || | 
    AC-G-
      Score=3
    
  • 執行全域比對。相同的字元給予 2 分,每個不相同的字元扣 1 分。間隙不懲罰。

    >>> for a in pairwise2.align.globalmx("ACCGT", "ACG", 2, -1):
    ...     print(format_alignment(*a))
    ACCGT
    | || 
    A-CG-
      Score=6
    
    ACCGT
    || | 
    AC-G-
      Score=6
    
  • 與上述相同,只是現在開啟間隙時扣 0.5 分,延伸間隙時扣 0.1 分。

    >>> for a in pairwise2.align.globalms("ACCGT", "ACG", 2, -1, -.5, -.1):
    ...     print(format_alignment(*a))
    ACCGT
    | || 
    A-CG-
      Score=5
    
    ACCGT
    || | 
    AC-G-
      Score=5
    
  • 請注意,您可以使用關鍵字來提高可讀性,例如

    >>> a = pairwise2.align.globalms("ACGT", "ACG", match=2, mismatch=-1, open=-.5,
    ...                              extend=-.1)
    
  • 根據懲罰,一個序列中的間隙可能後跟另一個序列中的間隙。如果您不喜歡此行為,請增加間隙開啟懲罰

    >>> for a in pairwise2.align.globalms("A", "T", 5, -4, -1, -.1):
    ...     print(format_alignment(*a))
    A-
    
    -T
      Score=-2
    
    >>> for a in pairwise2.align.globalms("A", "T", 5, -4, -3, -.1):
    ...     print(format_alignment(*a))
    A
    .
    T
      Score=-4
    
  • 比對函數也可以使用 Biopython 中已包含的已知矩陣 (在 Bio.Align.substitution_matrices 中)

    >>> from Bio.Align import substitution_matrices
    >>> matrix = substitution_matrices.load("BLOSUM62")
    >>> for a in pairwise2.align.globaldx("KEVLA", "EVL", matrix):
    ...     print(format_alignment(*a))
    KEVLA
     ||| 
    -EVL-
      Score=13
    
  • 使用參數 c,您可以定義自己的匹配和間隙函數。例如,定義一個仿射對數間隙函數並使用它

    >>> from math import log
    >>> def gap_function(x, y):  # x is gap position in seq, y is gap length
    ...     if y == 0:  # No gap
    ...         return 0
    ...     elif y == 1:  # Gap open penalty
    ...         return -2
    ...     return - (2 + y/4.0 + log(y)/2.0)
    ...
    >>> alignment = pairwise2.align.globalmc("ACCCCCGT", "ACG", 5, -4,
    ...                                      gap_function, gap_function)
    

    您可以為每個序列定義不同的間隙函數。自定義匹配函數必須接受要比較的兩個殘基並傳回分數。

若要查看函數的參數說明,請透過 help 函數查看函數的 docstring,例如在 Python 提示符號處輸入 help(pairwise2.align.localds)

class Bio.pairwise2.Alignment(seqA, seqB, score, start, end)

基底:tuple

__getnewargs__()

將 self 作為純元組傳回。由複製和 pickle 使用。

static __new__(_cls, seqA, seqB, score, start, end)

建立 Alignment(seqA, seqB, score, start, end) 的新執行個體

__repr__()

傳回格式良好的表示字串

__slots__ = ()
end

欄位編號 4 的別名

score

欄位編號 2 的別名

seqA

欄位編號 0 的別名

seqB

欄位編號 1 的別名

start

欄位編號 3 的別名

class Bio.pairwise2.identity_match(match=1, mismatch=0)

基底:object

建立用於比對的匹配函數。

match 和 mismatch 是在兩個殘基相等或不相等時給予的分數。預設情況下,match 為 1,而 mismatch 為 0。

__init__(match=1, mismatch=0)

初始化類別。

__call__(charA, charB)

呼叫已建立的匹配函數執行個體。

class Bio.pairwise2.dictionary_match(score_dict, symmetric=1)

基底:object

建立用於比對的匹配函數。

屬性
  • score_dict - 一個字典,鍵為元組 (殘基 1, 殘基 2),值為這些殘基之間的匹配分數。

  • symmetric - 一個標誌,指示分數是否對稱。

__init__(score_dict, symmetric=1)

初始化類別。

__call__(charA, charB)

呼叫已建立的字典匹配實例。

class Bio.pairwise2.affine_penalty(open, extend, penalize_extend_when_opening=0)

基底:object

建立一個用於比對的空位函數。

__init__(open, extend, penalize_extend_when_opening=0)

初始化類別。

__call__(index, length)

呼叫已建立的空位函數實例。

Bio.pairwise2.calc_affine_penalty(length, open, extend, penalize_extend_when_opening)

計算空位函數的懲罰分數。

Bio.pairwise2.print_matrix(matrix)

印出矩陣以進行除錯。

Bio.pairwise2.format_alignment(align1, align2, score, begin, end, full_sequences=False)

將比對結果美觀地格式化為字串。

重要:空位符號必須是 “-” (或列表中的 [‘-’])!

自 Biopython 1.71 版本起,完全匹配以直線符號表示,不匹配以點符號表示,空位以空格表示。

之前的版本僅使用直線符號來表示比對區域(匹配、不匹配和空位)。

此外,在局部比對中,如果比對不包含整個序列,現在只顯示比對的部分,以及比對的子序列的起始位置。起始位置是從 1 開始的;因此,起始位置 n 是未比對序列中的第 n 個鹼基/胺基酸。

注意:這與比對的起始/結束值不同,後者給出已比對序列中鹼基/胺基酸的 Python 索引(從 0 開始)。

如果您想恢復「歷史」行為,也就是顯示整個序列(包括未比對的部分),請使用 full_sequences=True。在這種情況下,未比對的前導和尾隨部分也會在匹配行中以空格表示。