Exemplo n.º 1
0
	def fillInUI(self, parent):
		self.parent = parent
		Tkinter.Label(parent, text="Change color every:").grid(
					row=0, rowspan=3, column=0, sticky='w')
		self.colorChangeVar = Tkinter.StringVar(parent)
		self.colorChangeVar.set("residues")
		Tkinter.Radiobutton(parent, text='residue', value='residues',
					variable=self.colorChangeVar).grid(
					row=0, column=1, sticky='w')
		Tkinter.Radiobutton(parent, text='chain', value='chains',
					variable=self.colorChangeVar).grid(
					row=1, column=1, sticky='w')
		Tkinter.Radiobutton(parent, text='model', value='models',
					variable=self.colorChangeVar).grid(
					row=2, column=1, sticky='w')
		group = Pmw.Group(parent, tag_text='Color range')
		group.grid(row=3, column=0, columnspan=2)
		self.wells = []
		for i, color in enumerate(self.prefs["colors"]):
			well = ColorWell(group.interior(), color=color,
								noneOkay=1)
			well.grid(row=0, column=i)
			self.wells.append(well)
		from chimera.widgets import MoleculeScrolledListBox
		self.molListBox = MoleculeScrolledListBox(parent,
			listbox_selectmode="extended", labelpos="n",
			label_text="Models")
		self.molListBox.grid(row=0, column=2, rowspan=4, sticky="news")
		parent.rowconfigure(0, weight=1)
		parent.columnconfigure(2, weight=1)
	def fillInUI(self, parent):
		self.info = [
			("Helix", HELIX_COLOR, 'isHelix'),
			("Strand", SHEET_COLOR, 'isSheet'),
			("Other", OTHER_COLOR, None)
		]
		header = Tkinter.Frame(parent)
		header.grid(row=0, column=0, sticky="nsew")
		parent.rowconfigure(0, weight=1)
		for i in range(len(self.info)):
			parent.columnconfigure(i, weight=1)

		from chimera.widgets import MoleculeScrolledListBox
		self.molListBox = MoleculeScrolledListBox(header,
				selectioncommand=lambda: self.configure(
				models=self.molListBox.getvalue()),
				listbox_selectmode="extended",
				labelpos="nw", label_text="Models")
		self.molListBox.grid(row=0, column=0,
					rowspan=len(self.info), sticky="nsew")
		for i in range(3):
			header.rowconfigure(i, weight=1)
		header.columnconfigure(0, weight=1)

		self.colorRibVar = Tkinter.IntVar(parent)
		self.colorRibVar.set(True)
		self.colorAtomVar = Tkinter.IntVar(parent)
		self.colorAtomVar.set(False)
		self.colorSurfVar = Tkinter.IntVar(parent)
		self.colorSurfVar.set(False)
		varFrame = Tkinter.Frame(parent)
		varFrame.grid(row=1, column=0)
		for i, info in enumerate([(self.colorRibVar, "Color ribbons"),
				(self.colorAtomVar, "Color atoms"),
				(self.colorSurfVar, "Color surfaces")]):
			var, text = info
			but = Tkinter.Checkbutton(varFrame, variable=var,
								text=text)
			but.grid(row=i, column=0, sticky='w')

		self.wells = []
		self.actVars = []
		from CGLtk.color.ColorWell import ColorWell
		from chimera.colorTable import getColorByName
		for row, ssInfo in enumerate(self.info):
			ssType, prefName, attrName = ssInfo
			rgba = prefs[prefName]
			if isinstance(rgba, basestring):
				rgba = getColorByName(rgba).rgba()
			well = ColorWell(header, color=rgba,
							noneOkay=True)
			self.wells.append(well)
			well.grid(row=row, column=2)

			actVar = Tkinter.IntVar(parent)
			actVar.set(True)
			self.actVars.append(actVar)
			Tkinter.Checkbutton(header, variable=actVar,
						text=ssType).grid(row=row,
						column=1, sticky='w')
Exemplo n.º 3
0
    def fillInUI(self, parent):
        import Pmw, Tkinter
        from chimera.widgets import MoleculeScrolledListBox
        self.molList = MoleculeScrolledListBox(
            parent,
            labelpos='w',
            label_text="Add hydrogens to:",
            listbox_selectmode='extended',
            selectioncommand=self._updateHisListing)
        if self.startModels:
            self.molList.setvalue(self.startModels)
        self.molList.grid(row=0, column=0, sticky="news")
        parent.columnconfigure(0, weight=1)
        parent.rowconfigure(0, weight=1)

        grp = Pmw.Group(parent, tag_text="Method", hull_padx=2)
        grp.grid(row=1, column=0, sticky="ew")
        self.useHBondsVar = Tkinter.IntVar(parent)
        self.useHBondsVar.set(self.startUseHBonds)
        Tkinter.Radiobutton(grp.interior(),
                            variable=self.useHBondsVar,
                            value=False,
                            text="steric only").grid(row=0, sticky='w')
        Tkinter.Radiobutton(grp.interior(),
                            variable=self.useHBondsVar,
                            value=True,
                            text="also consider H-bonds (slower)").grid(
                                row=1, sticky='w')

        self.hisGroup = Pmw.Group(parent,
                                  hull_padx=2,
                                  tag_text="Histidine Protonation")
        self.hisGroup.grid(row=2, column=0, sticky="nsew")
        self.hisProtVar = Tkinter.StringVar(parent)
        self.hisProtVar.set("name")
        interior = self.hisGroup.interior()
        Tkinter.Radiobutton(
            interior,
            variable=self.hisProtVar,
            value="name",
            text="Residue-name-based\n"
            "(HIS/HID/HIE/HIP = unspecified/delta/epsilon/both)",
            command=self._switchHisList,
            justify="left").grid(row=0, sticky='w')
        self._pickText = Tkinter.StringVar(parent)
        self._pickText.set("Specified individually...")
        Tkinter.Radiobutton(
            interior,
            variable=self.hisProtVar,
            value="pick",
            textvariable=self._pickText,
            command=self._switchHisList,
        ).grid(row=1, sticky='w')
        Tkinter.Radiobutton(interior,
                            variable=self.hisProtVar,
                            value="default",
                            command=self._switchHisList,
                            text="Unspecified (determined by method)").grid(
                                row=3, sticky='w')
Exemplo n.º 4
0
 def fillInUI(self, parent):
     import Tkinter
     from chimera.widgets import MoleculeScrolledListBox
     self.molList = MoleculeScrolledListBox(parent,
                                            listbox_selectmode="extended")
     self.molList.pack(expand=True, fill="both")
     self.minimizeOptions = MinimizeOptions(parent)
     self.minimizeOptions.pack(expand=False, fill="both")
Exemplo n.º 5
0
    def fill_in_ui(self, parent):
        input_frame = tk.LabelFrame(self.canvas,
                                    text='Select a protein-ligand complex')
        self.ui_molecules = MoleculeScrolledListBox(input_frame)
        self.ui_molecules.filtFunc = lambda m: not m.name.startswith('PLIP-')
        self.ui_molecules.refresh()
        self.ui_molecules.pack(padx=5, pady=5, expand=True, fill='both')

        input_frame.pack(padx=5, pady=5, expand=True, fill='both')
Exemplo n.º 6
0
    def fillInUI(self, parent):
        from chimera.widgets import MoleculeScrolledListBox
        self.molList = MoleculeScrolledListBox(parent,
                                               labelpos='w',
                                               listbox_selectmode="extended",
                                               label_text="Add ions : ")
        self.molList.grid(row=0, column=0, sticky="nsew")

        rcf1 = Tkinter.Frame(parent)
        rcf1.grid(row=2, column=0, sticky="nsew")

        from Addions import ValidIontypes
        self.iontype = "Cl-"
        self.iontypeOption = Pmw.OptionMenu(rcf1,
                                            label_text="Ion types:",
                                            labelpos='w',
                                            items=ValidIontypes,
                                            initialitem=self.iontype,
                                            command=self.changeIontype)
        self.iontypeOption.grid(row=0, column=0)

        rcf2 = Tkinter.Frame(parent)
        rcf2.grid(row=3, column=0)
        rcf2.columnconfigure(2, weight=1)

        self.numionOption = Pmw.RadioSelect(rcf2,
                                            buttontype='radiobutton',
                                            command=self.changeNumion,
                                            labelpos='w',
                                            label_text="# of ions:")
        self.numionOption.add("neutralize")
        self.numionOption.add("specific number:")
        self.numionOption.setvalue("neutralize")
        self.numionOption.grid(row=0, column=0)
        self.numion = "neutralize"

        self.numionValue = Hybrid.StringVariable(rcf2)
        self.numionEntry = Tkinter.Entry(
            rcf2,
            width=5,
            textvariable=self.numionValue.tk_variable,
            state='disabled')
        self.numionEntry.grid(row=0, column=1)

        parent.rowconfigure(0, weight=1)
        parent.columnconfigure(0, weight=1)
	def fillInUI(self, parent):
		self.notebook = Pmw.NoteBook(parent)
		self.notebook.pack(fill="both", expand=True)
		page = self.notebook.add("Molecules")
		self.molChooser = MoleculeScrolledListBox(page,
					listbox_selectmode="extended",
					autoselect="single")
		self.molChooser.pack(fill="both", expand=True)
		page = self.notebook.add("Chains")
		self.chainChooser = MoleculeChainScrolledListBox(page,
					listbox_selectmode="extended",
					autoselect="single")
		self.chainChooser.pack(fill="both", expand=True)
		titles = self.Servers.keys()
		titles.sort()
		self.serverChooser = Pmw.OptionMenu(parent,
					labelpos="w",
					label_text="Compute:",
					items=titles,
					command=self._changeServer)
		self.serverChooser.pack(fill="x", expand=False)
		self.paramHolder = Tkinter.Frame(parent, padx=10, pady=2)
		self.paramHolder.pack(fill="x", expand=False)
		self.paramFrames = {}
		for name, val in self.Servers.iteritems():
			self.paramFrames[name] = val[2](self, self.paramHolder)
		self.propertyName = Pmw.EntryField(parent,
					labelpos="w",
					label_text="As attribute:",
					value=self.Servers[titles[0]][0],
					validate=self._validatePropName)
		self.propertyName.pack(fill="x", expand=False)
		self.outputOptions = Pmw.RadioSelect(parent,
					pady=0,
					buttontype="checkbutton",
					orient="vertical")
		self.outputOptions.pack(fill="x", expand=False)
		self.outputOptions.add("rba",
					text="Open Render/Select by Attribute")
		self.outputOptions.add("save",
					text="Save server output to file")
		self.outputOptions.add("show",
					text="Show server output in browser")
		self.outputOptions.setvalue(["rba"])
		self._changeServer(titles[0])
