Работа с Pymol

Импортируем необходимые модули.

Фоново загружаем структуру белка, задаем его отрисовку, приближение.

In [1]:
import __main__
__main__.pymol_argv = [ 'pymol', '-x' ]

import pymol
pymol.finish_launching()
from pymol import cmd,stored

from IPython.display import Image
import time
In [72]:
cmd.do('''
fetch 1LMP, async=0
color palegreen
bg_color white
select s1, resn nag+ndg
util.cbaw s1 
set ray_trace_mode,  3
set ray_opaque_background, 0
ray 600,700''')
In [73]:
cmd.select('none') # это чтобы на картинке не было маркеров выделения
Out[73]:
0
In [74]:
Image(filename='pr2_1.png')
Out[74]:

Задание 1

В первом задании использовали возможности Sculpting (Wizard->Demo->Sculpting). С помощью мышки можно изменять структуру белка, которая после оптимизируется программой. Были изменены положения трех альфа-спиралей и одного бета слоя. Атомы отталкиваются при перекрывании, если clash-score становился слишком большим.

In [75]:
cmd.do('''
color palegreen
select s1, resn nag+ndg
util.cbaw s1 ''')
In [76]:
display(Image('pr2_1.png', width=500, height=300), Image('pr2_2.png', width=500, height=300))

Задание 2

Теперь найдем остаток, принимающий участие в связывании лиганда, проведем точечный мутагенез, ведущий к потере этого взаимодействия, а также оценим зону контакта с лигандом.

In [77]:
cmd.reinitialize()
cmd.do('''
reini
fetch 1LMP, async=0
color palegreen
bg_color white
select s1, resn nag+ndg
util.cbaw s1 
set ray_trace_mode,  3
set ray_opaque_background, 0
ray 600,700
remove solvent
extract ligand, het
as cartoon, 1lmp
set cartoon_transparency, 0.5
as sticks, ligand
center ligand
origin ligand
zoom ligand

util.cbas hetatm
select pocket, byres m. 1lmp  and (hetatm around 3.5)
show sticks, pocket
util.cbaw pocket
''')

cmd.orient('hetatm')
cmd.zoom('hetatm', '20')
 
cmd.do('''orient ligand
       rotate x, 90''')

cmd.zoom('hetatm', '5')
 
cmd.dist('hbonds', 'm. 1lmp and (not hetatm)', 'hetatm', '3.5', '2')

cmd.do('''
set label_color, black
label pocket and n. ca, "%s%s" % (resn, resi)
''')
cmd.zoom('hetatm', '3')
cmd.do('png pr2_3.png')
In [78]:
Image(filename='pr2_3.png')
Out[78]:

Всего нашлось 9 возможных водородных связей, имеющих длину до 3.5 ангстрем. Это остатки 35, 46, 52, 59, 63, 101, 103, 107, 109

In [83]:
cmd.reinitialize()

cmd.do('''
reini
fetch 1LMP, async=0
color palegreen
bg_color white
select s1, resn nag+ndg
util.cbaw s1 
set ray_trace_mode,  3
set ray_opaque_background, 0
ray 600,700
remove solvent
extract ligand, het
as cartoon, 1lmp
set cartoon_transparency, 0.5
as sticks, ligand
center ligand
origin ligand
zoom ligand

sele ligand, resn NAG+NDG
sele cont, ligand around 3.5
show surface, cont
distance h, ligand, cont, 3.5, 2
''')
cmd.do('''orient ligand
       rotate x, 90''')


cmd.do('png pr2_4.png')
In [84]:
Image(filename='pr2_4.png')
Out[84]:
In [85]:
import time
cmd.do('''set auto_sculpt, on
set sculpting, on
sculpt_activate all''')

time.sleep(30)

cmd.do('set sculpting, off')

cmd.do('png pr2_5.png')

display(Image('pr2_5.png'))

Из статьи https://doi.org/10.1107/S0907444995005105 видно, что Asp 103 важен для связывания лиганда. Заменим его на глицин.

In [86]:
cmd.wizard('mutagenesis')
cmd.refresh_wizard()
cmd.get_wizard().do_select('resi 103')
cmd.get_wizard().set_mode('GLY')
cmd.refresh_wizard()
cmd.get_wizard().apply()
cmd.set_wizard()
In [95]:
import time
cmd.do('''set auto_sculpt, on
set sculpting, on
sculpt_activate all''')

time.sleep(30)

cmd.do('set sculpting, off')
In [94]:
cmd.do('''orient ligand
       rotate x, 60''')

cmd.do('png pr2_6.png')

display(Image('pr2_6.png'))

Видно, что водородные связи растянулись, связывание пропало.

Задание 3

Сделаем видео

In [218]:
cmd.reinitialize()
In [219]:
cmd.reinitialize()
cmd.do('''
fetch 1LMP, mutant
''')
cmd.wizard('mutagenesis')
cmd.refresh_wizard()
cmd.get_wizard().do_select('resi 103')
cmd.get_wizard().set_mode('GLY')
cmd.refresh_wizard()
cmd.get_wizard().apply()
cmd.set_wizard()



cmd.do('''
fetch 1LMP, native_protein
color marine, native_protein
color red, mutant
remove solvent
as sticks, mutant
as sticks, native_protein

color yellow, resi 103 and native_protein
color purple, resi 103 and mutant
''')



cmd.util.cbag("native_protein and mutant")
cmd.translate("[-60, 0, 0]", "native_protein")
cmd.center('native_protein + mutant')
cmd.zoom('center', '40')


cmd.do('''
bg_color white
set ray_trace_mode,3
set ray_opaque_background, 0
ray 1500,700''')

cmd.png('pr2_7.png')
time.sleep(3)
Image(filename='pr2_7.png')
Out[219]:
In [220]:
cmd.do('''set matrix_mode, 1
set movie_panel, 1
set cache_frames, 1
''')

cmd.bg_color("white")

cmd.mset('1 x480')

cmd.frame('1')
cmd.mview('store')
cmd.mview('store', object='native_protein')

cmd.frame('50')
cmd.mview('store') 
cmd.translate('[60, 0, 0]', object='native_protein')
cmd.mview('store', object='native_protein') 

cmd.frame('110')
cmd.center('mutant')
cmd.zoom('mutant')
cmd.mview('store', object='native_protein')
cmd.mview('store')

cmd.frame('200')
cmd.mview('store', object='native_protein')
cmd.center('mutant and resi 103')
cmd.zoom('mutant and resi 103')
cmd.mview('store')

cmd.frame('320')
cmd.mview('store', object='native_protein')
cmd.center('mutant and resi 103')
cmd.zoom('mutant and resi 103', "5")
cmd.turn('y', 120)
cmd.mview('store')


cmd.frame('480')
cmd.mview('store') 
cmd.translate('[-10, -30, 80]', object='native_protein')
cmd.mview('store', object='native_protein') 



cmd.mview('reinterpolate')
cmd.mview('reinterpolate', object='native_protein')
In [222]:
import imageio
import os

