在biopython中使用pairwise2匹配的残基的索引

时间:2018-06-04 19:46:15

标签: python string alignment biopython pairwise

我有兴趣在python中使用pairwise2知道与字符串匹配的残基索引。

例如我有两个字符串

A:' EEEEE      HHH     HHH             EEEEE'

B: 'EEE       EEEE       HHH'

使用以下代码:

from Bio import pairwise2
from Bio.pairwise2 import format_alignment

alignment = pairwise2.align.localdc(A,B, matrix,gap_function_1,gap_function_2)

我得到的一个对齐方式是:

EEE-------EE---      HHH     HHH             EEEEE
|||       ||   |||||||||
EEE       EEEE       HHH--------------------------
  Score=29.6

我想获得匹配的索引,即seq A中与seq B匹配的所有EsHs' '的原始位置。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我假设A中的第一个空格是拼写错误?另外,对齐看起来会有所不同。

所以,假设:

A = 'EEEEE      HHH     HHH             EEEEE'
B = 'EEE       EEEE       HHH'

alignment = """EEE-------EE---      HHH     HHH             EEEEE
|||       ||   |||||||||
EEE       EEEE       HHH--------------------------
  Score=29.6"""

我们可以写一个函数compare()

def compare(align, matches, original):
    result = []
    index = -1
    for char, match in zip(align, matches):
        if char == '-':
            index += 0
        else:
            index += 1
        if match == '|':
            assert original[index] == char
            result.append(index)
    return result

然后

align_A, matches, align_B, score = alignment.splitlines()
print(compare(align_A, matches, A))

给予[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]。快速目视检查确认了这一点:A的前14个字符匹配(5 E s,6个空格和3 H s)。和

print(compare(align_B, matches, B))

给出[0, 1, 2, 10, 11, 15, 16, 17, 18, 19, 20, 21, 22, 23]