Для начала загрузим все необходимые нам модули и проверим их работу
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
Теперь получим изображение ибупрофена
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)
Список всех радикалов c азидом в виде SMILES был найден и скачан с сайта PubChem: был найден CID азида, по которому далее осуществлялся Structure search c выполнением правила Лепински. Далее все найденные структуры были скачаны, распакованы и подгружены для дальнейшей работы.
strings=np.genfromtxt('result.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))
Для построения новых молекул необходимо предложить и сгенерировать новый SMILES ибупрофена:
new_ibu = 'N1N=NC=C1C(C)CC1=CC=C(C=C1)C(C)C(=O)O'
new_ibu_vis = Chem.MolFromSmiles('N1N=NC=C1C(C)CC1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(new_ibu_vis)
display(new_ibu_vis)
Построим новые молекулы и снова отфильтруем
final_smiles = []
azid = "N=[N+]=[N-]"
for smi in smiles_filtered:
if azid in smi:
newsmi=smi.replace('N=[N+]=[N-]', new_ibu)
try:
newmol = Chem.MolFromSmiles(newsmi)
#print(newmol)
if Lipinksy_checker(newmol):
final_smiles.append(newmol)
except Exception:
pass
len(final_smiles)
Теперь выберем несколько произвольных молекул и визуализируем их:
import random
vis_molecule = random.choices(final_smiles, k=15)
list_mol_pic = []
for molecule in vis_molecule:
AllChem.Compute2DCoords(molecule)
list_mol_pic.append(molecule)
Chem.Draw.MolsToGridImage(list_mol_pic, molsPerRow=5, subImgSize=(300, 300))
Далее строим Similiraty Map ибупрофена с пятым веществом из получившегося массива
from rdkit.Chem.Draw import SimilarityMaps
fp = SimilarityMaps.GetMorganFingerprint(list_mol_pic[4], fpType='bv')
fig, maxweight = SimilarityMaps.GetSimilarityMapForFingerprint(new_ibu_vis, list_mol_pic[4],
SimilarityMaps.GetMorganFingerprint)
mod_ibu = Chem.AddHs(list_mol_pic[4])
Chem.AllChem.EmbedMolecule(mod_ibu)
AllChem.MMFFOptimizeMolecule(mod_ibu, maxIters = 500, nonBondedThresh = 200)
mod_ibu
import subprocess
smiles_pymol = Chem.MolToSmiles(mod_ibu)
with open('new_ibu.smi', 'w') as file:
file.write(smiles_pymol)
subprocess.run('obgen new_ibu.smi > new_ibu.mol', shell = True)
import __main__
__main__.pymol_argv = [ 'pymol', '-x' ]
import pymol
pymol.finish_launching()
from pymol import cmd,stored
from IPython.display import Image
import time
import sys
cmd.reinitialize()
cmd.load('new_ibu.mol', 'structure')
cmd.do('''
bg_color white
util.cbas
set ray_trace_mode, 3
set ray_opaque_background, 0
ray 600,700''')
#cmd.remove("solvent")
cmd.png('1lmp.png')
time.sleep(3)
Image(filename='1lmp.png')