В этом практикуме мы познакомимся с рядом возможностей PyMol как пакета для моделирования
import __main__
__main__.pymol_argv = [ 'pymol', '-cp' ]
import pymol
pymol.finish_launching()
from pymol import cmd,stored
from IPython.display import Image
import time
import sys
import numpy as np
Оценим возможности Sculpting. Переходим во вкладку Wizard->Demo->Sculpting - здесь можно изменять структуру белка, после чего она будет оптимизирована программой
Загрузим структуру лизоцима и отобразим ее вместе с лигандом
cmd.reinitialize()
cmd.do('''
fetch 1lmp, async=0
as cartoon, n. C+O+N+CA
zoom center, 35
bg_color white
select ligand, 1lmp and resn nag+ndg
show sticks, ligand
png 1lmp.png''')
cmd.remove("solvent")
cmd.png('D:\Users\morozo0a\Desktop\Kisa\Gol\prac2\prac21lmp.png')
time.sleep(3)
Image(filename='D:\Users\morozo0a\Desktop\Kisa\Gol\prac2\prac21lmp.png')
Известно, что остатки глутаминовой кислоты (Glu35) и аспарагиновой кислоты (Asp52) критичны для функционирования лизоцима - они же и взаимодействуют с лигандом. В качестве остатка для мутагенеза был выбран Asp52 и визуализирован вместе с лигандом
cmd.hide('all')
cmd.select('orig','resi 52 + resn nag + resn ndg')
cmd.show('sticks', 'orig')
cmd.zoom('orig')
cmd.png('D:\Users\morozo0a\Desktop\Kisa\Gol\prac2\prac2orig.png')
cmd.deselect()
cmd.png('D:\Users\morozo0a\Desktop\Kisa\Gol\prac2\prac2orig.png')
time.sleep(2)
Image(filename='D:\Users\morozo0a\Desktop\Kisa\Gol\prac2\prac2orig.png')
Заменим аспартат 52 на тирозин с помощью функции Wizard->Mutagenesis и визуализируем
cmd.wizard("mutagenesis")
cmd.refresh_wizard()
cmd.get_wizard().do_select("resi 52")
cmd.get_wizard().set_mode("TYR")
cmd.refresh_wizard()
cmd.get_wizard().apply()
cmd.set_wizard()
cmd.hide('all')
cmd.select('mutant','resi 52 + resn nag + resn ndg')
cmd.show('sticks', 'mutant')
cmd.zoom('mutant')
cmd.deselect()
cmd.png('D:\Users\morozo0a\Desktop\Kisa\Gol\prac2\prac2mutant.png')
time.sleep(2)
Image(filename='D:\Users\morozo0a\Desktop\Kisa\Gol\prac2\prac2mutant.png')
На следующем этапе визуализируем оба белка - нативный и мутантный
cmd.fetch('1lmp', 'orig2')
cmd.hide('all')
cmd.select('ligandmut', '1lmp & resn nag+ndg')
cmd.select('ligandorig', 'orig2 & resn nag+ndg')
cmd.disable('ligand*')
cmd.set('cartoon_side_chain_helper', 'on')
cmd.show('cartoon', '(1lmp | orig2) & !ligand*')
cmd.colour('lightblue', '1lmp')
cmd.colour('lightblue', 'orig2')
cmd.show('sticks', 'ligand*')
cmd.colour('orange', 'ligand*')
cmd.show('sticks', 'resi 52')
cmd.colour('red', '1lmp & resi 52')
cmd.colour('yellow', 'orig2 & resi 52')
cmd.translate('[-40, 0, 0]', 'orig2')
cmd.center('orig2 + 1lmp')
cmd.zoom('center', '30')
cmd.png('D:\Users\morozo0a\Desktop\Kisa\Gol\prac2\check.png')
time.sleep(2)
Image(filename='D:\Users\morozo0a\Desktop\Kisa\Gol\prac2\check.png')
Создадим видео, в котором оба белка будут совмещены
cmd.mset('1 x10')
cmd.frame('1')
cmd.mview('store')
cmd.do('mview store, object=orig2')
cmd.frame('1')
cmd.do('translate [40, 40, 0], object=orig2')
cmd.do('mview store, object=orig2')
cmd.do('mview store, object=orig')
cmd.frame('6')
cmd.do('translate [0, -40, 0], object=orig2')
cmd.mview('store')
cmd.do('mview store, object=orig2')
cmd.do('mview store, object=orig')
cmd.do('mview interpolate, object=orig2')
cmd.frame('10')
cmd.do('orient resi 52')
cmd.mview('store')
cmd.do('mview store, object=orig2')
cmd.do('mview store, object=orig')
cmd.frame('10')
cmd.do('orient resi 52')
cmd.mview('store')
cmd.do('mview store, object=orig2')
cmd.do('mview store, object=orig')
cmd.mpng('merge')
cmd.mplay()
import io
import base64
from IPython.display import HTML
video = io.open('D:\Users\morozo0a\Desktop\Kisa\Gol\prac2\movie.mp4', 'r+b').read()
encoded = base64.b64encode(video)
HTML(data='''<video alt="test" controls>
<source src="data:video/mp4;base64,{0}" type="video/mp4" />
</video>'''.format(encoded.decode('ascii')))
С помощью команды fuse присоединим флурофор TAMRA через сложноэфирную связь к лизоциму. Для присоединения необходимо выбрать аминокислотный остаток, который бы содержал гидроксильную группу, доступную для образования связи (должна быть экспонированана поверхность белка) - например, серин или тирозин. В данном случае был выбран серин 81 и визуализирован результат
cmd.reinitialize()
cmd.bg_color('white')
cmd.load("tamra.sdf")
cmd.remove('tamra and id 4')
cmd.select('tamra_O', 'id 32')
cmd.fetch("1lmp")
cmd.remove("solvent")
cmd.zoom()
cmd.do('''
select SER_O, resn ser and resi 81 and name OG1
show sticks, resn ser and resi 81
''')
cmd.fuse('tamra_O', 'SER_O', 1)
cmd.do('''
orient
zoom center, 20
rotate z,30, all
rotate x, 90, all
rotate y, -150, all
''')
cmd.png('tamra.png')
time.sleep(3)
Image(filename='tamra.png')
Загрузим структуру B-формы ДНК и получим из нее пары нуклеотидов и их матрицу превращения при совмещении одной пары нуклеотидов с последующей. Затем размножим эту пару и применим к ней матрицу превращения
cmd.reinitialize()
cmd.fetch('1BNA')
cmd.bg_color('white')
cmd.remove("solvent")
cmd.do('''create pair, c. A & i. 4 + c. B & i. 21
create nextpair, c. A & i. 5 + c. B & i. 20
create 1, pair
pair_fit nextpair, pair
''')
trans = cmd.get_object_matrix("nextpair")
for x in range(2, 100):
cmd.create(str(x), str(x-1))
cmd.transform_selection(x, trans, homogenous=0)
time.sleep(1)
cmd.delete('1BNA')
cmd.show('sticks')
cmd.zoom('all')
cmd.zoom('center', '50')
cmd.do('''
rotate x, 0, all
rotate z, 0, all
''')
cmd.png('dnagood.png')
time.sleep(3)
Image(filename='dnagood.png')
Построим поли-аланиновую альфа-спираль длиной 100 аминокислот. Приемлимые значения торсионных углов для поли-аланиновой альфа-спирали можно взять из карты Рамачандра для аланина
cmd.reinitialize()
cmd.bg_color('white')
cmd.fragment('ALA')
for x in range(2,100):
cmd.edit("/ALA///"+str(x)+"/c")
cmd.editor.attach_amino_acid("pk1","ALA")
for x in range(3,100):
cmd.edit("/ALA///"+str(x)+"/N","/ALA///"+str(x)+"/CA")
cmd.torsion (-60)
cmd.edit("/ALA///"+str(x-1)+"/CA","/ALA///"+str(x-1)+"/C")
cmd.torsion (-45)
cmd.zoom('center', '25')
cmd.unpick()
cmd.png('alachain.png')
time.sleep(2)
Image(filename='alachain.png')