Цель занятия: используя пакет моудлей RDkit, предложить аналог ибупрофена
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
import rdkit.Chem.Lipinski as Lipinksy
import pubchempy as pcp
import pandas as pd
from IPython.display import SVG
import random
from IPython.display import display
from rdkit.Chem.Draw import SimilarityMaps
import nglview as nv
import nglview as nv
from IPython.display import Image
Нарисуем ибупрофен
ibu=Chem.MolFromSmiles('CC(C)CC1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(ibu)
display(ibu)
# функция проверяет выполнение правила Лепински
def Lipinksy_checker(molecule):
Lipinksy_check = bool(Lipinksy.NumHDonors(molecule) <= 5
and Lipinksy.NumHAcceptors(molecule) <= 10
and Lipinksy.rdMolDescriptors.CalcExactMolWt(molecule) < 500
and Lipinksy.rdMolDescriptors.CalcCrippenDescriptors(ibu)[0] <= 5)
return Lipinksy_check
Lipinksy_checker(ibu)
Теперь введем в ибупрофен азидную группу. Дальше вместо азида ибупрофена будем подставлять азид других соединений. Должно получить, как если бы прошла така реакция:
Image(filename="click.png")
ibu_azid = Chem.MolFromSmiles('N1N=NC=C1C(C(O)=O)C(C=C1)=CC=C1CC(C)C')
AllChem.Compute2DCoords(ibu_azid)
display(ibu_azid)
Lipinksy_checker(ibu_azid)
# Вручную скачала 76,454 азидов с PubChem в файл azides.csv
strings = pd.read_csv('azides.csv')["isosmiles"]
smiles = []
# Отсеиваем слишком большие соединения
# и те соединения, в которые входят не соединенные группы
for line in strings:
if len(line) < 30 and not '.' in line:
smiles.append(line)
len(smiles)
# модифицируем
ibu_azid_sm = 'N1N=NC=C1C(C(O)=O)C(C=C1)=CC=C1CC(C)C'
res = []
for smi in smiles:
if 'N=[N+]=[N-]' in smi:
newsmi=smi.replace('N=[N+]=[N-]',ibu_azid_sm)
else:
continue
try:
newmol=Chem.MolFromSmiles(newsmi)
if Lipinksy_checker(newmol) == True:
AllChem.Compute2DCoords(newmol)
res.append(newmol)
except:
pass
len(res)
# Примеры
display(Draw.MolsToGridImage(
res,
maxMols=9,
molsPerRow=3,
subImgSize=(400, 400))
)
Построим Similiraty Map ибупрофена с пятым веществом из получившегося массива.
similarity_map = SimilarityMaps.GetMorganFingerprint(res[4], fpType='bv')
fig, maxweight = SimilarityMaps.GetSimilarityMapForFingerprint(ibu, res[4], SimilarityMaps.GetMorganFingerprint)
3D
m3d=Chem.AddHs(res[4])
Chem.AllChem.EmbedMolecule(m3d)
AllChem.MMFFOptimizeMolecule(m3d,maxIters=500,nonBondedThresh=200 )
display(m3d)