Хемоинформатика¶
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)