Гомологиченое моделирование мутантного лизоцима¶
Сначала я скачала нужные структуры: исходный лизоцим и последовательность мутантного белка LYS_ANTMY (Сначала попробовала LYS_ESTAC, но это какя-то одинокая петля, а не белок).
import sys
import modeller
import _modeller
import modeller.automodel
env=modeller.environ()
env.io.hetatm=True
alignm = modeller.alignment(env)
Гомологиченое моделироваие без лиганда¶
alignm.append(file='LYS_ANTMY.fasta',
align_codes='all',
alignment_format='FASTA')
mdl = modeller.model(env,
file='1lmp.pdb',
model_segment=('FIRST:'+'A', 'LAST:'+'B'))
alignm.append_model(mdl,
atom_files='1lmp.pdb',
align_codes='1lmp')
alignm[0].code = "ANTMY"
alignm[1].code = "1LMP"
alignm.salign()
alignm.write(file='all_in_one.ali',
alignment_format='PIR')
s = alignm[0]
pdb = alignm[1]
## Создаем объект automodel
a = modeller.automodel.automodel(env,
alnfile='all_in_one.ali',
knowns=pdb.code ,
sequence=s.code )
a.name= 'mod'+ s.code
a.starting_model = 1
a.ending_model = 2
a.make()
Визуализирую результат в Pymol. Видно, что структуры хорошо выровнялись друг на друга:
Моделирование с лигандом¶
Для того, чтобы в финальной структуре появился лиганд, я добавила в конец мутантной последовательности 3 точки (по числу остатков в лиганде).
# Добавим в выравнивание 3 остатка лиганда
res_lst = alignm[0].residues # список остатков мутанта
seq = "".join([i.code for i in res_lst]) + "..."
## Добавить в объект выравнивание последовательность из строки
alignm.append_sequence(seq)
alignm[2].code = "ANTMY_LIG"
alignm.salign()
alignm.write(file='all_in_one.ali',
alignment_format='PIR')
s = alignm[2]
pdb = alignm[1]
a = modeller.automodel.automodel(env,
alnfile='all_in_one.ali',
knowns = pdb.code ,
sequence = s.code )
a.name = 'mod2'+ s.code
a.starting_model = 1
a.ending_model = 2
a.make()
При визуализации в Pymol лиганд сначала отображался как набор сфер. Чтобы избавиться от этого эффекта, я убрала строчки начинающиеся с CONNECT в конце файла.
В получившейся структуре лиганды пространственно уже неплохо наложены друг на друга:
Задание расстояние от лиганда до атомов белка¶
Можно также задать расстояние от какого-либо атома лиганда, до какого-либо атома белка. Я взяла кислород 101 глутамата белка и кислород O6 лиганда. В оригинальной структуре между ними, вероятно, есть водородная связь, поэтому среднее расстояние между атомами я взяла 3 А.
class mymodel(modeller.automodel.automodel):
def special_restraints(self, aln):
rsr = self.restraints
at = self.atoms
ligand_sel = modeller.selection(self.residues['123:A'])
rsr.rigid_bodies.append(modeller.rigid_body(ligand_sel))
rsr.unpick(ligand_sel)
for x,y in [('OD2:101:A', 'O6:123:A')]:
rsr.add(modeller.forms.gaussian(group=modeller.physical.xy_distance,
feature=modeller.features.distance(at[x],at[y]),
mean=3.0,
stdev=0.1))
a = mymodel(env,
alnfile='all_in_one.ali',
knowns = pdb.code ,
sequence = s.code )
a.make()
Вот такая структура получилась: