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

lecture: https://vsb.fbb.msu.ru/share/golovin/hse/lectures/l2.pdf

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

Подсказки:

  • Всю работу выполняем в Jupiter Notebook, можно запускать как локально, так и на Colab
  • Добавим путь к conda и активируем профиль с помощью терминала Jupyter :
     1
     2export PATH="/home/shad/miniconda2/bin:$PATH" 
     3
     4source activate hse
     5
     6python -m ipykernel install --user --display-name "Python 2.7 HSE" 
     7
     8или
     9
    10export PATH="/home/shad/miniconda3/bin:$PATH" 
    11source activate py37-hse
    12python -m ipykernel install --user  --display-name "Python 3.7 HSE" 
    13
    
  • Создадим новый notebook Python 2.7 HSE и загрузим модули RDkit (мануал: http://www.rdkit.org/docs/GettingStartedInPython.html )
    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)