#pragma css /css/2019.css
<<BI>>


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

lecture : http://kodomo.fbb.msu.ru/~golovin/l2.pdf

Цель занятия используя пакет моудлей RDkit предложить аналог ибупрофена :
 * на сайте PubChem найти все радикалы c азидом для Click Chemistry и скачать их SMILES нотации или используйте pubchempy
 * Найти формулу ибупрофена и предложить способ изменения его SMILES для эмуляции продукта Click Chemistry
 * Заменить в найденых радикалах азидную группу на модифцированный ибупрофен.
 * Превратить новые SMILES  в объекты-молекулы
 * Отобрать те молекулы, которые удовлетворяют правилу пяти Lipinski

== Подсказки: ==
 * Всю работу выполняем в Jupiter Notebook на https://kodomo.fbb.msu.ru/jupyter
 * Добавим путь к anaconda и активируем профиль,if you use windows do it in putty on kodomo:
{{{#!highlight bash
source /mnt/scratch/mm-course/miniconda3/etc/profile.d/conda.sh
conda activate molsim
python3 -m ipykernel install --user --name molsim --display-name "Python 3 molsim"
}}}


 * Загрузим модули RDkit (мануал: http://www.rdkit.org/docs/GettingStartedInPython.html )
{{{#!highlight python
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
}}}
 * Нарисуем ибупрофен
{{{#!highlight python
ibu=Chem.MolFromSmiles('CC(C)CC1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(ibu)
display(ibu)
}}}
 * Посчитаем параметры для правила Липински
{{{#!highlight python
import rdkit.Chem.Lipinski as Lipinksi
print Lipinksi.NumHDonors(ibu)
print Lipinksi.NumHAcceptors(ibu)
print Lipinksi.rdMolDescriptors.CalcExactMolWt(ibu)
print Lipinksi.rdMolDescriptors.CalcCrippenDescriptors(ibu)[0]
}}}
 * Прикинуть правильную строку поиска можно  здесь https://pubchem.ncbi.nlm.nih.gov/search/search.cgi
 * Список азидов можно скачать вручную или с помощью https://pubchempy.readthedocs.io/en/latest/
{{{#!highlight python
import pubchempy
}}}
 * Загрузим скаченные данные и отфильтруем
{{{
compounds = []
per_page = 10**5
for smiles in ["N=N=N", "NN#N",]:
    for i in range(200):
        try:
            a = pcp.get_properties(
              properties="CanonicalSMILES", 
              identifier=smi...., namespace="...les", 
              searchtype="substructure",
              RingsNotEmbedded=....,
              listkey_count=per_page, listkey_start=i*per_page
            )
        except:
            ..........
        print("Retrieved page {} of {} search".format(i+1, smiles))
        compounds.extend(a)
}}}
{{{#!highlight python
#Если качали с pubchempy то это не надо
strings=np.genfromtxt('2515324818764782706.txt',dtype=np.str)

for line in strings:
    if len(line[1]) < 30 and not '.' in line[1]:
        smiles  append line[1]
}}}

 * Пстроим новые молекулы и отфильтруем
{{{#!highlight python
for smi in smiles[:1500]:
    
    if азид  in smi:
        newsmi=smi.replace('N=[N+]=[N-]',template)
    else:
        continue
   
# Новую молекулу лучше создавать в try из-за битых  Smiles
    try:
        newmol=Chem.MolFromSmiles

        
        if новая молекулу удолтворяет правилу 5
            сохраним в массив
            и покажем
    except:
        pass

}}}

Надо сделать большую картинку с Draw.MolsToGridImage
{{{#!highlight python
from IPython.display import SVG
SVG(Draw.MolsToGridImage([m1,m2],useSVG=True, molsPerRow=3, subImgSize=(200, 200)))
}}}

 *  Постройте Similiraty Map ибупрофена с пятым веществом из вашего массива.
{{{#!highlight python
from rdkit.Chem.Draw import SimilarityMaps

fp = SimilarityMaps.GetMorganFingerprint(somemol, fpType='bv')

fig, maxweight = SimilarityMaps.GetSimilarityMapForFingerprint(refmol, somemol, SimilarityMaps.GetMorganFingerprint)
}}}


 * Постройте 3D структуру и покрутите её. Как сделать конформацию лиганда:
 
{{{#!highlight python
m3d=Chem.AddHs(m2d)
Chem.AllChem.EmbedMolecule(m3d)
AllChem.MMFFOptimizeMolecule(m3d,maxIters=500,nonBondedThresh=200 )
}}}
загрузим NGL viewer ( для установки {{{conda install -c omnia nglview }}} )
{{{#!highlight python
import nglview as nv
}}}
и покажем первую конформацию
{{{#!highlight python
nv.show_rdkit(m3d)
}}}