In [71]:
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 
In [72]:
import os
os.getcwd()
Out[72]:
'/home/shad/hse/didkovskaya/hw7'

Подготовка белка:

In [73]:
pdb=pmx.Model('plus_ligand.B99990001.pdb')
In [74]:
for r in pdb.residues[135:]:
    print r #посмотрим остатки    
<Molecule: id = 136 name = THR chain_id =    natoms = 7>
<Molecule: id = 137 name = ASP chain_id =    natoms = 8>
<Molecule: id = 138 name = VAL chain_id =    natoms = 7>
<Molecule: id = 139 name = GLN chain_id =    natoms = 9>
<Molecule: id = 140 name = ALA chain_id =    natoms = 5>
<Molecule: id = 141 name = TRP chain_id =    natoms = 14>
<Molecule: id = 142 name = ILE chain_id =    natoms = 8>
<Molecule: id = 143 name = ARG chain_id =    natoms = 11>
<Molecule: id = 144 name = GLY chain_id =    natoms = 4>
<Molecule: id = 145 name = CYS chain_id =    natoms = 6>
<Molecule: id = 146 name = ARG chain_id =    natoms = 11>
<Molecule: id = 147 name = LEU chain_id =    natoms = 9>
<Molecule: id = 148 name = NAG chain_id =    natoms = 14>
<Molecule: id = 149 name = NAG chain_id =    natoms = 14>
<Molecule: id = 150 name = NDG chain_id =    natoms = 15>

Создание объектов:

In [71]:
## Белок:
newpdb = pdb.copy()
for r in newpdb.residues[-3:]:
    newpdb.remove_residue(r)
## Лиганд:   
lig = pdb.copy()
for r in lig.residues[:-3]:
    lig.remove_residue(r)

Центр:

In [75]:
coordinates = np.zeros((len(lig.atoms),3))
for c,a in enumerate(lig.atoms):
    coordinates[c,:] = a.x
geom_center = np.mean(coordinates, axis = 0)
print geom_center
[ 53.79067442  37.53546512  26.63776744]
In [76]:
newpdb.writePDB('new.pdb')
lig.writePDB('ligand.pdb')

Подготовка белка для докинга:

In [77]:
prot = oddt.toolkit.readfile('pdb','new.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 
is it the first mol in 1lmp is protein? False :) and MW of this mol is: 16230.43242

Белок не был распознан как белок

Лиганды для докинга:

In [78]:
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 [79]:
# create docking object
dock_obj = oddt.docking.AutodockVina.autodock_vina(
    protein=prot, size=(20,20,20), center=geom_center, num_modes = 9,
    executable='/usr/bin/vina',autocleanup=True)
In [80]:
print dock_obj.tmp_dir
print " ".join(dock_obj.params) 
/tmp/autodock_vina_cb0J3V
--center_x 53.7906744186 --center_y 37.5354651163 --center_z 26.6377674419 --size_x 20 --size_y 20 --size_z 20 --cpu 1 --exhaustiveness 8 --num_modes 9 --energy_range 3
In [81]:
# do it
res = dock_obj.dock(mols,prot)

Результаты докинга и анализ:

In [82]:
print "    ".join(["№", "formula", "affin", "rmsd_ub", "name",'hbs','stack','phob'])
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) #Гидрофобные контакты
    print "%4d%10s%8s%8s%8s%8s%8s%8s" %(i,r.formula, r.data['vina_affinity'],  
                                        r.data['vina_rmsd_ub'], r.residues[0].name, 
                                        len(hbs[1]),len(stack[1]), len(phob[1]))
№    formula    affin    rmsd_ub    name    hbs    stack    phob
   0     C6H6O    -3.9   0.000     UNL       1       0       5
   1     C6H6O    -3.9   1.829     UNL       1       1       5
   2     C6H6O    -3.9   3.789     UNL       3       0       2
   3     C6H6O    -3.8   2.205     UNL       4       2       4
   4     C6H6O    -3.8   2.595     UNL       1       0       6
   5     C6H6O    -3.8   2.971     UNL       1       0       3
   6     C6H6O    -3.8   4.268     UNL       1       0       3
   7     C6H6O    -3.8   6.229     UNL       1       2      15
   8     C6H6O    -3.6   4.208     UNL       1       1       8
   9    C6H6O2    -4.2   0.000     UNL       4       0       3
  10    C6H6O2    -4.2   1.713     UNL       4       0       3
  11    C6H6O2    -4.2   3.231     UNL       4       0       3
  12    C6H6O2    -4.1   4.591     UNL       2       1       2
  13    C6H6O2    -4.1   4.248     UNL       2       0       3
  14    C6H6O2    -4.1   3.380     UNL       2       0       3
  15    C6H6O2    -4.0   3.402     UNL       1       0       3
  16    C6H6O2    -4.0   3.369     UNL       7       0       3
  17    C6H6O2    -3.9   3.421     UNL       4       0       2
  18  C12H10O2    -6.1   0.000     UNL       2       0       4
  19  C12H10O2    -6.1   2.542     UNL       2       0       4
  20  C12H10O2    -6.1   5.237     UNL       7       0       6
  21  C12H10O2    -6.1   5.069     UNL       7       0       5
  22  C12H10O2    -6.0   7.182     UNL       2       2      13
  23  C12H10O2    -5.9   7.807     UNL       2       2      10
  24  C12H10O2    -5.8   5.906     UNL       1       2      10
  25  C12H10O2    -5.8   7.058     UNL       3       2      16
  26  C12H10O2    -5.7   5.574     UNL       4       0       7

Визуализация:

In [108]:
for i,r in enumerate(res):
    r.write(filename='r%s.pdb' % i, format='pdb')
In [2]:
from IPython.display import Image

Афинность-характеристика, количественно описывающая силу взаимодействия веществ

Для визуализации я выбрала наилучшую структуру по афинности (номер 18). Бежевым цветом изображен белок,красным – начальные лиганды, желтым – 18 структура и синем, для контраста, плохая структура (номер 8):

In [4]:
Image(filename = "/Users/Nataliyadi/Desktop/18.png", width=500, height=500)
Out[4]:

Задание:

NAG содержит в себе СH3C(=O)NH группу. Создайте лиганды, где метильный радикал этой группы будет заменён на : OH NH3+ H Ph COO-

1. Замена метильного радикала на OH

In [84]:
smiles = 'C1(C(C(C(C(O1)CO[H])O[H])O[H])O[H])[OH]'
mols= []
images=[]
m = oddt.toolkit.readstring('smi', smiles)
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 H H H H O O O O O *****
In [86]:
res = dock_obj.dock(mols,prot)
for i,r in enumerate(res):
    r.write(filename='OH%s.pdb' % i, format='pdb')

Выбор наилучшего объекта для визуализации: (наилучший оказался нулевой)

In [87]:
print "    ".join(["№", "formula", "affin", "rmsd_ub", "name",'hbs','stack','phob'])
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) #Гидрофобные контакты
    print "%4d%10s%8s%8s%8s%8s%8s%8s" %(i,r.formula, r.data['vina_affinity'],  
                                        r.data['vina_rmsd_ub'], r.residues[0].name, 
                                        len(hbs[1]),len(stack[1]), len(phob[1]))
№    formula    affin    rmsd_ub    name    hbs    stack    phob
   0   C6H12O6    -5.4   0.000     UNL      13       0       0
   1   C6H12O6    -5.3   2.318     UNL      10       0       0
   2   C6H12O6    -5.3   4.074     UNL       8       0       0
   3   C6H12O6    -5.2   3.620     UNL       8       0       0
   4   C6H12O6    -5.1   3.498     UNL      12       0       0
   5   C6H12O6    -5.1   4.662     UNL       6       0       0
   6   C6H12O6    -4.9   2.676     UNL      16       0       0
   7   C6H12O6    -4.9   2.764     UNL      11       0       0
   8   C6H12O6    -4.7   3.878     UNL       8       0       0
In [5]:
Image(filename = "/Users/Nataliyadi/Desktop/OH1.png", width=500, height=500)
Out[5]:

2. Замена метильного радикала на NH3+

In [88]:
smiles = 'C1(C(C(C(C(O1)CO[H])O[H])O[H])O[H])[NH3+]'
mols= []
images=[]
m = oddt.toolkit.readstring('smi', smiles)
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 H H H H H H + N O O O O *****
In [89]:
res = dock_obj.dock(mols,prot)
for i,r in enumerate(res):
    r.write(filename='NH%s.pdb' % i, format='pdb')

Выбор наилучшего объекта для визуализации: (наилучший оказался нулевой)

In [90]:
print "    ".join(["№", "formula", "affin", "rmsd_ub", "name",'hbs','stack','phob'])
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) #Гидрофобные контакты
    print "%4d%10s%8s%8s%8s%8s%8s%8s" %(i,r.formula, r.data['vina_affinity'],  
                                        r.data['vina_rmsd_ub'], r.residues[0].name, 
                                        len(hbs[1]),len(stack[1]), len(phob[1]))
№    formula    affin    rmsd_ub    name    hbs    stack    phob
   0  C6H14NO5    -5.5   0.000     UNL      13       0       0
   1  C6H14NO5    -5.4   2.573     UNL      10       0       0
   2  C6H14NO5    -5.2   3.768     UNL       7       0       0
   3  C6H14NO5    -5.2   4.133     UNL       6       0       0
   4  C6H14NO5    -5.1   3.510     UNL       7       0       0
   5  C6H14NO5    -5.1   2.707     UNL      10       0       0
   6  C6H14NO5    -4.9   4.660     UNL       5       0       0
   7  C6H14NO5    -4.9   4.139     UNL       5       0       0
   8  C6H14NO5    -4.8   5.285     UNL       3       0       0
In [6]:
Image(filename = "/Users/Nataliyadi/Desktop/NH31.png", width=500, height=500)
Out[6]:

3. Замена метильного радикала на H

In [91]:
smiles = 'C1(C(C(C(C(O1)CO[H])O[H])O[H])[OH])[H]'
mols= []
images=[]
m = oddt.toolkit.readstring('smi', smiles)
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 O O O O H H H H *****
In [92]:
res = dock_obj.dock(mols,prot)
for i,r in enumerate(res):
    r.write(filename='H%s.pdb' % i, format='pdb')
In [93]:
print "    ".join(["№", "formula", "affin", "rmsd_ub", "name",'hbs','stack','phob'])
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) #Гидрофобные контакты
    print "%4d%10s%8s%8s%8s%8s%8s%8s" %(i,r.formula, r.data['vina_affinity'],  
                                        r.data['vina_rmsd_ub'], r.residues[0].name, 
                                        len(hbs[1]),len(stack[1]), len(phob[1]))
№    formula    affin    rmsd_ub    name    hbs    stack    phob
   0   C6H12O5    -5.3   0.000     UNL      15       0       0
   1   C6H12O5    -5.0   2.492     UNL       9       0       0
   2   C6H12O5    -4.9   3.869     UNL       7       0       0
   3   C6H12O5    -4.8   3.725     UNL       8       0       0
   4   C6H12O5    -4.8   4.771     UNL       5       0       0
   5   C6H12O5    -4.8   4.167     UNL       6       0       0
   6   C6H12O5    -4.8   5.441     UNL       8       0       0
   7   C6H12O5    -4.7   3.272     UNL      10       0       0
   8   C6H12O5    -4.6   4.852     UNL       6       0       0
In [7]:
Image(filename = "/Users/Nataliyadi/Desktop/H1.png", width=500, height=500)
Out[7]:

4. Замена метильного радикала на Ph

In [94]:
smiles = 'C1(C(C(C(C(O1)O[H])O[H])O[H])C2CCCCC2)O[H]'
mols= []
images=[]
m = oddt.toolkit.readstring('smi', smiles)
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 H H H H O O O O O *****
In [95]:
res = dock_obj.dock(mols,prot)
for i,r in enumerate(res):
    r.write(filename='Ph%s.pdb' % i, format='pdb')
In [96]:
print "    ".join(["№", "formula", "affin", "rmsd_ub", "name",'hbs','stack','phob'])
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) #Гидрофобные контакты
    print "%4d%10s%8s%8s%8s%8s%8s%8s" %(i,r.formula, r.data['vina_affinity'],  
                                        r.data['vina_rmsd_ub'], r.residues[0].name, 
                                        len(hbs[1]),len(stack[1]), len(phob[1]))
№    formula    affin    rmsd_ub    name    hbs    stack    phob
   0  C11H20O5    -5.9   0.000     UNL       7       0       7
   1  C11H20O5    -5.8   4.269     UNL       9       0       5
   2  C11H20O5    -5.7   2.205     UNL       5       0       8
   3  C11H20O5    -5.5   3.364     UNL       5       0       3
   4  C11H20O5    -5.5   3.534     UNL       4       0      12
   5  C11H20O5    -5.5   3.069     UNL       7       0       6
   6  C11H20O5    -5.5   5.791     UNL       9       0       4
   7  C11H20O5    -5.3   5.015     UNL       2       0       4
   8  C11H20O5    -5.2   2.958     UNL       3       0       1
In [8]:
Image(filename = "/Users/Nataliyadi/Desktop/Ph1.png", width=500, height=500)
Out[8]:

5. Замена метильного радикала на COO-

In [97]:
smiles = 'C1(C(C(C(C(O1)O[H])O[H])O[H])C(=O)O)O[H]'
mols= []
images=[]
m = oddt.toolkit.readstring('smi', smiles)
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 H H H H H O O O O O O O *****
In [98]:
res = dock_obj.dock(mols,prot)
for i,r in enumerate(res):
    r.write(filename='COO%s.pdb' % i, format='pdb')
In [99]:
print "    ".join(["№", "formula", "affin", "rmsd_ub", "name",'hbs','stack','phob'])
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) #Гидрофобные контакты
    print "%4d%10s%8s%8s%8s%8s%8s%8s" %(i,r.formula, r.data['vina_affinity'],  
                                        r.data['vina_rmsd_ub'], r.residues[0].name, 
                                        len(hbs[1]),len(stack[1]), len(phob[1]))
№    formula    affin    rmsd_ub    name    hbs    stack    phob
   0   C6H10O7    -5.5   0.000     UNL       8       0       0
   1   C6H10O7    -5.3   2.588     UNL       6       0       1
   2   C6H10O7    -5.2   3.507     UNL       5       0       1
   3   C6H10O7    -5.2   4.544     UNL      13       0       0
   4   C6H10O7    -5.2   3.024     UNL       8       0       1
   5   C6H10O7    -5.1   4.924     UNL      11       0       2
   6   C6H10O7    -5.0   3.170     UNL       9       0       1
   7   C6H10O7    -5.0   3.847     UNL      12       0       1
   8   C6H10O7    -5.0   3.262     UNL       6       0       0
In [9]:
Image(filename = "/Users/Nataliyadi/Desktop/COO1.png", width=500, height=500)
Out[9]:
In [101]:
#   formula    affin    rmsd_ub    name    hbs    stack    phob
#   C11H20O5   -5.9   0.000     UNL       7       0       7 
#   C6H10O7    -5.5   0.000     UNL       8       0       0 
#   C6H14NO5   -5.5   0.000     UNL      13       0       0 
#   C6H12O6    -5.4   0.000     UNL      13       0       0
#   C6H12O5    -5.3   0.000     UNL      15       0       0