Загрузили модули RDkit
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
import rdkit.Chem.Lipinski as Lipinksy
Нарисовали ибупрофен
ibu=Chem.MolFromSmiles('CC(C)CC1=CC=C(C=C1)C(C)C(=O)O')
AllChem.Compute2DCoords(ibu)
display(ibu)
Посчитали параметры для правила Лепински
import rdkit.Chem.Lipinski as Lipinksy
print(Lipinksy.NumHDonors(ibu))
print(Lipinksy.NumHAcceptors(ibu))
print(Lipinksy.rdMolDescriptors.CalcExactMolWt(ibu))
print(Lipinksy.rdMolDescriptors.CalcCrippenDescriptors(ibu)[0])
Построим новый ибупрофен, написав новый SMILES
ne_ibu_smiles = 'N1C=NC=C1C(C(O)=O)C(C=C1)=CC=C1CC(C)C'
ne_ibu = Chem.MolFromSmiles(ne_ibu_smiles)
AllChem.Compute2DCoords(ne_ibu)
display(ne_ibu)
Загрузили скаченные данные - список азидов и отфильтровали
strings=np.genfromtxt('1931431637611612961.txt',dtype=np.str)
smiles = []
for line in strings:
if (len(line[1]) < 30) and (len(line[1]) > 1) and not ( '.' in line[1]):
smiles.append(line[1])
len(smiles)
Проверили правило Липински
import rdkit.Chem.Lipinski as Lipinski
def check_Lipinski(mol):
is_Lipinsky = bool((Lipinski.NumHDonors(mol) <= 5) \
and (Lipinski.NumHAcceptors(mol) <= 10) \
and (Lipinski.rdMolDescriptors.CalcExactMolWt(mol) < 500) \
and(Lipinski.rdMolDescriptors.CalcCrippenDescriptors(mol)[0]) <= 5)
return is_Lipinsky
print (check_Lipinski(ibu))
Построили новые молекулы и отфильтровали
products = []
for smi in smiles:
if "N=[N+]=[N-]" in smi:
newsmi = smi.replace("N=[C+]=[N-]", ne_ibu_smiles)
else:
continue
try:
newmol = Chem.MolFromSmiles(newsmi)
oldmol = Chem.MolFromSmiles(smi)
if check_Lipinski(newmol):
products.append((newmol, oldmol))
except Exception:
pass
len(products)
Вывели на большую картинку случайно выбранные молекулы ( справа от каждой молекулы показана её предковая форма)
from random import sample
import random
random.seed(70)
mols = []
for n, o in random.sample(products, 7):
AllChem.Compute2DCoords(n)
AllChem.Compute2DCoords(o)
mols.append(n)
mols.append(o)
Chem.Draw.MolsToGridImage(mols, molsPerRow = 7, subImgSize = (700, 400))
Построить Similiraty Map ибупрофена с веществом из моего массива не удалось. Kernel отключается при попытках.
from rdkit.Chem.Draw import SimilarityMaps
fp = SimilarityMaps.GetMorganFingerprint(mols[0], fpType='bv')
fig, maxweight = SimilarityMaps.GetSimilarityMapForFingerprint(ibu, \
mols[0], SimilarityMaps.GetMorganFingerprint)
Сделаем конформацию лиганда
ne_ibu = Chem.AddHs(mols[0])
AllChem.EmbedMolecule(ne_ibu)
AllChem.MMFFOptimizeMolecule(ne_ibu, maxIters = 1000, nonBondedThresh = 100)
ne_ibu
Загрузим NGL viewer
import nglview as nv
nv.show_rdkit(ne_ibu)
Виджет не работает(