Хемоинформатика

Для начала загрузим все необходимые нам модули и проверим их работу

In [81]:
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

Теперь получим изображение ибупрофена

In [2]:
ibu=Chem.MolFromSmiles('CC(C)CC1=CC=C(C=C1)C(C)C(=O)O') 
AllChem.Compute2DCoords(ibu)
display(ibu)

Проверяем правило Лепински

In [8]:
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)
Out[8]:
True

Список всех радикалов c азидом в виде SMILES был найден и скачан с сайта PubChem: был найден CID азида, по которому далее осуществлялся Structure search c выполнением правила Лепински. Далее все найденные структуры были скачаны, распакованы и подгружены для дальнейшей работы.

In [13]:
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))
55

Для построения новых молекул необходимо предложить и сгенерировать новый SMILES ибупрофена:

In [26]:
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)

Построим новые молекулы и снова отфильтруем

In [53]:
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)
Out[53]:
53

Теперь выберем несколько произвольных молекул и визуализируем их:

In [64]:
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))
Out[64]:

Далее строим Similiraty Map ибупрофена с пятым веществом из получившегося массива

In [82]:
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)
/home/polina997/anaconda3/lib/python3.6/site-packages/rdkit/Chem/Draw/__init__.py:285: MatplotlibDeprecationWarning: The bivariate_normal function was deprecated in version 2.2.
  Z = mlab.bivariate_normal(X, Y, a, a, mol._atomPs[0][0], mol._atomPs[0][1]) * weights[0]
/home/polina997/anaconda3/lib/python3.6/site-packages/rdkit/Chem/Draw/__init__.py:287: MatplotlibDeprecationWarning: The bivariate_normal function was deprecated in version 2.2.
  Zp = mlab.bivariate_normal(X, Y, a, a, mol._atomPs[i][0], mol._atomPs[i][1])
In [102]:
mod_ibu = Chem.AddHs(list_mol_pic[4])
Chem.AllChem.EmbedMolecule(mod_ibu)
AllChem.MMFFOptimizeMolecule(mod_ibu, maxIters = 500, nonBondedThresh = 200)
mod_ibu
Out[102]:
In [105]:
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)
Out[105]:
CompletedProcess(args='obgen new_ibu.smi > new_ibu.mol', returncode=1)
In [106]:
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
In [108]:
cmd.reinitialize()
cmd.load('new_ibu.mol', 'structure')
In [116]:
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')
Out[116]: