#!/usr/local2/bin/python2.3 # Creates artificial first thiophosphate, where every substituent is marked by a unique metal (Mg is leaving group and is axial to the # O--group = former ihydroxide nucelophile) from openeye.oechem import * import os, string, sys try: ifs = oemolistream() ifs.open('b_template_phosphate.sdf') phos = OEGraphMol() OEReadMolecule(ifs, phos) date = sys.argv[1] dictsf1 = open('b7.2'+date+'_dicts1.txt', 'r') dictsf2 = open('b7.2'+date+'_dicts2.txt', 'r') except IndexError: '\nUsage: b7.3_parts_connect_1.py _mol_32007(db+date)\n' raise SystemExit() ofs_1 = oemolostream() ofs_1.open('b7.3'+date+'_ln_nocorina.sdf') leavings = {} chiral_dict = {} for line in dictsf1.readlines(): leavings[string.split(line)[0]] = {} leavings[string.split(line)[0]][string.split(line)[1]] = [string.split(line)[2], string.split(line)[3]] for line in dictsf2.readlines(): chiral_dict[string.split(line)[0]] = {} chiral_dict[string.split(line)[0]][string.split(line)[1]] = int(string.split(line)[2]) libgen1 = OELibraryGen("[Mg:1][P:2]([OH1:3])([Li:4])([Zn:5])[O-:6].[Cu:11][*:12].[Cu:21][*:22].[Cu:31][*:32]>>[*:12][Mg:1][P:2]([OH1:3])([Li:4][*:22])([Zn:5][*:32])[O-:6]") #libgen2 = OELibraryGen("[Mg:1][P:2]([OH1:3])([Li:4])([Zn:5])[O-:6].[Cu:11][*:12].[Cu:21][*:22].[Cu:31][*:32].[H:100]>>[H:100][*+:12][Mg:1][P:2]([OH1:3])([Li:4][*:22])([Zn:5][*:32])[O-:6]") lgs = OEGraphMol() lig1 = OEGraphMol() lig2 = OEGraphMol() hyd = OEGraphMol() 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('b7_titles.txt', 'w') ti_count = 0 for title in leavings.keys(): for lg in leavings[title].keys(): OEParseSmiles(lgs, lg) OEParseSmiles(lig1, leavings[title][lg][0]) OEParseSmiles(lig2, leavings[title][lg][1]) libgen1.SetStartingMaterial(phos, 0) libgen1.SetStartingMaterial(lgs, 1) libgen1.SetStartingMaterial(lig1, 2) libgen1.SetStartingMaterial(lig2, 3) OEParseSmiles(hyd, '[H]') #libgen2.SetStartingMaterial(phos, 0) # libgen2.SetStartingMaterial(lgs, 1) #libgen2.SetStartingMaterial(lig1, 2) #libgen2.SetStartingMaterial(lig2, 3) #libgen2.SetStartingMaterial(hyd, 4) lgs.Clear() lig1.Clear() lig2.Clear() hyd.Clear() for products in libgen1.GetProducts(): num = 1 prot = 0 label = title[:string.find(title, '_')]+'_'+str(num)+'p'+str(prot) while label in title_list: num+=1 label = title[:string.find(title, '_')]+'_'+str(num)+'p'+str(prot) title_list.append(label) products.SetTitle(label) OEWriteMolecule(ofs_1, products) title_f.write(title+'\n') # NO Protonation of Leaving Group ! (naming procedure wrong also) # for products in libgen2.GetProducts(): # num = 1 # label = title[:string.find(title, '_')]+'_'+str(num) # while label in title_list: # num+=1 # label = title[:string.find(title, '_')]+'_'+str(num) # title_list.append(label) # products.SetTitle(label) # OEWriteMolecule(ofs_2, products) # if P is chiral => create the enantiomer too for lg in leavings[title].keys(): if chiral_dict[title][lg] == 1: OEParseSmiles(lgs, lg) OEParseSmiles(lig1, leavings[title][lg][0]) OEParseSmiles(lig2, leavings[title][lg][1]) libgen1.SetStartingMaterial(phos, 0) libgen1.SetStartingMaterial(lgs, 1) libgen1.SetStartingMaterial(lig2, 2) libgen1.SetStartingMaterial(lig1, 3) OEParseSmiles(hyd, '[H]') # libgen2.SetStartingMaterial(phos, 0) # libgen2.SetStartingMaterial(lgs, 1) # libgen2.SetStartingMaterial(lig1, 2) # libgen2.SetStartingMaterial(lig2, 3) # libgen2.SetStartingMaterial(hyd, 4) lgs.Clear() lig1.Clear() lig2.Clear() hyd.Clear() for products in libgen1.GetProducts(): num = 1 prot = 0 label = title[:string.find(title, '_')]+'_'+str(num)+'p'+str(prot) while label in title_list: num+=1 label = title[:string.find(title, '_')]+'_'+str(num)+'p'+str(prot) title_list.append(label) products.SetTitle(label) OEWriteMolecule(ofs_1, products) title_f.write(title+'\n') # for products in libgen2.GetProducts(): # num = 1 # label = title[:string.find(title, '_')]+'_'+str(num) # while label in title_list: # num+=1 # label = title[:string.find(title, '_')]+'_'+str(num) # title_list.append(label) # products.SetTitle(label) # OEWriteMolecule(ofs_2, products) ofs_1.close() #ofs_2.close() os.system('corina -d errorfile=b7.3'+date+'_ln_err.sdf,r2d,wh -t tracefile=b7.3'+date+'_ln_corina_trace.trc -i t=sdf -o t=sdf b7.3'+date+'_ln_nocorina.sdf b7.3'+date+'_ln.sdf') #os.system('corina -d errorfile='+sys.argv[2]+'_parts_connect_1_ln_err.sdf,r2d,wh -t tracefile='+sys.argv[2]+'_parts_connect_1_ln_corina_trace.trc -i t=sdf -o t=sdf '+sys.argv[2]+'_parts_connect_1_lp.sdf '+sys.argv[2]+'_parts_connect_1_lp_corina.sdf') os.system('b7.4_parts_connect_2.py '+date)