HW7

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

In [1]:
import numpy as np
import copy

# Отображение структур
import IPython.display
import ipywidgets
from IPython.display import display,display_svg,SVG,Image

# Open Drug Discovery Toolkit
import oddt
import oddt.docking
import oddt.interactions

# Органика
from rdkit.Chem import Draw
from rdkit.Chem.Draw import IPythonConsole

import pmx # Модуль для манипулирования pdb 

from IPython.display import Image
In [2]:
import __main__
__main__.pymol_argv = [ 'pymol', '-qc' ]
 
import pymol
 
# Call the function below before using any PyMOL modules.
pymol.finish_launching()
In [3]:
pdb=pmx.Model('../hw6/.B99990001.pdb')

for r in pdb.residues[135:]:
    print r #посмотрим остатки
In [4]:
# создание объектов белок и лиганда
newpdb = pdb.copy()
for r in newpdb.residues[-3:]:
    newpdb.remove_residue(r)
lig = pdb.copy()
del lig.residues[:-3]
In [5]:
ax = []
for a in lig.atoms:
    ax.append(a.x)

center = np.mean(ax, axis=0)
center
Out[5]:
array([ 39.06940216,  31.55914238,  23.23375021])
In [6]:
newpdb.writePDB('protein_not_ligand.pdb')
In [7]:
# Подготовка белка для докинга
prot = oddt.toolkit.readfile('pdb','protein_not_ligand.pdb').next()

prot.OBMol.AddPolarHydrogens()
prot.OBMol.AutomaticPartialCharge()

print 'is it the first mol in 1lmp is protein?', prot.protein, ':) and MW of this mol is:', prot.molwt
In [8]:
# Лиганды для докинга
smiles = ['c1cccc(O)c1', 'c1c(O)ccc(O)c1','c1(O)cc(c2ccccc2)cc(O)c1']
mols= []
images =[]

for s in smiles:
    m = oddt.toolkit.readstring('smi', s)
    if not m.OBMol.Has3D(): 
        m.make3D(forcefield='mmff94', steps=150)
        m.removeh()
        m.OBMol.AddPolarHydrogens()

    mols.append(m)
    ###with print m.OBMol.Has3D() was found that:
    ### deep copy needed to keep 3D , write svg make mols flat
    images.append((SVG(copy.deepcopy(m).write('svg'))))

display_svg(*images)
***** - Open Babel Depiction O H *****
***** - Open Babel Depiction O O H H *****
***** - Open Babel Depiction O O H H *****
In [11]:
# Докинг
#create docking object
dock_obj = oddt.docking.AutodockVina.autodock_vina(
    protein = prot, size = (20,20,20), center = center, 
    executable ='/usr/bin/vina', autocleanup = True, num_modes = 9)

print dock_obj.tmp_dir
print " ".join(dock_obj.params) # Опишите выдачу
In [12]:
# do it
res = dock_obj.dock(mols, prot)
In [13]:
# Результаты докинга
for i,r in enumerate(res):
    print "%4d%10s%8s%8s%8s" %(i, r.formula, r.data['vina_affinity'], r.data['vina_rmsd_ub'], r.residues[0].name)
In [14]:
# Анализ докинга
for i,r in enumerate(res):
    hbs = oddt.interactions.hbonds(prot,r)
    stack = oddt.interactions.pi_stacking(prot,r)
    phob = oddt.interactions.hydrophobic_contacts(prot, r)
In [15]:
for i,r in enumerate(res):
    r.write(filename = 'r%s.pdb' % i, format='pdb', overwrite=True)
In [16]:
# берем молекулу с наилучшей афинностью (афинность показывает силу взаимодействия)
pymol.cmd.load('./r0.pdb', 'ligand')
pymol.cmd.load('./protein_not_ligand.pdb', 'protein')
In [19]:
pymol.cmd.show_as('sticks', 'ligand')
pymol.cmd.show_as('cartoon', 'protein')
pymol.cmd.color('yellow','protein')

pymol.cmd.center('ligand')
#pymol.cmd.origin('ligand')
#pymol.cmd.zoom('ligand', 4)

pymol.cmd.png('pic.png')
In [20]:
Image('pic.png')
Out[20]: