Практикум 9: Выравнивание последовательностей

Мисюрёва Анастасия | Факультет биоинженерии и биоинформатики МГУ

Задание 1. Программа подсчёта инделей

Назначение программы

Программа indels.py предназначена для анализа результатов глобального (needle) или локального (water) выравнивания двух последовательностей. Она подсчитывает количество инделей — непрерывных блоков гэпов (-) — в каждой из двух выровненных последовательностей и выводит суммарный результат.

Использование

python indels.py <файл с выравниванием>

Программа не требует дополнительного ввода от пользователя.

Исходный код

 import sys
import re

def count_indels(seq):
    count = 0
    in_gap = False
    for c in seq:
        if c == '-':
            if not in_gap:
                count += 1
                in_gap = True
        else:
            in_gap = False
    return count

def parse_emboss_alignment(filename):
    seqs = {}
    with open(filename) as f:
        for line in f:
            # Пропускаем строки комментариев и пустые строки
            if line.startswith('#') or line.startswith('/') or not line.strip():
                continue
            
            # Извлекаем название последовательности и её часть
            match = re.match(r'^(\S+)\s+\d+\s+([A-Za-z-]+)\s+\d+', line)
            if match:
                name = match.group(1)
                seq_part = match.group(2)
                if name not in seqs:
                    seqs[name] = ''
                seqs[name] += seq_part
    
    names = list(seqs.keys())
    if len(names) < 2:
        raise ValueError("Не удалось найти две последовательности в файле")
    
    return names[0], seqs[names[0]], names[1], seqs[names[1]]


if len(sys.argv) != 2:
    print("Использование: python indels.py <файл_выравнивания>")
    sys.exit(1)

name1, seq1, name2, seq2 = parse_emboss_alignment(sys.argv[1])

i1 = count_indels(seq1)
i2 = count_indels(seq2)

print(f"{name1} {i1}")
print(f"{name2} {i2}")
print(f"Total {i1 + i2}")

