Запуск Pymol из Jupyter Notebook

In [1]:
import sys
import __main__
__main__.pymol_argv = [ 'pymol', '-x' ]
In [2]:
import pymol
pymol.finish_launching()
from pymol import cmd,stored
In [4]:
#Прогрузка модели кальмодулина, отображение атомов и связей между ними линиями (водород не включен)
# приближение на 4 и 5 остаток и создание 100 фреймов видео

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

Исследование итерации по остаткам

In [5]:
#Проходимся по остову и добавляем номера остатков в список

stored.r = [] 
cmd.iterate('1cll and n. CA','stored.r.append(int(resi))')
Out[5]:
152
In [6]:
#Градиентная покраска
import numpy as np

length = len(stored.r)
colors = np.linspace(1,0.5, length)
for k,i in enumerate(stored.r):
    print(k)
    cmd.set_color('col%d' %k, [colors[k],0.5,0.75])
    cmd.set('cartoon_color','col%d' % k ,'resi %d' % i)
cmd.show_as('cartoon','all')
In [6]:
#Вывод изображения
cmd.zoom()
cmd.set('ray_trace_mode', 1)
cmd.png('pymol_pr1.png', '1000', '1000', ray=1)

import IPython
IPython.display.Image('pymol_pr1.png', retina=True)
Out[6]:

Упражнение с movie

In [8]:
#создаем кадры для фильма, где на каждый остаток будет свой кадр с увеличением на 7 остатков 
for i in range(length):
    cmd.frame((10*i)+1)
    cmd.zoom( 'n. CA and i. %d+%d' % (i,i+7))
    cmd.clip('near', 30)
    cmd.clip('far', -30)
    cmd.mview('store') 
In [9]:
#рендер и сохранение видео с небольшими косметическими изменениями
cmd.set("ray_trace_mode", 1)
cmd.set("ray_trace_color", "black")
cmd.movie.produce('movie.mp4', 'ray' , encoder="ffmpeg")
In [10]:
#вшивание видео в ноутбук
import io
import base64
from IPython.display import HTML

video = io.open('movie.mp4', 'rb').read()
encoded = base64.b64encode(video)
HTML(data='''<video alt="spiral_movie" controls>
                <source src="data:video/mp4;base64,{0}" type="video/mp4" />
             </video>'''.format(encoded.decode('ascii')))
Out[10]: