Докинг низкомолекулярных лигандов в структуру белка

In [24]:
from xmlrpclib import ServerProxy
from IPython.display import Image
import os, sys
import scipy as sp
from scipy import constants
from scipy.constants import codata
import numpy as np
from numpy import oldnumeric
In [3]:
import __main__
__main__.pymol_argv = [ 'pymol', '-cp' ]
import pymol
pymol.finish_launching()
from pymol import cmd
In [8]:
from IPython.display import Image

Посмотрим на лиганд

In [5]:
%%bash
obgen nag.smi -ff UFF > nag.mol
babel -imol nag.mol -opdb nag.pdb
In [6]:
cmd.delete('all')
cmd.load('nag.pdb')
cmd.refresh()
cmd.do('''
bg_color white
as sticks, all
orient, all
show sticks
set valence, on
set stick_ball, on
set stick_ball_ratio, 3
set stick_radius, 0.12
set valence_mode, 2
set ray_trace_mode, 3
ray
png pic1.png
''')
In [7]:
Image(filename='pic1.png')
Out[7]:

Укажем пути к скриптам для получения pdbqt файлов

In [25]:
%%bash
export PYTHONPATH=${PYTHONPATH}:/home/preps/golovin/.local/lib/python2.7/site-packages:/home/preps/golovin/.local/lib/python2.7/dist-packages
export PATH=${PATH}:/home/preps/golovin/progs/bin
In [26]:
%%bash
prepare_ligand4.py -h
In []:
%%bash
prepare_ligand4.py -l nag.pdb
prepare_receptor4.py -p 5.pdb

Для докинга надо указать область структуры белка в которой будет происходить поиск места для связывания. Зададим её как куб с неким центром. Координаты центра мы определим из модели комплекса, которую мы построили на прошлом занятии.

In [11]:
cmd.delete('all')
cmd.load('5.pdb')
cmd.refresh()
cmd.do('''
pseudoatom cmass, resi 74+134+70
print cmd.get_atom_coords("/cmass/PSDO/P/PSD`1/PS1")
''')

Создадим файл vina.cfg и проведем докинг

In []:
vina --config vina.cfg --receptor 5.pdbqt --ligand nag.pdbqt --out nag_prot.pdbqt --log nag_prot.log

Выпишем энергии трех самых лучших состояний

mode | affinity | dist from best mode | (kcal/mol) | rmsd l.b.| rmsd u.b. -----+------------+----------+---------- 1 -5.5 0.000 0.000 2 -5.1 1.770 2.641 3 -5.0 3.912 5.931

Наложение всех получившихся положений лиганда в белке показано на рисунке:

In [12]:
Image(filename='all.png')
Out[12]:

Теперь проведём докинг, учитывая подвижность некоторых боковых радикалов белка. Сначала разобьем белок на две части, подвижную и неподвижную. Для подвижной части выберем 3 аминокислоты которые использовали в прошлом задании для позиционирования лиганда.

In []:
python /usr/share/pyshared/AutoDockTools/Utilities24/prepare_flexreceptor4.py -p 5.pdb -s LEU70_TRP74_GLN134

Проведём докинг:

In []:
vina --config vina.cfg --receptor 5_rigid.pdbqt --flex 5_flex.pdbqt --ligand nag.pdbqt --out nag_flex.pdbqt --log nag_flex.log

Выпишем энергии трех самых лучших состояний (для докинга с учетом подвижности аминокислотных остатков)

mode | affinity | dist from best mode | (kcal/mol) | rmsd l.b.| rmsd u.b. -----+------------+----------+---------- 1 -6.0 0.000 0.000 2 -5.6 1.441 1.879 3 -5.4 1.538 3.638

Сравним с энергиями без учета подвижности аминокислотных остатков

mode | affinity | dist from best mode | (kcal/mol) | rmsd l.b.| rmsd u.b. -----+------------+----------+---------- 1 -5.5 0.000 0.000 2 -5.1 1.770 2.641 3 -5.0 3.912 5.931

Отметим, что наилучшая энергия расположения уменьшилась на 1 kcal/mol. Ура!

Если в PyMol загрузить одновременно файлы nag_5_flex.pdbqt и 5_rigid.pdbqt, то мы увидим наложение трех выбранных аминокислотных остатков, для которых была разрешена повижность на стурктуру белка. В белке остатки не удалены, и выбранные остатки в большинстве случаев не накладываются на них, хоть и находятся рядом. Если запустить все получившиеся состояния, видно, что двигаются только боковые цепи остатков. Поэтому, вероятно, что где-то произошла ошибка, из-за чего остатки не накладываются друг на друга.

In [9]:
Image(filename='flex.png')
Out[9]:

Немного поменяем лиганд и снова сделаем докинг

In [20]:
%%bash
for i in nag_h nag_oh nag_nh2 nag_ph ;do
obgen ${i}.smi -ff UFF > ${i}.mol
babel -imol ${i}.mol -opdb ${i}.pdb 
/home/preps/golovin/progs/bin/prepare_ligand4.py -l ${i}.pdb
vina --config vina.cfg --receptor 5.pdbqt --ligand ${i}.pdbqt --out ${i}_5.pdbqt --log ${i}_5.log
done

Должно получиться, только он снова пишет "no module named oldnumeric", а я забыла, как мы с этим справлялись =(