from rdkit import Chem
from rdkit.Chem import AllChem, Draw, Lipinski
from rdkit.Chem.Draw import SimilarityMaps, IPythonConsole
import pubchempy as pcp
import numpy as np
from IPython.display import SVG,Image
#отобразим ибупрофен формулой SMILES
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 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)
#вытащим CID азида
pcp.get_compounds('azide', 'name')
Отфильтруем полученные в формате SMILES из базы данных pubchem молекулы (список радикалов, содержащих азиды), оставив только содержащие ровно одну молекулярную формулу не длиннее 30, а затем проведем с ними химическую реакцию.
strings=np.genfromtxt('results.txt',dtype=np.str)
smiles_filtered = []
for line in strings:
if len(line[1]) < 30 and not ('.' in line[1]):
smiles_filtered.append(line[1])
print(len(smiles_filtered))
print(smiles_filtered)
#изменим ибупрофен для построения новых молекул и напишем новый смайлз
new_ibu = 'N1N=NC(=C1)C(C)CC1=CC=C(C=C1)C(C)C(=O)O'
new_ibu_vis = Chem.MolFromSmiles('N1N=NC(=C1)C(C)CC1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(new_ibu_vis)
display(new_ibu_vis)
putative_drugs = []
for smi in smiles_filtered:
if 'N=[N+]=[N-]' in smi:
newsmi=smi.replace('N=[N+]=[N-]',new_ibu)
else:
continue
try:
newmol=Chem.MolFromSmiles(newsmi)
if Lipinksy_checker(newmol) == True:
putative_drugs.append(newmol)
except:
pass
len(putative_drugs)
Получилось всего 12 подходящих соединений Визуализируем эти молекулы
for drug in putative_drugs:
print(drug)
AllChem.Compute2DCoords(drug)
pil = Draw.MolsToGridImage(putative_drugs, useSVG=True, molsPerRow=3, maxMols=12, subImgSize=(350, 350))
display (pil)
Посмотрим на схожесть ибупрофена с его производным (пятый в массиве), построив карту сходства.
fig, maxweight = SimilarityMaps.GetSimilarityMapForFingerprint(ibu, \
putative_drugs[4], SimilarityMaps.GetMorganFingerprint)
maxweight
Сходство небольшое, вес маленький.
Визуализируем в 3D
m3d = Chem.AddHs(putative_drugs[4])
Chem.AllChem.EmbedMolecule(m3d)
AllChem.MMFFOptimizeMolecule(m3d, maxIters=500, nonBondedThresh=200)
m3d
загрузим NGL viewer
import nglview as nv
nv.show_rdkit(m3d)
Установить модуль удалось, но никакой реакции на команду не последовало
view = nv.show_rdkit(m3d)
view
Впрочем, как и на пример из гитхаба
view = nv.show_pdbid("3pqr") # load "3pqr" from RCSB PDB and display viewer widget
view