Практикум 9

  1. Глобальное парное выравнивание гомологичных белков
  2. Ссылка на блокнот Google colab, в котором был проведён поиск белков с совпадающими мнемониками функции.

    Скрипт для подсчёта количества инсерций и делеций.

    Таблица 1. Характеристики глобального парного выравнивания трёх пар белков
    Protein name ID1 ID2 Score Identity Similarity Gaps Indels
    Chemotaxis protein CheW CHEW_ECOLI CHEW_BACSU 197.5 26.1% 46.7% 37 5
    Acyl-coenzyme A dehydrogenase* FADE_ECOLI FADE_BACSU 261.5 15.5% 26.5% 454 32
    LexA repressor LEXA_ECOLI LEXA_BACSU 296.5 32.7% 51.2% 15 5
    *название для Bacillus subtilis - Probable acyl-CoA dehydrogenase

  3. Локальное парное выравнивание гомологичных белков
  4. Скрипт для подсчёта покрытия выравнивания.

    Таблица 2. Характеристики локального парного выравнивания трёх пар белков
    Protein name ID1 ID2 Score Identity Similarity Gaps Indels Coverage 1 Coverage 2
    Chemotaxis protein CheW CHEW_ECOLI CHEW_BACSU 199.5 28.6% 51.6% 24 3 91.6% 92.9%
    Acyl-coenzyme A dehydrogenase FADE_ECOLI FADE_BACSU 278.5 24.3% 42.3% 107 26 60.4% 79.0%
    LexA repressor LEXA_ECOLI LEXA_BACSU 300.5 33.5% 52.4% 13 4 97.5% 98.5%
    *название для Bacillus subtilis - Probable acyl-CoA dehydrogenase

  5. Результат применения программ выравнивания к неродственным белкам
  6. Пусть этими белками будут CYSM_ECOLI (Cysteine synthase B) и DNAA_ECOLI (Chromosomal replication initiator protein DnaA).

    Скрипты для подсчёта инделей и покрытия выравнивания.

    Таблица 3. Характеристики глобального и локального парного выравнивания двух неродственных белков
    Alignment algorythm Score % Identity % Similarity Gaps Indels Coverage 1 Coverage 2
    needle 26.5 7.9% 14.5% 420 14 - -
    water 42.5 17.5% 39.4% 31 4 35.3 29.1

    В процессе эволюции белок может терять или приобретать значительные по длине фрагменты, часто целые домены, и что-то подобное можно наблюдать на белках FADE_ECOLI и FADE_BACSU: последний из них меньше, и из-за этого их coverage при локальном выравнивании довольно сильно различается, а identity и similarity при глобальном выравнивании заметно меньше таковых при локальном.

    Ситуация с неродственными белками чем-то на это похожа: identity и similarity для локального выравнивания сильно выше, чем для глобального, так как алгоритм выбирает небольшие кусочки из каждого белка, которые случайно оказались похожи. Из-за этого coverage очень низок для обоих белков.

    При этом score для обоих алгоритмов очень мал, намного меньше даже, чем score явно не очень консервативного белка FADE.

  7. Множественное выравнивание белков и импорт в Jalview
  8. Мнемонике LEXA для E. coli соответствует название LexA repressor. Этот фермент является репрессором ряда белков, участвующих в SOS репарации

    По запросу (id:LEXA_*) AND (reviewed:true) на UniProt находится 446 результатов. Из них были выбраны белки для 5 организмов разной степени родственности.

    Таблица 4. Выбранные организмы
    Название организма ID белка
    Bacillus cereus (strain AH820) LEXA_BACC0
    Bacillus anthracis LEXA_BACAN
    Geobacillus kaustophilus LEXA_GEOKA
    Geobacillus thermodenitrificans LEXA_GEOTN
    Mycobacterium bovis LEXA_MYCBP

    Затем был создан файл, в котором были перечислены 5 USA:

        sw:lexa_bacc0
        sw:lexa_bacan
        sw:lexa_geoka
        sw:lexa_geotn
        sw:lexa_mycbp

    Затем последовательности соответствующих белков были записаны в файл lexa.fasta.

        seqret @lexa.txt lexa.fasta 

    Здесь символ @ говорит, что нужно прочитать файл lexa.txt и каждую строку использовать как отдельный USA.

    После этого файл с последовательностями белков был передан алгоритму muscle.

    По полученному выравниванию видно, что белки явно гомологичные. Также видно, что пары белков LEXA_BACC0, LEXA_BACAN и LEXA_GEOKA, LEXA_GEOTN более похожи между собой: часто если есть замена одной аминокислоты на другую в одном из них, такая же замена есть и в другом, так как это белки разных видов одного рода. В то же время LEXA_MYCBP, как и можно было ожидать, сильно отличается от всех остальных, в том числе имеет два крупных инделя с 1 по 23 и со 108 по 116 аминокислотные остатки.

    Есть участки с высокой консервативностью, например с 45 по 64 аминокислотные остатки они либо не различаются вовсе, либо заменились только у Mycobacterium bovis, и только на сходные по физическим свойствам (к примеру, в 51 столбце Ile и Val, а в 63 столбце Thr и Ser), и участки с низкой консервативностью, например с 96 по 104 аминокислотные остатки, где эти остатки могут различаться даже у близких видов и иметь совершенно разные физические свойства (например, 102 остаток - Val, Thr или Lys).

  9. Параметры программ needle и water
  10. Алгоритмы needle и water, запущенные без опции -auto, запрашивают два параметра: штраф за открытие инделя (Gap opening penalty) и штраф за его продолжение (Gap extension penalty). Изменение выравнивания при различных параметрах рассмотрено на примере CHEW_ECOLI и CHEW_BACSU.

    Алгоритм needle

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

    Увеличение штрафа за продолжение инделя снижает долю гэпов в выравнивании, почти не влияя на их количество. Если одновременно с этим снизить штраф за начало гэпа (например, здесь штраф за открытие инделя 1.0, а за его продолжение - 10.0), влияние на долю гэпов слабее, так как появляется много инделей из 1 гэпа, хотя всё равно есть это снижение (здесь по сравнениию со значением штрафов 1.0 и 0.5 соответственно).

    При уменьшении штрафа за продолжение инделя происходит что-то довольно странное, не могу это никак объяснить.

    Таблица 5. Изменение выравнивания алгоритмом needle при различных параметрах
    Gap opening penalty Gap extension penalty Indels number Identity, % Similarity, % Gaps, %
    10.0 0.5 5 26.1 46.7 20.6
    20.0 0.5 3 25.4 49.7 8.9
    1.0 0.5 47 32.7 50.3 37.7
    10.0 10.0 5 26.5 50.6 10.0
    10.0 0.01 10 28.4 49.4 16.5
    1.0 10.0 46 29.2 51.6 31.8

    Алгоритм water

    Количество инделей в выравнивании алгоритмом water похожим образом меняется в зависимости от параметров.

    При увеличении штрафа за открытие инделя или его продолжение, coverage уменьшается, видимо, алгорим, выбирает как более оптимельное выравнивание то, в которое не включены индели, находящиеся по краям, и то, что находится дальше них. При уменьшении штрафа за начало инделя – наоборот, coverage возрастает, а штраф за его продолжение практически ни на что не влияет.

    Увеличение штрафа за продолжение инделя при низком штрафе за его начало снова слабее влияет, чем при высоком.

    Таблица 6. Изменение выравнивания алгоритмом water при различных параметрах
    Gap opening penalty Gap extension penalty Indels number Identity Similarity Gaps Coverage 1 Coverage 2
    10.0 0.5 3 28.6 51.6 14.9 91.6 92.9
    20.0 0.5 0 27.9 55.7 0.0 83.8 89.7
    1.0 0.5 46 33.2 51.0 36.7 98.2 100.0
    10.0 10.0 2 29.1 56.7 1.4 83.8 89.7
    10.0 0.01 3 28.6 51.6 14.9 91.6 92.9
    1.0 10.0 43 32.8 53.2 30.6 95.2 100.0

  11. Подсчёт инделей
  12. #!/usr/bin/env python3
    
    path  = input()
    f = open(path)
    
    lines = []
    for line in f:
        if line[0].isalpha():
            lines.append(line.split())
    
    name1 = lines[0][0]
    name2 = lines[1][0]
    
    seq1 = ''.join([line[2] for line in lines if line[0] == name1])
    seq2 = ''.join([line[2] for line in lines if line[0] == name2])
    
    is_indel = False
    indel_cnt1 = 0
    for c in seq1:
        if c == '-' and not is_indel:
            is_indel = True
            indel_cnt1 += 1
        elif c != '-' and is_indel:
            is_indel = False
    
    is_indel = False
    indel_cnt2 = 0
    for c in seq2:
        if c == '-' and not is_indel:
            is_indel = True
            indel_cnt2 += 1
        elif c != '-' and is_indel:
            is_indel = False
    
    print(indel_cnt1)
    print(indel_cnt2)
    print('Total', indel_cnt1 + indel_cnt2)