Exemplo n.º 8
0
    def fill_in_ui(self, parent):
        note_frame = tk.LabelFrame(self.canvas, text='How to run PoPMuSiC')
        tk.Label(note_frame,
                 text="PoPMuSiC is a web service!\nYou must register "
                 "and run the jobs from:").pack(padx=5, pady=5)
        self.ui_web_btn = tk.Button(
            note_frame,
            text="PoPMuSiC web interface",
            command=lambda *a: web.open_new(r"http://soft.dezyme.com/"))
        self.ui_web_btn.pack(padx=5, pady=5)

        input_frame = tk.LabelFrame(
            self.canvas, text='Select molecule and PoPMuSiC output files')
        input_frame.rowconfigure(0, weight=1)
        input_frame.columnconfigure(1, weight=1)
        self.ui_molecules = MoleculeScrolledListBox(input_frame)
        self.ui_molecules.grid(row=0,
                               columnspan=3,
                               padx=5,
                               pady=5,
                               sticky='news')
        entries = [('popfile', 'POP file', '.pop'),
                   ('popsfile', 'POPS file', '.pops')]
        for i, (var, label, ext) in enumerate(entries):
            # Label
            tk.Label(input_frame, text=label).grid(row=i + 1,
                                                   column=0,
                                                   padx=3,
                                                   pady=3,
                                                   sticky='e')
            # Field entry
            stringvar = getattr(self, '_' + var)
            entry = tk.Entry(input_frame, textvariable=stringvar)
            entry.grid(row=i + 1, column=1, padx=3, pady=3, sticky='news')
            setattr(self, 'ui_' + var + '_entry', entry)
            # Button
            button = tk.Button(
                input_frame,
                text='...',
                command=lambda v=stringvar, e=ext: self._browse_cb(v, e))
            button.grid(row=i + 1, column=2, padx=3, pady=3)
            setattr(self, 'ui_' + var + '_button', button)

        note_frame.pack(fill='x', padx=5, pady=5)
        input_frame.pack(expand=True, fill='both', padx=5, pady=5)
Exemplo n.º 9
0
	def fillInUI(self, parent):
		from chimera.widgets import MoleculeScrolledListBox
		self.molListBox = MoleculeScrolledListBox(parent,
			listbox_selectmode='extended', labelpos='w',
			label_text="Molecules to combine/copy:")
		if self.initModels:
			self.molListBox.setvalue(self.initModels)
		self.molListBox.grid(row=0, column=0, columnspan=2,
							sticky="nsew")
		parent.rowconfigure(0, weight=1)
		parent.columnconfigure(1, weight=1)
		from chimera.tkoptions import StringOption, IntOption
		self.molNameEntry = StringOption(parent, 1, "New model's"
						" name", "combination", None)

		curIDs = set([i1 for i1, i2 in openModels.listIds()])
		mid = 0
		while mid in curIDs:
			mid += 1
		self.modelID = IntOption(parent, 2, "New model's ID", mid, None)

		from chimera.widgets import MoleculeOptionMenu
		self.refMolMenu = MoleculeOptionMenu(parent, labelpos='w',
			label_text="Coordinate system of:",
			initialitem=self.initModels[0])
		self.refMolMenu.grid(row=3, column=0, columnspan=2, sticky='w')

		import Pmw
		chb = self.chainHandlingButtons = Pmw.RadioSelect(parent,
			buttontype="radiobutton", labelpos='w',
			label_text="If original molecules have duplicate\n"
			"single-letter chain IDs, then:", orient="vertical")
		self.buttonTexts = ["rename them uniquely",
				"retain them (residues may be renumbered)"]
		for bt in self.buttonTexts:
			chb.add(bt)
		chb.setvalue(self.buttonTexts[0])
		chb.grid(row=4, column=0, columnspan=2)

		import Tkinter
		self.closeModelsVar = Tkinter.IntVar(parent)
		self.closeModelsVar.set(False)
		Tkinter.Checkbutton(parent, text="Close source models",
					variable=self.closeModelsVar).grid(
					row=5, column=0, columnspan=2)
Exemplo n.º 10
0
    def fillInUI(self, parent):
        from chimera.widgets import MoleculeScrolledListBox
        self.molList = MoleculeScrolledListBox(parent,
                                               labelpos='w',
                                               listbox_selectmode="extended",
                                               label_text='Add charges to:')
        if self.startModels:
            self.molList.setvalue(self.startModels)
        self.molList.grid(row=0, column=0, sticky="nsew")
        parent.rowconfigure(0, weight=1)
        parent.columnconfigure(0, weight=1)

        import Pmw
        from AddCharge import knownChargeModels, defaultChargeModel
        self.chargeModel = Pmw.OptionMenu(parent,
                                          labelpos='w',
                                          label_text="Standard residues:",
                                          items=knownChargeModels,
                                          initialitem=self.initialChargeModel)
        self.chargeModel.grid(row=1, column=0)

        self.chargeMethod = ChargeMethodOption(parent, label="Other residues:")
        self.chargeMethod.grid(row=2, column=0)

        import Tkinter
        labelFrame = Tkinter.Frame(parent)
        labelFrame.grid(row=3, column=0)
        Tkinter.Label(labelFrame,
                      text="Add labels showing charges"
                      " to atoms in:").grid(row=0, column=0, rowspan=2)
        self.labelNonstandardVar = Tkinter.IntVar(parent)
        self.labelNonstandardVar.set(False)
        Tkinter.Checkbutton(labelFrame,
                            text="nonstandard residues",
                            variable=self.labelNonstandardVar).grid(row=0,
                                                                    column=1,
                                                                    sticky='w')
        self.labelStandardVar = Tkinter.IntVar(parent)
        self.labelStandardVar.set(False)
        Tkinter.Checkbutton(labelFrame,
                            text="standard residues",
                            variable=self.labelStandardVar).grid(row=1,
                                                                 column=1,
                                                                 sticky='w')
Exemplo n.º 11
0
    def __init__(self, master, **kw):
        Tkinter.Frame.__init__(self, master, **kw)

        self.rgbaOpt = RGBAOption(self,
                                  1,
                                  'Color',
                                  prefs[COLOR],
                                  None,
                                  noneOkay=False)
        self.associateVar = Tkinter.IntVar(self)
        self.associateVar.set(0)
        Tkinter.Checkbutton(self,
                            command=self.modelsActivity,
                            text="Associate with...",
                            variable=self.associateVar).grid(row=2,
                                                             column=0,
                                                             sticky='e')

        self.moleculeList = MoleculeScrolledListBox(self,
                                                    autoselect='single',
                                                    listbox_state='disabled')
        self.moleculeList.grid(row=2, column=1, sticky='w')
Exemplo n.º 12
0
	def fillInUI(self, parent):
		OpenModeless.fillInUI(self, parent)
		from chimera.widgets import MoleculeScrolledListBox
		self.molListBox = MoleculeScrolledListBox(self.clientArea,
				listbox_selectmode="extended",
				labelpos="w", label_text="Restrict to models:")
		self.molListBox.grid(row=0, column=0, sticky="nsew")
		self.clientArea.rowconfigure(0, weight=1)
		self.clientArea.columnconfigure(0, weight=1)

		checkButtonFrame = Tkinter.Frame(self.clientArea)
		checkButtonFrame.grid(row=1, column=0)

		self.openDialog = Tkinter.IntVar(parent)
		self.openDialog.set(True)
		Tkinter.Checkbutton(checkButtonFrame, variable=self.openDialog,
			text="Open Render/Select by Attribute").grid(
			row=0, column=0, sticky='w')

		self.doLog = Tkinter.IntVar(parent)
		self.doLog.set(False)
		Tkinter.Checkbutton(checkButtonFrame,
			text="Send match info to Reply Log",
			variable=self.doLog).grid(row=1, column=0, sticky='w')
Exemplo n.º 13
0
    def fillInUI(self, parent):
        import Pmw, Tkinter
        row = 0
        Tkinter.Label(parent, text="Create axis for...").grid(row=row,
                                                              sticky='w')
        row += 1
        self.modeVar = Tkinter.IntVar(parent)
        self.modeVar.set(self.MODE_HELICES)
        f = Tkinter.Frame(parent)
        f.grid(row=row, sticky='nsew')
        row += 1
        Tkinter.Radiobutton(f,
                            text="Each helix in:",
                            command=self._helixCB,
                            variable=self.modeVar,
                            value=self.MODE_HELICES).grid(row=0, column=0)
        from chimera.widgets import MoleculeScrolledListBox
        self.molList = MoleculeScrolledListBox(f,
                                               listbox_selectmode='extended')
        self.molList.grid(row=0, column=1, sticky="nsew")
        parent.rowconfigure(1, weight=1)
        parent.columnconfigure(0, weight=1)
        f.rowconfigure(0, weight=1)
        f.columnconfigure(1, weight=1)
        f = Tkinter.Frame(parent)
        f.grid(row=row, sticky='w')
        row += 1
        Tkinter.Radiobutton(f,
                            text="Selected atoms (axis name:",
                            command=self._selCB,
                            variable=self.modeVar,
                            value=self.MODE_SELECTION).grid(row=0, column=0)
        self.axisNameVar = Tkinter.StringVar(parent)
        self.axisNameVar.set("axis")
        Tkinter.Entry(f, textvariable=self.axisNameVar,
                      width=10).grid(row=0, column=1)
        Tkinter.Label(f, text=")").grid(row=0, column=2)

        paramGroup = Pmw.Group(parent, tag_text="Axis Parameters")
        paramGroup.grid(row=row, column=0)
        row += 1
        paramFrame = paramGroup.interior()
        prow = 0

        butFrame = Tkinter.Frame(paramFrame)
        butFrame.grid(row=prow, column=0, columnspan=3)
        prow += 1

        self.massWeighting = Tkinter.IntVar(parent)
        self.massWeighting.set(False)
        self._mwButton = Tkinter.Checkbutton(butFrame,
                                             command=self._mwCB,
                                             text="Mass weighting",
                                             variable=self.massWeighting)
        self._mwButton.grid(row=0, column=0, sticky='w')
        self._mwButton.grid_remove()

        self.helixCorrection = Tkinter.IntVar(parent)
        self.helixCorrection.set(True)
        Tkinter.Checkbutton(butFrame,
                            text="Use helical correction",
                            command=self._hcCB,
                            variable=self.helixCorrection).grid(row=1,
                                                                column=0,
                                                                sticky='w')

        self.replaceExisting = Tkinter.IntVar(parent)
        self.replaceExisting.set(True)
        Tkinter.Checkbutton(butFrame,
                            text="Replace existing axes",
                            variable=self.replaceExisting).grid(row=2,
                                                                column=0,
                                                                sticky='w')

        f = Tkinter.Frame(paramFrame)
        f.grid(row=prow, column=0, columnspan=3)
        prow += 1
        from chimera.tkoptions import ColorOption, FloatOption
        self.colorOpt = ColorOption(
            f,
            prow,
            "Color",
            None,
            None,
            balloon="Axis color.  If No Color, then the axis"
            " will be colored to match the structure")

        Tkinter.Label(paramFrame, text="Radius:").grid(row=prow,
                                                       column=0,
                                                       rowspan=2)
        self.fixedRadiusVar = Tkinter.IntVar(parent)
        self.fixedRadiusVar.set(False)
        Tkinter.Radiobutton(paramFrame,
                            variable=self.fixedRadiusVar,
                            padx=0,
                            value=False).grid(row=prow, column=1)
        Tkinter.Label(paramFrame,
                      text="average axis-atom distance").grid(row=prow,
                                                              column=2,
                                                              sticky='w')
        Tkinter.Radiobutton(paramFrame,
                            variable=self.fixedRadiusVar,
                            padx=0,
                            value=True).grid(row=prow + 1, column=1)
        f = Tkinter.Frame(paramFrame)
        f.grid(row=prow + 1, column=2, sticky='w')
        self.radiusOpt = FloatOption(f,
                                     0,
                                     "angstroms",
                                     prefs[AXIS_RADIUS],
                                     None,
                                     min=0.01)
Exemplo n.º 14
0
    def fillInUI(self, parent):
        self.refMolList = MoleculeScrolledListBox(
            parent,
            autoselect="single",
            labelpos="nw",
            label_text="Reference structure:")
        self.refChainList = MoleculeChainScrolledListBox(
            parent,
            labelpos="nw",
            label_text="Reference chain:",
            listbox_selectmode='extended')

        self.matchMolList = MoleculeScrolledListBox(
            parent,
            labelpos="nw",
            label_text="Structure(s) to match:",
            listbox_selectmode='extended')
        self.matchChainList = ChainMenus(parent)

        def doSync():
            if self.chainMatchVar.get() != CP_SPECIFIC_SPECIFIC:
                return
            self.matchChainList.syncUp(self.refChainList)

        self.refChainList.configure(selectioncommand=doSync)
        parent.rowconfigure(0, weight=1)
        parent.columnconfigure(0, weight=1)
        parent.columnconfigure(1, weight=1)

        seqFrame = Tkinter.Frame(parent)
        seqFrame.grid(row=1, column=0, columnspan=2, sticky="nsew")
        seqFrame.columnconfigure(0, weight=1)
        seqFrame.columnconfigure(1, weight=1)

        pairingGroup = Pmw.Group(seqFrame, tag_text="Chain pairing")
        pairingGroup.grid(row=0, column=0, columnspan=2, sticky="w", padx=2)
        pairingGroup.interior().columnconfigure(0, weight=1)

        self.chainMatchVar = Tkinter.StringVar(parent)
        self.chainMatchVar.set(prefs[CHAIN_PAIRING])

        radiobuttonInfo = [
            (CP_BEST,
             "Best-aligning pair of chains\n\tbetween reference and match structure"
             ),
            (CP_SPECIFIC_BEST,
             "Specific chain in reference structure\n\twith best-aligning chain in match structure"
             ),
            (CP_SPECIFIC_SPECIFIC,
             "Specific chain(s) in reference structure\n\twith specific chain(s) in match structure"
             ),
        ]
        for i in range(len(radiobuttonInfo)):
            val, text = radiobuttonInfo[i]
            radio = Tkinter.Radiobutton(pairingGroup.interior(),
                                        command=self._chainMatchCB,
                                        text=text,
                                        justify='left',
                                        value=val,
                                        variable=self.chainMatchVar)
            radio.grid(row=i, column=0, sticky='w')
        self._chainMatchCB()

        self.seqAlgorithmMenu = Pmw.OptionMenu(
            seqFrame,
            initialitem=prefs[SEQUENCE_ALGORITHM],
            labelpos='w',
            label_text="Alignment algorithm:",
            items=[SA_NEEDLEMAN_WUNSCH, SA_SMITH_WATERMAN])
        self.seqAlgorithmMenu.grid(row=1, column=0, sticky='w')

        matrixNames = SmithWaterman.matrices.keys()
        matrixNames.sort()
        if prefs[MATRIX] in SmithWaterman.matrices:
            initialMatrix = prefs[MATRIX]
        else:
            if defaults[MATRIX] in SmithWaterman.matrices:
                initialMatrix = defaults[MATRIX]
            else:
                initialMatrix = matrixNames[0]
            prefs[MATRIX] = initialMatrix
        self.matrixMenu = Pmw.OptionMenu(seqFrame,
                                         initialitem=initialMatrix,
                                         labelpos='w',
                                         label_text="Matrix:",
                                         items=matrixNames)
        self.matrixMenu.grid(row=1, column=1, sticky='w')

        gapFrame = Tkinter.Frame(seqFrame)
        gapFrame.grid(row=2, column=0, columnspan=2, sticky='ew')
        gapFrame.columnconfigure(0, weight=1)
        gapFrame.columnconfigure(1, weight=1)
        self.gapOpenEntry = Pmw.EntryField(gapFrame,
                                           labelpos='w',
                                           label_text="Gap opening penalty",
                                           validate='real',
                                           entry_width=2,
                                           entry_justify='right',
                                           value="%g" % (prefs[GAP_OPEN]))
        self.gapOpenEntry.grid(row=0, column=0)
        self.gapExtendEntry = Pmw.EntryField(
            gapFrame,
            labelpos='w',
            label_text="Gap extension penalty",
            validate='real',
            entry_width=2,
            entry_justify='right',
            value="%g" % (prefs[GAP_EXTEND]))
        self.gapExtendEntry.grid(row=0, column=1)
        self._entries = [self.gapOpenEntry, self.gapExtendEntry]

        self.ssParams = SSParams(seqFrame, prefs, useSSCB=self._useSSCB)
        self.ssParams.grid(row=3, column=0, columnspan=2, sticky='ew')
        self.computeSSVar = Tkinter.IntVar(parent)
        self.computeSSVar.set(prefs[COMPUTE_SS])
        self._computeSSButton = Tkinter.Checkbutton(
            seqFrame,
            text="Compute secondary structure assignments",
            variable=self.computeSSVar)
        self._computeSSGridArgs = {'row': 4, 'sticky': 'w', 'columnspan': 2}
        if self.ssParams.useSSVar.get():
            self._computeSSButton.grid(**self._computeSSGridArgs)

        self.showSeqVar = Tkinter.IntVar(parent)
        self.showSeqVar.set(prefs[SHOW_SEQUENCE])
        Tkinter.Checkbutton(seqFrame,
                            text="Show pairwise alignment(s)",
                            variable=self.showSeqVar).grid(row=5,
                                                           column=0,
                                                           sticky='w',
                                                           columnspan=2)

        matchGroup = Pmw.Group(parent, tag_text="Matching")
        matchGroup.grid(row=2, column=0, columnspan=2, sticky="nsew", padx=2)
        matchGroup.interior().columnconfigure(0, weight=1)
        self.iterVar = Tkinter.IntVar(parent)
        self.iterVar.set(prefs[ITERATE])
        Tkinter.Checkbutton(matchGroup.interior(),
                            justify="left",
                            text="Iterate by pruning long atom pairs"
                            " until no pair exceeds:",
                            variable=self.iterVar).grid(row=0,
                                                        column=0,
                                                        sticky='w')
        self.iterEntry = Pmw.EntryField(matchGroup.interior(),
                                        validate='real',
                                        entry_width=3,
                                        entry_justify="right",
                                        value="%.1f" % prefs[ITER_CUTOFF],
                                        labelpos='e',
                                        label_text="angstroms")
        self.iterEntry.grid(row=1, column=0)
        self._entries.append(self.iterEntry)

        self.structSeqVar = Tkinter.IntVar(parent)
        self.structSeqVar.set(False)
        Tkinter.Checkbutton(parent,
                            text="After superposition, compute"
                            " structure-based multiple sequence alignment",
                            variable=self.structSeqVar).grid(row=3,
                                                             sticky='w',
                                                             columnspan=2)

        f = Tkinter.Frame(parent)
        f.grid(row=4, column=0, columnspan=2, sticky='ew')
        from chimera import help
        b = Tkinter.Button(f,
                           text="Save settings",
                           pady=0,
                           command=self._saveSettings)
        b.grid(row=0, column=0)
        help.register(b, balloon="Save current settings")
        b = Tkinter.Button(f,
                           text="Reset to defaults",
                           pady=0,
                           command=self._restoreSettings)
        b.grid(row=0, column=1)
        help.register(b, balloon="Reset dialog to factory defaults")
        f.columnconfigure(0, weight=1)
        f.columnconfigure(1, weight=1)

        # set up state of gap-open entry
        self._useSSCB()