cmd.mstop()
dirpath = './'
cmd.mpng(dirpath, mode=1, width=1920//4, height=1080//4)

while not os.path.exists('./0480.png'):
    time.sleep(0.1)
with imageio.get_writer('movie.gif', mode='I', fps=30) as writer:
    for x in range(0, 480):
        filename = os.path.join(dirpath, f'{x+1:04}.png')
        image = imageio.imread(filename)
        writer.append_data(image)
In [223]:
from IPython.display import Image

display(Image(filename='movie.gif', format='png'))

Исходный белок синий, мутантный - красный. Желтым показан нормальный остаток, розовым - мутантный.

Задание 4

К исходному белку через сложноэфирную связь была присоединена флуоресцентная метка TAMRA.

In [2]:
import urllib.request

Скачаем метку

In [19]:
file_name = 'tamra.sdf'
url = 'https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/2762604/record/SDF/?response_type=save&record_type=3d'
urllib.request.urlretrieve(url, file_name)
Out[19]:
('tamra.sdf', <http.client.HTTPMessage at 0x7f01d98ce0f0>)

Пришьем к какому-нибудь остатке серина на поверхности. Методом пристального взгляда был выбран Ser 81

In [17]:
cmd.do('''
reini
fetch 1LMP, async=0
color palegreen
bg_color white
select s1, resn nag+ndg
util.cbaw s1 
set ray_trace_mode,  3
set ray_opaque_background, 0
ray 600,700
remove solvent
extract ligand, het
as cartoon, 1lmp
set cartoon_transparency, 0.5
as sticks, ligand
center ligand
origin ligand
zoom ligand

load tamra.sdf, tamra
remove tamra and id 54
show sticks, resi 81
remove resi 81 and name OG1
fuse tamra and donor, resi 81 and name CB, mode=1

remove tamra
orient resi 81
turn y, -150
unpick


''')

import time
cmd.do('''set auto_sculpt, on
set sculpting, on
sculpt_activate all''')

time.sleep(30)

cmd.do('set sculpting, off')
In [18]:
cmd.png('pr2_8.png')
time.sleep(3)
display(Image('pr2_8.png'))

Задание 5

Построили аланиновую альфа спираль с заданными торсионными углами,чтобы не мучиться.

In [50]:
cmd.reinitialize()
cmd.bg_color('white')
phi = -60
psi = -45
cmd.fragment('ala')
acid = 'ala'
for i in range (2,101):
    cmd.edit("i. %i & n. C" % i)
    cmd.do('editor.attach_amino_acid("pk1", "%s")' % acid)
    cmd.set_dihedral("i. %i & n. N" % i, "i. %i & n. CA" % i,
                    "i. %i & n. C" % i, "i. %i & n.  N" % (i+1),
                     phi)
    cmd.set_dihedral("i. %i & n.  C" % i, "i. %i & n. N" % (i+1),
                     "i. %i & n. CA" % (i+1), "i. %i & n. C" % (i+1),
                     psi)
cmd.zoom()
cmd.unpick()
In [53]:
cmd.png('pr2_9.png')
time.sleep(2)
display(Image('pr2_9.png'))

Задание 6

Можно собрать цепь днк из существующей молекулы выбором матрицы сдвига.

In [100]:
cmd.reinitialize()
cmd.bg_color('white')
dna_length = 101
cmd.fetch('1bna', 'start')
cmd.show('spheres')
cmd.remove('resn HOH')
In [101]:
cmd.create('AT', 'c. B and i. 20 + c. A and i. 5') 
cmd.create('GC', 'c. B and i. 21 + c. A and i. 4') 

#Создаем матрицу 
cmd.create('1', 'AT')
cmd.pair_fit('AT', 'GC')
trans = cmd.get_object_matrix('AT')

#Наращиваем цепь ДНК
for i in range(2, dna_length):
    cmd.create('{0}'.format(i), '{0}'.format(i-1))
    cmd.transform_selection('{0}'.format(i), trans)
In [103]:
cmd.center('all')
cmd.zoom('all', '-50')
cmd.util.cbas('all')

cmd.png('pr2_10.png')
time.sleep(3)
display(Image('pr2_10.png'))

Альтернативный подход)

In [115]:
cmd.reinitialize()
cmd.bg_color('white')
cmd.do("fnab " + "ATGCA"*20)
cmd.show('spheres')


cmd.center('all')
cmd.zoom('all', '10')
cmd.util.cbas('all')
cmd.turn('x', 60)

cmd.png('pr2_11.png')
time.sleep(3)
display(Image('pr2_11.png'))
In [ ]:
 
In [ ]: