индекс остатка, сопоставленный с использованием pairwise2 в биопионе - PullRequest
0 голосов
/ 04 июня 2018

Мне интересно знать индекс остатков, которые соответствуют строке, используя pairwise2 в python.

Например, у меня есть две строки

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

Я хочу получить индексы совпадения, т.е. исходные позициииз всех Es, Hs и ' ' из seq A, которые совпадают с seq B.

Как мне это сделать?

1 Ответ

0 голосов
/ 07 июня 2018

Полагаю, первый пробел в 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].Быстрая визуальная проверка подтверждает это: первые 14 символов A совпадают (5 E с, 6 пробелов и 3 H с).И

print(compare(align_B, matches, B))

дает [0, 1, 2, 10, 11, 15, 16, 17, 18, 19, 20, 21, 22, 23].

...