Знакомство с Pymol

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

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

Movie

In [2]:
cmd.reinitialize()
cmd.do('''
fetch 1cll, async=0
bg_color white
as sticks, n. C+O+N+CA
zoom i. 4+5
mset 1 x200
# создали 200 frame'ов
mview store, 1
turn y, 180
mview store, 100
turn y, 180
# поворот камеры на 180 градусов от 1-го frame'а до 100-го frame'а
mplay
# возпроизведение видео
''')

Красим структуру по градиенту

In [3]:
import numpy as np
In [4]:
stored.r = [] 
cmd.iterate('1cll and n. CA','stored.r.append(resi)')

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])
    print([1,1,colors[k]])
    cmd.set('cartoon_color','col%d' % k ,'resi %d' % float(i))
cmd.show_as('cartoon','all')

Movie: проходим по цепи

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

Работа с Pymol

In [6]:
from IPython.display import display, Image

Исходная структура 1LMP

In [7]:
cmd.reinitialize()
cmd.do('''
fetch 1lmp
remove het or resn hoh
bg_color white
color zinc, all
set antialias, 2
set ray_trace_mode, 1
ray 2000
png 1_01.png
''')
In [8]:
Image('1_01.png', width=600, height=600)
Out[8]:

1

Wizard=>Demo=>Sculpting (вручную)

In [9]:
cmd.do('''
ray 2000
png 1_02.png
''')
In [10]:
Image('1_02.png', width=600, height=600)
Out[10]:

2

Wizard->Mutagenesis

In [11]:
cmd.reinitialize()
cmd.do('''
fetch 1lmp
remove resn hoh
bg_color white
color zinc, all
select lig1, resn NAG 
select lig2, resn NDG 
color salmon, lig*
select around, (1lmp within 5 of lig1) & !(lig1) 
select two_resi, resi 101 or resi 103
set ray_trace_mode, 1

''')

Здесь руками доделала немного

In [12]:
cmd.do('''
ray 2000
png 1_03.png
''')

Исходно:

In [13]:
Image('1_03.png', width=600, height=600)
Out[13]:

Остатки D101 и N103 были заменены на V

In [14]:
Image('1_04.png', width=600, height=600)
Out[14]:

3

Совмещение белков

In [ ]:
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('VAL')
cmd.refresh_wizard()
cmd.get_wizard().apply()
#cmd.set_wizard()
cmd.get_wizard().do_select('resi 101')
cmd.get_wizard().set_mode('VAL')
cmd.refresh_wizard()
cmd.get_wizard().apply()
cmd.set_wizard()



cmd.do('''
fetch 1LMP, native_protein
color zinc, native_protein
color red, mutant
remove solvent

as cartoon, not two_resi and not hetatm

color yellow, (resi 103 or resi 101) and native_protein
color purple, (resi 103 or resi 101) 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('1_05.png')
In [15]:
Image(filename='1_05.png')
Out[15]:
In [ ]:
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 [3]:
import os
import time
import imageio
In [ ]:
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 [4]:
from IPython.display import Image
In [16]:
display(Image(filename='movie.gif', format='png'))

4

Присоединяем флуоресцентную метку TAMRA к белку через сложноэфирную связь

In [2]:
import urllib.request
import time
In [5]:
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[5]:
('tamra.sdf', <http.client.HTTPMessage at 0x20c95b9feb0>)
In [8]:
cmd.do('''
reini
fetch 1LMP, async=0
color zinc
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


''')

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

time.sleep(30)

cmd.do('set sculpting, off')
cmd.png('1_06.png')
In [10]:
display(Image('1_06.png', width=600, height=600))

5

Построим полиаланиновую цепь длиной 100 а. о.

In [11]:
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()
cmd.png('1_07.png')
time.sleep(2)
In [12]:
display(Image('1_07.png', width=600, height=600))

6

Построим B-формы ДНК длиной 100 пар нуклеотидов

In [15]:
cmd.reinitialize()
cmd.bg_color('white')
dna_length = 101
cmd.fetch('1bna', 'start')
cmd.show('spheres')
cmd.remove('resn HOH')
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)
cmd.center('all')
cmd.zoom('all', '-50')
cmd.util.cbas('all')
In [17]:
cmd.png('1_08.png')
display(Image('1_08.png'))