Выполнил: Ким Адамейко, группа мАДБМ16
import sys
import modeller
import _modeller
import modeller.automodel
env = modeller.environ()
env.io.hetatm = True
modeller.log.none() # отключаем обширный вывод лога
import pubchempy as pcp
import py3Dmol
from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem.Draw import IPythonConsole
from __future__ import print_function, division
from IPython.display import display,Image, Markdown
def show_compound_3d(smiles, view, grid=(0, 0), style={'stick': {}}):
m2d = Chem.MolFromSmiles(smiles)
m3d = Chem.AddHs(m2d)
Chem.AllChem.EmbedMolecule(m3d)
AllChem.MMFFOptimizeMolecule(m3d,maxIters=500,nonBondedThresh=200 )
mb = Chem.MolToMolBlock(m3d)
view.addModel(mb,'sdf', viewer=grid)
view.setStyle({'model':0},style, viewer=grid)
view.zoomTo(viewer=grid)
return view
uniprot_id = 'P00702'
# Скачаем PDB-файл белка-лизоцима и FASTA-последовательность тестового белка, который будем выравнивать
! wget -nv -nc http://www.pdb.org/pdb/files/1lmp.pdb
! wget -nv -nc http://www.uniprot.org/uniprot/{uniprot_id}.fasta
! wget -nv -nc http://www.ebirds.ru/images/large/84.jpg
Будем работать с лизоцимом Phasianus colchicus colchicus, обыкновенного фазана (cтраница в Uniprot).
alignm=modeller.alignment(env) # Создадим объект-выравнивание
alignm.append(file = uniprot_id + '.fasta', # добавим последовательность и структуру
align_codes='all',alignment_format='FASTA')
mdl = modeller.model(env, file='1lmp.pdb',
model_segment=('FIRST:'+'A', 'LAST:'+'A')) # создадим модель
alignm.append_model(mdl, atom_files='1lmp.pdb', align_codes='1lmp') # и добавим в выравнивание
alignm[0].code = 'without_ligand'
alignm.salign()
alignm.write(file='all_in_one.ali', alignment_format='PIR')
! cat 'all_in_one.ali'
s = alignm[0]
pdb = alignm[1]
print(s.code, pdb.code)
## Создаем объект 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()
Выведем выровненный белок слева, исходный справа:
view = py3Dmol.view(width=900, height=400, viewergrid=(1,2))
with open('without_ligand.B99990001.pdb', 'r') as pdbfile:
view.addModel(pdbfile.read(), 'pdb', viewer=(0,0))
view.setStyle({'cartoon': {'color':'spectrum'}}, viewer=(0,0))
view.zoomTo(viewer=(0,0))
view.zoom(1.25, viewer=(0,0))
with open('1lmp.pdb', 'r') as pdbfile:
view.addModel(pdbfile.read(), 'pdb', viewer=(0,1))
view.setStyle({'cartoon': {'color':'spectrum'}}, viewer=(0,1))
view.setStyle({'hetflag': True}, {'stick':{}}, viewer=(0,1))
view.zoomTo(viewer=(0,1))
view.rotate(-100,'y');
view.rotate(-20,'x');
view.show()
Для того, чтобы лиганд отображался и вместе с нашим белком, добавим три последних остатка в выравнивание
## Получить список остаков
print(alignm[1].residues[129:132])
seq_with_ligand = ''.join(i.code for i in alignm[0].residues) + '...' # Припишем точки -- обозначение лиганда
alignm.append_sequence(seq_with_ligand) # Добавим в объект выравнивание посл-ть из строки
pdb = alignm[1] # Выбираем объекты для выравнивания
s = alignm[2]
s.code = 'with_ligand'
alignm.salign()
alignm.write(file='all_in_one_ligand.ali', alignment_format='PIR')
! cat 'all_in_one_ligand.ali'
print(s.code, pdb.code)
## Создаем объект automodel
a2 = modeller.automodel.automodel(env, alnfile='all_in_one_ligand.ali', knowns= pdb.code , sequence = s.code )
a2.name='mod' + s.code
a2.starting_model = 1
a2.ending_model = 2
a2.make()
view = py3Dmol.view(width=900, height=400, viewergrid=(1,2))
with open('with_ligand.B99990001.pdb', 'r') as pdbfile:
view.addModel(pdbfile.read(), 'pdb', viewer=(0,0))
view.setStyle({'cartoon': {'color':'spectrum'}}, viewer=(0,0))
view.setStyle({'hetflag': True}, {'stick':{}}, viewer=(0,0))
view.zoomTo(viewer=(0,0))
view.zoom(1.4, viewer=(0,0))
with open('1lmp.pdb', 'r') as pdbfile:
view.addModel(pdbfile.read(), 'pdb', viewer=(0,1))
view.setStyle({'cartoon': {'color':'spectrum'}}, viewer=(0,1))
view.setStyle({'hetflag': True}, {'stick':{}}, viewer=(0,1))
view.zoomTo(viewer=(0,1))
view.zoom(0.9, viewer=(0,0))
view.rotate(-100,'y');
view.rotate(-20,'x');
view.show()
Вывод: несмотря на то, что идентичность белков по аминокислотным остаткам составляет лишь 55%, согласно проведенному моделированию они обладают схожей пространственной структурой. Белок лизоцима фазана обладает дополнительным "хвостом" по сравнению с белком форели, что обусловлено его большей на 18 аминокислот длиной.