from IPython.display import Image
import os, sys
# pymol launching
import __main__
### Если вывод в графическое окно тормозит или не нужен, то:
__main__.pymol_argv = [ 'pymol', '-cp' ]
import pymol
pymol.finish_launching()
from pymol import cmd
### Информацию об ошибках можно смотреть там где запускали ipython notebook
from IPython.display import Image
Структура 1LMP до экзекуции:
Image("before.png")
После экзекуции:
Как можно заметить, несмотря на огромное увеличение расстояния между остатками а.к., программа всё равно попыталась сохранить плавность в элементах вторичной структуры.
Image("after.png")
Зона контактов лиганда с белком:
Image("hood.png")
Если заменить Asp-52 на триптофан, получится так, что пропадет часть полярных контактов, а место кармана связывания частично заполнится боковым радикалом, что значительно помешает связыванию.
Ссылка на скрипт view_movie.pml.
cmd.do("@view_movie.pml")
Из-за того, что у pymol на кодомо нет лицензии, на фоне оставался водяной знак с напоминанием об этом, поэтому готовое видео выглядело крайне некачественно. Пришлось генерировать кадры локально и собирать видео с помощью онлайн сервисов.
from IPython.display import HTML
HTML("""
<video alt="test" controls width="960" height="540">
<source src="movie.mp4" type="video/mp4">
</video>
""")
Присоединяю метку Tamra через остаток карбоксильной группы, у которой в структуре был водород, и кислород бокового радикала треонина-47.
cmd.do('''reinitialize everything
fetch 1LMP, async=0
load tamra.sdf
hide everything
bg_color white
select ligand, resn NDG+NAG
color palegreen, elem C
show sticks
set cartoon_transparency, 0.3
color lightorange, ligand and elem C
show sticks, ligand
show sticks, tamra
remove tamra and id 2+54
select tamra_c, tamra and id 29
select prot_o, /1LMP/A/A/THR`47/OG1
fuse tamra_c, prot_o
torsion 273.4
color salmon, resn UNK and elem C
unpick
set label_size, 30
label /1LMP/A/A/THR`47/OG1, "%s-%s" % (resn, resi)
set label_position, (2.2,-1.5,5.0)
set_view (\
0.868775249, -0.259187788, -0.421960205,\
0.420223147, 0.836672664, 0.351274878,\
0.261996388, -0.482495934, 0.835796535,\
0.000073396, 0.000135922, -59.322414398,\
21.051134109, 61.194595337, 31.332492828,\
41.539363861, 77.132972717, -20.000000000 )
set ray_trace_mode, 1
ray
save tamra.png
''')
Image('tamra.png')
#По данным IUPAC правая правая α-спираль поли-L-аланина имеет торсионные углы:
phi = -57
psi = -47
length = 100
aminoacid = 'ala'
cmd.reinitialize()
cmd.bg_color('white')
cmd.fragment(aminoacid)
# Нарастим цепь из 100 аланинов без учета углов
for i in range(2, length+1):
cmd.edit(f"i. {i} & n. C")
cmd.editor.attach_amino_acid("pk1", aminoacid)
# Покрутим аланины, чтобы получить α-спираль
for i in range(2, length+1):
if i % 2 == 0:
cmd.set_dihedral(f"i. {i} and n. N", f"i. {i} and n. CA",
f"i. {i} and n. C", f"i. {i+1} and n. N", phi)
cmd.set_dihedral(f"i. {i} & n. C", f"i. {i+1} & n. N" ,
f"i. {i+1} & n. CA", f"i. {i+1} & n. C", psi)
cmd.save('helix.pdb')
Получили вот такую полиаланиновую спираль:
Image('helix_full.png')
Image('helix_close.png')
length = 100
cmd.do('''
reinitialize everything
bg_color white
fetch 1bna, async=0
remove solvent
create pair_a, c. A and i. 5 + c. B and i. 20
create pair_b, c. A and i. 4 + c. B and i. 21
create pair1, pair_a''')
cmd.pair_fit('pair_a', 'pair_b')
matrix = cmd.get_object_matrix('pair_a')
for i in range(2, length+1):
cmd.create(f'pair{i}', f'pair{i-1}')
cmd.transform_selection(f'pair{i}', matrix, homogenous = 0)
cmd.save('b_dna.pdb', state=0)
cmd.quit()
Image('b_dna_full.png')
Image('b_dna_top.png')
Image('b_dna_close.png')