#импортируем PyMol и необходимые модули
import __main__
__main__.pymol_argv = [ 'pymol', '-x' ]
from IPython.display import Image, display
import time
#запускаем Pymol
import pymol
pymol.finish_launching()
from pymol import cmd,stored,wizard
import numpy as np
#загружаем структуру, задаем вид. Приближаем остатоки 4 и 5, меняем цвет фона, удаляем растворитель.
#также создаем набор кадров 1000 штук, сохраняем вид
cmd.do('''
fetch 1lmp, async=0
as lines, n. C+O+N+CA
zoom i. 4+5
bg_color white
remove solvent
color pink
mset 1 x1000
mview store
''')
Исследование итерации по остаткам.
#создаем список stored.r, в котором идентификаторы всех Ca-атомов
stored.r = []
cmd.iterate('1lmp and n. CA','stored.r.append(resi)')
#получаем одномерный массив, где есть значения от 1 до 0.5 в количестве элементов списка stored.r
length = len(stored.r)
colors = np.linspace(1,0.5, length)
#создаем цвета со значениями 0.5, 0.75 и присвоим каждому остатку свой цвет
for k,i in enumerate([int(i) for i in stored.r]):
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')
cmd.do('orient')
cmd.png('structure.png', '1920', '1080', ray=1)
Image('structure.png')
Упраженение с movie.
#создаем анимацию. в каждом десятом кадре картинка
#приближается к i-тому и i+7 остатку
import imageio
import os
for i in range(length):
cmd.frame((10*i)+1)
cmd.zoom( 'n. CA and i. %d+%d' % (i,i+7))
cmd.mview('store')
cmd.mplay()
cmd.mstop()
dirpath = os.getcwd()
cmd.mpng(dirpath, mode=1, width=1920/4, height=1080/4)
#запишем видео
with imageio.get_writer('movie1.gif.png', format='gif', mode='I') as writer:
for x in range(0, 1000, 4):
filename = os.path.join(dirpath, f'{x+1:04}.png')
image = imageio.imread(filename)
writer.append_data(image)
#посмотрим видео
from IPython.display import Image
display(Image(filename='movie1.gif.png'))