загрузим модули 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
визуализируем ибупрофен:
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 checkLipinski (ibu):
if Lipinksy.NumHDonors(ibu)<=5 and Lipinksy.NumHAcceptors(ibu) <= 10 and Lipinksy.rdMolDescriptors.CalcExactMolWt(ibu) < 500 and Lipinksy.rdMolDescriptors.CalcCrippenDescriptors(ibu)[0] <=5:
return True
else:
return False
изменим формулу ибупрофена и получим шаблон для замены азидного радикала, имитируя реакцию Click-химии:
ibu_mod=Chem.MolFromSmiles('N1N=NC(=C1)C(C)CC1=CC=C(C=C1)C(C)C(=O)O')
ibu_mod1 = 'N1N=NC(=C1)C(C)CC1=CC=C(C=C1)C(C)C(=O)O'
AllChem.Compute2DCoords(ibu_mod)
display(ibu_mod)
загрузим список азидов из PubChem
Substructure/superstructure, идем в CID,SMILES/SMARTS,InChi, вбиваем 33558, в Options выбираем Substructure. К полученным результатам прибавляем условия и получаем команду:
69448 результатов
отфильтруем скачанные данные
strings=np.genfromtxt('3275445470557341278.txt',dtype=np.str)
smiles = []
for line in strings:
if len(line[1]) < 30 and len(line[1]) > 11 and not '.' in line[1]:
smiles.append(line[1])
len(smiles)
замещаем азид на ибупрофен. на вход подаются 2281 формулы азидов
# Новую молекулу лучше создавать в try из-за битых Smiles
mass = []
for smi in smiles:
if 'N=[N+]=[N-]' in smi:
newsmi=smi.replace('N=[N+]=[N-]',ibu_mod1)
else:
continue
try:
newmol=Chem.MolFromSmiles(newsmi)
if checkLipinski(Chem.MolFromSmiles(newsmi)):
mass.append(newsmi)
except Exception:
pass
print(len(mass))
посмотрим на некоторые из отфильтрованных компонент
from random import sample
samplelist = []
for item in sample(mass, 10):
samplelist.append(Chem.MolFromSmiles(item))
Chem.Draw.MolsToGridImage(samplelist,useSVG=True, molsPerRow=3, subImgSize=(300, 300))
нужно построить Similarity Map ибупрофена с пятым веществом из массива
from rdkit.Chem.Draw import SimilarityMaps
fp = SimilarityMaps.GetMorganFingerprint(ibu, fpType='bv')
fig, maxweight = SimilarityMaps.GetSimilarityMapForFingerprint(ibu, samplelist[4], SimilarityMaps.GetMorganFingerprint)
построим трехмерную структуру полученной молекулы
m3d=Chem.AddHs(samplelist[4])
Chem.AllChem.EmbedMolecule(m3d)
AllChem.MMFFOptimizeMolecule(m3d,maxIters=500,nonBondedThresh=200 )
m3d
покажем первую конформацию лиганда
import nglview as nv
import ipywidgets
в общем, widget_image,например, не работал, кажется, его просто нет на гитхабе на данный момент, а nglview его требует. сама скачала из интернета и положила в папочку. но тут все очень сложно со структурой оказалось