Директория на ShadBox:
/hse/amironov/Task7
Докинг низкомолекулярных лигандов в структуру белка
import numpy as np
import pandas as pd
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
pdb=pmx.Model('good.B99990001.pdb')
for r in pdb.residues[135:]:
print r #посмотрим остатки
Последние 3 остатка (NAG, NAG, NDG) являются присоединенным лигандом
# создание объектов белок и лиганда
newpdb = pdb.copy()
for r in newpdb.residues[-3:]:
newpdb.remove_residue(r)
lig = pdb.copy()
del lig.residues[:-3]
s = np.zeros(3)
for a in lig.atoms:
s = s + a.x
ligand_center = s/len(lig.atoms)
ligand_center
newpdb.writePDB('newPDB.pdb')
Готовим белок для докинга
prot = oddt.toolkit.readfile('pdb','newPDB.pdb').next()
prot.OBMol.AddPolarHydrogens()
prot.OBMol.AutomaticPartialCharge()
Лиганды для докинга
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)
xx = ligand_center[0]
yy = ligand_center[1]
zz = ligand_center[2]
dock_obj= oddt.docking.AutodockVina.autodock_vina(
protein=prot,size=(20,20,20),center=[xx,yy,zz],
executable='/usr/bin/vina',autocleanup=True, num_modes=9)
print dock_obj.tmp_dir
print('Center coordinates')
print " ".join(dock_obj.params[0:6])
print ("№ of points")
print " ".join(dock_obj.params[6:12])
print ("Number Of CPU Cores")
print " ".join(dock_obj.params[12:14])
print("Exhaustiveness parameter")
print " ".join(dock_obj.params[14:16])
print("Number of conformations generated by Autodock Vina")
print " ".join(dock_obj.params[16:18])
print("Energy range cutoff for Autodock Vina")
print " ".join(dock_obj.params[18:20])
res = dock_obj.dock(mols,prot)