Первый практикум (делаем мувик)

1. Открываем пимоль из Jupyter Notebook

In [1]:
from pymol import cmd, stored
import numpy as np
import pymol
import __main__
__main__.pymol_argv = ['pymol', '-x']

pymol.finish_launching()

2. Подготавливаем структуру

Загружаем pdb файл, выбираем отображение, сохраняем интересные нам атомы (C-альфа) в список

In [2]:
cmd.do('''
reini
fetch 1cll, async=0
as cartoon, all
''')

stored.r = []
cmd.iterate('1cll and n. CA and backbone', 'stored.r.append(resi)')
length = len(stored.r)

3. Красим структуру по номеру остатка (циан --> магента)

In [3]:
colors = np.linspace(1, 0, length)
for k, i in enumerate(stored.r):
    cmd.set_color(f'col{k}', [colors[-k-1], colors[k], 1])
    cmd.set('cartoon_color', f'col{k}', f'resi {i}')

4. Создаем мувик

Мы проходим по всем (i, i + 7) парам С-альфа атомов и фокусируемся на них, после чего сохраняем кадр.

In [4]:
numframes = 1 + 10 * (length - 9)
cmd.mview('reset')
cmd.mset(1, numframes)
for i in range(len(stored.r) - 8):
    cmd.frame((10*i)+1)
    selection = f'n. CA and resi {stored.r[i]}+{stored.r[i+7]}'
    cmd.orient(selection)
    cmd.zoom(selection, buffer=7)
    cmd.mview('store')
    print((10*i)+1)
cmd.frame(0)
cmd.mview('reinterpolate', power=1)
cmd.mplay()

5. Сохраняем мувик как гифку

Тут мы сохраняем покадрово наш мувик, а потом склеиваем кадры в гифку (каждый 4й кадр)

In [5]:
import imageio
import os

cmd.mstop()
dirpath = 'images/'
cmd.mpng(dirpath, mode=1, width=1920/4, height=1080/4)

with imageio.get_writer('movie.gif.png', format='gif', mode='I') as writer:   
    for x in range(0, numframes, 4):
        filename = os.path.join(dirpath, f'{x+1:04}.png')
        image = imageio.imread(filename)
        writer.append_data(image)

6. Смотрим на результат

In [6]:
from IPython.display import Image

display(Image(filename='movie.gif.png'))