我正在编写代码来查找两个序列之间的局部比对。这是我一直在努力的最小的工作示例:
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
有关正在发生的事情的任何想法?
答案 0 :(得分:4)
这似乎是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
如果您只使用短序列,则可以下载
来自pull请求的pairwise2.py
代码
上文提到的。此外,你需要'灭活'各自的
C模块(cpairwise2.pyd
或
cpairwise2.so
),例如通过重命名或删除
最后导入C函数
pairwise2.py
(from .cpairwise import ...
)。
如果您正在使用更长的序列,则需要提高C模块的速度。因此你也必须下载
来自pull请求的cpairwise2module.c
并编译它
进入cpairwise2.pyd
(适用于Windows系统)或
cpairwise2.so
(Unix,Linux)。
编辑:在Biopython 1.68中问题解决了。