Занятие 1. Знакомство с PyMOL.

In [2]:
# запустить pymol
import __main__
__main__.pymol_argv = [ 'pymol', '-x' ]

import pymol
from pymol import cmd, stored
pymol.finish_launching()
In [56]:
# загрузить структуру 1PU0 (Cu,Zn-СОД) и отобразить остов цепи A линиями
cmd.do('''
fetch 1pu0, async=0
hide everything
select ch, chain A and 1pu0
as lines, ch and n. C+O+N+CA
deselect
center visible
mset 1 x1530''')
In [57]:
# создать кадры фильма, в котором мы двигаемся вдоль цепи белка 
# всего в цепи А 153 а.о., поэтому в фильме 1530 кадров
for i in range(153):
    cmd.frame(10 * i + 1)
    cmd.zoom('ch and i. %d+%d' % (i, i + 1))
    cmd.mview('store')
In [38]:
v = cmd.get_view()
cmd.set_view(v)
In [58]:
stored.r = [] 
cmd.iterate('ch and n. CA', 'stored.r.append(int(resi))')
Out[58]:
153
In [59]:
# раскрасить белок по ходу цепи 
# от yelloworange (параметры 1, 0.87, 0.37) до salmon (параметры 1, 0.6, 0.6)
import numpy as np

length = len(stored.r)

colors1 = np.linspace(0.87, 0.6, length)
colors2 = np.linspace(0.37, 0.6, length)

for k, i in enumerate(stored.r):
    cmd.set_color('col%d' % k, [1, colors1[k], colors2[k]])
    cmd.set('cartoon_color', 'col%d' % k ,'resi %d' % i)
cmd.show_as('cartoon','ch')
In [16]:
cmd.zoom('visible')  # поместить цепь по центру
cmd.rotate('y', 270)  # повернуть на 270 градусов (так картинка получается красивее)
In [22]:
# сохранить картинку как png 
cmd.set("ray_trace_mode", 3)
cmd.set("ray_trace_color", "black")
cmd.png("1pu0-1.png", width=800, height=800, ray=1)

caption

Рисунок 1. Структура Cu,Zn-СОД (1PU0), раскрашенная по ходу цепи от yelloworange до salmon.
In [62]:
# отобразить полученное видео 
import io
import base64
from IPython.display import HTML

video = io.open('1pu0.mp4', 'r+b').read()
encoded = base64.b64encode(video)
HTML(data='''<video width="500px" controls>
                <source src="data:video/mp4;base64,{0}" type="video/mp4"/>
             </video>'''.format(encoded.decode('ascii')))
Out[62]: