def surfdist(self): if not self.vol_file: self.select_first_message(".vol file") return self.get_options() self.options['reportmode']='both' if self.vol_dataset: self.options['dataset'] = self.vol_dataset text,html = Voronoia.process_command('surfdist',self.vol_dataset,self.vol_dataset,self.options) else: text,html = Voronoia.process_command('surfdist',self.vol_file,self.out_path,self.options) self.text_dialog('Surface distance','Surface distance values for data from %s'%(self.vol_file),text,html)
def write_avgpd(self): if not self.vol_file: self.select_first_message(".vol file") return self.get_options() self.options['reportmode']='both' if self.vol_dataset: self.options['dataset'] = self.vol_dataset text,html = Voronoia.process_command('average',self.vol_dataset,self.vol_dataset,self.options) else: text,html = Voronoia.process_command('average',self.vol_file,self.out_path,self.options) self.text_dialog('Average packing','Average packing values for data from %s'%(self.vol_file),text,html)
def packing_report(self): if not self.vol_file: self.select_first_message(".vol file") return self.get_options() self.options['reportmode']='both' if self.vol_dataset: self.options['dataset'] = self.vol_dataset text,html = Voronoia.process_command('report',self.vol_dataset,self.vol_dataset,self.options) else: text,html = Voronoia.process_command('report',self.vol_file,self.out_path,self.options) self.text_dialog('Packing report','Packing report for %s'%(self.vol_file),text,html)
def write_cav(self,response=1): if not self.vol_file: self.select_first_message(".vol file") return self.get_options() if self.vol_dataset: self.options['dataset'] = self.vol_dataset message = Voronoia.process_command('cavities',self.vol_dataset,self.vol_dataset,self.options) else: message = Voronoia.process_command('cavities',self.vol_file,self.out_path,self.options) if response: ms = Pmw.MessageDialog(self.parent,title="Cavities written as PDB file",message_text=message[0]) ms.activate() ms.withdraw() return message[1]
def compare_ref(self): if not self.vol_file: self.select_first_message(".vol file") return if not self.options['reference_file']: self.select_first_message("reference file") return self.get_options() self.options['reportmode']='both' if self.vol_dataset: self.options['dataset'] = self.vol_dataset text,html = Voronoia.process_command('compare',self.vol_dataset,self.vol_dataset,self.options) else: text,html = Voronoia.process_command('compare',self.vol_file,self.out_path,self.options) self.text_dialog('Packing compared to reference','Packing compared to reference values in\n%s'%(self.options['reference_file']),text,html)
def calc_packing(self,show_message=1): # check for complete data self.get_options() if not self.input_file: self.select_first_message("PDB file") return if not self.out_path: self.select_first_message("output directory") return result = [] for in_file in self.get_vol_files(): # show calculation message ms = Pmw.MessageDialog(title="Calculation running",buttons=[],message_text="""Packing data for the structure %s is being calculated. Please wait. The calculation takes 1-15 minutes per file, depending on the size of the structure and your hardware."""%in_file) ms.show() self.approot.update() # calculate message = Voronoia.process_command('calc',in_file,self.out_path,self.options) result.append(message) # destroy old message ms.withdraw() ms.destroy() self.approot.update() # set vol file variable if self.pdb_dataset: text = "%i packing files were calculated:\n"%len(result) text += string.join(['\t'+name[1] for name in result],'\n') if show_message: ms = Pmw.MessageDialog(title=".vol files calculated",message_text=text) self.vol_dataset = self.out_path self.vol_file = result[0][1] self.vol_file_var.set(self.vol_dataset) self.vol_dataset_radio.setvalue(['Process all .vol files in this directory']) return [name[1] for name in result] else: message = result[0] if show_message: ms = Pmw.MessageDialog(title=".vol file calculated",message_text=message[0]) self.vol_file = message[1] self.vol_file_var.set(self._short_name(message[1])) return message[1]
def __init__(self,app, pymol_gui=None): # option settings self.options = Voronoia.get_options() self.options['atomtyping'] = 'few' self.options['mode'] = 'packing_density' # calculate tab elements self.input_file = "" self.input_file_var = StringVar() self.input_file_var.set(self._short_name(self.input_file)) self.pdb_dataset = None self.pdb_dataset_radio = None self.out_path = os.getcwd()+os.sep self.out_path_var = StringVar() self.out_path_var.set(self.out_path) self.exe_file_var = StringVar() self.exe_file_var.set(self._short_name(self.options['executable'])) self.grid_dist_sel = None # options tab elements self.subset_radio = None self.cavnb_radio = None self.packing_mode_radio = None self.atomtyping_radio = None self.include_radio = None self.radii_radio = None # report tab elements self.vol_file = "" self.vol_file_var = StringVar() self.vol_file_var.set(self._short_name(self.vol_file)) self.vol_dataset = None self.vol_dataset_radio = None self.ref_file_var = StringVar() self.ref_file_var.set(self._short_name(self.options['reference_file'])) # now create the dialog self.approot = app.root dialog = Pmw.Dialog(self.approot, buttons = ('About','Help', 'Quit'), title = 'Voronoia Packing Toolbox', command = self.execute) dialog.withdraw() parent = dialog.interior() self.parent = parent self.dialog = dialog self.misc_text = None self.misc_html = None self.misc_dialog = None # add logo if PIL_FOUND: self.voroidlogo = PhotoImage(file = "data"+os.sep+"voronoia.gif") self.pymollogo = PhotoImage(file = "data"+os.sep+"pymol_logo.gif") # ,bg='white' can = Canvas(parent,height='96',width='280') can.pack() self.drawn = can.create_image(0,0,image=self.voroidlogo,anchor=NW) # -------------- notebook tabs ---------------------- notebook = Pmw.NoteBook(parent) notebook.pack(fill = 'both', expand = 1, padx = 0, pady = 0) # ----- PyMOL stuff -------------------------------------- if pymol_gui: pymol_gui.make_pymol_gui(self,notebook) # ----- files -------------------------------------- page = notebook.add('Calculate Packing') notebook.tab('Calculate Packing').focus_set() # input file frm = Frame(page) frm.pack(fill='x',expand=1, padx = 10, pady = 2) rb = Button(frm,text='Input PDB file',command=self.in_filedialog) rb.pack(side=LEFT) rl = Label(frm,textvariable=self.input_file_var,font=tkFont.Font(family="Helvetica",size="9",weight="normal"),relief='sunken', padx = 5, pady = 2) rl.pack(side=LEFT,fill='x', expand=1, padx=10, pady=1) # checkbox for dataset processing frm = Frame(page) frm.pack(fill='x',expand=0) self.pdb_dataset_radio = Pmw.RadioSelect(frm,buttontype="checkbutton",orient='vertical') self.pdb_dataset_radio.pack(side=LEFT,fill='both', expand=0, padx=10, pady=1) self.pdb_dataset_radio.add('Process all PDB files in this directory',command=None) # output path frm = Frame(page) frm.pack(fill='both',expand=1, padx = 10, pady = 2) rb = Button(frm,text='Output directory',command=self.out_pathdialog) rb.pack(side=LEFT) rl = Label(frm,textvariable=self.out_path_var,justify=LEFT,wraplength=180,font=tkFont.Font(family="Helvetica",size="9",weight="normal"),relief='sunken', padx = 10, pady = 2) rl.pack(side=LEFT,fill = 'x', expand = 1,padx=3) # start calculation button frm = Frame(page) frm.pack(fill='both',expand=1, padx = 10, pady = 0) button = Button(frm,text='Calculate packing file(s)',command=self.calc_packing) button.pack(side=LEFT,fill='x',expand=1,pady=2) # calculation parameters group = Pmw.Group(page,tag_text='Calculation parameters') group.pack(fill = 'both', expand = 1, padx = 0, pady = 0) frm = Frame(group.interior()) frm.pack(fill='both',expand=1, padx = 0, pady = 0) # grid distance selector grid_dist = Pmw.OptionMenu(frm, labelpos = 'w',label_text = 'Grid distance [Angstrom]', items = ('0.20','0.10','0.05','0.02','0.01',), ) grid_dist.pack(side=LEFT,fill='none',expand=0,padx=10) self.grid_dist_sel = grid_dist frm = Frame(group.interior()) frm.pack(fill='both',expand='1') # radii set radiobuttons radio = Pmw.RadioSelect(frm,buttontype="radiobutton",orient='vertical') radio.pack(side=LEFT) radio.add('ProtOr radii (Tsai 1999)') radio.add('Stouten radii (Stouten 1993)') radio.setvalue('ProtOr radii (Tsai 1999)') self.radii_radio = radio # hetero/water checkboxes radio = Pmw.RadioSelect(frm,buttontype="checkbutton",orient='vertical') radio.pack(side=RIGHT) # ,pady=3 radio.add('Include hetero groups',command=None) radio.add('Include water molecules',command=None) self.include_radio = radio # change executable button frm = Frame(group.interior()) frm.pack(fill='both',expand='1',padx=10) rb = Button(frm,text='Change executable',command=self.exe_filedialog) rb.pack(side=LEFT,fill='x',expand=0) # --------------- Options ---------------- page = notebook.add('Options') # buried / surface atoms group = Pmw.Group(page,tag_text='Solvent acessibility') group.pack(fill='both',expand=1, padx=4, pady=2) frm = Frame(group.interior()) frm.pack(fill='both',expand='1') radio = Pmw.RadioSelect(frm,buttontype="checkbutton",orient='vertical') radio.pack(side=LEFT) radio.add('include buried atoms',command=None) radio.add('include solvent accessible atoms',command=None) radio.setvalue(['include buried atoms']) self.subset_radio = radio # cavity-neighbor / non-neighbor atoms group = Pmw.Group(page,tag_text='Cavity neighbors') group.pack(fill='both',expand=1, padx=4, pady=2) frm = Frame(group.interior()) frm.pack(fill='both',expand='1') radio = Pmw.RadioSelect(frm,buttontype="checkbutton",orient='vertical') radio.pack(side=LEFT) radio.add('include cavity neighbor atoms',command=None) radio.add('include all other atoms',command=None) radio.setvalue(['include cavity neighbor atoms','include all other atoms']) self.cavnb_radio = radio # write packing densities or volumes group = Pmw.Group(page,tag_text='Output data type') group.pack(side=TOP,fill='both',expand=1, padx=4, pady=2) radio = Pmw.RadioSelect(group.interior(),buttontype="radiobutton",orient='vertical') radio.pack(side=LEFT) radio.add('atomic packing densities') radio.add('atomic volumes') radio.setvalue('atomic packing densities') self.packing_mode_radio = radio # concise or long atom types group = Pmw.Group(page,tag_text='Atom typing') group.pack(side=TOP,fill='both',expand=1, padx=4, pady=2) radio = Pmw.RadioSelect(group.interior(),buttontype="radiobutton",orient='vertical') radio.pack(side=LEFT) radio.add('19 ProtOr atom types') radio.add('173 explicit atom types') radio.setvalue('19 ProtOr atom types') self.atomtyping_radio = radio # surfdist parameters group = Pmw.Group(page,tag_text='Surface distance parameters') group.pack(fill = 'both', expand = 1, padx = 0, pady = 0) frm = Frame(group.interior()) frm.pack(fill='both',expand=1, padx = 0, pady = 0) n_bins = Pmw.OptionMenu(frm, labelpos = 'w',label_text = 'number of bins', items = ('10','20','50','100',), initialitem='20' ) max_depth = Pmw.OptionMenu(frm, labelpos = 'w',label_text = 'maximum depth [Angstrom]', items = ('5.0','10.0','15.0','20.0'), initialitem='10.0' ) n_bins.pack(side=LEFT,fill='none',expand=0,padx=10) max_depth.pack(side=LEFT,fill='none',expand=0,padx=10) self.n_bins_sel = n_bins self.maxdepth_sel = max_depth # Pmw.Color.changecolor(page, background = 'white',foreground='#000070') # ------------- actions ----------------- page = notebook.add('Results') # input .vol file(s) group = Pmw.Group(page,tag_text='Packing files') group.pack(fill = 'x', expand = 1, padx = 10, pady = 2) frm = Frame(group.interior()) frm.pack(fill='x',expand=1, padx = 10, pady = 2) rb = Button(frm,text='Choose .vol file',command=self.vol_filedialog) rb.pack(side=LEFT) rl = Label(frm,textvariable=self.vol_file_var,font=tkFont.Font(family="Helvetica",size="9",weight="normal"),relief='sunken', padx = 5, pady = 2) rl.pack(side=LEFT,fill='x', expand=1, padx=10, pady=1) # checkbox for dataset processing frm = Frame(group.interior()) frm.pack(fill='x',expand=0) self.vol_dataset_radio = Pmw.RadioSelect(frm,buttontype="checkbutton",orient='vertical') self.vol_dataset_radio.pack(side=LEFT,fill='both', expand=0, padx=10, pady=1) self.vol_dataset_radio.add('Process all .vol files in this directory',command=None) # Reports group = Pmw.Group(page,tag_text='Report') group.pack(fill = 'x', expand = 1, padx = 10, pady = 2) rb = Button(group.interior(),text='Create packing report',command=self.packing_report) rb.pack(fill='x',expand=1, padx = 10, pady = 2) rb = Button(group.interior(),text='Calculate average packing',command=self.write_avgpd) rb.pack(fill='x',expand=1, padx = 10, pady = 2) # compare to reference values group = Pmw.Group(page,tag_text='Reference data') group.pack(fill = 'x', expand = 1, padx = 10, pady = 2) frm = Frame(group.interior()) frm.pack(fill='x',expand=1, padx = 10, pady = 2) rb = Button(frm,text='Choose reference file',command=self.ref_filedialog) rb.pack(side=LEFT) rl = Label(frm,textvariable=self.ref_file_var,font=tkFont.Font(family="Helvetica",size="9",weight="normal"),relief='sunken', padx = 5, pady = 2) rl.pack(side=LEFT,fill='x', expand=1, padx=10, pady=1) rb = Button(group.interior(),text='Compare .vol file to reference data',command=self.compare_ref) rb.pack(fill='x',expand=1, padx = 10, pady = 2) # report surface distances group = Pmw.Group(page,tag_text='Surface distance statistics') group.pack(fill = 'x', expand = 1, padx = 10, pady = 2) rb = Button(group.interior(),text='Report distance to surface',command=self.surfdist) rb.pack(fill='x',expand=1, padx = 10, pady = 2) # write cavity coordinates group = Pmw.Group(page,tag_text='PDB output') group.pack(fill = 'x', expand = 1, padx = 10, pady = 2) rb = Button(group.interior(),text='Write cavities as PDB',command=self.write_cav) rb.pack(fill='x',expand=1, padx = 10, pady = 2) rb = Button(group.interior(),text='Write cavity neighbors as PDB',command=self.write_cavnb) rb.pack(fill='x',expand=1, padx = 10, pady = 2) # Pmw.Color.changecolor(page, background = 'white',foreground='#000070') notebook.recolorborders() notebook.setnaturalsize() dialog.show()