# Lipinski -- checking Lipinski rules
# IPythonConsole -- displaying chemical molecules
from rdkit import Chem
from rdkit.Chem import AllChem, Draw, Lipinski
from rdkit.Chem.Draw import SimilarityMaps, IPythonConsole
import numpy as np
from IPython.display import SVG,Image
ibu = Chem.MolFromSmiles('CC(C)CC1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(ibu)
display(ibu)
def check_Lipinski(mol):
is_Lipinsky = bool((Lipinski.NumHDonors(mol) <= 5) \
and (Lipinski.NumHAcceptors(mol) <= 10) \
and (Lipinski.rdMolDescriptors.CalcExactMolWt(mol) < 500) \
and(Lipinski.rdMolDescriptors.CalcCrippenDescriptors(mol)[0]) <= 5)
return is_Lipinsky
# Ibuprofen fits Lipinski rules
print (check_Lipinski(ibu))
modified_ibu = 'N1N=NC(=C1)C(C)CC1=CC=C(C=C1)C(C)C(=O)O'
diene_ibu = Chem.MolFromSmiles('{}'.format(modified_ibu))
AllChem.Compute2DCoords(diene_ibu)
display(diene_ibu)
strings_cut = np.genfromtxt('smiles_cut.txt',dtype = np.str)
smiles_cut = []
for line in strings_cut:
if (len(line[1]) < 30) and (len(line[1]) > 11) and not ( '.' in line[1]):
smiles_cut.append(line[1])
print('Size of cut list is ' + str(len(smiles_cut)))
products = []
for smi in smiles_cut[:len(smiles_cut)]:
if "N=[N+]=[N-]" in smi:
newsmi = smi.replace("N=[N+]=[N-]", modified_ibu)
else:
continue
try:
newmol = Chem.MolFromSmiles(newsmi)
if check_Lipinski(newmol):
products.append(newmol)
except Exception:
pass
print('Size of cut filtered list is ' + str(len(products)))
import random
molecules = []
for pics in random.sample(products, 16):
AllChem.Compute2DCoords(pics)
molecules.append(pics)
Chem.Draw.MolsToGridImage(molecules, molsPerRow = 4, subImgSize = (500, 500))
fig, maxweight = SimilarityMaps.GetSimilarityMapForFingerprint(ibu, \
molecules[0], SimilarityMaps.GetMorganFingerprint)
maxweight
m3d = Chem.AddHs(molecules[0])
AllChem.EmbedMolecule(m3d)
AllChem.MMFFOptimizeMolecule(m3d, maxIters = 500, nonBondedThresh = 200)
m3d
# Do not work :(
import nglview as nv
nv.show_rdkit(m3d)
smiles_to_pymol = Chem.MolToSmiles(m3d)
with open('my_mol.smi', 'w') as file:
file.write(smiles_to_pymol)
import subprocess
import os
where_am_i = os.getcwd()
subprocess.run(['obgen', '"$where_am_i"/my_mol.smi', '>', '"$where_am_i"/my_mol.mol'], shell = True)
import __main__
__main__.pymol_argv = [ 'pymol', '-x' ]
import pymol
pymol.finish_launching()
from pymol import cmd
cmd.reinitialize()
cmd.bg_color('white')
cmd.load('my_mol.mol', 'structure')
cmd.util.cbas('structure')
cmd.turn('y', -20)
cmd.turn('x', 20)
cmd.set('ray_trace_mode', 1)
cmd.png('my_mol.png', '1920', '1080', ray=1)
Image('my_mol.png', retina=True)