Шаг 1. Установим Pymol.
conda install -c schrodinger pymol
Импортируем некоторые штуки для удобства работы.
import numpy as np
from IPython.display import Image
Шаг 2. Запустим код. Что он делает? 1) Загружает структуру PDB: 1cll в виде линий. 2) "C+O+N+CA" - атомы, которые отображаются, т.е. это остовные атомы 3) Зум камеры на остатках 9 и 10. 4) Команда mset создаёт 1000 фреймов. 5) Команда mview store сохраняет точку обзора.
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. 9+10
mset 1 x1000
mview store''')
В результате работы скрипта получим изображение ниже.
cmd.png('pr1_view.png')
Image(filename='pr1_view.png')
Шаг 3. Проитерируемся по остаткам, создадим цвета со значениями-индексами и присвоим каждому остатку свой цвет. Покажем всю структуру в виде Cartoon.
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')
cmd.do('''
orient
zoom center''')
cmd.png('pr1_iteration.png')
Image(filename='pr1_iteration.png')
Шаг 4. Упраженение с movie. Сделаем гифку!
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')
!mkdir task1
cmd.frame(0)
cmd.mpng('task1/', mode=1, width=360, height=360)
import imageio
import os
with imageio.get_writer('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)
Image(filename='movie.gif.png')