Работа с Pymol

In [25]:
from xmlrpclib import ServerProxy
from IPython.display import Image
import time
In [26]:
cmd = ServerProxy(uri="http://localhost:9123/RPC2")
In [27]:
cmd.cd('/Users/aleksandrabezmenova/Documents/fbb/term8/Golovin/Pr2')
cmd.bg_color('white')
In [28]:
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')

Загрузим структуру лизоцима в комплексе с олигосахаридом.

In [11]:
cmd.delete('all')
load_str('1lmp.pdb','1lmp','g')
In [7]:
cmd.select('ligand','1lmp and r. nag+ndg')
cmd.show('sticks','ligand')

focus('1lmp')
MakeImage()
Image(ImPath)
Out[7]:

Внесение мутаций в структуру белка

Выберем остаток аспартата 103:

In [8]:
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)
Out[8]:

Заменим его на аланин.

In [10]:
# cmd.wizard('mutagenesis')
cmd.save('1lmp_mut.pdb')
In [11]:
cmd.delete('all')
cmd.load('1lmp_mut.pdb')
cmd.hide('nonbonded')
In [12]:
cmd.select('ligand','1lmp and r. nag+ndg')
cmd.select('ala','1lmp_mut and i. 103')
cmd.show('sticks','ligand or ala')
In [13]:
cmd.select('both','ala or ligand')
focus('both')
cmd.do('util.cbac')
MakeImage()
Image(ImPath)
Out[13]:

Создание анимации

Загрузим обе структуры, покрасим в разные цвета, сместим cтруктуру с мутацией влево.

In [72]:
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')
In [73]:
cmd.translate('[-50, 0, 0]', '1lmp_mut')
focus('all')
In [45]:
MakeImage()
Image(ImPath)
Out[45]:

Анимация: совместим структуры, приблизим место мутации, покрутим структуру.

In [74]:
cmd.hide('sticks','context or asp')
cmd.show('lines','context or asp')
In [75]:
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')
In [76]:
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
In [2]:
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)
Out[2]:

У меня не получается сделать так, чтобы таким образом видео проигрывалось в Google Chrome (проиграывается в Safari), поэтому видео на YouTube:

In [10]:
from IPython.display import YouTubeVideo
YouTubeVideo('S2Ykl6W3isw')
Out[10]:
In [12]:
cmd.mclear()
cmd.mdelete('360', '1')

Присоединение флуоресцентной метки к белку

Загрузим структуру флуоресцентной метки TAMRA.

In [20]:
cmd.delete('all')
load_str('tamra.sdf','tamra','y')
In [14]:
MakeImage()
Image(ImPath)
Out[14]:

Выберем остаток серина 81, к которому будем присоединять метку фосфодиэфирной связью.

In [21]:
load_str('1lmp.pdb','1lmp','g')
In [22]:
cmd.select('ser', '1lmp and i. 81')
cmd.show('sticks', 'ser')
In [17]:
MakeImage()
Image(ImPath)
Out[17]:
In [18]:
focus('ser')
MakeImage()
Image(ImPath)
Out[18]:

Присоединим метку к серину с помощью fuse.

In [23]:
cmd.select('serO','ser and n. OG')
# select tamraC (in -COOH group) using CTRL/right_click
cmd.select('tamraC','pk1')
Out[23]:
25
In [24]:
cmd.fuse('serO','tamraC')
# torsion 15
# select and extract TAMRA oxigen using CTRL/right_click
In [25]:
MakeImage()
Image(ImPath)
Out[25]:

Построение структуры кубана

Созданим файл с SMILES аннотацией кубана и построим пространственную структуру с помощью программы obgen:

$ echo C12C3C4C1C5C2C3C45 > cubane.smi
$ obgen cubane.smi > cubane.mol

Загрузим получившуюся структуру в Pymol.

In [34]:
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')
In [35]:
MakeImage()
Image(ImPath)
Out[35]:

Построение полиаланиновой α-спирали

Торсионные угла, характерные для аланина, можно узнать из карты Рамачандрана:

In [2]:
Image(url='http://www.ebi.ac.uk/thornton-srv/databases/pdbsum/templates/gif/pplot02.gif')
Out[2]:

Примем ϕ=−60 и ψ=-45.

Соберем 100 аланинов в полипептидную цепь:

In [29]:
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")')
In [30]:
cmd.show('sticks','all')
MakeImage()
Image(ImPath)
Out[30]:
In [31]:
MakeImage()
Image(ImPath)
Out[31]:

Теперь изменим торсионные углы на правильные:

In [35]:
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')
In [36]:
MakeImage()
Image(ImPath)
Out[36]:
In [37]:
MakeImage()
Image(ImPath)
Out[37]:
In [39]:
MakeImage()
Image(ImPath)
Out[39]:

Просто красивая картинка:

In [38]:
MakeImage()
Image(ImPath)
Out[38]: