Запустить PyMOL и импортировать его как модуль python

In [7]:
from IPython.display import HTML
import __main__
__main__.pymol_argv = [ 'pymol', '-x' ]

import pymol
pymol.finish_launching()
from pymol import cmd,stored

Инициализация модели:

  • загрузить модель 1cll
  • показать связи в ней в виде линий
  • приблизить изображение так, чтобы были видны остатки 4 и 5
  • сделать 1000 кадров, соответствующих текущему состоянию
  • сохранить текущий (0) кадр как ключевой
In [3]:
cmd.do('''
#set depth_cue, 0 
bg_color white
fetch 1cll, async=0
as lines, n. C+O+N+CA
zoom i. 4+5
mset 1 x1600
mview store
''')

Создать хранилище PyMOL, доступное из команды iterate (stored.r) -- пустой список. Пройти по всем CA атомам модели, для каждого сохранить в stored.r номер остатка (т.о. stored.r -- список всех номеров остатков)

In [4]:
stored.r = [] 
cmd.iterate('1cll and n. CA','stored.r.append(resi)')
Out[4]:
152

Создать массив colors: числа от 1 до 0.5 на одинаковом расстоянии, соответствующие остаткам модели. Каждому остатку установить цвет: соответствующее число из массива colors в красном канале, 0.5 и 0.75 в зеленом и синем каналах соответственно. Таким образом, с увеличением номера остатка цвет модели становится менее красным (меняется от синего к фиолетовому).

In [5]:
import numpy as np

length = len(stored.r)
colors = np.linspace(1,0.5, length)
print(colors)
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 %s' % i)
cmd.show_as('cartoon','all')

Создать кадры для фильма: для каждого номера остатка i от 1 до 100 создать в фильме опорный кадр, в котором изображение будет приближено к остаткам от i до i+7.

In [8]:
#cmd.clip('slab', 1000)
for i in range(length):
    cmd.frame((10*i)+1)
    cmd.zoom( 'n. CA and i. %d+%d' % (i,i+7))
    cmd.clip('near', 100)
    cmd.clip('far', -100)
    cmd.mview('store')   

Ниже вставлен полученный фильм: