#!/usr/bin/python import os, string, sys from openeye.oechem import * # could produce some doubles ifs = oemolistream() ifs.open('b6.2'+sys.argv[1]+'_ln_out.ism') ofs_1 = oemolostream() ofs_1.open('b6.3'+sys.argv[1]+'_lp_out.ism') # Leaving group X protonated libgen2 = OELibraryGen("[R:4][#6R:1]([N:2])([R&!#6:3])[O-:100].[H:98]>>[*:4][*:1]([N:2])([O-:100])[AR+:3][H:98]") # Leaving amine N protonated libgen3 = OELibraryGen("[R:4][#6R:1]([N:2])([R&!#6:3])[O-:100].[H:98]>>[*:4][C:1]([N+:2][H:98])([O-:100])[AR:3]") # Leaving group A:4 protonated (if 3 heteroatoms at the attacked center!) libgen4 = OELibraryGen("[#7,#8,#15,#16:4][#6R:1]([N:2])([R&!#6:3])[O-:100].[H:98]>>[A+:4]([H:98])[C:1]([N:2])([O-:100])[AR:3]") libgen2.SetExplicitHydrogens(True) libgen2.SetValenceCorrection(False) libgen3.SetExplicitHydrogens(True) libgen3.SetValenceCorrection(False) libgen4.SetExplicitHydrogens(True) libgen4.SetValenceCorrection(False) mol_prot = OEGraphMol() OEParseSmiles(mol_prot, "[H]") for mol in ifs.GetOEMols(): libgen2.AddStartingMaterial(mol, 0) libgen2.AddStartingMaterial(mol_prot, 1) libgen3.AddStartingMaterial(mol, 0) libgen3.AddStartingMaterial(mol_prot, 1) libgen4.AddStartingMaterial(mol, 0) libgen4.AddStartingMaterial(mol_prot, 1) mol.Clear() mol_prot.Clear() title_list = [] for title_file in os.listdir('.'): if title_file[-11:] == '_titles.txt': print 'Open & read '+title_file titlef = open(title_file, 'r') for line in titlef.readlines(): title_list.append(line[:-1]) titlef.close() title_f = open('b6_titles.txt', 'a') product_smiles = [] for products in libgen2.GetProducts(): if OECreateIsoSmiString(products) in product_smiles: continue else: product_smiles.append(OECreateIsoSmiString(products)) prot = 0 title = products.GetTitle()[:string.find(products.GetTitle(), 'p0')]+'p'+str(prot) while title in title_list: prot+=1 title = products.GetTitle()[:string.find(products.GetTitle(), 'p')]+'p'+str(prot) title_list.append(title) products.SetTitle(title) OEWriteMolecule(ofs_1, products) title_f.write(title+'\n') for products in libgen3.GetProducts(): if OECreateIsoSmiString(products) in product_smiles: continue else: product_smiles.append(OECreateIsoSmiString(products)) prot = 0 title = products.GetTitle()[:string.find(products.GetTitle(), 'p0')]+'p'+str(prot) while title in title_list: prot+=1 title = products.GetTitle()[:string.find(products.GetTitle(), 'p')]+'p'+str(prot) title_list.append(title) products.SetTitle(title) OEWriteMolecule(ofs_1, products) title_f.write(title+'\n') for products in libgen4.GetProducts(): if OECreateIsoSmiString(products) in product_smiles: continue else: product_smiles.append(OECreateIsoSmiString(products)) prot = 0 title = products.GetTitle()[:string.find(products.GetTitle(), 'p0')]+'p'+str(prot) while title in title_list: prot+=1 title = products.GetTitle()[:string.find(products.GetTitle(), 'p')]+'p'+str(prot) title_list.append(title) products.SetTitle(title) OEWriteMolecule(ofs_1, products) title_f.write(title+'\n') ofs_1.close() ifs.close() title_f.close()