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
。在這種情況下,未比對的前導和尾隨部分也會在匹配行中以空格表示。