from xmlrpclib import ServerProxy
from IPython.display import display,Image
cmd = ServerProxy(uri = "http://localhost:8888/RPC2")
import os, sys, time
# PyMOL launching
import __main__
# Tell PyMOL to launch quiet (-q), fullscreen (-e), without internal GUI (-i)
# and without GUI (-c) and with arguments from command line
#__main__.pymol_argv = [ 'pymol', '-qei' ]
#__main__.pymol_argv = [ 'pymol', '-cp' ]
__main__.pymol_argv = [ 'pymol', '-x' ]
import pymol
# Call the function below before using any PyMOL modules.
pymol.finish_launching()
from pymol import cmd, stored
import rdkit
from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit import RDConfig
from rdkit.Chem.Draw import ShowMol
from rdkit.Chem.Draw import IPythonConsole
from rdkit.Chem import Draw
import numpy as np
Изменение структуры белка 1LMC
Wizard->Demo->Sculpting
Sculpting является real-time-оптимизатором геометрии молекулы при ее изменении ее пространственной структуры: данный алгоритм старается сохранить значения длины связей, углов, торсионных углов при изменении координат. Изменение структуры проводилось пошагово:
Ctrl-middle-click
Ctrl-left-click-and-drag
x = Image(filename='1lmp_before.png')
y = Image(filename='1lmp_after.png')
display(x, y)
Средствами Tcl/Tk интерфейса:
Wizard->Mutagenesis
была проведена одиночная мутация в 1lmp, приводящая к потере связывания белка с лигандом. Команды:
Action->find->polar contacts->within selection
показали связи между лигандом и белком. Проводилась мутация ASP-101 на TRP-101. После мутирования связь между 101 остатком белка и лигандом не образовалась.
Подписать названия остатков можно либо в меню объекта/выборки (Object Control Panel):
L->residues,
предварительно выделив необходимый остаток, либо с помощью ввода команд:
label n. CA and 1lmp and i. 101, "%s %s" % (resn, resi) label n. CH2 and /mutagenesis and i. 101, "%s %s" % (resn, resi)
Желтым кругом выделено место мутации.
Image(filename='mutagenesis.jpg')
На двух нижепредставленных картинках изображен остаток 101: сверху до мутации, снизу - после.
x = Image(filename='ASP-101.png')
y = Image(filename='TRP-101.png')
display(x, y)
Далее изображено выравнивание изначальной и мутированной структур: красный - TRP-101, желтый - ASP-101. Структуры накладывались друг на друга с помощью команды align:
align
Команды cealign, super, fit, pair_fir в данном случае не подошли, т. к. последовательности двух белков отличались только одной аминокислотой.
Image(filename='alignment.png')
Ролик был создан с использованием команд: mset, mview, align, translate. Получившаяся анимация была сохранена как фильм:
File->Export Movie As->MPEG
Совмещение белков производится командой align по вышеуказанным причинам. Место мутации показано серией set_view положений, перехожы между которыми сглажены интерполяцией. Ниже приведены указания из раздела object motions PyMOLWiki.
Now that we're experts at moving the PyMOL camera around, let's start moving objects around while keeping the camera steady. To do this you must have matrix_mode set to 1, otherwise PyMOL won't save your object's repositioning.
cmd.do('''
load 1lmp.pdb
remove solvent
hide everything
show sticks
show spheres, 1lmp
set stick radius, .07, 1lmp
set sphere scale, .18, 1lmp
set sphere scale, .13, elem H
set bg rgb=[1, 1, 1]
set stick quality, 50, 1lmp
set sphere quality, 4, 1lmp
color gray85, elem C
color red, elem O
color slate, elem N
color gray98, elem H
show cartoon
set stick color, black, 1lmp
set ray trace mode, 1
set ray texture, 2
set antialias, 3
set ambient, 0.5
set spec count, 5
set shininess, 50
set specular, 1
set reflect, .1
set dash gap, 0
set dash color, black
set dash gap, .15
set dash length, .05
set dash round ends, 0
set dash radius, .05
load mutagenesis.pdb
preset.publication("mutagenesis", self=cmd)
extract ligands, het
hide everything, ligands
show sticks, ligands
color deepblue, ligands
set retain order
set ray trace mode, 1
set ray texture, 2
set antialias, 3
set ambient, 0.5
set spec count, 5
set shininess, 50
set specular, 1
set reflect, .1
set dash gap, 0
set dash color, black
set dash gap, .15
set dash length, .05
set dash round ends, 0
set dash radius, .05
set retain order
set matrix mode, 1
set movie panel, 1
mset 1 x1100
frame 1
translate [-50, 0, 0], 1lmp
orient
mview store
mview store, object=1lmp
mview store, object=mutagenesis
frame 100
align 1lmp, mutagenesis
mview store
mview store, object=1lmp
mview store, object=mutagenesis
frame 200
set view (\
0.310487568, -0.351513296, -0.883196354,\
0.072738476, 0.935177326, -0.346630543,\
0.947790325, 0.043382134, 0.315929443,\
0.000000000, 0.000000000, -126.023445129,\
14.233245850, 51.144100189, 20.735301971,\
99.357849121, 152.689041138, -20.000000000 )
mview store
frame 250
zoom i. 101
mview store
frame 300
color yellow, /1lmp//A/ASP`101
mview store
frame 350
color tv red, /mutagenesis//A/TRP`101
show sticks, /mutagenesis//A/TRP`101
set view (\
0.027544985, 0.392354786, -0.919401050,\
0.185692057, 0.901733696, 0.390379518,\
0.982219279, -0.181478143, -0.048018824,\
0.000001287, 0.000002790, -37.680519104,\
4.573862553, 56.978332520, 28.689073563,\
18.598453522, 56.762577057, -20.000000000 )
mview store
frame 400
select /1lmp//A/ASP`101/OD2 or /ligands/B/A/NAG`130/O6
hide everything, mutagenesis
mview store
frame 450
set view (\
0.874671102, 0.465957344, -0.133546099,\
-0.245426506, 0.663314044, 0.706953108,\
0.417990744, -0.585572362, 0.694536507,\
-0.000008550, 0.000009350, -14.178204536,\
7.696578026, 58.481658936, 32.177547455,\
-4.169544697, 32.525955200, -20.000000000 )
mview store
frame 500
show cartoon, mutagenesis
spectrum count, rainbow, mutagenesis
color tv red, /mutagenesis//A/TRP`101
show sticks, /mutagenesis//A/TRP`101
orient /mutagenesis//A/TRP`101
set view (\
0.081681184, 0.597173035, -0.797941208,\
0.041003622, 0.797925293, 0.601360202,\
0.995813429, -0.081837848, 0.040691219,\
0.000000000, 0.000000000, -23.100343704,\
4.899285793, 58.137855530, 30.553213120,\
18.212486267, 27.988201141, -20.000000000 )
mview store
frame 550
set view (\
0.640822947, 0.750949860, -0.159429103,\
-0.407308728, 0.508619845, 0.758554935,\
0.650723577, -0.421163052, 0.631805360,\
0.000000000, 0.000000000, -23.100343704,\
4.899285793, 58.137855530, 30.553213120,\
18.212486267, 27.988201141, -20.000000000 )
mview store
frame 600
set view (\
0.423352420, 0.569107592, 0.704899907,\
-0.893512607, 0.390838474, 0.221085414,\
-0.149684191, -0.723433375, 0.673969448,\
-0.000007562, 0.000001580, -23.100343704,\
5.659269810, 59.242378235, 31.976255417,\
2.682543993, 43.518146515, -20.000000000 )
mview store
frame 650
set view (\
-0.111630894, 0.917784572, 0.381058097,\
-0.991070449, -0.074678324, -0.110466041,\
-0.072931081, -0.389986157, 0.917925060,\
-0.000007562, 0.000001580, -23.100343704,\
5.659269810, 59.242378235, 31.976255417,\
15.350089073, 30.850589752, -20.000000000 )
mview store
frame 700
set view (\
-0.750151157, 0.503197253, 0.429022849,\
0.061019193, 0.698701203, -0.712805569,\
-0.658440828, -0.508530557, -0.554838359,\
-0.000007562, 0.000001580, -23.100343704,\
5.659269810, 59.242378235, 31.976255417,\
15.350089073, 30.850589752, -20.000000000 )
mview store
frame 750
set view (\
-0.965006828, 0.223388940, 0.137302488,\
0.242283061, 0.559418619, 0.792683423,\
0.100267045, 0.798214555, -0.593964756,\
-0.000005804, 0.000001609, -23.100343704,\
5.487463474, 59.898345947, 30.582403183,\
10.618468285, 35.582187653, -20.000000000 )
mview store
frame 800
set view (\
0.448935241, 0.174991682, -0.876257598,\
-0.879195750, 0.261651903, -0.398186386,\
0.159592822, 0.949162602, 0.271315128,\
-0.000005804, 0.000001609, -23.100343704,\
5.487463474, 59.898345947, 30.582403183,\
10.618468285, 35.582187653, -20.000000000 )
mview store
frame 850
set view (\
0.448935241, 0.174991682, -0.876257598,\
-0.879195750, 0.261651903, -0.398186386,\
0.159592822, 0.949162602, 0.271315128,\
-0.000003759, -0.000015527, -23.100343704,\
-6.543584824, 54.431243896, 34.307575226,\
-1.223415494, 47.423828125, -20.000000000 )
hide labels
mview store
frame 900
set view (\
0.310487568, -0.351513296, -0.883196354,\
0.072738476, 0.935177326, -0.346630543,\
0.947790325, 0.043382134, 0.315929443,\
0.000000000, 0.000000000, -126.023445129,\
14.233245850, 51.144100189, 20.735301971,\
99.357849121, 152.689041138, -20.000000000 )
mview store
mview store, object=1lmp
mview store, object=mutagenesis
mview interpolate''')
from IPython.display import HTML
from base64 import b64encode
video = open('mutagenesis_movie.mp4', 'rb').read()
video_encoded = b64encode(video)
video_tag = '<video controls width="960" height="540" alt = "PyMol Movie" src ="data:video/mp4;base64,{0}" type = "video/mp4">'.format(video_encoded)
HTML(data = video_tag)