Как получить оценку выравнивания из последовательностей ДНК?

Я немного знаком с парной функцией 2 в Biopython, но заметил, что она добавляет тире в последовательность, чтобы получить наилучший возможный результат выравнивания. Например,

for a in pairwise2.align.globalxx("ACCGT", "ACG"):
  print(format_alignment(*a))

даст этот результат:

ACCGT
|||||
A-CG-
Score=3
<BLANKLINE>
ACCGT
|||||
AC-G-
Score=3
<BLANKLINE>

Даже если первые 2 символа (A & C) во 2-й последовательности будут совпадать с 1-й последовательностью. Есть ли способ найти количество выровненных пар оснований, а не наибольшее количество выровненных пар оснований (например, последовательность ACTGAA будет иметь оценку 3 против последовательности GCCGTA)?

2 ответа

Решение

Таким образом, вы просто хотите посчитать одинаковые базы в двух последовательностях (одинаковой длины) без какого-либо выравнивания?

Вот так:

seq1 = 'ACTGAA'
seq2 = 'GCCGTA'

score = 0

for a, b in zip(seq1, seq2):
    if a == b:
        score +=1

print(score)

В более питоническом ключе:

seq1 = 'ACTGAA'
seq2 = 'GCCGTA'

score = sum([1 for a, b in zip(seq1, seq2) if a == b])
print(score)

Обратите внимание, что обратная сторона этой оценки (количество неидентичных оснований) будет расстоянием Хэмминга. Хотя вы можете заставить биопионы pairwise2 Чтобы вернуть желаемый результат путем применения очень высоких штрафов за пропуски, показанное выше решение кажется более простым.

# I don't recommend this
pairwise2.align.globalxs(seq1, seq2, -1000, -1000)

Если вы просто пытаетесь предотвратить добавление пробелов в функцию, вы можете увеличить штраф за пробел. Выравнивание требует параметров, чтобы установить счет матча, штраф несоответствия, создать штраф за разрыв и расширить штраф за разрыв:

pairwise2.align.globalxx("ACCGT", "ACG", 2, -1, -1, -0.5)
Другие вопросы по тегам