In [1587]:
import time
from xmlrpclib import ServerProxy
from IPython.display import Image
cmd = ServerProxy(uri="http://localhost:9123/RPC2")

defaultImage = '/tmp/pymolimg.png'
def prepareImage(width=300, height=300, sleep=2, filename=defaultImage):
    ## To save the rendered image
    cmd.ray(width, height)
    cmd.png('/tmp/pymolimg.png')
    time.sleep(sleep)
In [1575]:
#cmd.delete ('all')
cmd.bg_color('white')

Задание2.

Был выделен лиганд и полярные контакты между лигандом и белком. Для нахождения водородных связей была использована функция distance с параметром 2. Чтобы проверить, являются ли полученные контакты водородными связями, объект был приближен и сделаны надписи для кислорода и азота (что несколько излишне, так как по цвету можно определить атом). Все контакты действительно соответствуют водородным связям.

Предположительно, чем меньше расстояние между аминокислотным остатком и лигандом при реализации водородной связи, тем она сильнее и важнее. В нашем случае это остатки аспарагина и аспарагиновой кислоты (относится к отрицательно заряженным) в позициях 52 и 59. Также существенное значение в удержание лиганда в нужной позиции вносит аспарагин в позиции 101, т.к. поблизости нет контактов, связывающих лиганд с белком на столь малых расстояниях. Также возможно стэкинг-взаимодействие между тирозином 62 и правой частью лиганда (NAG).

In [1456]:
cmd.set('label_size', '-1.5')

cmd.fetch('1lmp')
cmd.select('ligand', 'resn nag+ndg')
cmd.show('sticks', 'ligand')
cmd.do('h_add')
cmd.select('b1','1lmp  within 3.5 of ligand')
cmd.do('label elem o and b1, "O"')
cmd.do('label elem n and b1, "N"')
cmd.distance('HB','ligand','all',3.2,2)
Out[1456]:
2.9150290489196777
In [1457]:
cmd.colour('paleyellow', '!ligand')
cmd.hide('label',"b1")
cmd.select('AmA','br. polymer w. 2.5 of "ligand"')
cmd.show('sticks', 'AmA')
In [823]:
prepareImage()
Image(defaultImage)
Out[823]:
In [1389]:
cmd.select('AmA','resi 52+59+101+62')
cmd.colour('green', 'AmA')
cmd.hide('label')
cmd.do('label /1lmp//A/TYR`62/H05, resn')
cmd.do('label /1lmp//A/ASP`52/O, resn')
cmd.do('label  /1lmp//A/ASN`59/C, resn')
cmd.do('label /1lmp//A/ASP`101/OD1, resn')
In [ ]:
 
In [825]:
prepareImage()
Image(defaultImage)
Out[825]:
In [831]:
cmd.show('surface','1lmp and !ligand')
cmd.colour('blue','ligand')
prepareImage()
Image(defaultImage)
Out[831]:
In [ ]:

Задание 3. Мутагенез. Сложно однозначно определить, какой аминокислотный остаток самый важный для связывания лиганда. Выберем для мутации ASP 101.

In [1513]:
#cmd.delete('all')
cmd.fetch('1lmp','mut')
cmd.hide('nonbonded')
cmd.show('sticks','resi 101')
In [923]:
prepareImage()
Image(defaultImage)
Out[923]:
In [1514]:
mut_res='resi 101'
In [1515]:
cmd.wizard("mutagenesis")
cmd.do("refresh_wizard")
cmd.do('cmd.get_wizard().do_select("%s")' % mut_res)
cmd.do('cmd.get_wizard().set_mode("GLY")')
cmd.do("refresh_wizard")
cmd.do("cmd.get_wizard().apply()")
cmd.do("cmd.set_wizard()")
In [1516]:
cmd.save( "/Users/anna/Downloads/mutt/mut.pdb", 'mut')
In [926]:
prepareImage()
Image(defaultImage)
Out[926]:

Задание 4. Анимация.

In [1577]:
cmd.delete ('all')
cmd.fetch('1lmp', 'a1')
Out[1577]:
'a1'
In [1578]:
cmd.load( "/Users/anna/Downloads/mutt/mut.pdb",'a2')
In [1579]:
# задаем внешние  параметры
cmd.select('ligand1', 'a1 and resn nag+ndg')
cmd.select('ligand2', 'a2 and resn nag+ndg')
cmd.colour('lightteal', 'a1')
cmd.colour('lightorange', 'a2')
cmd.show('sticks', 'ligand*')
cmd.colour('smudge', 'ligand*')
cmd.colour('gray','resi 101 and a1')
cmd.colour('deepsalmon','resi 101 and a2')
cmd.show('sticks', 'resi 101 and a2')
cmd.show('sticks', 'resi 101 and a1')
cmd.hide('nonbonded')
cmd.hide('dashes')
In [1580]:
cmd.super('a1', 'a2')
Out[1580]:
[0.0005252299015410244,
 992,
 2,
 0.002151754917576909,
 995,
 632.5599975585938,
 129]
In [1581]:
cmd.mset('1 x250')


cmd.frame('1')
cmd.do('translate [-25, 0, 0], object=a1')
cmd.do('translate [25, 0, 0], object=a2')
cmd.do('mview store')


cmd.frame('100')
cmd.do('translate [25, 0, 0], object=a1')
cmd.do('translate [-25, 0, 0], object=a2')
cmd.do('mview store')


cmd.frame('250')
cmd.select( 'mut','a2 and i. 101')
cmd.zoom('mut')
cmd.do('mview store, object=a1')
cmd.do('mview store, object=a2')
cmd.do('mview store')
cmd.do('mview reinterpolate')




cmd.mplay()
In [1582]:
# Сохраняем картинки
cmd.set('ray_trace_frames', '1')
cmd.set('ray_trace_mode', '1')
cmd.set('antialias', '1')
cmd.mpng('1LMP_mutation')
In [1593]:
def video(fname, mimetype):
    from IPython.display import HTML
    video_encoded = open(fname, "rb").read().encode("base64")
    video_tag = '<video controls alt="test" src="data:video/{0};base64,{1}">'.format(mimetype, video_encoded)
    return HTML(data=video_tag)
In [1595]:
video("/Users/anna/Downloads/12.mp4", "mp4")
Out[1595]:

Задание 5. Присоединение метки TAMRA. Это задание было выполнено через GUI c использованием соответствующих комманд (fuse, torsion - применялась несколько раз). Сложноэфирная связь образована между кислородом метки и углеродом боковой цепи серина, находящегося на поверхности белка.

In [1313]:
from IPython.display import Image 
Image("/Users/anna/pymol.png")
Out[1313]:

Задание 6. Построение полиаланиновой альфа-спирали.

In [852]:
cmd.delete('all')
In [854]:
cmd.fetch('1mbn')
cmd.show('cartoon')
cmd.select('p', 'i. 5-15')
cmd.do('phi_psi p')

Посмотрим, какие торсионные углы фи и пси бывают в альфа-спирали миоглобина

GLY-5: ( -50.4, -55.2 ) GLU-6: ( -56.2, -39.5 ) TRP-7: ( -63.2, -45.8 ) GLN-8: ( -36.4, -60.7 ) LEU-9: ( -63.7, -51.4 ) VAL-10: ( -51.7, -44.2 ) LEU-11: ( -67.7, -40.9 ) HIS-12: ( -66.9, -37.8 ) VAL-13: ( -61.4, -45.1 ) TRP-14: ( -51.3, -65.5 ) ALA-15: ( -39.7, -35.4 )

Загрузим структуру аланиновой альфа-спирали и посмотрим, какие у нее торсионные углы: (-58; -47)

In [855]:
cmd.load('/Users/anna/Downloads/ahelix.pdb')
cmd.show('cartoon')
cmd.select('d', 'i. 2-16')
cmd.do('phi_psi d')
In [859]:
cmd.delete('all')

Для построения альфа-спирали сначала посмотрели, какие углы получаются при присоединении нового аминокислотного остатка, а затем "опытным путем" определили смещение, которое даст нужный для настоящей альфа-спирали угол

In [860]:
cmd.do('fragment ala')


tt='ala'
for i in range(2, 100):
        cmd.edit("i. %i & n. C" % i)# сюда будем добавлять аминокислотный остаток
        cmd.do('editor.attach_amino_acid("pk1", "%s")' % tt)
        cmd.edit(' i. %i & n. CA ' %i,   'i. %i & n. C ' %i)# выбираем связь для вращения
        cmd.torsion('178') 
        cmd.edit("i. %i & n. N" % (i+1),   "i. %i & n. CA" % (i+1))
        cmd.torsion('81')


cmd.show('sticks')  
cmd.show('cartoon')
In [861]:
cmd.reset()
In [862]:
prepareImage()
Image(defaultImage)
Out[862]:
In [ ]:
cmd.distance("/ala///ALA`10/O" , "/ala///ALA`14/H")# посмотрим на водородную связь!
In [863]:
prepareImage()
Image(defaultImage)
Out[863]:

Задание 7. Построение ДНК.

In [878]:
cmd.delete('all')
In [879]:
cmd.fetch('440D')#загружаем днк
cmd.select('d1','i. 2 + i. 19')# выбираем подходящие пары
cmd.select('d2','i. 3 + i. 18')
cmd.hide('lines', '440D  and not d1 and not d2')
cmd.hide('nonbonded')
cmd.create( 'g', 'd2')
cmd.pair_fit('g', 'd1')# совмещаем пары нуклеотидов
trans=cmd.get_object_matrix("g")# получаем матрицу превращений
In [880]:
trans
Out[880]:
[0.9464787244796753,
 -0.19119565188884735,
 0.2600427269935608,
 -5.420917956115905,
 0.06295889616012573,
 0.8995561003684998,
 0.4322441816329956,
 -3.5294938720412006,
 -0.31656622886657715,
 -0.3927379250526428,
 0.8634481430053711,
 2.1689444680318193,
 0.0,
 0.0,
 0.0,
 1.0]
In [881]:
# строим днк :)
cmd.create( '1', 'd2')
for x in range(2,101):
    cmd.create (str(x),str(x-1))
    cmd.transform_selection( str(x), trans)
In [882]:
cmd.reset()
In [883]:
prepareImage()
Image(defaultImage)
Out[883]:
In [884]:
prepareImage()
Image(defaultImage)
Out[884]:
In [ ]: