Гомологичное моделирование комплекса белка с лигандом

Традиционные ссылки на полезные ресурсы:

  • Уроки по работе с Modeller находятся здесь.

Цель данного занятия ознакомится с возможностями гомологичного моделирования комплекса белка с лигандом. В этом занятии мы будем пользоваться пакетом Modeller. Это программное обеспечение распространяется бесплатно для академических пользователей.

Вы будете работать с любым белком лизоцимом из Uniprot. Используя известную структуру лизоцима форели как образец, Вам необходимо построить модель комплекса Вашего белка с лигандом.

  1. Загрузим модуль
1import sys 
2import modeller 
3import _modeller
4import modeller.automodel 
  1. Зададим некторые параметры
1env=modeller.environ()
2env.io.hetatm=True
  1. Скачаем белок заготовку
1! wget http://www.pdb.org/pdb/files/1lmp.pdb

и последовательность
1! wget http://www.uniprot.org/uniprot/PXXXX.fasta
  1. Создадим объект выравнивание:
1alignm=modeller.alignment(env)

и добавим последовательность и структуру

1alignm.append(file='PXXX.fasta', align_codes='all',alignment_format='FASTA')
2## создадим модель
3mdl = modeller.model(env, file='ХХХХ.pdb', model_segment=('FIRST:'+'A', 'LAST:'+'A'))
4## и добавим в выравнивание
5alignm.append_model(mdl, atom_files='ХХХ.pdb', align_codes='1lmp')
6## есть смысл поправить идентификаторы
7alignm[0].code = '.....'
  1. Делаем выравнивание и сохраняем:
1alignm.salign()
2alignm.write(file='all_in_one.ali', alignment_format='PIR')
  1. Посмотрите содержимое all_in_one.ali, там всё хорошо?
  1. Построим модель:
 1## Выбираем объект для моделирования 
 2s = alignm[0]
 3pdb = alignm[1]
 4
 5print s.code, pdb.code
 6
 7## Создаем объект automodel
 8a = modeller.automodel.automodel(env, alnfile='all_in_one.ali', knowns= pdb.co...... , sequence = s.code )
 9
10a.name='mod'+s.code
11a.starting_model = 1
12a.ending_model = 2
13a.make()
  1. Надо посмотреть результат:
    1import nglview
    2import ipywidgets
    3w1 = nglview.show_structure_file('.....B99990001.pdb')
    4w1
    
-----
А ГДЕ ЛИГАНД??
-----
  1. Оказывается надо добавить три остатка лиганда к последовательности

Подсказки как сделать:

1## Получить список остаков
2alignm[n].residues
3## Добавить в объект выравнивание последовательность из  строки
4alignm.append_sequence(....

  1. (Дополнительно) Поместите лиганд в другое место, переназначив объект automodel, это очень примерный код:
     1class mymodel(modeller.automodel.automodel):
     2    def special_restraints(self, aln):
     3        rsr = self.restraints
     4        at = self.atoms
     5        for x,y in [('CG:83','O6:228')]:
     6        rsr.add(modeller.forms.gaussian(group=modeller.physical.xy_distance, 
     7                                        feature=modeller.features.distance(
     8                                        at[x],at[y]),mean=3.0, stdev=0.1))
     9
    10from modeller import *
    11from modeller.automodel import *    
    12a = mymodel(env, ...
    

и да подсказка: надо удалить рестрейны которые генерируются автоматически: ( можно через файл рестрейнов)

43 atoms in HETATM/BLK residues constrained
to protein atoms within 2.30 angstroms
and protein CA atoms within 10.00 angstroms

  1. Доп. Найдите способ искать мутации для улучшения связывания по мотивам этого скрипта https://salilab.org/modeller/wiki/Mutate%20model
  1. Гомологичное моделирование комплекса белка с лигандом #

    - Необходимо представить в отчёте результаты моделирования и результаты проверки качества структур.
    - Необходимо представить обсуждение результата.

  1. Традиционные ссылки на полезные ресурсы: ##

    - Уроки по работе с Modeller [находятся здесь](http://salilab.org/modeller/tutorial/) VPN? или https://vsb.fbb.msu.ru/share/modeller/
    - [Colab](https://colab.research.google.com/drive/1Mld2l0DVzowppOm0947uE8sWWLj1HoMe)

Цель данного занятия ознакомится с возможностями гомологичного моделирования комплекса белка с лигандом. В этом занятии мы будем пользоваться пакетом Modeller. Это программное обеспечение распространяется бесплатно для академических пользователей.

Alphafold Design

Работу выполняем в среде Alphadesign

  1. Загрузим быстрые пакеты для градиентов и линейной алгебры и ColabDesign
        
    import jax
    import jax.numpy as jnp
    from colabdesign.af.alphafold.common import residue_constants
    from colabdesign import clear_mem, mk_afdesign_model
    
  1. Скачаем белок для модификации
        
    ! wget http://www.pdb.org/pdb/files/1l2y.pdb
    ! mkdir -p  /opt/alphadesign/
    ! curl -fsSL https://storage.googleapis.com/alphafold/alphafold_params_2022-12-06.tar | tar x -C /opt/alphadesign/
    
  1. Зададим функцию потерь от радиуса инерции
        
    def rg_loss(inputs, outputs):
        positions = outputs["structure_module"]["final_atom_positions"]
        ca = positions[:,residue_constants.atom_order["CA"]]
        center = ca.mean(0)
        rg = jnp.sqrt(jnp.square(ca - center).sum(-1).mean() + 1e-8)
        rg_th = 2.38 * ca.shape[0] ** 0.365
        rg = jax.nn.elu(rg - rg_th)
        return {"rg":rg}
    
  1. Зададим объект модели
        
    clear_mem()
    af_model = mk_afdesign_model(protocol="partial", data_dir='/opt/alphadesign/',
        loss_callback=rg_loss, # Это наша функция
        use_templates=False) 
    
  1. Можно задать вес нашей функции
        
    af_model.opt["weights"]["rg"] = 0.1 
    
  1. Теперь зададим степень насилия над PDB
        
    af_model.prep_inputs(pdb_filename="1l2y.pdb",
        chain="A",
        pos="1-7,15-19",       # Позиции, которые  мы хотим оставить неизменными
        length=30)          # Новый белок будет 30 аминокислот
    af_model.rewire(loops=[15]) # тут мы зададим размер петли между участками
    
  2. Запуск
        
    af_model.restart(mode=["soft","gumbel","wildtype"])
    af_model.design_3stage(soft_iters=100, temp_iters=100, hard_iters=10)
    
  1. Результаты
        
    af_model.save_pdb('afdes.pdb')
    af_model.plot_pdb()
    af_model.get_seqs()
    

- Оцените, что получилось. Выдвините предположение об предполгаемой стабильности пепетида

{{fnlist}}