Гомологиченое моделирование мутантного лизоцима¶

Сначала я скачала нужные структуры: исходный лизоцим и последовательность мутантного белка LYS_ANTMY (Сначала попробовала LYS_ESTAC, но это какя-то одинокая петля, а не белок).

wget https://files.rcsb.org/download/1lmp.pdb

wget http://www.uniprot.org/uniprot/LYS_ANTMY.fasta

In [ ]:
import sys 
import modeller 
import _modeller
import modeller.automodel 


env=modeller.environ()
env.io.hetatm=True

alignm = modeller.alignment(env)

Гомологиченое моделироваие без лиганда¶

In [ ]:
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. Видно, что структуры хорошо выровнялись друг на друга:

simple.png

Моделирование с лигандом¶

Для того, чтобы в финальной структуре появился лиганд, я добавила в конец мутантной последовательности 3 точки (по числу остатков в лиганде).

In [ ]:
# Добавим в выравнивание 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 в конце файла.

В получившейся структуре лиганды пространственно уже неплохо наложены друг на друга:

v1.png

Задание расстояние от лиганда до атомов белка¶

Можно также задать расстояние от какого-либо атома лиганда, до какого-либо атома белка. Я взяла кислород 101 глутамата белка и кислород O6 лиганда. В оригинальной структуре между ними, вероятно, есть водородная связь, поэтому среднее расстояние между атомами я взяла 3 А.

In [ ]:
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()

Вот такая структура получилась:

v2.png