Exemplo n.º 15
0
    def fillInUI(self, parent):
        # inter/intra-model; slop; colors; models; replace current;
        # label

        # for removing labels in subsequent passes...
        # (use a selection so I don't have to track model closures)
        self.labelSelection = ItemizedSelection()
        self.labelMap = {}

        self.callbacks = []

        row = 0
        cols = 3

        self.bondColorOption = ColorOption(parent,
                                           row,
                                           'H-bond color',
                                           prefs[BOND_COLOR],
                                           None,
                                           noneOkay=0)

        class HBLineWidthOption(LineWidthOption):
            name = "Line width"
            balloon = "Width of pseudobonds (in pixels)"
            default = prefs[LINE_WIDTH]

        self.lineWidth = HBLineWidthOption(parent,
                                           row + 1,
                                           None,
                                           None,
                                           None,
                                           width=4,
                                           sticky='w')

        self.findMode = Pmw.RadioSelect(parent,
                                        buttontype='radiobutton',
                                        labelpos='n',
                                        pady=0,
                                        orient='vertical',
                                        label_text='Find these bonds:',
                                        hull_borderwidth=2,
                                        hull_relief='ridge')
        self.findMode.add('inter-model')
        self.findMode.add('intra-model')
        self.findMode.add('both')
        self.findMode.invoke('both')
        self.findMode.grid(row=row, column=2, rowspan=2)
        row += 2

        self.relaxParams = RelaxParams(parent, prefs[RELAX_COLOR])
        self.relaxParams.grid(row=row, columnspan=cols, sticky='nsew', padx=2)
        row += 1

        self.restrictModels = Tkinter.IntVar(parent)
        self.restrictModels.set(0)
        self.modelFrame = Tkinter.Frame(parent)
        self.molTexts = ["Restrict to models...", "Restrict to models:"]
        self.restrictCheckBox = Tkinter.Checkbutton(
            self.modelFrame,
            variable=self.restrictModels,
            text=self.molTexts[0],
            command=self._restrictModelsCB)
        self.restrictCheckBox.grid(row=0, column=0)
        from chimera.widgets import MoleculeScrolledListBox
        self.molList = MoleculeScrolledListBox(self.modelFrame,
                                               listbox_selectmode="extended")
        self.modelFrame.rowconfigure(0, weight=1)
        self.modelFrame.grid(row=row, column=0, columnspan=cols, sticky="nsw")
        parent.rowconfigure(row, weight=1)
        row += 1

        self.inSelection = Tkinter.IntVar(parent)
        self.inSelection.set(0)
        f = Tkinter.Frame(parent)
        f.grid(row=row, column=0, columnspan=cols, sticky="w")
        Tkinter.Checkbutton(f,
                            variable=self.inSelection,
                            text="Only find H-bonds with",
                            command=self._useSelChange).grid(row=0,
                                                             column=0,
                                                             sticky="e")
        self.selType = Pmw.OptionMenu(
            f,
            items=["at least one end", "exactly one end", "both ends"],
            initialitem=0,
            menubutton_state="disabled",
            labelpos="e",
            label_text="selected")
        self.selType.grid(row=0, column=1, sticky="w")
        row += 1

        self.revealEnds = Tkinter.IntVar(parent)
        self.revealEnds.set(0)
        Tkinter.Checkbutton(
            parent,
            variable=self.revealEnds,
            text="If endpoint atom hidden, show endpoint residue").grid(
                row=row, column=0, columnspan=cols, sticky="w")
        row += 1

        self.retainCurrent = Tkinter.IntVar(parent)
        self.retainCurrent.set(0)
        Tkinter.Checkbutton(parent,
                            variable=self.retainCurrent,
                            text="Retain currently displayed H-bonds").grid(
                                row=row, column=0, columnspan=cols, sticky="w")
        row += 1

        self.interSubmodel = Tkinter.IntVar(parent)
        self.interSubmodel.set(0)
        # comment out the below since there seems to be no
        # situations where cross-submodel-same-model hbonds
        # are interesting.  If reading pdbrun files occurs, this
        # may change.
        #Tkinter.Checkbutton(parent, variable=self.interSubmodel,
        #	text="Find H-bonds between submodels\n"
        #	     "having same principal model number"
        #	).grid(row=row, column=0, columnspan=cols, sticky="w")
        #row += 1

        self.writeFile = Tkinter.IntVar(parent)
        self.writeFile.set(0)
        Tkinter.Checkbutton(parent,
                            variable=self.writeFile,
                            text="Write information to file").grid(
                                row=row, column=0, columnspan=cols, sticky="w")
        self.fileName = None
        row += 1

        self.writeLog = Tkinter.IntVar(parent)
        self.writeLog.set(0)
        Tkinter.Checkbutton(parent,
                            variable=self.writeLog,
                            text="Write information to reply log").grid(
                                row=row, column=0, columnspan=cols, sticky="w")
        row += 1
