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

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

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

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

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

cmd.do('''
fetch 1cll, async=0
as lines, n. C+O+N+CA
zoom i. 4+5
mset 1 x1000
mview store
clip slab, 50''')

Далее сохраняем в массиве stored.r идентификаторы остатков. Переопределяем цвета.

In [2]:
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) # массив значений от 1 до 0.5 длины массива stored.r


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 %s' %i)
cmd.show_as('cartoon','all')
In [3]:
from IPython.display import display,Image 
import time
cmd.png('prak1_1.png')
time.sleep(2)
display(Image(filename='prak1_1.png'))
In [4]:
cmd.zoom()
cmd.png(filename='prak1_2.png',width='10cm',dpi=300,ray=1)
display(Image(filename='prak1_2.png'))

Создаем анимацию, в которой мы двигаемся с i на i+7ой остатки каждый 10ый кадр.

In [6]:
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 [7]:
## Saving the frames
cmd.set('ray_trace_frames', '1')
cmd.set('ray_trace_mode', '1')
cmd.set('antialias', '1')
cmd.mpng('1LMP_mutation')

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

In [8]:
import io
import base64
from IPython.display import HTML

video = io.open('movie_1lmp.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]: