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
import __main__
__main__.pymol_argv = [ 'pymol', '-qc' ]
import pymol
# Call the function below before using any PyMOL modules.
pymol.finish_launching()
pdb=pmx.Model('../hw6/.B99990001.pdb')
for r in pdb.residues[135:]:
print r #посмотрим остатки
# создание объектов белок и лиганда
newpdb = pdb.copy()
for r in newpdb.residues[-3:]:
newpdb.remove_residue(r)
lig = pdb.copy()
del lig.residues[:-3]
ax = []
for a in lig.atoms:
ax.append(a.x)
center = np.mean(ax, axis=0)
center
newpdb.writePDB('protein_not_ligand.pdb')
# Подготовка белка для докинга
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
# Лиганды для докинга
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)
# Докинг
#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) # Опишите выдачу
# do it
res = dock_obj.dock(mols, prot)
# Результаты докинга
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)
# Анализ докинга
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)
for i,r in enumerate(res):
r.write(filename = 'r%s.pdb' % i, format='pdb', overwrite=True)
# берем молекулу с наилучшей афинностью (афинность показывает силу взаимодействия)
pymol.cmd.load('./r0.pdb', 'ligand')
pymol.cmd.load('./protein_not_ligand.pdb', 'protein')
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')
Image('pic.png')