Exemplo n.º 16
0
    def fill_in_ui(self, parent):
        """
        This is the main part of the interface. With this method you code
        the whole dialog, buttons, textareas and everything.
        """

        # Create all frames
        frames = [('ui_input_frame', 'Model Topology'),
                  ('ui_output_frame', 'Output'),
                  ('ui_settings_frame', 'System & Simulation Settings'),
                  ('ui_stage_frame', 'Stages')]
        for attr, text in frames:
            setattr(self, attr, tk.LabelFrame(self.canvas, text=text))

        # Fill frames
        # Fill Input frame
        # Creating tabs
        self.ui_input_note = ttk.Notebook(self.ui_input_frame, padding=5)
        self.ui_tab_1 = tk.Frame(self.ui_input_note)
        self.ui_tab_1.rowconfigure(0, weight=1)
        self.ui_tab_1.columnconfigure(0, weight=1)
        self.ui_tab_2 = tk.Frame(self.ui_input_note)
        self.ui_tab_2.rowconfigure(0, weight=1)
        self.ui_input_note.add(self.ui_tab_1,
                               text="Chimera",
                               state="normal",
                               sticky='news')
        self.ui_input_note.add(self.ui_tab_2,
                               text="External Input",
                               state="normal",
                               sticky='news')
        self.ui_input_note.pack(expand=True, fill='both')

        # Input Frame
        # Tab1
        self.ui_chimera_models = MoleculeScrolledListBox(
            self.ui_input_frame,
            listbox_selectmode='single',
            autoselect='single')
        self.ui_chimera_models_options = tk.Button(
            self.ui_input_frame,
            text="Advanced\nOptions",
            command=lambda: self.Open_window('ui_input_opt_window', self.
                                             _fill_ui_input_opt_window))
        self.ui_sanitize_chimera_model = tk.Button(self.ui_input_frame,
                                                   text="Sanitize\nModel",
                                                   command=self.sanitize_model)
        chimera_input_grid = [[self.ui_chimera_models],
                              [(self.ui_chimera_models_options,
                                self.ui_sanitize_chimera_model)]]
        self.auto_grid(self.ui_tab_1,
                       chimera_input_grid,
                       sticky='news',
                       padx=5,
                       pady=5)
        # Tab 2
        self.ui_model_extinput_add = tk.Button(self.ui_input_frame,
                                               text='Add\nModel',
                                               command=self._set_model)
        self.ui_amber_model = tk.Listbox(
            self.ui_input_frame,
            height=5,
            listvariable=self.var_path_extinput_top)
        ui_amber_model_options = tk.Button(
            self.ui_input_frame,
            text="Advanced\nOptions",
            command=lambda: self.Open_window('ui_input_opt_window', self.
                                             _fill_ui_input_opt_window))
        extinput_grid = [[self.ui_amber_model],
                         [(ui_amber_model_options, self.ui_model_extinput_add)]
                         ]
        self.auto_grid(self.ui_tab_2,
                       extinput_grid,
                       sticky='news',
                       padx=5,
                       pady=5)

        # Output frame
        self.ui_output_projectname_Entry = self.ui_output_entry = tk.Entry(
            self.canvas, textvariable=self.var_output_projectname)
        self.ui_output_reporters_md = ttk.Combobox(
            self.canvas, textvariable=self.var_md_reporters, width=20)
        self.ui_output_reporters_md.config(values=('PDB', 'DCD', 'None'))
        self.ui_output_reporters_realtime = ttk.Combobox(
            self.canvas, textvariable=self.var_verbose, width=20)
        self.ui_output_reporters_realtime.config(values=('True', 'False'))
        self.ui_output_trjinterval_Entry = tk.Entry(
            self.canvas, textvariable=self.var_output_traj_interval, width=8)
        self.ui_output_stdout_interval_Entry = tk.Entry(
            self.canvas, textvariable=self.var_output_stdout_interval, width=8)
        self.ui_output_options = tk.Button(
            self.canvas,
            text='Advanced options',
            command=lambda: self.Open_window('ui_output_opt', self.
                                             _fill_ui_output_opt_window))
        self.ui_output_restart_Entry = tk.Entry(
            self.canvas, textvariable=self.var_output_restart)
        self.ui_output_restart_browse = tk.Button(
            self.canvas,
            text='...',
            command=lambda: self._browse_file(self.var_output_restart, 'rst',
                                              'xml'))

        output_grid = [['Project name:', self.ui_output_projectname_Entry],
                       [
                           'Restart file:', self.ui_output_restart_Entry,
                           self.ui_output_restart_browse
                       ], ['REPORTERS'],
                       [
                           'Trajectory:',
                           (self.ui_output_reporters_md, 'every',
                            self.ui_output_trjinterval_Entry, 'frames')
                       ],
                       [
                           'Progress:',
                           (self.ui_output_reporters_realtime, 'every',
                            self.ui_output_stdout_interval_Entry, 'frames')
                       ], ['', self.ui_output_options]]

        self.auto_grid(self.ui_output_frame, output_grid, label_sep='')

        # Settings frame
        self.ui_forcefield_combo = ttk.Combobox(
            self.canvas, textvariable=self.var_forcefield)
        self.ui_forcefield_combo.config(values=('amber96', 'amber99sb',
                                                'amber99sbildn',
                                                'amber99sbnmr', 'amber03',
                                                'amber10'))
        self.ui_forcefield_add = tk.Button(
            self.canvas,
            text='+',
            command=lambda: self.Open_window('ui_add_forcefields', self.
                                             _fill_ui_add_forcefields))
        self.ui_forcefield_charmmpar = tk.Button(
            self.canvas,
            text='...',
            state='disabled',
            command=lambda: self._browse_file(self.var_parametrize_forc, 'par',
                                              ''))
        self.ui_forcefield_charmmpar_entry = tk.Entry(
            self.canvas,
            textvariable=self.var_parametrize_forc,
            state='disabled')
        self.ui_integrator = ttk.Combobox(
            self.canvas,
            textvariable=self.var_integrator,
            values=('LangevinIntegrator', 'BrownianIntegrator',
                    'VerletIntegrator', 'VariableVerletIntegrator',
                    'VariableLangevinIntegrator'))
        self.ui_timestep_entry = tk.Entry(self.canvas,
                                          textvariable=self.var_tstep)
        self.ui_advanced_options = tk.Button(
            self.canvas,
            text='More options',
            command=lambda: self.Open_window('ui_advopt_window', self.
                                             _fill_ui_advopt_window))

        settings_grid = [[
            'Forcefield', self.ui_forcefield_combo, self.ui_forcefield_add,
            'Charmm Parameters',
            (self.ui_forcefield_charmmpar_entry, self.ui_forcefield_charmmpar)
        ],
                         [
                             'Integrator', self.ui_integrator,
                             'Time Step (fs)', self.ui_timestep_entry,
                             self.ui_advanced_options
                         ]]
        self.auto_grid(self.ui_settings_frame, settings_grid)

        # Stages Frame
        self.ui_stages_up = tk.Button(self.canvas,
                                      text='^',
                                      command=self._move_stage_up)
        self.ui_stages_down = tk.Button(self.canvas,
                                        text='v',
                                        command=self._move_stage_down)
        self.ui_stages_add = tk.Button(
            self.canvas,
            text='+',
            command=lambda: self.Open_window('ui_stages_window', self.
                                             _fill_ui_stages_window))
        self.ui_stages_listbox = tk.Listbox(self.ui_stage_frame,
                                            height=18,
                                            background='white')
        self.ui_stages_remove = tk.Button(
            self.canvas,
            text='-',
            command=lambda: self._remove_stage('ui_stages_listbox', self.stages
                                               ))

        stage_frame_widgets = [
            self.ui_stages_add, self.ui_stages_remove, self.ui_stages_up,
            self.ui_stages_down
        ]
        for row, item in enumerate(stage_frame_widgets):
            item.grid(in_=self.ui_stage_frame,
                      row=row,
                      column=2,
                      sticky='news',
                      **self.style_option)

        self.ui_stages_listbox.grid(in_=self.ui_stage_frame,
                                    row=0,
                                    column=0,
                                    rowspan=4,
                                    sticky='news',
                                    **self.style_option)

        # Grid Frames
        self.ui_input_frame.grid(row=0,
                                 column=0,
                                 sticky='news',
                                 padx=5,
                                 pady=5)
        self.ui_output_frame.grid(row=0,
                                  column=1,
                                  sticky='news',
                                  padx=5,
                                  pady=5)
        self.ui_stage_frame.grid(row=0,
                                 column=3,
                                 rowspan=2,
                                 sticky='news',
                                 padx=5,
                                 pady=5)
        self.ui_settings_frame.grid(row=1,
                                    columnspan=2,
                                    sticky='ew',
                                    padx=5,
                                    pady=5)

        # Events
        self.ui_input_note.bind("<ButtonRelease-1>", self._forc_param)
	def fillInUI(self, parent):
		SaveModeless.fillInUI(self, parent)
		row = 0

		from chimera.widgets import MoleculeScrolledListBox, \
							ModelOptionMenu
		self.modelList = MoleculeScrolledListBox(self.clientArea,
			labelpos='w', label_text="Save models:",
			listbox_selectmode='extended',
			selectioncommand=lambda: self.configure(
			self.modelList.getvalue(), refreshList=False))
		self.modelList.grid(row=row, column=0, sticky='nsew')
		self.clientArea.rowconfigure(row, weight=1)
		self.clientArea.columnconfigure(0, weight=1)
		row += 1

		import Tkinter, Pmw
		self.dispOnlyVar = Tkinter.IntVar(parent)
		self.dispOnlyVar.set(False)
		Tkinter.Checkbutton(self.clientArea, variable=self.dispOnlyVar,
			text="Save displayed atoms only").grid(row=row,
			column=0, sticky='w')
		row += 1

		self.selOnlyVar = Tkinter.IntVar(parent)
		self.selOnlyVar.set(False)
		Tkinter.Checkbutton(self.clientArea, variable=self.selOnlyVar,
			text="Save selected atoms only").grid(row=row,
			column=0, sticky='w')
		row += 1

		self.saveRelativeVar = Tkinter.IntVar(parent)
		self.saveRelativeVar.set(False)
		self.relativeFrame = f = Tkinter.Frame(self.clientArea)
		Tkinter.Checkbutton(f, variable=self.saveRelativeVar,
			text="Save relative to model:"
			).grid(row=0, column=0, sticky='e')
		self.relModelMenu = ModelOptionMenu(f)
		self.relModelMenu.grid(row=0, column=1, sticky='w')
		self.saveUntransformedVar = Tkinter.IntVar(parent)
		self.saveUntransformedVar.set(True)
		self.untransformedButton = Tkinter.Checkbutton(self.clientArea,
					variable=self.saveUntransformedVar,
					text="Use untransformed coordinates")
		self._rfRow = row
		row += 1

		self.frameSave = Pmw.OptionMenu(self.clientArea,
			labelpos='w', label_text="Save",
			initialitem="current frame",
			items=["current frame", "all frames"])
		# not always shown; remember row number
		self._fsRow = row
		row += 1
			
		from chimera import dialogs
		self.labelMap = {
			"single": "a single file",
			"multiple":
				"multiple files [appending model number]"
		}
		preferred = self.labelMap[self.prefs["multiSavePDB"]]
		self.multiSaveMenu = Pmw.OptionMenu(self.clientArea,
			labelpos='w', label_text="Save multiple models in",
			initialitem=preferred, items=self.labelMap.values())
		# not always shown; remember row number
		self._msmRow = row
		row += 1
Exemplo n.º 18
0
    def fillInUI(self, parent):
        t = parent.winfo_toplevel()
        self.toplevel_widget = t
        t.withdraw()

        parent.columnconfigure(0, weight=1)
        row = 0

        import Tkinter
        from CGLtk import Hybrid
        from VolumeViewer import Volume_Menu

        ff = Tkinter.Frame(parent)
        ff.grid(row=row, column=0, sticky='w')
        row = row + 1

        # Map selection (only Volumes)
        fm = Volume_Menu(ff, 'Map: ')
        fm.frame.grid(row=0, column=0, sticky='w')
        self.map_menu = fm

        # Resolution
        rs = Hybrid.Entry(ff, 'Resolution ', 5)
        rs.frame.grid(row=0, column=1, sticky='w')
        self.resolution = rs.variable

        # Cut-off
        co = Hybrid.Entry(ff, 'Cut-off level ', 10)
        co.frame.grid(row=0, column=2, sticky='w')
        self.cutoff = co.variable

        self.save_button = Tkinter.Button(ff,
                                          text="From Volume Viewer",
                                          font=self.arialBondF,
                                          height=1,
                                          command=self.get_cutoff)
        self.save_button.grid(row=0, column=3, sticky='w')

        hf = Tkinter.Frame(parent)
        hf.grid(row=row, column=0, sticky='w')
        row += 1

        # Space
        msg = Tkinter.Label(hf, anchor='w', justify='left')
        msg.grid(row=2, column=0, sticky='ew')
        row = row + 1
        self.message_label = msg

        # PDB's panel
        self.pdbs = Tkinter.Frame(parent)
        self.pdbs.grid(row=3, column=0, sticky='ew')
        self.pdbs.columnconfigure(1, weight=1)

        from chimera.widgets import MoleculeScrolledListBox, \
            ModelOptionMenu
        self.modelList = MoleculeScrolledListBox(
            self.pdbs,
            labelpos='nw',
            label_text="Target PDBs to be fitted:",
            listbox_selectmode='extended',
            listbox_height=11)
        self.modelList.grid(row=row, column=0, sticky='nsew')
        self.pdbs.rowconfigure(row, weight=1)
        self.pdbs.columnconfigure(0, weight=1)

        self.modelList1 = MoleculeScrolledListBox(
            self.pdbs,
            labelpos='nw',
            label_text="Target PDBs to be fixed:",
            listbox_selectmode='extended',
            listbox_height=11)
        self.modelList1.grid(row=row, column=1, sticky='nsew')
        self.pdbs.rowconfigure(row, weight=1)
        self.pdbs.columnconfigure(0, weight=1)
        row += 1

        # Disable Results panel at first
        self.results_button = self.buttonWidgets['Results']
        self.results_button['state'] = 'disabled'
