Попытаемся предложить аналог ибупрофена.
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
def rule_of_5(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
else:
return False
rule_of_5(ibu)
С помощью SMILES покажем, как будет выглядеть модифицированный ибупрофен, которым мы будем заменять азидную группу в радикалах (для этого пришлось представить, как бы прошла реакция клик-химии).
ibu_mod=Chem.MolFromSmiles('N1N=NC(=C1)C(C)CC1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(ibu_mod)
display(ibu_mod)
rule_of_5(ibu_mod)
Получим SMILES всех небольших радикалов, содержащих азидную группу, с сайта PubChem.
#strings=np.genfromtxt('2501540076512678923.txt',dtype=np.str)
file = open('2501540076512678923.txt', 'r')
strings = file.read().split("\n")[:-1]
smiles = []
for line in strings:
line = line.split()
#print(line[1])
if (len(line[1]) < 30) and (not '.' in line[1]):
smiles.append(line[1])
Заменим азидную группу на модифицированный ибупрофен и из получившихся молекул отберем те, которые удовлетворяют правилу пяти Лепински.
correct_mols = []
for smi in smiles:
if 'N=[N+]=[N-]' in smi:
#print(smi)
newsmi=smi.replace('N=[N+]=[N-]', 'N1N=NC(=C1)C(C)CC1=CC=C(C=C1)C(C)C(=O)O')
else:
continue
try:
newmol=Chem.MolFromSmiles(newsmi)
if rule_of_5(newmol) == True:
correct_mols.append(newmol)
except:
pass
Отобразим несколько молекул, прошедших отбор.
Chem.Draw.MolsToGridImage(correct_mols[:9], molsPerRow=3, subImgSize=(500, 400))
Построим Similiraty Map ибупрофена с пятым веществом из массива.
from rdkit.Chem.Draw import SimilarityMaps
fp = SimilarityMaps.GetMorganFingerprint(correct_mols[4], fpType='bv')
fig, maxweight = SimilarityMaps.GetSimilarityMapForFingerprint(ibu, \
correct_mols[4], SimilarityMaps.GetMorganFingerprint)
Загрузим 3D структуру и покажем конформацию лиганда.
m3d=Chem.AddHs(correct_mols[4])
Chem.AllChem.EmbedMolecule(m3d)
AllChem.MMFFOptimizeMolecule(m3d,maxIters=500,nonBondedThresh=200 )
m3d
import nglview as nv
import ipywidgets
Показывает только на кодомо ((
nv.show_rdkit(m3d)