Практикум 1. Знакомство с Pymol

In [1]:
import __main__

__main__.pymol_argv = [ 'pymol', '-x' ]

import pymol
 
pymol.finish_launching()
 
from pymol import cmd
In [2]:
from IPython.display import Image

Покажем остатки 4 и 5 структуры 1cll

In [80]:
cmd.do('''
reinitialize
fetch 1cll, async=0
as lines, n. C+O+N+CA
zoom i. 4+5
mset 1 x1000
mview store''')
In [81]:
cmd.do('''
ray
png pic1.png''')
Image(filename='pic1.png')
Out[81]:

Теперь покрасим градиентно 1сll и покажем в виде cartoon

In [82]:
from pymol import stored
In [83]:
stored.r = [] 
cmd.iterate('1cll and n. CA','stored.r.append(resi)')


import numpy as np

length = len(stored.r)
colors = np.linspace(1,0.5, length)
for k,i in enumerate(stored.r):
    cmd.set_color('col%d' %k, [colors[k],0.5,0.75])
    cmd.set('cartoon_color','col%d' % k ,'resi %d' % int(i))
cmd.show_as('cartoon','all')
cmd.orient()
In [84]:
cmd.do('''
ray
png pic2.png''')
Image(filename='pic2.png')
Out[84]:

Сделаем мультик

In [85]:
for i in range(length):
    cmd.frame((10*i)+1)
    cmd.zoom( 'n. CA and i. %d+%d' % (i,i+7))
    cmd.mview('store')
In [86]:
cmd.delete('all')

Практикум 2. Работа с Pymol

Sculpting

In [87]:
cmd.reinitialize()
cmd.fetch('1lmp')
Out[87]:
'1lmp'
In [88]:
cmd.do('''
util.cbag
ray
png pic3.png''')

Продемонстрируем sculpting. Изначальное положение цепи:

In [47]:
Image(filename='pic3.png')
Out[47]:

После sculpting:

In [48]:
cmd.do('''
ray
png pic4.png''')
Image(filename='pic4.png')
Out[48]:

Mutagenesis

Представим окружение лиганда в радиусе 5 ангстрем от него

In [90]:
cmd.do('''
reinitialize
bg_color white
fetch 1lmp
remove solvent
select ligand, resn NAG or resn NDG
util.cbag
util.cbap ligand
select env, (byres all within 5 of ligand) & !ligand
show_as sticks, 1lmp
set_bond stick_radius, 0.09, 1lmp
set_bond stick_radius, 0.15, env
set stick_transparency, 0.7, !(env or ligand)
orient env or ligand
ray
png pic5.png
''')
Image(filename='pic5.png')
Out[90]:

Есть разные аминокислоты, которые, как по мне, образуют связи с лигандом. Например, атомы кислородов боковой цепи ASP52 могут делить водородную связь с гидроксильной группой NDG:

In [93]:
cmd.do('''
select asp52, resi 52 & c. A
set stick_transparency, 0.0, 1lmp
set stick_transparency, 0.7, !(ligand + asp52)
set_bond stick_radius, 0.09, env & !(asp52)
orient asp52 + (resn NDG)
dist hbond1, ligand & NDG`1/O1, asp52 & name OD1, mode=0
dist hbond2, ligand & NDG`1/O1, asp52 & name OD2, mode=0
ray
png pic6.png
''')
Image(filename='pic6.png')
Out[93]:
In [94]:
cmd.do('''
delete hbond1 + hbond2
wizard mutagenesis
refresh_wizard
python
cmd.get_wizard().do_select("resi 52")
cmd.get_wizard().set_mode("PHE")
cmd.get_wizard().apply()
cmd.set_wizard()
python end
select phe52, resi 52 & c. A
set_bond stick_radius, 0.09, resi 51-53
set_bond stick_radius, 0.15, resi 52
orient phe52 + (resn NDG)
ray
png pic7.png
''')
Image(filename='pic7.png')
Out[94]:

Мультик

