from xmlrpclib import ServerProxy
from IPython.display import Image
import time
cmd = ServerProxy(uri="http://localhost:9123/RPC2")
cmd.cd('/Users/aleksandrabezmenova/Documents/fbb/term8/Golovin/Pr2')
cmd.bg_color('white')
ImPath = '/tmp/pymolpng.png'
def MakeImage():
cmd.ray(500,400)
cmd.png(ImPath)
time.sleep(2)
def focus(sele):
cmd.center(sele)
cmd.zoom(sele,'1')
def load_str(f, name, color):
cmd.load(f)
cmd.do('util.cba%c %s' % (color,name))
cmd.hide('nonbonded')
Загрузим структуру лизоцима в комплексе с олигосахаридом.
cmd.delete('all')
load_str('1lmp.pdb','1lmp','g')
cmd.select('ligand','1lmp and r. nag+ndg')
cmd.show('sticks','ligand')
focus('1lmp')
MakeImage()
Image(ImPath)
Выберем остаток аспартата 103:
cmd.select('mutant','1lmp and i. 103')
cmd.show('sticks','mutant')
cmd.distance('hbond','ligand','mutant','3.5','2')
cmd.color('lightorange','hbond')
cmd.select('both','mutant or ligand')
focus('both')
MakeImage()
Image(ImPath)
Заменим его на аланин.
# cmd.wizard('mutagenesis')
cmd.save('1lmp_mut.pdb')
cmd.delete('all')
cmd.load('1lmp_mut.pdb')
cmd.hide('nonbonded')
cmd.select('ligand','1lmp and r. nag+ndg')
cmd.select('ala','1lmp_mut and i. 103')
cmd.show('sticks','ligand or ala')
cmd.select('both','ala or ligand')
focus('both')
cmd.do('util.cbac')
MakeImage()
Image(ImPath)
Загрузим обе структуры, покрасим в разные цвета, сместим cтруктуру с мутацией влево.
cmd.delete('all')
load_str('1lmp.pdb','1lmp','g')
load_str('1lmp_mut.pdb','1lmp_mut','c')
cmd.hide('everything','all')
cmd.show('cartoon','all')
cmd.select('ligand','1lmp and r. nag+ndg')
cmd.select('ligand_mut','1lmp_mut and r. nag+ndg')
cmd.select('asp','1lmp and i. 103')
cmd.select('ala','1lmp_mut and i. 103')
cmd.select('context','i. 102 or i. 104')
cmd.color('grey60','ligand*')
cmd.color('red','asp')
cmd.color('yellow','ala')
cmd.hide('cartoon','asp or ala or ligand* or context')
cmd.show('sticks','asp or ala or ligand* or context')
cmd.translate('[-50, 0, 0]', '1lmp_mut')
focus('all')
MakeImage()
Image(ImPath)
Анимация: совместим структуры, приблизим место мутации, покрутим структуру.
cmd.hide('sticks','context or asp')
cmd.show('lines','context or asp')
cmd.mset('1 x360')
cmd.frame('1')
cmd.mview('store')
cmd.do('mview store, object=1lmp')
cmd.frame('60')
cmd.do('translate [-25, 0, 0], object=1lmp')
cmd.do('translate [25, 0, 0], object=1lmp_mut')
cmd.do('mview store, object=1lmp')
cmd.frame('360')
cmd.do('mview store, object=1lmp')
cmd.frame('120')
focus('1lmp')
cmd.mview('store')
cmd.frame('180')
cmd.do('mview store, object=1lmp')
focus('asp')
cmd.zoom('asp','1')
cmd.do('util.mrock(180, 360, 360)')
cmd.mview('store')
cmd.frame('360')
focus('asp')
cmd.zoom('asp','1')
cmd.mview('store')
cmd.do('mview interpolate, object=1lmp')
cmd.mview('reinterpolate')
cmd.set('ray_trace_frames', '1')
cmd.set('antialias', '1')
cmd.mpng('1lmp_mutagenesis')
Создадим видео из получившегося набора изображений:
mencoder mf://*.png -mf w=800:h=600:fps=25:type=png -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o 1lmp_mutagenesis.avi
ffmpeg -i 1lmp_mutagenesis.avi -acodec libfaac -b:a 128k -vcodec mpeg4 -b:v 1200k -flags +aic+mv4 1lmp_mutagenesis.mp4
from IPython.display import HTML
from base64 import b64encode
video = open('1lmp_mutagenesis.mp4', "rb").read()
video_encoded = b64encode(video)
video_tag = '<video controls alt="test" src="data:video/x-m4v;base64,{0}">'.format(video_encoded)
HTML(data=video_tag)
У меня не получается сделать так, чтобы таким образом видео проигрывалось в Google Chrome (проиграывается в Safari), поэтому видео на YouTube:
from IPython.display import YouTubeVideo
YouTubeVideo('S2Ykl6W3isw')
cmd.mclear()
cmd.mdelete('360', '1')
Загрузим структуру флуоресцентной метки TAMRA.
cmd.delete('all')
load_str('tamra.sdf','tamra','y')
MakeImage()
Image(ImPath)
Выберем остаток серина 81, к которому будем присоединять метку фосфодиэфирной связью.
load_str('1lmp.pdb','1lmp','g')
cmd.select('ser', '1lmp and i. 81')
cmd.show('sticks', 'ser')
MakeImage()
Image(ImPath)
focus('ser')
MakeImage()
Image(ImPath)
Присоединим метку к серину с помощью fuse.
cmd.select('serO','ser and n. OG')
# select tamraC (in -COOH group) using CTRL/right_click
cmd.select('tamraC','pk1')
cmd.fuse('serO','tamraC')
# torsion 15
# select and extract TAMRA oxigen using CTRL/right_click
MakeImage()
Image(ImPath)
Созданим файл с SMILES аннотацией кубана и построим пространственную структуру с помощью программы obgen:
$ echo C12C3C4C1C5C2C3C45 > cubane.smi
$ obgen cubane.smi > cubane.mol
Загрузим получившуюся структуру в Pymol.
cmd.delete('all')
load_str('cubane.mol','cubane','g')
focus('cubane')
cmd.set('sphere_scale','0.15')
cmd.show('sphere','cubane')
cmd.set('stick_radius','0.1')
cmd.show('sticks','cubane')
MakeImage()
Image(ImPath)
Торсионные угла, характерные для аланина, можно узнать из карты Рамачандрана:
Image(url='http://www.ebi.ac.uk/thornton-srv/databases/pdbsum/templates/gif/pplot02.gif')
Примем ϕ=−60 и ψ=-45.
Соберем 100 аланинов в полипептидную цепь:
cmd.reinitialize()
cmd.bg_color('white')
cmd.fragment('ALA')
for i in range(2,101):
cmd.do('edit i. %i and n. C' % i)
cmd.do('editor.attach_amino_acid("pk1","ALA")')
time.sleep(1)
focus('all')
cmd.do('util.cbag("all")')
cmd.show('sticks','all')
MakeImage()
Image(ImPath)
MakeImage()
Image(ImPath)
Теперь изменим торсионные углы на правильные:
phi = '-60'
psi = '-45'
for i in range(2,100):
cmd.set_dihedral("i. %i and n. N" % i,
"i. %i and n. CA" % i,
"i. %i and n. C" % i,
"i. %i and n. N" % (i+1),
phi)
cmd.set_dihedral("i. %i & n. C" % i,
"i. %i & n. N" % (i+1),
"i. %i & n. CA" % (i+1),
"i. %i & n. C" % (i+1),
psi)
focus('all')
MakeImage()
Image(ImPath)
MakeImage()
Image(ImPath)
MakeImage()
Image(ImPath)
Просто красивая картинка:
MakeImage()
Image(ImPath)