# python 2. Windows 8
# Python 2 and 3 compatibility
# pip install future
from __future__ import (absolute_import, division,
print_function, unicode_literals)
# отключим предупреждения Anaconda
import warnings
warnings.simplefilter('ignore')
# компоненты для работы с PyMol
from xmlrpclib import ServerProxy
from IPython.display import Image
Запустили PyMol в режиме RPC сервер (pymol -R в cmd)
cmd = ServerProxy(uri="http://localhost:9123/RPC2")
cmd.fetch('1lmp')
# контроль за временем
import time
cmd.hide("everything")
# пример формирования картинки
for i in range (1,50):
cmd.show_as("cartoon",str(i-1)+"+"+str(i)+"+"+str(i+1)+'/CA')
time.sleep(.1)
cmd.show_as("ribbon",str(i-1)+"+"+str(i)+"+"+str(i+1)+'/CA')
cmd.set("opaque_background", 'off')
cmd.set("ray_trace_mode", '3')
cmd.bg_color('white')
cmd.show_as("cartoon")
cmd.zoom()
cmd.ray(600,400)
cmd.png('/temp/mypng.png')
time.sleep(2)
Image(filename='/temp/mypng.png')
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
# Пример построения графика
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2 # 0 to 15 point radiuses
plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.show()
Image(filename=r'C:\Users\Alex\Google Диск\Data analysis in biology and medicine\Структурная биоинформатика\2\Pymol sculpting.png')
# убираем ненужные объекты
cmd.delete('sculpt')
# добавляем водороды и рисуем молекулу
cmd.show_as("sticks")
cmd.h_add('1lmp')
cmd.png('/temp/mypng.png')
time.sleep(2)
Image(filename='/temp/mypng.png')
# водороды отображаюся белым цветом
В записи 1lmp из PDB находим, что для данного белка есть 2 лиганда. Скачиваем их в формате .sdf
cmd.load(r'C:\Users\Alex\YandexDisk\Data analysis in biology and medicine\Structural bio\2\Ligands_noHydrogens_withMissing_1_Instances.sdf','lig1')
cmd.load(r'C:\Users\Alex\YandexDisk\Data analysis in biology and medicine\Structural bio\2\Ligands_noHydrogens_withMissing_2_Instances.sdf','lig2')
# смотрим на 2 загруженных лиганда
cmd.png('/temp/mypng.png')
time.sleep(2)
Image(filename='/temp/mypng.png')
# выбираем атомы азота и кислорода, которые являются соседями водорода и могут создавать области - доноры
cmd.select('don', '(elem n,o and (neighbor hydro))')
cmd.png('/temp/mypng.png')
time.sleep(2)
Image(filename='/temp/mypng.png')
# выбираем области-акцепторы
cmd.select('acc', '(elem o or (elem n and not (neighbor hydro)))')
Далее лиганды 1 и 2 были придвинуты ближе к белку вручную в PyMol.
Проведем поиск всех возможных водородных связей на расстоянии 3.2 ангстрема (cutoff по умолчанию)
cmd.dist('HBA1', '(lig1 and acc)','(1lmp and don)', '3.2')
cmd.dist('HBA2', '(lig2 and acc)','(1lmp and don)', '3.2')
cmd.dist('HBD1', '(lig1 and don)','(1lmp and acc)', '3.2')
cmd.dist('HBD2', '(lig2 and don)','(1lmp and acc)', '3.2')
# посмотрим на то, какие связи нашлись
cmd.png('/temp/mypng.png')
time.sleep(2)
Image(filename='/temp/mypng.png')
Чтобы правильно найти водородные связи, которыми лиганд будет связываться с белком, необходимо использовать процедуру докинга лиганда - т.е. найти его оптимальное расположение.
Находим АК, которая имеет большое количество водородных связей с лигандом.
Выделим ее:
cmd.png('/temp/mypng.png')
time.sleep(2)
Image(filename='/temp/mypng.png')
Кликаем на эту АК в режиме wizard - mutagenesis.
Смотрим:
cmd.png('/temp/mypng.png')
time.sleep(2)
Image(filename='/temp/mypng.png')
# TO DO
cmd.fetch('1lmp')
cmd.h_add('1lmp')
cmd.load(r'C:\Users\Alex\YandexDisk\Data analysis in biology and medicine\Structural bio\2\Structure3D_CID_2762604.sdf',
'TAMRA')
cmd.show_as("sticks")
cmd.png('/temp/mypng.png')
time.sleep(2)
Image(filename='/temp/mypng.png')
Выбираем карбоксильную группу на метке TAMRA вручную по атомам. Переименовываем ее в 'cooh'.
Удаляем в ней OH:
>Pymol
remove (oh)
Находим в 1lmp АК с группой OH, торчащую наружу - выбираем серин.
>Pymol
select target, byres resn SER near_to 50 of cooh
Мышкой пододвигаем TAMRA к серину на 1lmp и разворачиваем ее так, чтобы остаток CO располагался напротив серина. На картинке выделен серин.
cmd.png('/temp/mypng.png')
time.sleep(2)
Image(filename='/temp/mypng.png')
>Pymol
fuse cooh, target, mode=1
default_image = 'pymolimg.png'
def prepareImage(width=300, height=300, filename=default_image, sleep=2):
cmd.ray(width, height)
cmd.png(filename)
time.sleep(sleep)
def focus(x):
cmd.center(x)
cmd.zoom(x)
cmd.reinitialize()
cmd.bg_colour('white')
aa = 'ALA'
ala_phi = '-50'
ala_psi = '-40'
kol = 100
def polyAA(n, aa, phi, psi):
cmd.fragment(aa)
for i in range(2, n+1):
cmd.edit("i. %i & n. C" % i)
cmd.do('editor.attach_amino_acid("pk1", "%s")' % aa)
for i in range(2, n+1):
cmd.set_dihedral("i. %i & n. N" % i, "i. %i & n. CA" % i,
"i. %i & n. C" % i, "i. %i & 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)
cmd.edit()
cmd.show('cartoon', aa)
focus(aa)
polyAA(kol, aa, ala_phi, ala_psi)
prepareImage(width=1000, height=300,sleep = 0)
Image(default_image)
cmd.png('/temp/mypng.png')
time.sleep(2)
Image(filename='/temp/mypng.png')