from IPython.display import Image
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''')
Открылось окно PyMol, вот что там видно
cmd.png('1cll_1.png')
Image(filename='1cll_1.png')
Произведем итерацию по остаткам:
stored.r = []
cmd.iterate('1cll and n. CA','stored.r.append(resi)')
import numpy as np
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.png('1cll_2.png')
Image(filename='1cll_2.png')
Сделаем упражнение с 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')
Действительно, в окне PyMol теперь можно посмотреть movie
cmd.do('delete 1cll')
Загрузим структуру 1LMP
cmd.do('''
fetch 1LMP, async=0
as lines, n. C+O+N+CA
zoom i. 4+5
mset 1 x1000
mview store''')
cmd.do('bg_color white; select all; hide all; show cartoon; orient 1LMP; color forest')
Image(filename='1lmp_1.png')
Оценим возможности Sculpting - вручную подвигаем разные части белка:
Image(filename='1lmp_2.png')
Теперь обратим внимание, что там вообще-то еще есть лиганд, он покрашен розовым
Image(filename='1lmp_4.png')
Посмотрим на контакты, которые лиганд может потенциально образовать с белком
Image(filename='1lmp_5.png')
Аминокислотой, замена которой может привести к потере связывания лиганда, кажется (помимо прочих) ASP52. Можно попробовать заменить ее, например, на фенилаланин.
Image(filename='1lmp_6.png')
Видим, что замена привела во-первых к потере потенциальной связи, но также и скорее всего поменяется положение лиганда.
После применения sculpting получим следующее:
Image(filename='1lmp_7.png')
Теперь попробуем сделать фильм
cmd.do('hide sticks; show sticks, ligand or resi 52')
cmd.fetch('1lmp', 'real')
'real'
cmd.do('remove resn hoh; show sticks, resi 52')
cmd.do('color forest, ligand and 1LMP and (name C*)')
cmd.do('set cartoon_transparency, 0.5')
cmd.do('color pink, real and (name C*)')
# Выравним белки
cmd.super('1LMP', 'real')
(0.0, 934, 3, 0.18583467602729797, 997, 629.159912109375, 129)
# Передвинем настоящий белок
cmd.translate('[-50, 0, 0]', 'real')
cmd.center('1LMP or real')
cmd.zoom('1LMP or real')
cmd.mset('1 x300')
cmd.frame('1')
cmd.mview('store')
cmd.mview('store', object='real')
cmd.frame('100')
cmd.mview('store')
cmd.translate('[50, 0, 0]', object='real')
cmd.mview('store', object='real')
cmd.frame('200')
cmd.center('real')
cmd.zoom('real')
cmd.mview('store', object='real')
cmd.mview('store')
cmd.frame('200')
cmd.mview('store', object='real')
cmd.center('resi 52')
cmd.zoom('resi 52')
cmd.mview('store')
cmd.frame('500')
cmd.mview('store', object='real')
cmd.center('1LMP and resi 52')
cmd.zoom('1LMP and resi 52')
cmd.turn('y', -120)
cmd.mview('store')
import imageio
with imageio.get_writer('1lmp_movie.gif', mode='I', fps=30) as writer:
for i in range(300):
writer.append_data(imageio.imread(f'./movie/class1_movie{i + 1:04}.png'))
display(Image('1lmp_movie.gif', format='png'))