In [95]:
cmd.do('''
reinitialize
bg_color white
fetch 1lmp, mut
wizard mutagenesis
refresh_wizard
python
cmd.get_wizard().do_select("resi 52")
cmd.get_wizard().set_mode("PHE")
cmd.get_wizard().apply()
cmd.set_wizard()
python end
fetch 1lmp, wt
show_as cartoon
util.cbaw wt
util.cbag mut
show_as stick, resi 52
super wt, mut
set cartoon_transparency, 0.7
''')
In [96]:
cmd.translate([-30, 0, 0], object='mut')
In [97]:
cmd.do('''
mset 1 x200

frame 1
translate [-30, 0, 0], object=mut
mview store, object=mut         
mview store, object=wt

frame 50
translate [30, 0, 0], object=mut
mview store, object=mut         
mview store, object=wt

mview interpolate, object=wt
mview interpolate, object=mut

frame 100
orient resi 52
mview store
mview store, object=mut         
mview store, object=wt

frame 150                        
orient all
mview store
mview store, object=mut         
mview store, object=wt

mplay
''')
In [ ]:
import imageio

filenames = sorted(os.listdir('../../mv/'))[1:]
with imageio.get_writer('movie.gif', mode='I', fps=10) as writer:   
    for filename in filenames:
        filepath = os.path.join('../../mv', filename)
        image = imageio.imread(filepath)
        writer.append_data(image)
In [103]:
from IPython.display import HTML
HTML('<img src="mult.gif" width="750" align="center">')
Out[103]:

ТAMRA

Сложноэфирная связь возможна с аминокислотами, соддержащими гидроксильную группу, так как метка содержит две карбоксильные группы. Образуем связь с SER15:

In [299]:
cmd.do('''
reinitialize
bg_color white
fetch 1lmp
util.cbag
util.cbap resi 37
show_as stick, resi 37
remove solvent
load tamra.sdf
orient resi 37
remove resi 37 & name OG
fuse tamra & donor, resi 37 & name CB, mode=1
remove resi 37 & name H
remove tamra
torsion 30
zoom resi 37, 5
turn y, -50
unpick
ray
png pic8.png
''')
Image(filename='pic8.png')
Out[299]:

Полиаланиновая спираль

In [104]:
cmd.do('''
reinitialize
bg_color white
fragment ala
''')

for i in range(1, 101):
    cmd.do('''edit resi %i & name C
    editor.attach_amino_acid('pk1', 'ala')''' % i)
for i in range(1, 101):    
    cmd.do(f'''set_dihedral resi {i} & name C, resi {i+1} & name N, resi {i+1} & name CA, resi {i+1} & name  C, -57
    set_dihedral resi {i} & name N, resi {i} & name CA, resi {i} & name C, resi {i+1} & name N, -47
    ''')
In [105]:
cmd.do('''
hide all
show_as stick
orient
zoom
ray
png pic9.png
''')
Image(filename='pic9.png')
Out[105]:

B-DNA

В качестве основы для матрицы возьмем готовую структуру B-DNA - 4BNA.

In [106]:
cmd.do('''
reinitialize
bg_color white
fetch 1ZF0
show_as stick
remove solvent
''')
cmd.do('''create pair1, c. A & resi 3 + c. B & resi 18
create pair2, c. A & resi 2 + c. B & resi 19
create 1, pair1
create 2, pair2
pair_fit pair1, pair2
orient''')

transf = cmd.get_object_matrix("pair1")
for i in range(3, 121):
    cmd.create(str(i), str(i-1))
    cmd.transform_selection(str(i), transf)
for i in range(1, 121):
    cmd.alter(str(i), "resi=%s" % str(i))     
    
cmd.do('''delete 1ZF0
create bdna, all
show_as cartoon
orient
''')    
     
for i in range(120):  
    cmd.delete(str(i+1))
    cmd.bond("bdna & resi %s & c. A & name O3'" % str(i+1), "bdna & resi %s & c. A & name P"  % str(i+2))
    cmd.bond("bdna & resi %s & c. B & name O3'" % str(i+2), "bdna & resi %s & c. B & name P"  % str(i+1))

cmd.select("rrr", "resi 1-20") 
cmd.remove("rrr")
cmd.ray()
cmd.do('png pic10.png')
Image(filename='pic10.png')
Out[106]: