from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit import RDConfig
from rdkit.Chem.Draw import IPythonConsole
from rdkit.Chem import Draw
import numpy as np
from IPython.display import display,Image
Рисуем ибупрофен:
ibu=Chem.MolFromSmiles('CC(C)CC1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(ibu)
display(ibu)
Посчитаем параметры для правила Лепински: количество доноров и акцепторов водородной связи, молекулярная масса, гидрофобность (logP).
import rdkit.Chem.Lipinski as Lipinksy
print Lipinksy.NumHDonors(ibu)
print Lipinksy.NumHAcceptors(ibu)
print Lipinksy.rdMolDescriptors.CalcExactMolWt(ibu)
print Lipinksy.rdMolDescriptors.CalcCrippenDescriptors(ibu)[0]
Загрузим скаченные данные с радикалами с азидом и отфильтруем:
strings=np.genfromtxt('423776634641398567.txt',dtype=np.str)
smiles=[]
for line in strings:
if len(line[1]) < 30 and not '.' in line[1]:
smiles.append(line[1])
Нарисуем производное ибупрофена для Click Chemistry:
azid_ibu=Chem.MolFromSmiles('N(N=N1)C=C1-C1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(azid_ibu)
display(azid_ibu)
Построим новые молекулы, заменив азидный фрагмент на производное ибупрофена, и нарисуем те, что удовледтворяют правилу Лепински. Выберем минимальное по массе соединение.
molecules=[]
mol=[]
min_mass=500
for smi in smiles[:100]:
azid = 'N=[N+]=[N-]'
ibu_azid = "N(N=N1)C=C1-C1=CC=C(C=C1)C(C)C(=O)O"
if azid in smi:
newsmi=smi.replace(azid, ibu_azid)
else:
continue
try:
newmol=Chem.MolFromSmiles(newsmi)
if (Lipinksy.NumHDonors(newmol) <= 5) and (Lipinksy.NumHAcceptors(newmol) <= 10) and (Lipinksy.rdMolDescriptors.CalcExactMolWt(newmol) <= 500) and (Lipinksy.rdMolDescriptors.CalcCrippenDescriptors(newmol)[0] <= 5):
molecules.append(newsmi)
AllChem.Compute2DCoords(newmol)
mol.append(newmol)
if min_mass > Lipinksy.rdMolDescriptors.CalcExactMolWt(newmol):
min_mass=Lipinksy.rdMolDescriptors.CalcExactMolWt(newmol)
min_mol=newmol
except:
pass
img=Draw.MolsToGridImage(mol,molsPerRow=8,subImgSize=(300,300))
img.save('molgrid.png')
Image(url="molgrid.png")
Вставка картинки Построим 3D молекулы с минимальной молекулярной массой:
print "Molecular weight is", Lipinksy.rdMolDescriptors.CalcExactMolWt(min_mol)
display (min_mol)
m3d=Chem.AddHs(min_mol)
Chem.AllChem.EmbedMolecule(m3d)
AllChem.MMFFOptimizeMolecule(m3d,maxIters=500,nonBondedThresh=200)
Image(url="3D.PNG")