Elen Tevanyan
Insipration source:
https://vsb.fbb.msu.ru/projects/hse/wiki/Task3
1) На сайте PubChem найти все радикалы c азидом для Click Chemistry и скачать их SMILES нотации
2) Найти формулу ибупрофена и предложить способ изменения его SMILES для эмуляции реагента Click Chemistry (заменить изопропил на этин он же ацителен)
3) Заменить в найденых радикалах азидную группу на модифцированный ибупрофен.
4) Превратить новые SMILES в объекты-молекулы
5) Отобрать те молекулы, которые удовлетворяют правилу пяти Lipinski </br>
Порядок выполнения заданий немного отличается от указанных в списке ; некоторые комментарии могут быть очень очевидными, но ценные для меня, если я буду пересматривать этот файл.
import rdkit
from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem import rdMolDescriptors
from rdkit.Chem import Lipinski
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
#функция для проверки на соответствие правила пяти Липински (пороговые значения взяты из лекции)
def LipinskiCheck (mol):
if ((Lipinski.NumHDonors(mol) <=5) &
(Lipinski.NumHAcceptors(mol)<=10) &
(rdMolDescriptors.CalcExactMolWt(mol)<=500) &
(rdMolDescriptors.CalcCrippenDescriptors(mol)[0]<=5)):
return True
else:
return False
1) Молекула ибупрофена
ibu=Chem.MolFromSmiles('CC(C)CC1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(ibu)
display(ibu)
2) Модификация ибупрофена
Заменяем изопропил (тройка углеродов с семью водородами, на рисунке - левая сторона от кольца, CC(C)) на этин=ацетилен (два углерода с тройной связью, C#C), чтобы суметь провести CuAAC (https://ru.wikipedia.org/wiki/%D0%90%D0%B7%D0%B8%D0%B4-%D0%B0%D0%BB%D0%BA%D0%B8%D0%BD%D0%BE%D0%B2%D0%BE%D0%B5_%D1%86%D0%B8%D0%BA%D0%BB%D0%BE%D0%BF%D1%80%D0%B8%D1%81%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5)
ibu_temp=Chem.MolFromSmiles('C#CCC1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(ibu_temp)
display(ibu_temp)
Результат CuAAC. Именно такую модификацию будем вставлять в будущем на место азидных радикалов.
mod = 'N1C=C(N=N1)C1=CC=C(C=C1)C(C)C(=O)O'
ibu_mod=Chem.MolFromSmiles(mod)
AllChem.Compute2DCoords(ibu_mod)
display(ibu_mod)
3) Радикалов с азидом в PubChem: поиск, загрузка и фильтрация
Азидная группа N=[N+]=[N-] - ее и ищем в Pubchem.
Сохраняем, грузим и фильтруем. Можно быть нормальным человеком и вызывать из ноутбука PubChem.
smiles=[]
strings=np.genfromtxt('/Users/ElenTevanyan/Downloads/aziddata.txt',dtype=np.str)
for line in strings:
if len(line[1]) < 30 and not '.' in line[1]:
smiles.append(line[1])
len(smiles)
4) Замена азидных радикалов на модицифированный ибупрофен
Отдельно сохраняем новые SMILES-объекты для их будущей фильтрации
#mod - SMILES-запись модифицированного ибупрофена
azid = 'N=[N+]=[N-]'
newsmiles=[]
for smi in smiles[:len(smiles)]:
if azid in smi:
newsmi=smi.replace(azid,mod)
newsmiles.append(newsmi)
else:
continue
len(newsmiles)
5) Превращение новых SMILES в объекты-молекулы и проверка по условиям Липински
CorrectSmiles=[]
for newsmi in newsmiles[:len(newsmiles)]:
try:
newmol=Chem.MolFromSmiles(newsmi)
if (LipinskiCheck(newmol)==True):
CorrectSmiles.append(newsmi)
AllChem.Compute2DCoords(newmol)
except:
pass
Немного визуализации
for smi in CorrectSmiles[:15]:
print(smi)
mol = Chem.MolFromSmiles(smi)
AllChem.Compute2DCoords(mol)
display(mol)
molecula = Chem.MolFromSmiles(CorrectSmiles[20])
Chem.AllChem.EmbedMolecule(molecula )
AllChem.MMFFOptimizeMolecule(molecula ,maxIters=500,nonBondedThresh=200 )
Chem.MolToPDBFile(molecula, 'molecula.pdb')
import nglview as nv
view = nv.show_rdkit (molecula)
view
#Не работает по неизвестным причинам. Все попытки гуглинга вели к нашим работам, а не к возможности решения проблемы :
#Поэтому сохраняем в файл, который сможет прочесть PyMol, уходим в PyMol и формируем картинку
Chem.MolToPDBFile(molecula, 'molecula.pdb')
from IPython.display import Image
Image('molImage.png')