Домашняя работа №3

  • На сайте PubChem найти все радикалы c азидом для Click Chemistry и скачать их SMILES нотации
  • Найти формулу ибупрофена и предложить способ изменения его SMILES для эмуляции реагента Click Chemistry (заменить изопропил на этин он же ацителен)
  • Заменить в найденых радикалах азидную группу на модифцированный ибупрофен.
  • Превратить новые SMILES в объекты-молекулы
  • Отобрать те молекулы, которые удовлетворяют правилу пяти Lipinski

Скаченный файл доступен по ссылке:

ftp://ftp-private.ncbi.nlm.nih.gov/pubchem/.fetch/71/3569475554907212158.txt.gz

В поиск вводилась нотация SMILES вида [N]=[N+]=[N-&!R], чтобы избежать попадания в кольцо

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]:
from rdkit import Chem
In [4]:
ibu=Chem.MolFromSmiles('CC(C)CC1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(ibu)
display(ibu)

Правила Липински

In [5]:
import rdkit.Chem.Lipinski as Lipinksy
In [6]:
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 [8]:
ibu_mod = Chem.MolFromSmiles('C#CC1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(ibu_mod)
display(ibu_mod)

Загрузка данных

In [9]:
strings = np.genfromtxt('/Users/Nataliyadi/Downloads/Golovin/my_file.txt', dtype = np.str) 

Фильтрация

In [11]:
smiles = []
for line in strings:
        if len(line[1]) < 30 and not '.' in line[1]:
            smiles.append(line[1])
In [12]:
len(smiles)
Out[12]:
11248
In [13]:
ibu_temp = Chem.MolFromSmiles('N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(ibu_temp)
display(ibu_temp)

Произведем замену SMILES из my_file азида на template

In [14]:
newsmi = []
for smi in smiles[:len(smiles)]:
    if 'N=[N+]=[N-]'  in smi:
        newsmi.append(smi.replace('N=[N+]=[N-]','N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O'))
    else:
        continue

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

In [26]:
Lip5 = []
for smi in newsmi:
    try:
        mol = Chem.MolFromSmiles(smi)
        if(Lipinksy.NumHDonors(mol) < 5 and\
          Lipinksy.rdMolDescriptors.CalcExactMolWt(mol) < 500 and\
          Lipinksy.rdMolDescriptors.CalcCrippenDescriptors(mol)[0] < 5 and\
          Lipinksy.NumHAcceptors(mol) <= 10):
            Lip5.append(smi)
    except:
        pass
len(Lip5)    
RDKit ERROR: [18:47:45] SMILES Parse Error: extra open parentheses for input: 'C1=C(C(=C(N1)N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:45] Explicit valence for atom # 4 Cl, 3, is greater than permitted
RDKit ERROR: [18:47:47] SMILES Parse Error: extra open parentheses for input: 'CC1=C(C=CC(=C1CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:47] SMILES Parse Error: extra open parentheses for input: 'CC(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(COC(=O)CCCC'
RDKit ERROR: [18:47:47] SMILES Parse Error: extra open parentheses for input: 'C1=CC(=C(C=C1N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:48] SMILES Parse Error: extra open parentheses for input: 'CC1C=C(C=CC1OCN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C(C'
RDKit ERROR: [18:47:48] SMILES Parse Error: extra open parentheses for input: 'C1=CC(=C(C=C1N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:48] SMILES Parse Error: extra open parentheses for input: 'CC1=NC(=C(C(=C1)N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:49] SMILES Parse Error: extra open parentheses for input: 'C1=CC(=CC=C1C(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:49] SMILES Parse Error: extra open parentheses for input: 'C1=CC(=CC=C1C(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:49] SMILES Parse Error: extra open parentheses for input: 'CCOC(=O)C(CCN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:47:49] SMILES Parse Error: extra open parentheses for input: 'CCOC(=O)C(CCCN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(CC'
RDKit ERROR: [18:47:49] SMILES Parse Error: extra open parentheses for input: 'C1=C(C=C(C=C1N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:49] SMILES Parse Error: extra open parentheses for input: 'CC(CCC(=O)OCCN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:47:50] SMILES Parse Error: extra open parentheses for input: 'CC1=C(C(C(C(C1N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:47:50] SMILES Parse Error: extra open parentheses for input: 'C1=CC(C(C(C1N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:47:50] SMILES Parse Error: extra open parentheses for input: '[B](N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)[P+](CS'
RDKit ERROR: [18:47:50] SMILES Parse Error: extra open parentheses for input: 'C1CC([C@@H](CC1CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:50] SMILES Parse Error: extra open parentheses for input: 'CC(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:47:50] SMILES Parse Error: extra open parentheses for input: 'C1=C(N(C(=N1)CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:50] SMILES Parse Error: extra open parentheses for input: 'CC(CCC(=O)OCCCN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:47:50] SMILES Parse Error: extra open parentheses for input: 'CCC(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(/C(=C/C'
RDKit ERROR: [18:47:50] SMILES Parse Error: extra open parentheses for input: 'CC(CCCCCN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:47:50] SMILES Parse Error: extra open parentheses for input: 'CC(CCCCCN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:47:51] SMILES Parse Error: extra open parentheses for input: 'CC1=C(C=CC(=C1N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:51] SMILES Parse Error: extra open parentheses for input: 'C1CC(CCC1N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(CC'
RDKit ERROR: [18:47:51] SMILES Parse Error: extra open parentheses for input: 'CC(CCC(=O)OCCCN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:47:52] SMILES Parse Error: extra open parentheses for input: 'C1=CC(=C(C=C1N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:52] SMILES Parse Error: extra open parentheses for input: 'CC1=NC(=C(C(=C1)N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:53] SMILES Parse Error: extra open parentheses for input: 'CC=CC(CCN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:47:53] SMILES Parse Error: extra open parentheses for input: 'CCC=CC(CCN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:47:53] SMILES Parse Error: extra open parentheses for input: 'CCC=CC(CCCN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:47:53] SMILES Parse Error: extra open parentheses for input: 'C(CNC(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:53] SMILES Parse Error: extra open parentheses for input: 'C1=CC(=CC=C1NC(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:53] SMILES Parse Error: extra open parentheses for input: 'C1=CC(=CC=C1NC(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:53] SMILES Parse Error: extra open parentheses for input: 'C(CNC(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:53] SMILES Parse Error: extra open parentheses for input: 'C1=CC(=CC=C1NC(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:55] SMILES Parse Error: extra open parentheses for input: 'C(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)CN(CC'
RDKit ERROR: [18:47:57] Explicit valence for atom # 1 Cl, 2, is greater than permitted
RDKit ERROR: [18:47:57] SMILES Parse Error: extra open parentheses for input: 'CC1=CC(=C(C(=C1)N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:58] SMILES Parse Error: extra open parentheses for input: 'C1=CC(=C(C=C1CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:58] SMILES Parse Error: extra open parentheses for input: 'CC(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)CN1CCC(CC1)(C'
RDKit ERROR: [18:47:58] SMILES Parse Error: extra open parentheses for input: 'C1=C(N=C(C(=N1)N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:47:59] SMILES Parse Error: extra open parentheses for input: 'C1=CC(=C(C=C1CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:48:00] SMILES Parse Error: extra open parentheses for input: 'CC(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:48:01] SMILES Parse Error: extra open parentheses for input: 'CC/C=C/CCC(CCN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:48:01] SMILES Parse Error: extra open parentheses for input: 'CC(=CCC(CCN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:48:01] SMILES Parse Error: extra open parentheses for input: 'C/C=C/CC(CCN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:48:01] SMILES Parse Error: extra open parentheses for input: 'CCC(CCCN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:48:01] SMILES Parse Error: extra open parentheses for input: 'CCC(CCN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:48:01] SMILES Parse Error: extra open parentheses for input: 'C[Si](C)(C)OC(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:48:01] SMILES Parse Error: extra open parentheses for input: 'CC/C=C\CCC(CCN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:48:01] SMILES Parse Error: extra open parentheses for input: 'CC(=CCC(CCCN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:48:01] SMILES Parse Error: extra open parentheses for input: 'C(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)[C@@H](C'
RDKit ERROR: [18:48:01] SMILES Parse Error: extra open parentheses for input: 'COC[C@@](CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
RDKit ERROR: [18:48:02] SMILES Parse Error: extra open parentheses for input: 'C(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)CO/C(=C/[N+]'
RDKit ERROR: [18:48:02] SMILES Parse Error: extra open parentheses for input: 'C(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)CO/C(=C/[N+]'
RDKit ERROR: [18:48:02] SMILES Parse Error: extra open parentheses for input: 'C1=C(C=NC(=C1N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)C'
RDKit ERROR: [18:48:02] SMILES Parse Error: extra open parentheses for input: 'C(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)COC(=C[N+]'
RDKit ERROR: [18:48:02] SMILES Parse Error: extra open parentheses for input: 'C(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)COC(=C[N+]'
Out[26]:
7563
In [41]:
mols = []
for smi in Lip5[38:43]:
    mol = Chem.MolFromSmiles(smi)
    AllChem.Compute2DCoords(mol)
    print(smi)
    display(mol)
    mols.append(mol)
C1CC(=C(C1)Br)CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O
C1CCC(=C(C1)CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)Br
C1=NNC(=C1C=O)N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O
C1C=CNN1C(=O)CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O
C1=CC(C(=O)C=C1)N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O

Для отображения была выбрана 38 молекула

In [27]:
my_smile = Lip5[38]
my_mol = Chem.MolFromSmiles(my_smile)
display(my_mol)
In [28]:
m3d=Chem.AddHs(my_mol)
Chem.AllChem.EmbedMolecule(m3d)
AllChem.MMFFOptimizeMolecule(m3d,maxIters=500,nonBondedThresh=200 )
Out[28]:
0

3D структура выбранной молекулы

In [29]:
m3d
Out[29]:
In [44]:
Lip5[38]
Out[44]:
'C1CC(=C(C1)Br)CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O'
In [35]:
import nglview as nv
In [40]:
nv.show_rdkit(m3d)

Команда не выдала результат, поэтому по SMILES был восстановлен .pdb файл, и нарисован в PyMol

In [45]:
from IPython.display import Image
Image(filename='/Users/Nataliyadi/Downloads/Golovin/Lip5.png')
Out[45]: