Загрузим модули 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
Был нарисован ибупрофен и посчитаныпараметры для правила Лепински
ibu=Chem.MolFromSmiles('CC(C)CC1=CC=C(C=C1)C(C)C(=O)O')
#ibu1=Chem.MolFromSmiles('CC1=C(C=CC(=C1CN=[N+]=[N-])C')
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]
Были загружены скаченные данные и отфильтрованы
inf=open('Azido_SMILE_formulas.txt')
smiles=[]
out=open('test_tack_2.txt','w')
for line in inf:
data=line.split()
if len(data[1]) < 30 and not '.' in data[1]:
out.write(data[1]+"\n")
smiles.append(data[1])
strings=np.genfromtxt('Azido_SMILE_formulas.txt',dtype=np.str)
smiles=[]
out=open('test_tack_2.txt','r')
for line in out:
smiles.append(line.strip())
На примере было проверено, то как надо изменять формулу молекулы
import rdkit.Chem.Lipinski as Lipinksy
smi='C1C[C@H]([C@@H](C(C1)N=[N+]=[N-])O)N2C3=CC=CC=C3C=CC4=CC=CC=C42'
ibu=Chem.MolFromSmiles(smi)
AllChem.Compute2DCoords(ibu)
display(ibu)
smi='C1C[C@H]([C@@H](C(C1)N=[N+]=[N-])O)N2C3=CC=CC=C3C=CC4=CC=CC=C42'
if 'N=[N+]=[N-]' in smi:
newsmi=smi.replace('N=[N+]=[N-]','N2N=NC(=C2)C1=CC=C(C=C1)C(C)C(=O)O')
ibu=Chem.MolFromSmiles(newsmi)
AllChem.Compute2DCoords(ibu)
display(ibu)
newmol=Chem.MolFromSmiles
print newmol
Были построены новые молекулы и отфильтрованы
import rdkit.Chem.Lipinski as Lipinksy
i=0
right_list=[]
newsmi = 'CC(C)CC1=CC=C(C=C1)C(C)C(=O)O'
for smi in smiles[:1500]:
if 'N=[N+]=[N-]'in smi:
newsmi=smi.replace('N=[N+]=[N-]','N2N=NC(=C2)C1=CC=C(C=C1)C(C)C(=O)O')
else:
continue
formula=Chem.MolFromSmiles(newsmi)
AllChem.Compute2DCoords(formula)
a=Lipinksy.NumHDonors(formula)
b=Lipinksy.NumHAcceptors(formula)
c=Lipinksy.rdMolDescriptors.CalcExactMolWt(formula)
d=Lipinksy.rdMolDescriptors.CalcCrippenDescriptors(formula)[0]
if (a<=5) and (b<=10) and (c<=500) and (d<=5):
right_list.append(newsmi)
Отфилтрованные и измененные молекулы представлены ниже.
for i in right_list:
print i
ibu=Chem.MolFromSmiles(i)
AllChem.Compute2DCoords(ibu)
display(ibu)