# --- UCSF Chimera Copyright --- # Copyright (c) 2000 Regents of the University of California. # All rights reserved. This software provided pursuant to a # license agreement containing restrictions on its disclosure, # duplication and use. This notice must be embedded in or # attached to all copies, including partial copies, of the # software or any revisions or derivations thereof. # --- UCSF Chimera Copyright --- # # $Id: gui.py 31917 2010-11-17 19:22:45Z pett $ from chimera.baseDialog import ModelessDialog from chimera import dialogs from prefs import prefs, defaults, INCOMPLETE_SC class DockPrepDialog(ModelessDialog): name = "dock prep dialog" title = "Dock Prep" buttons = ('OK', 'Cancel') default = 'OK' help = "ContributedSoftware/dockprep/dockprep.html" def fillInUI(self, parent): import Tkinter, Pmw row=0 from chimera.widgets import MoleculeScrolledListBox self.molListBox = MoleculeScrolledListBox(parent, labelpos="nw", label_text="Molecules to prep:", listbox_selectmode="extended") self.molListBox.grid(row=row, sticky='ew') row += 1 Tkinter.Label(parent, text="\nFor chosen molecules," " do the following:").grid(row=row, sticky='w') row += 1 self.delSolventVar = Tkinter.IntVar(parent) self.delSolventVar.set(True) Tkinter.Checkbutton(parent, variable=self.delSolventVar, text= "Delete solvent").grid(row=row, sticky='w') row += 1 self.delIonsVar = Tkinter.IntVar(parent) self.delIonsVar.set(False) Tkinter.Checkbutton(parent, variable=self.delIonsVar, text= "Delete non-complexed ions").grid(row=row, sticky='w') row += 1 self.delAltLocsVar = Tkinter.IntVar(parent) self.delAltLocsVar.set(True) Tkinter.Checkbutton(parent, variable=self.delAltLocsVar, text= "If alternate locations, keep only highest occupancy", ).grid(row=row, sticky='w') row += 1 f = Tkinter.Frame(parent) f.grid(row=row, sticky='w') Tkinter.Label(f, text="Change:").grid( row=0, column=0, rowspan=4) self.mutMseVar = Tkinter.IntVar(parent) self.mutMseVar.set(True) Tkinter.Checkbutton(f, variable=self.mutMseVar, text= "selenomethionine (MSE) to methionine (MET)" ).grid(row=0, column=1, sticky='w') self.mut5buVar = Tkinter.IntVar(parent) self.mut5buVar.set(True) Tkinter.Checkbutton(f, variable=self.mut5buVar, text= "bromo-UMP (5BU) to UMP (U)" ).grid(row=1, column=1, sticky='w') self.mutUmsVar = Tkinter.IntVar(parent) self.mutUmsVar.set(True) Tkinter.Checkbutton(f, variable=self.mutUmsVar, text= "methylselenyl-dUMP (UMS) to UMP (U)" ).grid(row=2, column=1, sticky='w') self.mutCslVar = Tkinter.IntVar(parent) self.mutCslVar.set(True) Tkinter.Checkbutton(f, variable=self.mutCslVar, text= "methylselenyl-dCMP (CSL) to CMP (C)" ).grid(row=3, column=1, sticky='w') row += 1 self.incompleteVar = Tkinter.IntVar(parent) self.incompleteVar.set(True) f = Tkinter.Frame(parent) Tkinter.Checkbutton(f, variable=self.incompleteVar, text="Incomplete side chains:", command=self._incompleteCB).grid(row=0, column=0) from Rotamers import libraries libraries.sort(lambda a, b: cmp(a.displayName, b.displayName)) from chimera.tkoptions import SymbolicEnumOption labels = ["Replace using %s rotamer library" % lib.displayName for lib in libraries] labels.append("Mutate residues to ALA (if CB present) or GLY") values = libraries + ["gly/ala"] class IncompleteSCOption(SymbolicEnumOption): pass IncompleteSCOption.labels = labels IncompleteSCOption.values = values for possibleDefault in (prefs[INCOMPLETE_SC], defaults[INCOMPLETE_SC]): for val in IncompleteSCOption.values: if type(val) == str: if val == possibleDefault: default = possibleDefault break elif val.importName == possibleDefault: default = val break else: continue break self.incompleteOpt = IncompleteSCOption(f, 0, "", default, self._incompleteCB, startCol=1) f.grid(row=row, sticky='w') row += 1 self.addHydVar = Tkinter.IntVar(parent) self.addHydVar.set(True) Tkinter.Checkbutton(parent, variable=self.addHydVar, text="Add hydrogens").grid(row=row, sticky='w') row += 1 self.addChargesVar = Tkinter.IntVar(parent) self.addChargesVar.set(True) Tkinter.Checkbutton(parent, variable=self.addChargesVar, text="Add charges").grid(row=row, sticky='w') row += 1 self.writeMol2Var = Tkinter.IntVar(parent) self.writeMol2Var.set(True) Tkinter.Checkbutton(parent, variable=self.writeMol2Var, text="Write Mol2 file").grid(row=row, sticky='w') row += 1 self.applyKeywords = {} self.citationWidgets = {} self.citationRow = row self._incompleteCB() def Apply(self): from DockPrep import prep if self.addHydVar.get(): import AddH addHFunc = AddH.hbondAddHydrogens else: addHFunc = None kw = self.applyKeywords self.applyKeywords = {} rotamerLib = rotamerPreserve = None if self.incompleteVar.get(): incompleteVal = self.incompleteOpt.get() if type(incompleteVal) != str: rotamerLib = incompleteVal.importName rotamerPreserve = True incompleteVal = "rotamers" prefs[INCOMPLETE_SC] = incompleteVal else: incompleteVal = None prep(self.molListBox.getvalue(), addHFunc=addHFunc, addCharges=self.addChargesVar.get(), runSaveMol2Dialog=self.writeMol2Var.get(), mutateMSE=self.mutMseVar.get(), mutate5BU=self.mut5buVar.get(), mutateUMS=self.mutUmsVar.get(), mutateCSL=self.mutCslVar.get(), delSolvent=self.delSolventVar.get(), delIons=self.delIonsVar.get(), delAltLocs=self.delAltLocsVar.get(), incompleteSideChains=incompleteVal, rotamerLib=rotamerLib, rotamerPreserve=rotamerPreserve, **kw) def _incompleteCB(self, *args): if 'showing' in self.citationWidgets: self.citationWidgets['showing'].grid_forget() del self.citationWidgets['showing'] if not self.incompleteVar.get(): return lib = self.incompleteOpt.get() if type(lib) == str: return if lib not in self.citationWidgets: if lib.citation: from CGLtk.Citation import Citation citationWidget = Citation(self.uiMaster(), lib.citation, prefix="Publications" " using %s rotamers should cite:" % lib.citeName, pubmedID=lib.citePubmedID) else: citationWidget = None self.citationWidgets[lib] = citationWidget else: citationWidget = self.citationWidgets[lib] if citationWidget: citationWidget.grid(row=self.citationRow, column=0) self.citationWidgets['showing'] = citationWidget dialogs.register(DockPrepDialog.name, DockPrepDialog)