我正在编写代码来查找两个序列之间的局部比对。这是我一直在研究的一个最小的工作示例:
from Bio import pairwise2
from Bio.pairwise2 import format_alignment
seq1 = "GTGGTCCTAGGC"
seq2 = "GCCTAGGACCAC"
# scores for the alignment
match =1
mismatch = -2
gapopen = -2
gapext = 0
# see: http://biopython.org/DIST/docs/api/Bio.pairwise2-module.html
# 'localms' takes <seq1,seq2, match,mismatch,open,extend>
for a in pairwise2.align.localms(seq1,seq2,match,mismatch,gapopen,gapext):
print(format_alignment(*a))
以下代码运行并输出
GTGGTCCTAGGC----
|||||
----GCCTAGGACCAC
Score=5
但是得分“6”应该是可能的,找到 5 个比对旁边的“C-C”,如下所示:
GTGGTCCTAGGC----
||||||
----GCCTAGGACCAC
Score=6
对正在发生的事情有什么想法吗?
最佳答案
这似乎是 Biopython 的pairwise2 模块中当前的局部比对实现中的一个错误。最近有一个关于 Biopython's GitHub 的拉取请求 (#782) ,这应该可以解决您的问题:
>>> from Bio import pairwise2 # This is the version from the pull request
>>> seq1 = 'GTGGTCCTAGGC'
>>> seq2 = 'GCCTAGGACCAC'
>>> for a in pairwise2.align.localms(seq1, seq2, 1, -2, -2, 0):
print pairwise2.format_alignment(*a)
GTGGTCCTAGGC----
||||||
----GCCTAGGACCAC
Score=6
如果您仅处理短序列,则只需下载 拉取请求中的
pairwise2.py
代码 上文提到的。此外,您需要“停用”相应的 C 模块(cpairwise2.pyd
或cpairwise2.so
),例如通过重命名或删除 最后导入 C 函数pairwise2.py
(from .cpairwise import ...
)。如果您正在处理较长的序列,您将需要 C 模块的速度增强。因此你还必须下载 来自拉取请求的
cpairwise2module.c
并编译它 进入cpairwise2.pyd
(对于 Windows 系统)或cpairwise2.so
(Unix、Linux)。
编辑:在 Biopython 1.68 中问题已解决。
关于alignment - Biopython:DNA 序列之间的局部比对未找到最佳比对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35874826/