Работа с PyMol

В этом практикуме мы познакомимся с рядом возможностей PyMol как пакета для моделирования

In [1]:
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
 Detected 4 CPU cores.  Enabled multithreaded rendering.

Оценим возможности Sculpting. Переходим во вкладку Wizard->Demo->Sculpting - здесь можно изменять структуру белка, после чего она будет оптимизирована программой

Загрузим структуру лизоцима и отобразим ее вместе с лигандом

In [2]:
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')
Out[2]:

Известно, что остатки глутаминовой кислоты (Glu35) и аспарагиновой кислоты (Asp52) критичны для функционирования лизоцима - они же и взаимодействуют с лигандом. В качестве остатка для мутагенеза был выбран Asp52 и визуализирован вместе с лигандом

In [3]:
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')
Out[3]:

Заменим аспартат 52 на тирозин с помощью функции Wizard->Mutagenesis и визуализируем

In [4]:
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()
Selected!
 Mutagenesis: 7 rotamers loaded.
 Mutagenesis: 4 rotamers loaded.
In [5]:
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')
Out[5]:

На следующем этапе визуализируем оба белка - нативный и мутантный

In [6]:
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')
Out[6]:

Создадим видео, в котором оба белка будут совмещены

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

Присоединение флуоресцентной метки TAMRA

С помощью команды fuse присоединим флурофор TAMRA через сложноэфирную связь к лизоциму. Для присоединения необходимо выбрать аминокислотный остаток, который бы содержал гидроксильную группу, доступную для образования связи (должна быть экспонированана поверхность белка) - например, серин или тирозин. В данном случае был выбран серин 81 и визуализирован результат

In [9]:
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
''')
In [10]:
cmd.png('tamra.png')
time.sleep(3)
Image(filename='tamra.png')
Out[10]:

Построение B-DNA

Загрузим структуру B-формы ДНК и получим из нее пары нуклеотидов и их матрицу превращения при совмещении одной пары нуклеотидов с последующей. Затем размножим эту пару и применим к ней матрицу превращения

In [5]:
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')
In [6]:
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')
Out[6]:

Построение поли-аланиновой спирали

Построим поли-аланиновую альфа-спираль длиной 100 аминокислот. Приемлимые значения торсионных углов для поли-аланиновой альфа-спирали можно взять из карты Рамачандра для аланина

In [39]:
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)
In [44]:
cmd.zoom('center', '25')
cmd.unpick()
cmd.png('alachain.png')
time.sleep(2)
Image(filename='alachain.png')
Out[44]:
In [ ]: