class DockingParameterFileMaker: """Accept a <ligand>.pdbq and <receptor>.pdbqs and create <ligand>_<receptor>.dpf """ def __init__(self, verbose = None): self.verbose = verbose self.dpo = DockingParameters() def set_ligand(self, ligand_filename): self.ligand_filename = os.path.basename(ligand_filename) if verbose: print "set ligand_filename to", self.ligand_filename self.dpo.set_ligand(ligand_filename) #expect a filename like ind.out.pdbq: get 'ind' from it self.ligand_stem = string.split(self.ligand_filename,'.')[0] if verbose: print "set ligand_stem to", self.ligand_stem self.ligand = Read(ligand_filename)[0] if self.ligand==None: print 'ERROR reading: ', ligand_filename return if verbose: print "read ", self.ligand.name #set dpo: #move self.dpo['move']['value'] = self.ligand_filename if verbose: print "set move to ", self.dpo['move']['value'] #ndihe #assumes ligand has torTree self.dpo['ndihe']['value'] = self.ligand.parser.keys.count("BRANCH") #self.dpo['ndihe']['value'] = len(self.ligand.torTree.torsionMap) if verbose: print "set ndihe to ", self.dpo['ndihe']['value'] #torsdof #caution dpo['torsdof']['value'] is a list [ndihe, 0.3113] self.dpo['torsdof']['value'][0] = self.ligand.TORSDOF if verbose: print "set torsdof to ", self.dpo['torsdof']['value'] #types d = {} for a in self.ligand.allAtoms: d[a.autodock_element] = 1 sortKeyList = ['C','A','N','O','S','H','P','n','f','F','c','b','I','M'] lig_types = "" for t in sortKeyList: if t in d.keys(): lig_types = lig_types + t self.ligand.types = lig_types self.dpo['types']['value'] = self.ligand.types if verbose: print "set types to ", self.dpo['types']['value'] #about self.ligand.getCenter() cen = self.ligand.center self.dpo['about']['value'] = [round(cen[0],4), round(cen[1],4),\ round(cen[2],4)] if verbose: print "set about to ", self.dpo['about']['value'] def set_receptor(self, receptor_filename): self.receptor_filename = os.path.basename(receptor_filename) self.receptor_stem = string.split(self.receptor_filename, '.')[0] self.dpo.set_receptor(receptor_filename) #def set_docking_parameters(self, newdict={}): def set_docking_parameters(self, **kw): """Any docking paramters should be set here """ # like this: # newdict = {'ga_num_evals':1750000, 'ga_pop_size':150, # 'ga_run':20, 'rmstol':2.0} # self.dpo['<parameter>']['value'] = <new value> # eg self.dpo['rmstol']['value'] = 2.0 for parm, newvalue in kw.items(): #print "parm=", parm, ' newvalue=', newvalue self.dpo[parm]['value'] = newvalue if parm=='set_sw1': self.dpo['set_psw1']['value'] = not newvalue if parm=='set_psw1': self.dpo['set_sw1']['value'] = not newvalue def write_dpf(self, dpf_filename, parm_list = genetic_algorithm_local_search_list): if not dpf_filename: dpf_filename = "%s%s%s%s" % \ (self.ligand_stem, "_", self.receptor_stem, ".dpf") # now that we have a filename... if self.verbose: print "writing ", dpf_filename self.dpo.write(dpf_filename, parm_list)
class LibraryDpfWriter: def __init__(self, dpffile, extension='pdbq', \ err_file="write_lib_dpf_errors", prefix='', verbose=0): self.verbose = verbose if verbose: print("self.verbose = ", verbose) self.prefix = prefix self.setup(dpffile) self.parm_list_dict = {} self.parm_list_dict['GALS'] = genetic_algorithm_local_search_list self.parm_list_dict['GA'] = genetic_algorithm_list self.parm_list_dict['LS'] = local_search_list self.parm_list_dict['SA'] = simulated_annealing_list self.ligandfilenames = [] self.extension = extension self.error_file = open(err_file, 'w') def setup(self, dpffile): self.dpffile = dpffile self.dpo = DockingParameters() self.dpo.read(dpffile) def getligands(self, extension, name=''): typeDict = {} key = name + '*.' + extension self.ligandfilenames = glob.glob(key) return self.ligandfilenames def write(self, dpo, style='GALS'): #one file per ligand dpffiles = [] receptor_stem = self.dpo.receptor_stem parm_list = self.parm_list_dict[style] if not len(self.ligandfilenames): self.getligands(self.extension) #print "len(self.ligandfilenames)=", len(self.ligandfilenames) for ligand_file in self.ligandfilenames: #get the types typeDict = {} m = Read(ligand_file)[0] for a in m.allAtoms: typeDict[a.autodock_element] = 1 type_list = list(typeDict.keys()) #check that there is a map for each type ok = 1 for t in type_list: mapfile = receptor_stem + '.' + t + '.map' try: assert os.path.exists(mapfile) except: ok = 0 ostr = ligand_file + " missing map " + t + "\n" self.error_file.write(ostr) break #try to continue 'for' statement with next filename #update dpo with ligand specific values if not ok: if self.verbose: print("problem with ", ligand_file) continue types = string.join(type_list,'') self.dpo['move']['value'] = ligand_file if self.verbose: print("set types to ", types) self.dpo['types']['value'] = types #CAUTION: dpo['torsdof']['value'] is [0,0.3113] self.dpo['torsdof']['value'][0] = m.TORSDOF if hasattr(m, 'ndihe'): ndihe = m.ndihe elif hasattr(m, 'torscount'): ndihe = m.torscount elif hasattr(m, 'torTree'): ndihe = len(m.torTree.torsionMap) else: msg = ligand_file + " is not properly formatted: no torsions!" raise AttributeError(msg) self.dpo['ndihe']['value'] = ndihe outputfilename = self.prefix + m.name + "_" + style + ".dpf" if self.verbose: print("writing ", outputfilename) self.dpo.write(outputfilename, parm_list) dpffiles.append(outputfilename) return dpffiles
class DockingParameterFileMaker: """Accept a <ligand>.pdbq and <receptor>.pdbqs and create <ligand>_<receptor>.dpf """ def __init__(self, verbose=None): self.verbose = verbose self.dpo = DockingParameters() def set_ligand(self, ligand_filename): self.ligand_filename = os.path.basename(ligand_filename) if verbose: print "set ligand_filename to", self.ligand_filename self.dpo.set_ligand(ligand_filename) #expect a filename like ind.out.pdbq: get 'ind' from it self.ligand_stem = string.split(self.ligand_filename, '.')[0] if verbose: print "set ligand_stem to", self.ligand_stem self.ligand = Read(ligand_filename)[0] if self.ligand == None: print 'ERROR reading: ', ligand_filename return if verbose: print "read ", self.ligand.name #set dpo: #move self.dpo['move']['value'] = self.ligand_filename if verbose: print "set move to ", self.dpo['move']['value'] #ndihe #assumes ligand has torTree self.dpo['ndihe']['value'] = self.ligand.parser.keys.count("BRANCH") #self.dpo['ndihe']['value'] = len(self.ligand.torTree.torsionMap) if verbose: print "set ndihe to ", self.dpo['ndihe']['value'] #torsdof #caution dpo['torsdof']['value'] is a list [ndihe, 0.3113] self.dpo['torsdof']['value'][0] = self.ligand.TORSDOF if verbose: print "set torsdof to ", self.dpo['torsdof']['value'] #types d = {} for a in self.ligand.allAtoms: d[a.autodock_element] = 1 sortKeyList = [ 'C', 'A', 'N', 'O', 'S', 'H', 'P', 'n', 'f', 'F', 'c', 'b', 'I', 'M' ] lig_types = "" for t in sortKeyList: if t in d.keys(): lig_types = lig_types + t self.ligand.types = lig_types self.dpo['types']['value'] = self.ligand.types if verbose: print "set types to ", self.dpo['types']['value'] #about self.ligand.getCenter() cen = self.ligand.center self.dpo['about']['value'] = [round(cen[0],4), round(cen[1],4),\ round(cen[2],4)] if verbose: print "set about to ", self.dpo['about']['value'] def set_receptor(self, receptor_filename): self.receptor_filename = os.path.basename(receptor_filename) self.receptor_stem = string.split(self.receptor_filename, '.')[0] self.dpo.set_receptor(receptor_filename) #def set_docking_parameters(self, newdict={}): def set_docking_parameters(self, **kw): """Any docking paramters should be set here """ # like this: # newdict = {'ga_num_evals':1750000, 'ga_pop_size':150, # 'ga_run':20, 'rmstol':2.0} # self.dpo['<parameter>']['value'] = <new value> # eg self.dpo['rmstol']['value'] = 2.0 for parm, newvalue in kw.items(): #print "parm=", parm, ' newvalue=', newvalue self.dpo[parm]['value'] = newvalue if parm == 'set_sw1': self.dpo['set_psw1']['value'] = not newvalue if parm == 'set_psw1': self.dpo['set_sw1']['value'] = not newvalue def write_dpf(self, dpf_filename, parm_list=genetic_algorithm_local_search_list): if not dpf_filename: dpf_filename = "%s%s%s%s" % \ (self.ligand_stem, "_", self.receptor_stem, ".dpf") # now that we have a filename... if self.verbose: print "writing ", dpf_filename self.dpo.write(dpf_filename, parm_list)
class LibraryDpfWriter: def __init__(self, dpffile, extension='pdbq', \ err_file="write_lib_dpf_errors", prefix='', verbose=0): self.verbose = verbose if verbose: print "self.verbose = ", verbose self.prefix = prefix self.setup(dpffile) self.parm_list_dict = {} self.parm_list_dict['GALS'] = genetic_algorithm_local_search_list self.parm_list_dict['GA'] = genetic_algorithm_list self.parm_list_dict['LS'] = local_search_list self.parm_list_dict['SA'] = simulated_annealing_list self.ligandfilenames = [] self.extension = extension self.error_file = open(err_file, 'w') def setup(self, dpffile): self.dpffile = dpffile self.dpo = DockingParameters() self.dpo.read(dpffile) def getligands(self, extension, name=''): typeDict = {} key = name + '*.' + extension self.ligandfilenames = glob.glob(key) return self.ligandfilenames def write(self, dpo, style='GALS'): #one file per ligand dpffiles = [] receptor_stem = self.dpo.receptor_stem parm_list = self.parm_list_dict[style] if not len(self.ligandfilenames): self.getligands(self.extension) #print "len(self.ligandfilenames)=", len(self.ligandfilenames) for ligand_file in self.ligandfilenames: #get the types typeDict = {} m = Read(ligand_file)[0] for a in m.allAtoms: typeDict[a.autodock_element] = 1 type_list = typeDict.keys() #check that there is a map for each type ok = 1 for t in type_list: mapfile = receptor_stem + '.' + t + '.map' try: assert os.path.exists(mapfile) except: ok = 0 ostr = ligand_file + " missing map " + t + "\n" self.error_file.write(ostr) break #try to continue 'for' statement with next filename #update dpo with ligand specific values if not ok: if self.verbose: print "problem with ", ligand_file continue types = string.join(type_list,'') self.dpo['move']['value'] = ligand_file if self.verbose: print "set types to ", types self.dpo['types']['value'] = types #CAUTION: dpo['torsdof']['value'] is [0,0.3113] self.dpo['torsdof']['value'][0] = m.TORSDOF if hasattr(m, 'ndihe'): ndihe = m.ndihe elif hasattr(m, 'torscount'): ndihe = m.torscount elif hasattr(m, 'torTree'): ndihe = len(m.torTree.torsionMap) else: msg = ligand_file + " is not properly formatted: no torsions!" raise AttributeError, msg self.dpo['ndihe']['value'] = ndihe outputfilename = self.prefix + m.name + "_" + style + ".dpf" if self.verbose: print "writing ", outputfilename self.dpo.write(outputfilename, parm_list) dpffiles.append(outputfilename) return dpffiles