Task6

Version 5 (Andrey Golovin, 21.11.2024 17:45)

1 1 Andrey Golovin
h1.  Гомологичное моделирование комплекса белка с лигандом 
2 1 Andrey Golovin
3 1 Andrey Golovin
4 1 Andrey Golovin
h3. Традиционные ссылки на полезные ресурсы: 
5 1 Andrey Golovin
6 3 Student HSE
 * Уроки по работе с Modeller находятся "здесь":http://salilab.org/modeller/tutorial/.
7 1 Andrey Golovin
 
8 1 Andrey Golovin
9 1 Andrey Golovin
10 1 Andrey Golovin
11 1 Andrey Golovin
Цель данного занятия ознакомится с возможностями гомологичного моделирования комплекса белка с лигандом. В этом занятии мы будем пользоваться пакетом Modeller. Это программное обеспечение распространяется бесплатно для академических пользователей.
12 1 Andrey Golovin
13 1 Andrey Golovin
Вы будете работать с любым белком лизоцимом из Uniprot. Используя известную структуру лизоцима форели как образец, Вам необходимо построить модель комплекса Вашего белка с лигандом.
14 1 Andrey Golovin
15 1 Andrey Golovin
 
16 1 Andrey Golovin
# Загрузим модуль
17 2 Andrey Golovin
18 1 Andrey Golovin
<pre><code class="python">
19 1 Andrey Golovin
import sys 
20 1 Andrey Golovin
import modeller 
21 1 Andrey Golovin
import _modeller
22 1 Andrey Golovin
import modeller.automodel 
23 1 Andrey Golovin
</code></pre>
24 1 Andrey Golovin
25 1 Andrey Golovin
# Зададим некторые параметры
26 2 Andrey Golovin
27 1 Andrey Golovin
<pre><code class="python">
28 1 Andrey Golovin
env=modeller.environ()
29 1 Andrey Golovin
env.io.hetatm=True
30 1 Andrey Golovin
</code></pre>
31 1 Andrey Golovin
32 1 Andrey Golovin
# Скачаем белок заготовку
33 2 Andrey Golovin
34 1 Andrey Golovin
<pre><code class="python">
35 1 Andrey Golovin
! wget http://www.pdb.org/pdb/files/1lmp.pdb
36 1 Andrey Golovin
</code></pre>
37 1 Andrey Golovin
и последовательность 
38 1 Andrey Golovin
39 1 Andrey Golovin
<pre><code class="python">
40 1 Andrey Golovin
! wget http://www.uniprot.org/uniprot/PXXXX.fasta
41 1 Andrey Golovin
</code></pre>
42 1 Andrey Golovin
43 1 Andrey Golovin
# Создадим объект выравнивание:
44 2 Andrey Golovin
45 1 Andrey Golovin
<pre><code class="python">
46 1 Andrey Golovin
alignm=modeller.alignment(env)
47 1 Andrey Golovin
</code></pre>
48 1 Andrey Golovin
49 1 Andrey Golovin
и добавим последовательность и структуру
50 2 Andrey Golovin
51 1 Andrey Golovin
<pre><code class="python">
52 1 Andrey Golovin
alignm.append(file='PXXX.fasta', align_codes='all',alignment_format='FASTA')
53 1 Andrey Golovin
## создадим модель
54 1 Andrey Golovin
mdl = modeller.model(env, file='ХХХХ.pdb', model_segment=('FIRST:'+'A', 'LAST:'+'A'))
55 1 Andrey Golovin
## и добавим в выравнивание
56 1 Andrey Golovin
alignm.append_model(mdl, atom_files='ХХХ.pdb', align_codes='1lmp')
57 1 Andrey Golovin
## есть смысл поправить идентификаторы
58 1 Andrey Golovin
alignm[0].code = '.....'
59 1 Andrey Golovin
</code></pre>
60 1 Andrey Golovin
61 1 Andrey Golovin
62 1 Andrey Golovin
# Делаем выравнивание и сохраняем:
63 2 Andrey Golovin
64 1 Andrey Golovin
<pre><code class="python">
65 1 Andrey Golovin
alignm.salign()
66 1 Andrey Golovin
alignm.write(file='all_in_one.ali', alignment_format='PIR')
67 1 Andrey Golovin
</code></pre>
68 1 Andrey Golovin
69 1 Andrey Golovin
70 1 Andrey Golovin
# Посмотрите содержимое all_in_one.ali, там всё хорошо?
71 1 Andrey Golovin
72 1 Andrey Golovin
# Построим модель:
73 2 Andrey Golovin
74 1 Andrey Golovin
<pre><code class="python">
75 1 Andrey Golovin
## Выбираем объект для моделирования 
76 1 Andrey Golovin
s = alignm[0]
77 1 Andrey Golovin
pdb = alignm[1]
78 1 Andrey Golovin
79 1 Andrey Golovin
print s.code, pdb.code
80 1 Andrey Golovin
81 1 Andrey Golovin
## Создаем объект automodel
82 1 Andrey Golovin
a = modeller.automodel.automodel(env, alnfile='all_in_one.ali', knowns= pdb.co...... , sequence = s.code )
83 1 Andrey Golovin
84 1 Andrey Golovin
a.name='mod'+s.code
85 1 Andrey Golovin
a.starting_model = 1
86 1 Andrey Golovin
a.ending_model = 2
87 1 Andrey Golovin
a.make()
88 1 Andrey Golovin
</code></pre>
89 1 Andrey Golovin
90 1 Andrey Golovin
91 1 Andrey Golovin
# Надо посмотреть результат:
92 1 Andrey Golovin
<pre><code class="python">
93 1 Andrey Golovin
import nglview
94 1 Andrey Golovin
import ipywidgets
95 1 Andrey Golovin
w1 = nglview.show_structure_file('.....B99990001.pdb')
96 1 Andrey Golovin
w1
97 1 Andrey Golovin
</code></pre>
98 1 Andrey Golovin
99 1 Andrey Golovin
-----
100 1 Andrey Golovin
А ГДЕ ЛИГАНД??
101 1 Andrey Golovin
-----
102 1 Andrey Golovin
# Оказывается надо добавить три остатка лиганда к последовательности
103 1 Andrey Golovin
104 1 Andrey Golovin
Подсказки как сделать:
105 1 Andrey Golovin
<pre><code class="python">
106 1 Andrey Golovin
## Получить список остаков
107 1 Andrey Golovin
alignm[n].residues
108 1 Andrey Golovin
## Добавить в объект выравнивание последовательность из  строки
109 1 Andrey Golovin
alignm.append_sequence(....
110 1 Andrey Golovin
</code></pre>
111 1 Andrey Golovin
112 1 Andrey Golovin
# (Дополнительно) Поместите лиганд в другое место, переназначив объект automodel, это очень примерный код:
113 1 Andrey Golovin
<pre><code class="python">
114 1 Andrey Golovin
class mymodel(modeller.automodel.automodel):
115 1 Andrey Golovin
    def special_restraints(self, aln):
116 1 Andrey Golovin
        rsr = self.restraints
117 1 Andrey Golovin
        at = self.atoms
118 1 Andrey Golovin
        for x,y in [('CG:83','O6:228')]:
119 1 Andrey Golovin
        rsr.add(modeller.forms.gaussian(group=modeller.physical.xy_distance, 
120 1 Andrey Golovin
                                        feature=modeller.features.distance(
121 1 Andrey Golovin
                                        at[x],at[y]),mean=3.0, stdev=0.1))
122 1 Andrey Golovin
123 1 Andrey Golovin
from modeller import *
124 1 Andrey Golovin
from modeller.automodel import *    
125 1 Andrey Golovin
a = mymodel(env, ...
126 1 Andrey Golovin
</code></pre>
127 1 Andrey Golovin
128 1 Andrey Golovin
и да подсказка: надо удалить рестрейны которые генерируются автоматически: ( можно через файл рестрейнов) 
129 1 Andrey Golovin
<pre>
130 1 Andrey Golovin
43 atoms in HETATM/BLK residues constrained
131 1 Andrey Golovin
to protein atoms within 2.30 angstroms
132 1 Andrey Golovin
and protein CA atoms within 10.00 angstroms
133 1 Andrey Golovin
</pre>
134 1 Andrey Golovin
135 3 Student HSE
# Доп. Найдите способ искать мутации для улучшения связывания по мотивам этого скрипта https://salilab.org/modeller/wiki/Mutate%20model
136 4 Andrey Golovin
137 4 Andrey Golovin
138 4 Andrey Golovin
139 4 Andrey Golovin
# Гомологичное моделирование комплекса белка с лигандом #
140 4 Andrey Golovin
141 4 Andrey Golovin
 - Необходимо представить в отчёте результаты моделирования и результаты проверки качества структур. 
142 4 Andrey Golovin
 - Необходимо представить обсуждение результата.
143 4 Andrey Golovin
144 4 Andrey Golovin
##  Традиционные ссылки на полезные ресурсы: ## 
145 4 Andrey Golovin
146 4 Andrey Golovin
 - Уроки по работе с Modeller [находятся здесь](http://salilab.org/modeller/tutorial/) VPN? или https://vsb.fbb.msu.ru/share/modeller/ 
147 4 Andrey Golovin
 - [Colab](https://colab.research.google.com/drive/1Mld2l0DVzowppOm0947uE8sWWLj1HoMe)
148 4 Andrey Golovin
149 4 Andrey Golovin
150 4 Andrey Golovin
151 4 Andrey Golovin
152 4 Andrey Golovin
153 4 Andrey Golovin
>Цель данного занятия ознакомится с возможностями гомологичного моделирования комплекса белка с лигандом. В этом занятии мы будем пользоваться пакетом Modeller. Это программное обеспечение распространяется бесплатно для академических пользователей.
154 4 Andrey Golovin
155 4 Andrey Golovin
156 4 Andrey Golovin
157 4 Andrey Golovin
158 4 Andrey Golovin
h2.  Alphafold Design 
159 4 Andrey Golovin
160 4 Andrey Golovin
> Работу выполняем в среде Alphadesign
161 4 Andrey Golovin
162 4 Andrey Golovin
163 4 Andrey Golovin
 * Практикум по мотивам : https://github.com/sokrypton/ColabDesign
164 4 Andrey Golovin
165 4 Andrey Golovin
# Загрузим быстрые пакеты для градиентов и линейной алгебры и ColabDesign
166 4 Andrey Golovin
<code><pre>	
167 4 Andrey Golovin
import jax
168 4 Andrey Golovin
import jax.numpy as jnp
169 4 Andrey Golovin
from colabdesign.af.alphafold.common import residue_constants
170 4 Andrey Golovin
from colabdesign import clear_mem, mk_afdesign_model
171 4 Andrey Golovin
</code></pre>
172 4 Andrey Golovin
173 4 Andrey Golovin
# Скачаем белок для модификации 
174 4 Andrey Golovin
<code><pre>	
175 4 Andrey Golovin
! wget http://www.pdb.org/pdb/files/1l2y.pdb
176 4 Andrey Golovin
! mkdir -p  /opt/alphadesign/
177 4 Andrey Golovin
! curl -fsSL https://storage.googleapis.com/alphafold/alphafold_params_2022-12-06.tar | tar x -C /opt/alphadesign/
178 4 Andrey Golovin
</code></pre>
179 4 Andrey Golovin
180 4 Andrey Golovin
181 4 Andrey Golovin
# Зададим функцию потерь от радиуса инерции
182 4 Andrey Golovin
<code><pre>	
183 4 Andrey Golovin
def rg_loss(inputs, outputs):
184 4 Andrey Golovin
	positions = outputs["structure_module"]["final_atom_positions"]
185 4 Andrey Golovin
	ca = positions[:,residue_constants.atom_order["CA"]]
186 4 Andrey Golovin
	center = ca.mean(0)
187 4 Andrey Golovin
	rg = jnp.sqrt(jnp.square(ca - center).sum(-1).mean() + 1e-8)
188 4 Andrey Golovin
	rg_th = 2.38 * ca.shape[0] ** 0.365
189 4 Andrey Golovin
	rg = jax.nn.elu(rg - rg_th)
190 4 Andrey Golovin
	return {"rg":rg}
191 4 Andrey Golovin
</code></pre>
192 4 Andrey Golovin
193 4 Andrey Golovin
# Зададим объект модели 
194 4 Andrey Golovin
<code><pre>	
195 4 Andrey Golovin
clear_mem()
196 4 Andrey Golovin
af_model = mk_afdesign_model(protocol="partial", data_dir='/opt/alphadesign/',
197 4 Andrey Golovin
    loss_callback=rg_loss, # Это наша функция
198 4 Andrey Golovin
    use_templates=False) 
199 4 Andrey Golovin
</code></pre>
200 4 Andrey Golovin
201 4 Andrey Golovin
# Можно задать вес нашей функции
202 4 Andrey Golovin
<code><pre>	
203 5 Andrey Golovin
af_model.opt["weights"]["rg"] = 0.1 
204 4 Andrey Golovin
</code></pre>
205 4 Andrey Golovin
206 4 Andrey Golovin
# Теперь зададим степень насилия над PDB
207 4 Andrey Golovin
<code><pre>	
208 4 Andrey Golovin
af_model.prep_inputs(pdb_filename="1l2y.pdb",
209 4 Andrey Golovin
	chain="A",
210 4 Andrey Golovin
	pos="1-7,15-19",  	 # Позиции, которые  мы хотим оставить неизменными
211 4 Andrey Golovin
	length=30)          # Новый белок будет 30 аминокислот
212 4 Andrey Golovin
af_model.rewire(loops=[15]) # тут мы зададим размер петли между участками
213 4 Andrey Golovin
</code></pre>
214 4 Andrey Golovin
# Запуск 
215 4 Andrey Golovin
<code><pre>	
216 4 Andrey Golovin
af_model.restart(mode=["soft","gumbel","wildtype"])
217 4 Andrey Golovin
af_model.design_3stage(soft_iters=100, temp_iters=100, hard_iters=10)
218 4 Andrey Golovin
</code></pre>
219 4 Andrey Golovin
220 4 Andrey Golovin
# Результаты 
221 4 Andrey Golovin
<code><pre>	
222 4 Andrey Golovin
af_model.save_pdb('afdes.pdb')
223 4 Andrey Golovin
af_model.plot_pdb()
224 4 Andrey Golovin
af_model.get_seqs()
225 4 Andrey Golovin
</code></pre>
226 4 Andrey Golovin
227 4 Andrey Golovin
- Оцените, что получилось. Выдвините предположение об предполгаемой стабильности пепетида