Используя пакет модулей RDkit, попробуем предложить аналог ибупрофена. Для этого нужно:

1) на сайте PubChem найти все радикалы c азидом для Click Chemistry и скачать их SMILES нотации

2) Найти формулу ибупрофена и предложить способ изменения его SMILES для эмуляции продукта Click Chemistry

3) Заменить в найденых радикалах азидную группу на модифцированный ибупрофен.

4) Превратить новые SMILES в объекты-молекулы

5) Отобрать те молекулы, которые удовлетворяют правилу пяти Lepinsky

Загрузим модули RDkit

In [1]:
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 [13]:
ibu=Chem.MolFromSmiles('CC(C)CC1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(ibu)
display(ibu)
#Удалим изопропил и сделаем тройную связь
test_template=Chem.MolFromSmiles('C#CC1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(test_template)
display(test_template)
#Добавим ароматическое кольцо
template=Chem.MolFromSmiles('N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(template)
display(template)
#Будем использовать это соединение дальше

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

In [14]:
import rdkit.Chem.Lipinski as Lipinksy
print Lipinksy.NumHDonors(template)
print Lipinksy.NumHAcceptors(template)
print Lipinksy.rdMolDescriptors.CalcExactMolWt(template)
print Lipinksy.rdMolDescriptors.CalcCrippenDescriptors(template)[0]
2
3
217.085126592
1.6598

Загрузим скаченные данные и отфильтруем

In [6]:
strings=np.genfromtxt('pubchem.txt',dtype=np.str)
smiles = []
for line in strings:
    if len(line[1]) < 30 and not '.' in line[1]:
        smiles.append(line[1])

Пстроим новые молекулы и отфильтруем

In [10]:
mols = []
n = 1
for smi in smiles:
    
    if 'N=[N+]=[N-]' in smi:
        newsmi=smi.replace('N=[N+]=[N-]','N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O')
    else:
        continue
   
# Новую молекулу лучше создавать в try из-за битых  Smiles
    try:
        newmol=Chem.MolFromSmiles(newsmi)
        don = Lipinksy.NumHDonors(newmol)
        acc = Lipinksy.NumHAcceptors(newmol)
        mass = Lipinksy.rdMolDescriptors.CalcExactMolWt(newmol)
        crip = Lipinksy.rdMolDescriptors.CalcCrippenDescriptors(newmol)[0]
        if don <= 3 and don >=2 and acc <= 6 and acc >= 2 and mass <= 300.0 and mass >= 200.0 and crip <= 3.5:
            print n
            mols.append(newmol)
            AllChem.Compute2DCoords(newmol)
            display(newmol)
            n = n + 1
    except:
        pass

print len(mols)   
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
RDKit ERROR: [15:39:39] 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: [15:39:39] 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'
22
23
24
25
26
27
28
29
30
RDKit ERROR: [15:39:40] 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'
31
32
33
34
35
36
RDKit ERROR: [15:39:40] 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'
37
38
39
RDKit ERROR: [15:39:41] 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: [15:39:41] 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'
40
41
RDKit ERROR: [15:39:42] 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: [15:39:42] 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: [15:39:42] 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'
42
43
44
RDKit ERROR: [15:39:42] 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: [15:39:42] 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'
45
46
47
RDKit ERROR: [15:39:43] 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'
48
49
50
RDKit ERROR: [15:39:43] 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: [15:39:43] 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'
51
52
53
54
RDKit ERROR: [15:39:43] 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'
55
RDKit ERROR: [15:39:43] 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'
56
57
58
59
60
61
RDKit ERROR: [15:39:44] SMILES Parse Error: extra open parentheses for input: 'CC(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
62
63
64
RDKit ERROR: [15:39:44] 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: [15:39:44] 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'
65
RDKit ERROR: [15:39:44] 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'
66
67
68
69
70
RDKit ERROR: [15:39:44] 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: [15:39:44] 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: [15:39:44] 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'
71
72
73
74
75
76
77
78
79
80
81
82
83
84
RDKit ERROR: [15:39:45] 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: [15:39:45] 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'
85
86
87
88
89
90
RDKit ERROR: [15:39:46] 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: [15:39:46] 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'
91
92
93
94
RDKit ERROR: [15:39:47] 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: [15:39:47] 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: [15:39:47] 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'
95
96
97
98
99
100
RDKit ERROR: [15:39:47] 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: [15:39:47] 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: [15:39:47] 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: [15:39:47] 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: [15:39:47] 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'
101
102
RDKit ERROR: [15:39:49] 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'
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
RDKit ERROR: [15:39:52] Explicit valence for atom # 1 Cl, 2, is greater than permitted
138
139
140
141
142
143
144
145
146
147
148
149
150
151
RDKit ERROR: [15:39:53] 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'
152
153
154
155
RDKit ERROR: [15:39:54] 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: [15:39:54] 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: [15:39:54] 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'
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
RDKit ERROR: [15:39:56] 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'
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
RDKit ERROR: [15:39:58] SMILES Parse Error: extra open parentheses for input: 'CC(CN1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O)(C'
205
206
207
208
209
210
211
212
RDKit ERROR: [15:39:58] 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: [15:39:58] 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: [15:39:58] 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: [15:39:58] 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: [15:39:58] 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: [15:39:58] 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'
213
RDKit ERROR: [15:39:59] 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: [15:39:59] 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'
214
RDKit ERROR: [15:39:59] 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'
215
216
217
218
219
220
221
222
223
RDKit ERROR: [15:39:59] 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'
224
225
226
227
RDKit ERROR: [15:40:00] 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: [15:40:00] 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+]'
228
229
RDKit ERROR: [15:40:00] 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'
230
231
232
233
234
235
RDKit ERROR: [15:40:00] 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: [15:40:00] 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+]'
236
237
238
239
240
241
242
243
244
244

Пострим 3D модель для 125 соединения

In [11]:
m3d=Chem.AddHs(mols[124])
Chem.AllChem.EmbedMolecule(m3d)
AllChem.MMFFOptimizeMolecule(m3d,maxIters=500,nonBondedThresh=200 )
Out[11]:
0
In [12]:
import nglview as nv
nv.show_rdkit(m3d)