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)
#cmd.delete ('all')
cmd.bg_color('white')
Задание2.
Был выделен лиганд и полярные контакты между лигандом и белком. Для нахождения водородных связей была использована функция distance с параметром 2. Чтобы проверить, являются ли полученные контакты водородными связями, объект был приближен и сделаны надписи для кислорода и азота (что несколько излишне, так как по цвету можно определить атом). Все контакты действительно соответствуют водородным связям.
Предположительно, чем меньше расстояние между аминокислотным остатком и лигандом при реализации водородной связи, тем она сильнее и важнее. В нашем случае это остатки аспарагина и аспарагиновой кислоты (относится к отрицательно заряженным) в позициях 52 и 59. Также существенное значение в удержание лиганда в нужной позиции вносит аспарагин в позиции 101, т.к. поблизости нет контактов, связывающих лиганд с белком на столь малых расстояниях. Также возможно стэкинг-взаимодействие между тирозином 62 и правой частью лиганда (NAG).
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)
cmd.colour('paleyellow', '!ligand')
cmd.hide('label',"b1")
cmd.select('AmA','br. polymer w. 2.5 of "ligand"')
cmd.show('sticks', 'AmA')
prepareImage()
Image(defaultImage)
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')
prepareImage()
Image(defaultImage)
cmd.show('surface','1lmp and !ligand')
cmd.colour('blue','ligand')
prepareImage()
Image(defaultImage)
Задание 3. Мутагенез. Сложно однозначно определить, какой аминокислотный остаток самый важный для связывания лиганда. Выберем для мутации ASP 101.
#cmd.delete('all')
cmd.fetch('1lmp','mut')
cmd.hide('nonbonded')
cmd.show('sticks','resi 101')
prepareImage()
Image(defaultImage)
mut_res='resi 101'
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()")
cmd.save( "/Users/anna/Downloads/mutt/mut.pdb", 'mut')
prepareImage()
Image(defaultImage)
Задание 4. Анимация.
cmd.delete ('all')
cmd.fetch('1lmp', 'a1')
cmd.load( "/Users/anna/Downloads/mutt/mut.pdb",'a2')
# задаем внешние параметры
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')
cmd.super('a1', 'a2')
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()
# Сохраняем картинки
cmd.set('ray_trace_frames', '1')
cmd.set('ray_trace_mode', '1')
cmd.set('antialias', '1')
cmd.mpng('1LMP_mutation')
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)
video("/Users/anna/Downloads/12.mp4", "mp4")
Задание 5. Присоединение метки TAMRA. Это задание было выполнено через GUI c использованием соответствующих комманд (fuse, torsion - применялась несколько раз). Сложноэфирная связь образована между кислородом метки и углеродом боковой цепи серина, находящегося на поверхности белка.
from IPython.display import Image
Image("/Users/anna/pymol.png")
Задание 6. Построение полиаланиновой альфа-спирали.
cmd.delete('all')
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)
cmd.load('/Users/anna/Downloads/ahelix.pdb')
cmd.show('cartoon')
cmd.select('d', 'i. 2-16')
cmd.do('phi_psi d')
cmd.delete('all')
Для построения альфа-спирали сначала посмотрели, какие углы получаются при присоединении нового аминокислотного остатка, а затем "опытным путем" определили смещение, которое даст нужный для настоящей альфа-спирали угол
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')
cmd.reset()
prepareImage()
Image(defaultImage)
cmd.distance("/ala///ALA`10/O" , "/ala///ALA`14/H")# посмотрим на водородную связь!
prepareImage()
Image(defaultImage)
Задание 7. Построение ДНК.
cmd.delete('all')
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")# получаем матрицу превращений
trans
# строим днк :)
cmd.create( '1', 'd2')
for x in range(2,101):
cmd.create (str(x),str(x-1))
cmd.transform_selection( str(x), trans)
cmd.reset()
prepareImage()
Image(defaultImage)
prepareImage()
Image(defaultImage)