In [2]:
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

Ибупрофен:

In [3]:
ibu=Chem.MolFromSmiles('CC(C)CC1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(ibu)
display(ibu)

Параметры для правила Лепински:

In [4]:
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]
1
1
206.130679816
3.0732

Функция, проверяющая соответствие правилу Лепински:

In [5]:
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

Ибупрофен удовлетворяет правилу Лепински:

In [6]:
lipinsky_rule(ibu)
Out[6]:
True

Аналог ибупрофена, полученный с помощью клик-химии:

In [7]:
ibu1=Chem.MolFromSmiles('N2=NNC(C1=CC=C(C=C1)C(C)C(=O)O)=C2')
AllChem.Compute2DCoords(ibu1)
display(ibu1)
In [8]:
lipinsky_rule(ibu1)
Out[8]:
True

Небольшие радикалы, содержащие азид:

In [9]:
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])
In [10]:
len(smiles)
Out[10]:
852

Отбор молекул со встроенным аналогом ибупрофена, удовлетворяющих правилу Лепински:

In [11]:
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)    
    
Out[11]:
785

Несколько из отобранных молекул:

In [12]:
Chem.Draw.MolsToGridImage(result_mols[:16], molsPerRow=4, subImgSize=(500, 300))
Out[12]:

Similiraty Map ибупрофена с пятым веществом:

In [13]:
from rdkit.Chem.Draw import SimilarityMaps
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-13-3809caa226f4> in <module>()
----> 1 from rdkit.Chem.Draw import SimilarityMaps

C:\Users\User\Miniconda3\envs\molsim\lib\site-packages\rdkit\Chem\Draw\SimilarityMaps.py in <module>()
     34 import math
     35 
---> 36 from matplotlib import cm
     37 from matplotlib.colors import LinearSegmentedColormap
     38 import numpy

ImportError: No module named matplotlib

У меня не установился SimilarityMaps, и я решила ничего с этим не делать. Может быть, потом исправлю. (вряд ли)

3D-структура:

In [14]:
m3d=Chem.AddHs(result_mols[4])
Chem.AllChem.EmbedMolecule(m3d)
AllChem.MMFFOptimizeMolecule(m3d,maxIters=500,nonBondedThresh=200 )

m3d
Out[14]:
In [15]:
import nglview as nv

nv.show_rdkit(m3d)
Widget Javascript not detected.  It may not be installed properly. Did you enable the widgetsnbextension? If not, then run "jupyter nbextension enable --py --sys-prefix widgetsnbextension"

Не работает :( И widgetsnbextension не помогает.