Biopython:DNA序列之间的局部比对没有找到最佳比对

时间:2016-03-08 18:10:55

标签: alignment local biopython dna-sequence sequence-alignment

我正在编写代码来查找两个序列之间的局部比对。这是我一直在努力的最小的工作示例:

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

有关正在发生的事情的任何想法?

1 个答案:

答案 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
  1. 如果您只使用短序列,则可以下载 来自pull请求的pairwise2.py代码 上文提到的。此外,你需要'灭活'各自的 C模块(cpairwise2.pydcpairwise2.so),例如通过重命名或删除 最后导入C函数 pairwise2.pyfrom .cpairwise import ...)。

  2. 如果您正在使用更长的序列,则需要提高C模块的速度。因此你也必须下载 来自pull请求的cpairwise2module.c并编译它 进入cpairwise2.pyd(适用于Windows系统)或 cpairwise2.so(Unix,Linux)。

  3. 编辑:在Biopython 1.68中问题解决了。