Exemplo n.º 19
0
    def fill_in_ui(self, parent):
        self.canvas.columnconfigure(1, weight=1)
        # Molecules
        self.ui_molecules_frame = tk.LabelFrame(self.canvas,
                                                text='Select a molecule')
        self.ui_molecules_frame.grid(row=0,
                                     column=0,
                                     columnspan=2,
                                     sticky='ew',
                                     padx=5,
                                     pady=5)
        self.ui_molecules = MoleculeScrolledListBox(self.ui_molecules_frame)
        self.ui_molecules.pack(expand=True, fill='both', padx=3, pady=3)

        # Configuration
        ## Chains
        self.ui_chains_frame = tk.Frame(self.canvas)
        self.ui_chains_entry = tk.Entry(self.ui_chains_frame,
                                        textvariable=self._chains,
                                        width=15)
        self.ui_chains_btn = tk.Button(self.ui_chains_frame, text='+')
        self.ui_chains = [self.ui_chains_entry, self.ui_chains_btn]

        ## pH
        self.ui_ph = tk.Scale(self.canvas,
                              from_=0,
                              to=14,
                              resolution=0.1,
                              orient='horizontal',
                              length=163,
                              variable=self._ph)
        self.ui_ph_window_frame = tk.Frame(self.canvas)
        self.ui_ph_window_0 = tk.Entry(self.ui_ph_window_frame,
                                       textvariable=self._ph_window[0],
                                       width=6)
        self.ui_ph_window_1 = tk.Entry(self.ui_ph_window_frame,
                                       textvariable=self._ph_window[1],
                                       width=6)
        self.ui_ph_window_2 = tk.Entry(self.ui_ph_window_frame,
                                       textvariable=self._ph_window[2],
                                       width=6)
        self.ui_ph_window = [
            self.ui_ph_window_0, self.ui_ph_window_1, self.ui_ph_window_2
        ]

        self.ui_ph_grid_frame = tk.Frame(self.canvas)
        self.ui_ph_grid_0 = tk.Entry(self.ui_ph_grid_frame,
                                     textvariable=self._ph_grid[0],
                                     width=6)
        self.ui_ph_grid_1 = tk.Entry(self.ui_ph_grid_frame,
                                     textvariable=self._ph_grid[1],
                                     width=6)
        self.ui_ph_grid_2 = tk.Entry(self.ui_ph_grid_frame,
                                     textvariable=self._ph_grid[2],
                                     width=6)
        self.ui_ph_grid = [
            self.ui_ph_grid_0, self.ui_ph_grid_1, self.ui_ph_grid_2
        ]
        self.ui_ph_reference = Pmw.OptionMenu(
            self.canvas,
            menubutton_textvariable=self._ph_reference,
            items=['neutral', 'low-pH'])

        self.ui_titrate_frame = tk.Frame(self.canvas)
        self.ui_titrate_entry = tk.Entry(self.ui_titrate_frame,
                                         textvariable=self._titrate,
                                         width=15)
        self.ui_titrate_btn = tk.Button(self.ui_titrate_frame, text='+')
        self.ui_titrate = [self.ui_titrate_entry, self.ui_titrate_btn]

        self.ui_keep_protons = tk.Checkbutton(self.canvas,
                                              variable=self._keep_protons,
                                              anchor='w')
        self.ui_mutations = tk.Entry(self.canvas, textvariable=self._mutations)
        self.ui_mutations_method = tk.OptionMenu(self.canvas,
                                                 self._mutations_method,
                                                 'alignment', 'scwrl',
                                                 'jackal')
        self.ui_mutations_options = tk.Entry(
            self.canvas, textvariable=self._mutations_options)

        labeled_widgets = {
            (0, 'ui_chains_frame'): 'Chains',
            (1, 'ui_ph'): 'pH',
            (2, 'ui_ph_window_frame'): 'pH window',
            (3, 'ui_ph_grid_frame'): 'pH grid',
            (4, 'ui_ph_reference'): 'pH reference',
            (5, 'ui_titrate_frame'): 'Titrate only',
            (6, 'ui_keep_protons'): 'Keep protons',
            # (7, 'ui_mutations'): 'Mutations',
            # (8, 'ui_mutations_method'): 'Mutation method',
            # (9, 'ui_mutations_options'): 'Mutation options',
        }
        for (i, attr), title in sorted(labeled_widgets.items()):
            tk.Label(self.canvas, text=title).grid(row=i + 1,
                                                   column=0,
                                                   sticky='e',
                                                   padx=4,
                                                   pady=1)
            getattr(self, attr).grid(row=i + 1,
                                     column=1,
                                     padx=4,
                                     pady=1,
                                     sticky='we')

        left_packed = self.ui_ph_window + self.ui_ph_grid + self.ui_chains + self.ui_titrate
        for widget in left_packed:
            expand, fill = True, 'both'
            if isinstance(widget, tk.Button):
                expand, fill = False, None
            widget.pack(side='left', padx=1, expand=expand, fill=fill)
Exemplo n.º 20
0
    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)
        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()
Exemplo n.º 21
0
    def fillInUI(self, parent):
        from chimera.widgets import MoleculeScrolledListBox
        self.molList = MoleculeScrolledListBox(parent,
                                               labelpos='w',
                                               listbox_selectmode="extended",
                                               label_text="Solvate:    ")
        self.molList.grid(row=0, column=0, sticky="nsew")
        self.solvateMethod = Pmw.RadioSelect(parent,
                                             buttontype='radiobutton',
                                             command=self.changeMethod,
                                             labelpos='w',
                                             label_text="Solvate method:")
        self.solvateMethod.add("Box")
        self.solvateMethod.add("Cap")
        self.solvateMethod.add("Oct")
        self.solvateMethod.add("Shell")
        self.solvateMethod.setvalue("Box")
        self.solvateMethod.grid(row=1, column=0, sticky="nsew")
        self.method = "Box"
        rcf1 = Tkinter.Frame(parent)
        rcf1.grid(row=2, column=0, sticky="nsew")
        self.solvent = prefs[SOLVENT_MODEL]

        from Solvate import ValidSolventModels
        self.solventModel = Pmw.OptionMenu(rcf1,
                                           label_text="Solvent Model:",
                                           labelpos='w',
                                           items=ValidSolventModels,
                                           initialitem=self.solvent,
                                           command=self.changeSolvent)
        self.solventModel.grid(row=0, column=0)

        rcf2 = Tkinter.Frame(rcf1)
        rcf2.grid(row=0, column=1)
        rcf1.columnconfigure(1, weight=1)
        self.extentLabel = Tkinter.Label(rcf2, text="Box size:")
        self.extentLabel.grid(row=0, column=0)

        self.extentValue = Hybrid.StringVariable(rcf2)
        ev = Tkinter.Entry(rcf2,
                           width=5,
                           textvariable=self.extentValue.tk_variable)
        ev.grid(row=0, column=1)

        rcf3 = Tkinter.Frame(parent)
        rcf3.grid(row=3, column=0)
        self.centerLabel = Tkinter.Label(rcf3,
                                         text="Cap center (in ambmask):",
                                         state='disabled')
        self.centerLabel.grid(row=0, column=0)

        self.centerValue = Hybrid.StringVariable(rcf3)
        self.centerEntry = Tkinter.Entry(
            rcf3,
            width=5,
            textvariable=self.centerValue.tk_variable,
            state='disabled')
        self.centerEntry.grid(row=0, column=1)

        self.removeExisting = Hybrid.Checkbutton(
            parent, "Remove existing ions/solvent", True)
        self.removeExisting.button.grid(row=4, column=0)

        parent.rowconfigure(0, weight=1)
        parent.columnconfigure(0, weight=1)
Exemplo n.º 22
0
	def fillInUI(self, parent):
		import Pmw, Tkinter
		SaveModeless.fillInUI(self, parent)
		row = 0

		from chimera.widgets import MoleculeScrolledListBox, \
							ModelOptionMenu
		self.modelList = MoleculeScrolledListBox(self.clientArea,
			labelpos='w', label_text="Save models:",
			listbox_selectmode='extended',
			selectioncommand=lambda: self.configure(
			self.modelList.getvalue(), refreshList=False))
		self.modelList.grid(row=row, column=0, sticky='nsew')
		self.clientArea.rowconfigure(row, weight=1)
		self.clientArea.columnconfigure(0, weight=1)
		row += 1

		from chimera import dialogs
		self.labelMap = {
			"individual":
				"a single file [individual @MOLECULE sections]",
			"combined":
				"a single file [combined @MOLECULE section]",
			"multiple":
				"multiple files [appending model number]"
		}
		preferred = self.labelMap[self.prefs["multiSaveMol2"]]
		self.multiSaveMenu = Pmw.OptionMenu(self.clientArea,
			labelpos='w', label_text="Save multiple models in",
			initialitem=preferred, items=self.labelMap.values())
		# not always shown; remember row number
		self._msmRow = row
		row += 1

		self.saveRelativeVar = Tkinter.IntVar(self.clientArea)
		self.saveRelativeVar.set(False)
		self.relativeFrame = f = Tkinter.Frame(self.clientArea)
		Tkinter.Checkbutton(f, variable=self.saveRelativeVar,
			text="Save relative to model:").grid(row=0,
			column=0, sticky='e')
		self.relModelMenu = ModelOptionMenu(f)
		self.relModelMenu.grid(row=0, column=1, sticky='w')
		self.saveUntransformedVar = Tkinter.IntVar(parent)
		self.saveUntransformedVar.set(True)
		self.untransformedButton = Tkinter.Checkbutton(self.clientArea,
					variable=self.saveUntransformedVar,
					text="Use untransformed coordinates")
		self._rfRow = row
		row += 1

		self.sybylHydNamesVar = Tkinter.IntVar(self.clientArea)
		self.sybylHydNamesVar.set(
				self.prefs["hydrogen naming"] == "sybyl")
		Tkinter.Checkbutton(self.clientArea,
			variable=self.sybylHydNamesVar,
			text="Use Sybyl-style hydrogen naming (e.g. HE12"
			" rather than 2HE1)").grid(row=row, column=0,
			sticky="w")
		row += 1

		self.resNumsVar = Tkinter.IntVar(self.clientArea)
		self.resNumsVar.set(self.prefs["residue numbers"])
		Tkinter.Checkbutton(self.clientArea, variable=self.resNumsVar,
			text="Include residue sequence numbers in substructure"
			" names").grid(row=row, column=0, sticky='w')
		row += 1

		self.writeGaffVar = Tkinter.IntVar(self.clientArea)
		self.resNumsVar.set(False)
		Tkinter.Checkbutton(self.clientArea, variable=self.writeGaffVar,
			text="Write Amber/GAFF atom types instead of Sybyl atom types"
			).grid(row=row, column=0, sticky='w')
		row += 1

		self.rigidVar = Tkinter.IntVar(self.clientArea)
		self.rigidVar.set(False)
		Tkinter.Checkbutton(self.clientArea, variable=self.rigidVar,
			text="Write current selection to @SETS section of file"
			).grid(row=row, column=0, sticky="w")
		row += 1
Exemplo n.º 23
0
    def fill_in_ui(self, parent):
        # Select molecules
        self.ui_system_frame = tk.LabelFrame(self.canvas,
                                             text='Configure system')
        self.ui_system_frame.columnconfigure(0, weight=1)

        self.ui_molecules = MoleculeScrolledListBox(
            self.canvas, labelpos='n', label_text='Select molecule:')
        self.ui_replicas_chk = tk.Checkbutton(
            self.canvas, text='Frames', variable=self.var_molecule_replicas)
        self.ui_connectivity = tk.Checkbutton(self.canvas,
                                              variable=self.var_connectivity,
                                              text='Connectivity')
        self.ui_redundant_btn = tk.Button(self.canvas,
                                          text='ModRedundant',
                                          state='disabled')
        self.ui_layers = tk.Button(self.canvas, text='Layers & Flex')

        self.ui_charges_frame = tk.Frame(self.canvas)
        self.ui_charges_qm = tk.Entry(self.canvas,
                                      textvariable=self.var_charge_qm,
                                      width=3)
        self.ui_charges_mm = tk.Entry(self.canvas,
                                      textvariable=self.var_charge_mm,
                                      width=3)
        self.ui_multiplicity_qm = tk.Entry(
            self.canvas, textvariable=self.var_multiplicity_qm, width=3)
        self.ui_multiplicity_mm = tk.Entry(
            self.canvas, textvariable=self.var_multiplicity_mm, width=3)
        charges_grid = [[
            'Charge:', (self.ui_charges_qm, '(QM)'),
            (self.ui_charges_mm, '(MM)')
        ],
                        [
                            'Mult:', (self.ui_multiplicity_qm, '(QM)'),
                            (self.ui_multiplicity_mm, '(MM)')
                        ]]
        self.auto_grid(self.ui_charges_frame,
                       charges_grid,
                       resize_columns=(1, 2),
                       label_sep='')

        kw = dict(padx=5, pady=5)
        self.ui_molecules.grid(in_=self.ui_system_frame,
                               row=0,
                               column=0,
                               rowspan=3,
                               sticky='news',
                               **kw)
        self.ui_replicas_chk.grid(in_=self.ui_system_frame,
                                  row=0,
                                  column=1,
                                  **kw)
        self.ui_connectivity.grid(in_=self.ui_system_frame,
                                  row=0,
                                  column=2,
                                  **kw)
        self.ui_redundant_btn.grid(in_=self.ui_system_frame,
                                   row=1,
                                   column=1,
                                   sticky='we',
                                   **kw)
        self.ui_layers.grid(in_=self.ui_system_frame,
                            row=1,
                            column=2,
                            sticky='we',
                            **kw)
        self.ui_charges_frame.grid(in_=self.ui_system_frame,
                                   row=2,
                                   column=1,
                                   columnspan=2,
                                   sticky='news',
                                   **kw)

        # Modelization
        self.ui_model_frame = tk.LabelFrame(self.canvas, text='Modelization')
        self.ui_job = Pmw.OptionMenu(self.canvas,
                                     items=JOB_TYPES,
                                     initialitem=0,
                                     menubutton_textvariable=self.var_job)
        self.ui_job_options = Pmw.ComboBox(
            self.canvas,
            entry_textvariable=self.var_job_options,
            history=True,
            unique=True,
            dropdown=True)
        self.ui_calculation = Pmw.OptionMenu(
            self.canvas,
            items=['QM', 'ONIOM'],
            initialitem=0,
            menubutton_textvariable=self.var_calculation)
        self.ui_qm_keywords = Pmw.ComboBox(
            self.canvas,
            entry_textvariable=self.var_qm_keywords,
            history=True,
            unique=True,
            dropdown=True,
            labelpos='w',
            label_text='Extra keywords: ')

        model_grid = [[('Model', self.ui_calculation, 'Job', self.ui_job,
                        self.ui_job_options)], [self.ui_qm_keywords]]
        self.auto_grid(self.ui_model_frame, model_grid, padx=3, pady=3)

        # QM configuration
        self.ui_qm_frame = tk.LabelFrame(self.canvas, text='QM Settings')
        self.ui_qm_methods = Pmw.OptionMenu(
            self.canvas,
            items=QM_METHODS,
            initialitem=6,
            menubutton_textvariable=self.var_qm_method)
        self.ui_qm_functional_type = Pmw.OptionMenu(
            self.canvas,
            initialitem=0,
            items=sorted(QM_FUNCTIONALS.keys()),
            menubutton_textvariable=self.var_qm_functional_type)
        self.ui_qm_functionals = Pmw.OptionMenu(
            self.canvas,
            initialitem=0,
            items=QM_FUNCTIONALS['Pure'],
            menubutton_textvariable=self.var_qm_functional)
        self.ui_qm_basis_kind = Pmw.OptionMenu(
            self.canvas,
            items=QM_BASIS_SETS,
            initialitem=0,
            menubutton_textvariable=self.var_qm_basis_kind)
        self.ui_qm_basis_ext = Pmw.OptionMenu(
            self.canvas,
            items=QM_BASIS_SETS_EXT,
            initialitem=0,
            menubutton_textvariable=self.var_qm_basis_ext)
        self.ui_qm_basis_per_atom = tk.Button(self.canvas, text='Per-element')
        self.ui_qm_basis_custom_set = tk.Entry(
            self.canvas, textvariable=self.var_qm_basis_set)
        self.ui_solvent_btn = tk.Button(self.canvas,
                                        text='Configure solvent',
                                        state='disabled')

        qm_grid = [[
            'Method',
            (self.ui_qm_methods, 'Functional', self.ui_qm_functional_type,
             self.ui_qm_functionals)
        ],
                   [
                       'Basis set',
                       (self.ui_qm_basis_kind, self.ui_qm_basis_ext,
                        self.ui_qm_basis_custom_set, self.ui_qm_basis_per_atom)
                   ], ['Solvent', self.ui_solvent_btn]]
        self.auto_grid(self.ui_qm_frame, qm_grid)

        # MM Configuration
        self.ui_mm_frame = tk.LabelFrame(self.canvas, text='MM Settings')
        self.ui_mm_forcefields = Pmw.OptionMenu(
            self.canvas,
            initialitem=0,
            items=MM_FORCEFIELDS['General'],
            menubutton_textvariable=self.var_mm_forcefield)
        self.ui_mm_water_forcefield = Pmw.OptionMenu(
            self.canvas,
            initialitem=0,
            items=MM_FORCEFIELDS['Water'],
            menubutton_textvariable=self.var_mm_water_forcefield)
        self.ui_mm_frcmod = tk.Entry(self.canvas,
                                     textvariable=self.var_mm_frcmod)
        self.ui_mm_frcmod_btn = tk.Button(self.canvas, text='...')

        self.ui_mm_types_btn = tk.Button(self.canvas, text='Set MM Atom Types')

        mm_grid = [[('Forcefield', self.ui_mm_forcefields),
                    ('Waters', self.ui_mm_water_forcefield)],
                   [('Frcmod', self.ui_mm_frcmod, self.ui_mm_frcmod_btn),
                    self.ui_mm_types_btn]]
        self.auto_grid(self.ui_mm_frame, mm_grid)

        # Hardware
        self.ui_hw_frame = tk.LabelFrame(self.canvas, text='Output')
        self.ui_title = tk.Entry(self.canvas, textvariable=self.var_title)
        self.ui_title_btn = tk.Button(
            self.canvas,
            text='Random',
            command=lambda: self.var_title.set(''.join(
                choice(ascii_letters) for i in range(8))))
        self.ui_checkpoint = tk.Checkbutton(self.canvas,
                                            variable=self.var_checkpoint,
                                            text='Check:')
        self.ui_checkpoint_fld = tk.Entry(
            self.canvas, textvariable=self.var_checkpoint_path)
        self.ui_checkpoint_btn = tk.Button(self.canvas, text='Browse')
        self.ui_nproc = tk.Entry(self.canvas,
                                 textvariable=self.var_nproc,
                                 width=5)
        self.ui_nproc_btn = tk.Button(
            self.canvas,
            text='Get',
            command=lambda: self.var_nproc.set(cpu_count()))
        self.ui_memory = tk.Entry(self.canvas,
                                  textvariable=self.var_memory,
                                  width=5)
        self.ui_memory_units = Pmw.OptionMenu(
            self.canvas,
            items=MEM_UNITS,
            initialitem=2,
            menubutton_textvariable=self.var_memory_units)
        hw_grid = [[
            'Job title', self.ui_title, self.ui_title_btn, '# CPUs',
            self.ui_nproc, self.ui_nproc_btn
        ],
                   [
                       self.ui_checkpoint, self.ui_checkpoint_fld,
                       self.ui_checkpoint_btn, 'Memory', self.ui_memory,
                       self.ui_memory_units
                   ]]
        self.auto_grid(self.ui_hw_frame, hw_grid, sticky='news')

        # Live output
        self.ui_preview_frame = tk.LabelFrame(self.canvas,
                                              text='Preview output')
        self.ui_preview = Pmw.ScrolledText(self.canvas,
                                           text_state='disabled',
                                           text_padx=4,
                                           text_pady=4,
                                           usehullsize=True,
                                           hull_width=300,
                                           hull_height=200,
                                           text_font='Monospace')
        self.ui_preview.pack(in_=self.ui_preview_frame,
                             expand=True,
                             fill='both',
                             padx=5,
                             pady=5)

        kw = dict(sticky='news', padx=5, pady=5)
        self.ui_system_frame.grid(row=0, column=0, **kw)
        self.ui_qm_frame.grid(row=0, column=1, **kw)
        self.ui_model_frame.grid(row=1, column=0, **kw)
        self.ui_mm_frame.grid(row=1, column=1, **kw)
        self.ui_hw_frame.grid(row=2, columnspan=2, sticky='ew', padx=5, pady=5)
        self.canvas.columnconfigure(0, weight=1)
        self.canvas.columnconfigure(1, weight=1)
        self.canvas.columnconfigure(2, weight=1)
        self.canvas.rowconfigure(100, weight=1)
        self.ui_preview_frame.grid(row=100, columnspan=3, **kw)
Exemplo n.º 24
0
    def fill_in_ui(self, parent):
        # Select an input menu: Radio buttons
        self.ui_input_frame = tk.LabelFrame(self.canvas, text='Input mode')
        self.ui_input_frame.pack(expand=True, fill='x', padx=5, pady=5)
        self.ui_input_frame.columnconfigure(0, weight=1)
        self.ui_input_choice_frame = tk.Frame(self.ui_input_frame)
        self.ui_input_choice_frame.grid(row=0, sticky='we')
        self.ui_input_choice_molecules = tk.Radiobutton(
            self.ui_input_choice_frame,
            variable=self.var_input_choice,
            text='Molecules',
            value='molecules',
            command=self._input_choice_cb)
        self.ui_input_choice_selection = tk.Radiobutton(
            self.ui_input_choice_frame,
            variable=self.var_input_choice,
            text='Selection',
            value='selection',
            command=self._input_choice_cb)
        self.ui_input_choice_molecules.pack(side='left')
        self.ui_input_choice_selection.pack(side='left')
        self.ui_input_choice_molecules.select()

        # Mode A: Opened molecules
        self.ui_input_molecules_frame = tk.Frame(self.ui_input_frame)
        self.ui_input_molecules_frame.grid(row=1, sticky='news')
        self.ui_input_molecules_frame.columnconfigure(0, weight=1)
        self.ui_input_molecules = MoleculeScrolledListBox(
            self.ui_input_molecules_frame,
            selectioncommand=self._on_selection_changed,
            listbox_selectmode="extended")
        self.ui_input_molecules.pack(expand=True, fill='x', padx=5)

        # Mode B: Current selection
        items = ['Current selection'] + sorted(
            chimera.selection.savedSels.keys())
        self.ui_input_named_selections = OptionMenu(
            self.ui_input_molecules_frame, command=None, items=items)
        self.input_new_named_atom_selection = None  # Text field + 'Create button'

        # More options
        self.ui_input_intermolecular_frame = tk.Frame(self.ui_input_frame)
        self.ui_input_intermolecular_frame.grid(row=2)
        self.ui_input_intermolecular_check = tk.Checkbutton(
            self.ui_input_intermolecular_frame,
            text='Filter out % of intramolecular',
            variable=self.var_input_intermolecular_enabled,
            command=self._intermolecular_cb,
            state='disabled')
        self.ui_input_intermolecular_check.pack(side='left')
        self.ui_input_intermolecular_field = tk.Entry(
            self.ui_input_intermolecular_frame,
            textvariable=self.var_input_intermolecular,
            state='disabled',
            width=3)
        self.ui_input_intermolecular_field.pack(side='left')

        # Review input data
        self.ui_input_summary_label = tk.Label(
            self.ui_input_frame, textvariable=self.var_input_summary)
        self.ui_input_summary_label.grid(row=3)

        # NCIPlot launcher
        self.ui_nciplot_frame = tk.Frame(self.canvas)
        self.ui_nciplot_frame.pack()
        self.ui_config_btn = tk.Button(self.ui_nciplot_frame,
                                       text='Configure',
                                       command=self._configure_dialog)
        self.ui_config_btn.pack(side='left')

        # Configure Volume Viewer
        self.ui_settings_frame = tk.LabelFrame(self.canvas,
                                               text='Customize display',
                                               padx=5,
                                               pady=5)
        self.ui_levels_lbl = tk.Label(self.ui_settings_frame, text='Levels: ')
        self.ui_levels_lbl.grid(row=0, column=0)
        self.ui_settings_isovalue_1 = tk.Entry(
            self.ui_settings_frame,
            textvariable=self.var_settings_isovalue_1,
            width=10)
        self.ui_settings_isovalue_1.grid(row=0, column=1, sticky='ew')
        self.ui_settings_isovalue_2 = tk.Entry(
            self.ui_settings_frame,
            textvariable=self.var_settings_isovalue_2,
            width=10)
        self.ui_settings_isovalue_2.grid(row=0, column=2, sticky='ew')
        self.ui_settings_update_btn = tk.Button(self.ui_settings_frame,
                                                text='Update',
                                                command=self._update_surface)
        self.ui_settings_update_btn.grid(row=0,
                                         column=3,
                                         rowspan=2,
                                         sticky='news')

        self.ui_settings_color_palette = OptionMenu(
            self.ui_settings_frame,
            initialitem=3,
            label_text='Colors: ',
            labelpos='w',
            items=sorted(standard_color_palettes.keys()))
        self.ui_settings_color_palette.grid(row=1,
                                            column=0,
                                            columnspan=3,
                                            sticky='we')

        self.ui_report_btn = tk.Checkbutton(
            self.ui_settings_frame,
            text=u'Report \u03BB\u2082\u22C5\u03C1\u22C5100 value at cursor',
            command=self._report_values_cb,
            variable=self.var_settings_report)
        self.ui_report_btn.grid(row=2, column=0, columnspan=3)
        self.ui_reported_value = tk.Entry(self.ui_settings_frame,
                                          textvariable=self.var_reported_value,
                                          state='readonly',
                                          width=8)
        self.ui_reported_value.grid(row=2, column=3, sticky='we')

        # Plot figure
        self.ui_plot_frame = tk.LabelFrame(
            self.canvas,
            text=u'Plot RDG vs density (\u03BB\u2082\u22C5\u03C1)',
            padx=5,
            pady=5)
        self.ui_plot_button = tk.Button(self.ui_plot_frame,
                                        text='Plot',
                                        command=self._plot)
        self.ui_plot_button.grid(row=0)
        self.ui_plot_figure = Figure(figsize=(5, 5),
                                     dpi=100,
                                     facecolor='#D9D9D9')
        self.ui_plot_subplot = self.ui_plot_figure.add_subplot(111)

        self.ui_plot_widget_frame = tk.Frame(self.ui_plot_frame)
        self.ui_plot_widget_frame.grid(row=1)
        self.ui_plot_widget = FigureCanvasTkAgg(
            self.ui_plot_figure, master=self.ui_plot_widget_frame)
        # self.plot_cursor = Cursor(self.plot_subplot, useblit=True, color='black', linewidth=1)
        # self.plot_figure.canvas.mpl_connect('button_press_event', self._on_plot_click)

        # Register and map triggers, callbacks...
        chimera.triggers.addHandler('selection changed',
                                    self._on_selection_changed, None)
        self.nciplot_run = self.buttonWidgets['Run']
        self.buttonWidgets['Save']['state'] = 'disabled'
Exemplo n.º 25
0
    def _fillInUI_Prody(self, parent):
        #
        # Algorithm selection
        #
        self.canvas.columnconfigure(1, weight=1)
        row = 0
        self.ui_algorithms_menu_lbl = tk.Label(self.canvas,
                                               text='Algorithm:',
                                               anchor='e')
        self.ui_algorithms_menu = Pmw.OptionMenu(
            self.canvas,
            items=[
                'Full atom', 'Extend from C-alpha', 'Group by residues',
                'Group by mass', 'Group by graph'
            ],
            command=self._algorithms_menu_cb)

        self.ui_algorithms_param = Pmw.EntryField(self.canvas,
                                                  entry_width=3,
                                                  validate={
                                                      'validator': 'integer',
                                                      'min': 1
                                                  },
                                                  labelpos='w',
                                                  label_text='#:')
        self.ui_algorithms_param.setvalue(1)
        self.ui_algorithms_menu_lbl.grid(row=row,
                                         column=0,
                                         sticky='we',
                                         padx=3,
                                         pady=3)
        self.ui_algorithms_menu.grid(row=row,
                                     column=1,
                                     sticky='we',
                                     padx=3,
                                     pady=3,
                                     columnspan=2)

        #
        # Number of modes & Molecule Minimization
        #
        row += 1
        self.ui_n_modes_lbl = tk.Label(self.canvas,
                                       text='# Modes:',
                                       anchor='e')
        self.ui_n_modes = Pmw.EntryField(self.canvas,
                                         entry_width=3,
                                         validate={
                                             'validator': 'integer',
                                             'min': 1
                                         })
        self.ui_n_modes.setvalue(20)
        self.ui_n_modes_lbl.grid(column=0,
                                 row=row,
                                 sticky='we',
                                 padx=3,
                                 pady=3)
        self.ui_n_modes.grid(column=1, row=row, sticky='news', padx=3)
        self.ui_minimize_btn = tk.Button(
            self.canvas,
            text="Minimize",
        )  #command=lambda: chimera.dialogs.display(mmmdDialog.name))
        self.ui_minimize_btn.grid(column=2,
                                  row=row,
                                  sticky='we',
                                  padx=3,
                                  pady=3)

        #
        # Cutoff
        #
        row += 1
        self.ui_cutoff_lbl = tk.Label(self.canvas, text='Cutoff:', anchor='e')
        self.ui_cutoff = Pmw.EntryField(self.canvas,
                                        entry_width=3,
                                        validate={
                                            'validator': 'real',
                                            'min': 4.0
                                        })
        self.ui_cutoff.setvalue(15.0)
        self.ui_cutoff_lbl.grid(column=0, row=row, sticky='we', padx=3, pady=3)
        self.ui_cutoff.grid(column=1, row=row, sticky='news', padx=3)

        #
        # Cutoff
        #
        row += 1
        self.ui_gamma_lbl = tk.Label(self.canvas, text='Gamma LJ:', anchor='e')
        self.ui_gamma = Pmw.EntryField(self.canvas,
                                       entry_width=3,
                                       validate={
                                           'validator': 'real',
                                           'min': 0.0
                                       })
        self.ui_gamma.setvalue(1.0)
        self.ui_gamma_lbl.grid(column=0, row=row, sticky='we', padx=3, pady=3)
        self.ui_gamma.grid(column=1, row=row, sticky='news', padx=3)
        #
        # Optional Selections: Lennard-Jones and mass-weighted hessian
        #
        row += 1
        self.ui_extra_options = Pmw.Group(self.canvas, tag_text='Options')
        self.ui_extra_options.grid(column=0,
                                   row=row,
                                   columnspan=3,
                                   sticky='nsew',
                                   padx=5,
                                   pady=5)

        self.ui_extra_options_chk = Pmw.RadioSelect(
            self.ui_extra_options.interior(), buttontype='checkbutton')
        self.ui_extra_options_chk.add('Mass-Weighted')
        self.ui_extra_options_chk.grid(column=0, row=0, sticky='we')

        #
        # Model selection
        #
        row += 1
        self.ui_molecules_lbl = tk.Label(self.canvas,
                                         text="Select model:",
                                         anchor='e')
        self.ui_molecules_lbl.grid(column=0, row=row, padx=3)
        self.ui_molecules = MoleculeScrolledListBox(
            self.canvas, listbox_selectmode="single")
        self.ui_molecules.grid(column=1,
                               row=row,
                               columnspan=3,
                               sticky='nsew',
                               padx=3,
                               pady=3)