« Previous - Version 6/22 (diff) - Next » - Current version
Andrey Golovin, 26.09.2017 11:47


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

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

Цель занятия используя пакет моудлей RDkit предложить аналог ибупрофена :
  • на сайте PubChem найти все радикалы c азидом для Click Chemistry и скачать их SMILES нотации
  • Найти формулу ибупрофена и предложить способ изменения его SMILES для эмуляции продукта [[https://en.wikipedia.org/wiki/Click_chemistry#Copper.28I.29-catalyzed_azide-alkyne_cycloaddition_.28CuAAC.29|Click Chemistry]]
  • Заменить в найденых радикалах азидную группу на модифцированный ибупрофен.
  • Превратить новые SMILES в объекты-молекулы
  • Отобрать те молекулы, которые удовлетворяют правилу пяти Lepinsky

Подсказки:
  • Всю работу выполняем в Jupiter Notebook, можно запускать как локально так и на shadbox
  • Добавим путь к conda и активируем профиль,if you use windows do it in putty on shadbox:

1source activate hse
1jupyter-notebook --no-browser -port XXXX
  • Run plink on windows
    1plink -ssh -L  8888:localhost:XXXXX ivanov@shadbox
    
1from rdkit import Chem
2from rdkit.Chem import AllChem
3from rdkit import RDConfig
4from rdkit.Chem.Draw import IPythonConsole 
5from rdkit.Chem import Draw
6import numpy as np
7from IPython.display import display,Image
  • Нарисуем ибупрофен
1ibu=Chem.MolFromSmiles('CC(C)CC1=CC=C(C=C1)C(C)C(=O)O')
2AllChem.Compute2DCoords(ibu)
3display(ibu)
  • Посчитаем параметры для правила Лепински
1import rdkit.Chem.Lipinski as Lipinksy
2print Lipinksy.NumHDonors(ibu)
3print Lipinksy.NumHAcceptors(ibu)
4print Lipinksy.rdMolDescriptors.CalcExactMolWt(ibu)
5print Lipinksy.rdMolDescriptors.CalcCrippenDescriptors(ibu)[0]
  • Загрузим скаченные данные и отфильтруем
    1strings=np.genfromtxt('2515324818764782706.txt',dtype=np.str)
    2
    3for line in strings:
    4    if len(line[1]) < 30 and not '.' in line[1]:
    5        smiles  append line[1]
    
  • Пстроим новые молекулы и отфильтруем
1for smi in smiles[:1500]:
2
3    if азид  in smi:
4        newsmi=smi.replace('N=[N+]=[N-]',template)
5    else:
6        continue
  • Новую молекулу лучше создавать в try из-за битых smiles
1    try:
2        newmol=Chem.MolFromSmiles
3
4        if новая молекулу удолтворяет правилу 5
5            сохраним в массив
6            и покажем
7    except:
8        pass
  • Наводим красоту за бонусные баллы, постройте 3D структуру и покрутите её

можно сделать большую картинку с Draw.MolsToGridImage

как сделать конформацию лиганда:

1m3d=Chem.AddHs(m2d)
2Chem.AllChem.EmbedMolecule(m3d)
3AllChem.MMFFOptimizeMolecule(m3d,maxIters=500,nonBondedThresh=200 )

загрузим NGL viewer

1import nglview as nv

и покажем первую конформацию

1nv.show_rdkit(m3d)