2

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

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 个对齐旁边的 'CC',如下所示:

GTGGTCCTAGGC----
     ||||||
----GCCTAGGACCAC
  Score=6

关于发生了什么的任何想法?

4

1 回答 1

4

这似乎是 Biopython 的 pairwise2 模块中当前局部对齐实现中的一个错误。Biopython 的 GitHub上有一个最近的 pull request (#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. 如果您只使用短序列,您可以pairwise2.py从上面提到的拉取请求中下载代码。此外,您需要“停用”相应的 C 模块(cpairwise2.pyd或 ),例如通过重命名它或在( )cpairwise2.so末尾删除 C 函数的导入 。pairwise2.pyfrom .cpairwise import ...

  2. 如果您正在处理更长的序列,您将需要 C 模块的速度增强。因此,您还必须 cpairwise2module.c从拉取请求中下载并将其编译为cpairwise2.pyd(对于 Windows 系统)或 cpairwise2.so(Unix、Linux)。

编辑:在 Biopython 1.68 中,问题已解决。

于 2016-03-17T08:51:49.630 回答