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)
Параметры для правила Лепински:
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]
Функция, проверяющая соответствие правилу Лепински:
def lipinsky_rule(mol):
if Lipinksy.NumHDonors(mol) <= 5 and Lipinksy.NumHAcceptors(mol) <= 10 and Lipinksy.rdMolDescriptors.CalcExactMolWt(mol) < 500 and Lipinksy.rdMolDescriptors.CalcCrippenDescriptors(mol)[0] <= 5:
return True
Ибупрофен удовлетворяет правилу Лепински:
lipinsky_rule(ibu)
Аналог ибупрофена, полученный с помощью клик-химии:
ibu1=Chem.MolFromSmiles('N2=NNC(C1=CC=C(C=C1)C(C)C(=O)O)=C2')
AllChem.Compute2DCoords(ibu1)
display(ibu1)
lipinsky_rule(ibu1)
Небольшие радикалы, содержащие азид:
import urllib2
file = urllib2.urlopen('ftp://ftp-private.ncbi.nlm.nih.gov/pubchem/.fetch/70/2478449403505675233.txt')
smiles = []
for line in file:
line = line.split()
if (len(line[1]) < 30) and not ( '.' in line[1]):
smiles.append(line[1])
len(smiles)
Отбор молекул со встроенным аналогом ибупрофена, удовлетворяющих правилу Лепински:
result_mols = []
for smi in smiles:
if 'N=[N+]=[N-]' in smi:
newsmi=smi.replace('N=[N+]=[N-]', 'N1C=C(C2=CC=C(C=C2)C(C)C(=O)O)N=N1')
else:
continue
try:
newmol=Chem.MolFromSmiles(newsmi)
if lipinsky_rule(newmol) == True:
result_mols.append(newmol)
except:
pass
len(result_mols)
Несколько из отобранных молекул:
Chem.Draw.MolsToGridImage(result_mols[:16], molsPerRow=4, subImgSize=(500, 300))
Similiraty Map ибупрофена с пятым веществом:
from rdkit.Chem.Draw import SimilarityMaps
У меня не установился SimilarityMaps, и я решила ничего с этим не делать. Может быть, потом исправлю. (вряд ли)
3D-структура:
m3d=Chem.AddHs(result_mols[4])
Chem.AllChem.EmbedMolecule(m3d)
AllChem.MMFFOptimizeMolecule(m3d,maxIters=500,nonBondedThresh=200 )
m3d
import nglview as nv
nv.show_rdkit(m3d)
Не работает :( И widgetsnbextension не помогает.