Подключимся к Pymol из Jupyter:
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''')
import numpy as np
from IPython.display import Image
Что сделал код: выгрузил структуру с PDB ID 1CLL, отобразил структуру в виде линий, показал только остовные атомы, камера приблизилась с остаткам 4,5. Команда mset создала фильм из 1000 фреймов и 1 состояния, команда mview сохранила точку обзора.
cmd.png('C:/Users/Nastya/Desktop/mm/1.png')
Image(filename='C:/Users/Nastya/Desktop/mm/1.png')
Сделаем итерацию по остаткам: создаем массив, в него добавляем ID аминокислотных остатков
stored.r = []
cmd.iterate('1cll and n. CA','stored.r.append(resi)')
152
В length записываем длину массива stored.r, в colors - значения от 1 до 0.5 с равным шагом, получим массив длины length. Итерируем по массиву stored.r, создаем цвета со значениями-индексами, присваиваем каждому остатку свой цвет.
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))
Отображаем все в cartoon
cmd.show_as('cartoon','all')
cmd.png('C:/Users/Nastya/Desktop/mm/2.png')
Image(filename='C:/Users/Nastya/Desktop/mm/2.png')
Упражнение с movie:
итерируем по списку с индексами аминокислотных остатков,
cmd.frame переводит на 10*i+1 кадр
cmd.zoom приближает камеру на CA атомы i и i+7 остатков
cmd.mview сохраняет вид в качестве ключевого кадра
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')
cmd.reinitialize()