Краткое описание работы программы

  1. Парсинг файла — функция parse_emboss_alignment() читает файл, игнорирует служебные строки (#, /) и с помощью регулярного выражения r'^(\S+)\s+\d+\s+([A-Za-z-]+)\s+\d+' извлекает названия последовательностей и их фрагменты (буквы и символы -), собирая полные последовательности в словарь.
  2. Подсчёт инделей — функция count_indels() проходит по строке последовательности, считая каждый переход от символа (не гэпа) к гэпу как один индель. Несколько подряд идущих гэпов считаются как один индель.
  3. Вывод результатов — программа печатает три строки:
    • название первой последовательности и количество её инделей
    • название второй последовательности и количество её инделей
    • Total и сумму инделей обеих последовательностей

Задание 2. Глобальное и локальное выравнивание гомологичных белков

Глобальное выравнивание (needle)

Protein NameID 1ID 2Score% Identity% SimilarityGapsIndels
Chaperone protein DnaKDNAK_ECOLIDNAK_BACSU1767.055.4%72.9%335
DNA gyrase subunit AGYRA_ECOLIGYRA_BACSU2227.050.7%68.6%727
DNA-directed RNA polymerase subunit betaRPOB_ECOLIRPOB_BACSU3034.042.5%55.5%43317

Локальное выравнивание (water)

Protein NameID 1ID 2Score% Identity% SimilarityGapsIndelsCoverage 1Coverage 2
Chaperone protein DnaKDNAK_ECOLIDNAK_BACSU1767.055.8%73.3%30499.7%99.2%
DNA gyrase subunit AGYRA_ECOLIGYRA_BACSU2228.052.6%71.3%38496.1%98.9%
DNA-directed RNA polymerase subunit betaRPOB_ECOLIRPOB_BACSU3039.043.7%57.0%3961499.5%96.5%

Задание 4. Комментарии к выравниваниям

Введение

В рамках выполнения задания были проведены глобальное (программа needle) и локальное (программа water) выравнивания трёх пар гомологичных белков: DNAK, GYRA и RPOB из Escherichia coli (штамм K12) и Bacillus subtilis (штамм 168).

1. Пара DNAK (шаперон DnaK)

  • Глобально: 5 инделей, 33 гэпа
  • Локально: 4 инделя, 30 гэпов
  • Белок консервативный по всей длине
  • Локальное выравнивание даёт практически идентичные результаты глобальному. Оба метода одинаково информативны.
  • 2. Пара GYRA (ДНК-гираза, субъединица A)

  • Глобально: 7 инделей, 72 гэпа
  • Локально: 4 инделя, 38 гэпов, покрытие ~96%
  • Локальное выравнивание намного лучше: отбрасывает вариабельные концы, показывает только общие домены
  • 3. Пара RPOB (РНК-полимераза, субъединица beta)

  • Глобально: 17 инделей, 433 гэпа (29% длины)
  • Локально: 14 инделей, 396 гэпов
  • Улучшение есть, но скромное: даже консервативные домены содержат много вставок
  • Локальное выравнивание очень информативно. Разница в количестве гэпов составляет 37, что является существенным сокращением.
  • Все три пары белков гомологичны, но по-разному:

  • DNAK — гомологичны по всей длине (консервативный белок).
  • GYRA — гомологичны не полностью: концевые участки расходятся, но есть общие консервативные домены.
  • RPOB — гомологичны частично: белок очень вариабельный, но протяженные гомологичные участки сохраняются.
  • Общие выводы

  • Локальное выравнивание полезно для белков с доменной структурой.
  • Для равномерно консервативных (DNAK) разница незначительна.
  • Для очень вариабельных (RPOB) помогает, но не радикально.
  • Задание 5. Результат применения программ выравнивания к неродственным белкам

    Выбор пары: DNAK_ECOLI (шаперон DnaK) и GYRA_BACSU (ДНК-гираза). Эти белки выполняют разные функции и не имеют эволюционного родства.

    Результаты глобального выравнивания (needle)

    Score% Identity% SimilarityGaps
    93.515.5%28.5%419/939 (44.6%)

    Результаты локального выравнивания (water)

    Score% Identity% SimilarityGaps
    108.018.6%34.9%206/565 (36.5%)

    Сравнение с гомологичными парами

    ПараметрГомологичная пара (DNAK)Неродственная пара (DNAK vs GYRA)
    Score (needle)1767.093.5
    % Identity (needle)55.4%15.5%
    Gaps (needle)33 (5.1%)419 (44.6%)

    Выводы

    1. Score зависит от длины белков, поэтому абсолютные пороги (Score > 500) ненадёжны.
    2. Для оценки гомологии лучше смотреть на процент идентичности и долю гэпов
    3. Локальное выравнивание может быть обманчивым: находит один похожий участок даже у неродственных белков и выдаёт неинформативные результаты, поэтому первостепенно выполнение глобального выравнивания.

    Задание 6. Множественное выравнивание

    (а) Мнемоника и информация о белках

    Мнемоника: DNAK
    Рекомендованное полное имя белка из ECOLI: Chaperone protein DnaK (Heat shock protein 70)
    Количество найденных белков: по запросу id:DNAK* AND reviewed:true найдена 801 запись. Уникальных белков с разными суффиксами организмов – около 25.

    Выбранные 5 белков (помимо DNAK_ECOLI и DNAK_BACSU):

    IDОрганизм
    1DNAK_MYCTUMycobacterium tuberculosis
    2DNAK_AQUAEAquifex aeolicus
    3DNAK_BORBUBorrelia burgdorferi
    4DNAK_HELPYHelicobacter pylori
    5DNAK_STAA8Staphylococcus aureus

    (б) Как делалось выравнивание

    Семь последовательностей в формате FASTA были объединены в один файл. Множественное выравнивание выполнено с помощью программы Muscle из командной строки:

    muscle -align dnaK_7.fasta -output alignment_pr9.fa

    Полученное выравнивание в формате FASTA загружено в программу Jalview через File → Input Alignment → From File. В Jalview закрыты все лишние окна, применена раскраска колонок по проценту идентичности (Colour → Percentage Identity).

    (в) Гиперссылка на файл с проектом Jalview

    Ссылка на файл выравнивания alignment_pr9.fa

    (г) Комментарии к выравниванию

    По моему мнению, белок DNAK_BACSU выровнялся хуже всего (наибольшее количество отклоняющихся от консенсусных позиций в колонках, гэпы). Белок DnaK (Hsp70) является высококонсервативным, поэтому даже эволюционно далёкие представители имеют много консервативных позиций.

    Все ли они гомологичны? Да, все представленные белки являются гомологичными. Они принадлежат к одному семейству белков теплового шока 70 кДа.

    Характеристики выравнивания


    Практикум 9. Выравнивание последовательностей | Мисюрёва Анастасия | 2026