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
RDKit WARNING: [15:10:25] Enabling RDKit 2019.09.3 jupyter extensions
ibu=Chem.MolFromSmiles('CC(C)CC1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(ibu)
display(ibu)
# Для того, чтобы задействовать ибупрофен в реакции клик-химии, нужно поменять его SMILES так, чтобы появилась тройная связь
bibu = Chem.MolFromSmiles('C#CC(C)CC1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(bibu)
display(bibu)
# И тогда в результате клик-реакции должно получится следующее соединение
ibuzid ='N1N=NC(C(C)CC2=CC=C(C=C2)C(C)C(=O)O)=C1'
mod_ibu = Chem.MolFromSmiles(ibuzid)
AllChem.Compute2DCoords(mod_ibu)
display(mod_ibu)
import rdkit.Chem.Lipinski as Lipinksy
print (Lipinksy.NumHDonors(ibu))
print (Lipinksy.NumHAcceptors(ibu))
print (Lipinksy.rdMolDescriptors.CalcExactMolWt(ibu))
print (Lipinksy.rdMolDescriptors.CalcCrippenDescriptors(ibu)[0])
1 1 206.130679816 3.073200000000001
conda install -c jirinovo pubchempy
Collecting package metadata (current_repodata.json): done Solving environment: done ==> WARNING: A newer version of conda exists. <== current version: 4.8.2 latest version: 4.9.2 Please update conda by running $ conda update -n base -c defaults conda ## Package Plan ## environment location: /mnt/scratch/mm-course/miniconda3/envs/molsim added / updated specs: - pubchempy The following NEW packages will be INSTALLED: pubchempy jirinovo/noarch::pubchempy-1.0.3-py_0 The following packages will be UPDATED: ca-certificates conda-forge::ca-certificates-2020.12.~ --> pkgs/main::ca-certificates-2021.1.19-h06a4308_1 Preparing transaction: done Verifying transaction: failed EnvironmentNotWritableError: The current user does not have write permissions to the target environment. environment location: /mnt/scratch/mm-course/miniconda3/envs/molsim uid: 10488 gid: 1018 Note: you may need to restart the kernel to use updated packages.
import pubchempy
import pubchempy as pcp
#Выгрузим молекулы с азидом из базы PubChem
compoundsuk = []
per_page = 100
for smiles in ["[#6][N-][N+]#[ND1]", "[#6][ND2]=[N+]=[ND1]"]:
for i in range(20):
a = pcp.get_properties(
properties="CanonicalSMILES",
identifier=smiles, namespace="smiles",
searchtype="substructure",
RingsNotEmbedded=True,
listkey_count=per_page, listkey_start=i*per_page
)
compoundsuk.extend(a)
print("Retrieved page {} of {} search".format(i+1, smiles))
Retrieved page 1 of [#6][N-][N+]#[ND1] search Retrieved page 2 of [#6][N-][N+]#[ND1] search Retrieved page 3 of [#6][N-][N+]#[ND1] search Retrieved page 4 of [#6][N-][N+]#[ND1] search Retrieved page 5 of [#6][N-][N+]#[ND1] search Retrieved page 6 of [#6][N-][N+]#[ND1] search Retrieved page 7 of [#6][N-][N+]#[ND1] search Retrieved page 8 of [#6][N-][N+]#[ND1] search Retrieved page 9 of [#6][N-][N+]#[ND1] search Retrieved page 10 of [#6][N-][N+]#[ND1] search Retrieved page 11 of [#6][N-][N+]#[ND1] search Retrieved page 12 of [#6][N-][N+]#[ND1] search Retrieved page 13 of [#6][N-][N+]#[ND1] search Retrieved page 14 of [#6][N-][N+]#[ND1] search Retrieved page 15 of [#6][N-][N+]#[ND1] search Retrieved page 16 of [#6][N-][N+]#[ND1] search Retrieved page 17 of [#6][N-][N+]#[ND1] search Retrieved page 18 of [#6][N-][N+]#[ND1] search Retrieved page 19 of [#6][N-][N+]#[ND1] search Retrieved page 20 of [#6][N-][N+]#[ND1] search Retrieved page 1 of [#6][ND2]=[N+]=[ND1] search Retrieved page 2 of [#6][ND2]=[N+]=[ND1] search Retrieved page 3 of [#6][ND2]=[N+]=[ND1] search Retrieved page 4 of [#6][ND2]=[N+]=[ND1] search Retrieved page 5 of [#6][ND2]=[N+]=[ND1] search Retrieved page 6 of [#6][ND2]=[N+]=[ND1] search Retrieved page 7 of [#6][ND2]=[N+]=[ND1] search Retrieved page 8 of [#6][ND2]=[N+]=[ND1] search Retrieved page 9 of [#6][ND2]=[N+]=[ND1] search Retrieved page 10 of [#6][ND2]=[N+]=[ND1] search Retrieved page 11 of [#6][ND2]=[N+]=[ND1] search Retrieved page 12 of [#6][ND2]=[N+]=[ND1] search Retrieved page 13 of [#6][ND2]=[N+]=[ND1] search Retrieved page 14 of [#6][ND2]=[N+]=[ND1] search Retrieved page 15 of [#6][ND2]=[N+]=[ND1] search Retrieved page 16 of [#6][ND2]=[N+]=[ND1] search Retrieved page 17 of [#6][ND2]=[N+]=[ND1] search Retrieved page 18 of [#6][ND2]=[N+]=[ND1] search Retrieved page 19 of [#6][ND2]=[N+]=[ND1] search Retrieved page 20 of [#6][ND2]=[N+]=[ND1] search
# Запишем в некоторый список только SMILESы находок
spiska = []
for annus in compoundsuk:
grib = annus['CanonicalSMILES']
spiska.append(grib)
# Также нужно отфильтровать записи длиннее 30 и те, в которых есть нековоалентные взаимодействия (т.е. в SMILES которых есть точка)
otbor = []
for brevno in spiska:
if len(brevno) < 30 and '.' not in brevno:
otbor.append(brevno)
# Отберём те структуры, которые при присоединении к ним модифицированного ибупрофена удовлетворяют 5 правилам Лепински
korobka = []
for smi in otbor:
if 'N=[N+]=[N-]' in smi:
new = smi.replace('N=[N+]=[N-]', ibuzid)
try:
novmol = Chem.MolFromSmiles(new)
if Lipinksy.NumHDonors(novmol) <= 5 and Lipinksy.NumHAcceptors(novmol)<=10 and Lipinksy.rdMolDescriptors.CalcExactMolWt(novmol) < 500 and Lipinksy.rdMolDescriptors.CalcCrippenDescriptors(novmol)[0] <= 5:
AllChem.Compute2DCoords(novmol)
korobka.append(novmol)
except:
pass
len(korobka)
128
# Как выглядят первые 12 полученных молекул
from IPython.display import SVG
for i in korobka:
AllChem.Compute2DCoords(i)
display(Draw.MolsToGridImage(korobka[:12],useSVG=True, molsPerRow=3, subImgSize=(400, 150)))
# Посмотрим на схожесть какой-нибудь молекулы с оригинальным ибупрофеном
from rdkit.Chem.Draw import SimilarityMaps
polojil = SimilarityMaps.GetMorganFingerprint(korobka[7], fpType='bv')
fig, maxweight = SimilarityMaps.GetSimilarityMapForFingerprint(ibu, korobka[7], SimilarityMaps.GetMorganFingerprint)
# Теперь построим 3D структуру полученного монстра
m3d=Chem.AddHs(korobka[7])
Chem.AllChem.EmbedMolecule(m3d)
AllChem.MMFFOptimizeMolecule(m3d,maxIters=500,nonBondedThresh=200 )
display(m3d)
conda install -c omnia nglview
Collecting package metadata (current_repodata.json): done Solving environment: done ==> WARNING: A newer version of conda exists. <== current version: 4.8.2 latest version: 4.9.2 Please update conda by running $ conda update -n base -c defaults conda ## Package Plan ## environment location: /mnt/scratch/mm-course/miniconda3/envs/molsim added / updated specs: - nglview The following packages will be downloaded: package | build ---------------------------|----------------- nglview-0.6.2.3 | py36_0 5.2 MB omnia ------------------------------------------------------------ Total: 5.2 MB The following packages will be UPDATED: ca-certificates conda-forge::ca-certificates-2020.12.~ --> pkgs/main::ca-certificates-2021.1.19-h06a4308_1 The following packages will be SUPERSEDED by a higher-priority channel: nglview conda-forge/noarch::nglview-2.7.7-pyh~ --> omnia/linux-64::nglview-0.6.2.3-py36_0 Downloading and Extracting Packages nglview-0.6.2.3 | 5.2 MB | ##################################### | 100% Preparing transaction: done Verifying transaction: failed EnvironmentNotWritableError: The current user does not have write permissions to the target environment. environment location: /mnt/scratch/mm-course/miniconda3/envs/molsim uid: 10488 gid: 1018 Note: you may need to restart the kernel to use updated packages.
# Первая конформация
import nglview as nv
nv.show_rdkit(m3d)
# Однако по какой-то неведомой причине при сохранении файле в формате .html отображение пропадает, хотя в консоле всё прекрасно работает
# и крутится