Ведение в Pymol

In [1]:
import numpy as np
from IPython.display import Image

Активируем Pymol и загрузим модель.

In [2]:
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''')

Открылось окно Pymol. Нарисуем, что есть во viewport.

In [3]:
cmd.png('/tmp/first_view.png')
In [4]:
Image(filename='/tmp/first_view.png')
Out[4]:

Выполним задание 1: покрасим атомы, покажем в виде cartoon.

In [7]:
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' % int(i))
cmd.show_as('cartoon','all')
In [8]:
cmd.png('/tmp/first_view.png')
Image(filename='/tmp/first_view.png')
Out[8]:

Нарисуем мультик сохраним фреймы.

In [9]:
for i in range(len(stored.r)):
    cmd.frame((10*i)+1)
    cmd.zoom( 'n. CA and i. %d+%d' % (i,i+7))
    cmd.mview('store')
In [20]:
!mkdir task1
In [22]:
cmd.frame(0)
cmd.mpng('task1/', mode=1, width=480, height=360)

Соберём гифку из фреймов.

In [19]:
import imageio
import os
In [40]:
with imageio.get_writer('/tmp/movie.gif.png', format='gif', mode='I') as writer:
    for img in os.listdir('task1/')[::4]:
        filename = 'task1/' + img
        image = imageio.imread(filename)
        writer.append_data(image)
In [42]:
Image(filename='/tmp/movie.gif.png')
Out[42]: