def __init__(self, sr): """Display exposure status and a few user input widgets. """ # if True, run in debug-only mode (which doesn't DO anything, it just pretends) sr.debug = False self.expModel = ExposeModel.getModel(InstName) self.spicamModel = TUI.Inst.SPIcam.SPIcamModel.getModel() self.tccModel = TUI.TCC.TCCModel.getModel() self.sr = sr row = 0 expStatusWdg = ExposeStatusWdg( master=sr.master, instName=InstName, helpURL=HelpURL, ) expStatusWdg.grid(row=row, column=0, columnspan=3, sticky="w") row += 1 self.expWdg = ExposeInputWdg( master=sr.master, instName=InstName, expTypes="object", helpURL=HelpURL, ) self.expWdg.grid(row=row, column=0, columnspan=3, sticky="w") row += 1 wdgFrame = Tkinter.Frame(sr.master) gr = RO.Wdg.Gridder(wdgFrame, sticky="w") self.filterWdg = RO.Wdg.OptionMenu( master=self.expWdg, items=[], helpText="filter", helpURL=HelpURL, defMenu="Current", autoIsCurrent=True, ) self.expWdg.gridder.gridWdg("Filter", self.filterWdg, sticky="w", colSpan=3) self.spicamModel.filterNames.addCallback(self.filterWdg.setItems) self.spicamModel.filterName.addIndexedCallback( self.filterWdg.setDefault, 0)
def __init__(self, sr): """Create widgets. """ # if True, run in debug-only mode (which doesn't DO anything, it just pretends) sr.debug = False self.file = None self.nicfpsModel = TUI.Inst.NICFPS.NICFPSModel.getModel() self.expModel = TUI.Inst.ExposeModel.getModel(InstName) self.tccModel = TUI.TCC.TCCModel.getModel() row = 0 # standard exposure status widget expStatusWdg = ExposeStatusWdg( master=sr.master, instName=InstName, helpURL=HelpURL, ) expStatusWdg.grid(row=row, column=0, sticky="news") row += 1 # standard exposure input widget self.expWdg = ExposeInputWdg( master=sr.master, instName=InstName, expTypes="object", helpURL=HelpURL, ) self.expWdg.numExpWdg.helpText = "# of exposures at each spacing" self.expWdg.grid(row=row, column=0, sticky="news") row += 1 gr = self.expWdg.gridder # add file widget self.fileWdg = RO.Wdg.FileWdg( master=self.expWdg, helpText="file of x y z etalon positions", helpURL=HelpURL, ) gr.gridWdg("Data File", self.fileWdg, colSpan=3) if sr.debug: self.expWdg.timeWdg.set(3) self.expWdg.fileNameWdg.set("debugtest")
def __init__(self, sr): """Create widgets. """ # if True, run in debug-only mode (which doesn't DO anything, it just pretends) sr.debug = False self.errStr = "" self.nicfpsModel = TUI.Inst.NICFPS.NICFPSModel.getModel() self.expModel = TUI.Inst.ExposeModel.getModel(InstName) self.tccModel = TUI.TCC.TCCModel.getModel() row = 0 # standard exposure status widget expStatusWdg = ExposeStatusWdg( master=sr.master, instName=InstName, helpURL=HelpURL, ) expStatusWdg.grid(row=row, column=0, sticky="news") row += 1 # standard exposure input widget self.expWdg = ExposeInputWdg( master=sr.master, instName=InstName, expTypes="object", helpURL=HelpURL, ) self.expWdg.numExpWdg.helpText = "# of exposures at each spacing" self.expWdg.grid(row=row, column=0, sticky="news") row += 1 gr = self.expWdg.gridder # add etalon controls to exposure input widget self.begSeqIndWdg = RO.Wdg.IntEntry( master=self.expWdg, minValue=0, width=SpacingWidth, helpText="initial z index (to finish a partial run)", helpURL=HelpURL, ) gr.gridWdg("Initial Index", self.begSeqIndWdg, "(normally leave blank)") self.fpBegZWdg = RO.Wdg.IntEntry( master=self.expWdg, minValue=self.nicfpsModel.fpXYZLimConst[0], maxValue=self.nicfpsModel.fpXYZLimConst[1], width=SpacingWidth, helpText="initial etalon Z spacing", helpURL=HelpURL, ) gr.gridWdg("Initial Z", self.fpBegZWdg, "steps") self.fpDeltaZWdg = RO.Wdg.IntEntry( master=self.expWdg, minValue=self.nicfpsModel.fpXYZLimConst[0], maxValue=self.nicfpsModel.fpXYZLimConst[1], width=SpacingWidth, helpText="etalon Z spacing interval", helpURL=HelpURL, ) gr.gridWdg("Delta Z", self.fpDeltaZWdg, "steps") self.fpNumZWdg = RO.Wdg.IntEntry( master=self.expWdg, minValue=1, maxValue=9999, width=SpacingWidth, helpText="number of etalon Z spacings", helpURL=HelpURL, ) gr.gridWdg("Num Zs", self.fpNumZWdg, "steps") self.fpEndZWdg = RO.Wdg.IntLabel( master=self.expWdg, width=SpacingWidth, helpText="final etalon Z spacing", helpURL=HelpURL, anchor="e", ) self.fpEndZUnitsWdg = RO.Wdg.StrLabel( master=self.expWdg, text="steps", helpURL=HelpURL, anchor="w", ) gr.gridWdg("Final Z", self.fpEndZWdg, self.fpEndZUnitsWdg) self.fpNumPassesWdg = RO.Wdg.OptionMenu( master=self.expWdg, items=("1", "2", "3"), defValue="2", helpText="number of passes in which to sample Z", helpURL=HelpURL, ) gr.gridWdg("Num Passes", self.fpNumPassesWdg) self.currSeqIndWdg = RO.Wdg.IntLabel( master=self.expWdg, width=SpacingWidth, helpText="index of current Z spacing", helpURL=HelpURL, anchor="e", ) gr.gridWdg("Current Index", self.currSeqIndWdg) fpCurrWdg = RO.Wdg.IntLabel( master=self.expWdg, width=SpacingWidth, helpText="current actual etalon Z spacing", helpURL=HelpURL, anchor="e", ) gr.gridWdg("Current Z", fpCurrWdg, "steps") self.nicfpsModel.fpZ.addROWdg(fpCurrWdg) self.fpBegZWdg.addCallback(self.updEndZ, callNow=False) self.fpDeltaZWdg.addCallback(self.updEndZ, callNow=False) self.fpNumZWdg.addCallback(self.updEndZ, callNow=True)
def __init__(self, sr): """The setup script; run once when the script runner window is created. """ # if sr.debug True, run in debug-only mode (which doesn't DO anything, it just pretends) sr.debug = False self.sr = sr self.begOffset = numpy.array((numpy.nan, numpy.nan)) self.currOffset = self.begOffset[:] self.tccModel = TUI.TCC.TCCModel.getModel() self.expModel = TUI.Inst.ExposeModel.getModel(InstName) row=0 # standard exposure status widget expStatusWdg = ExposeStatusWdg( master = sr.master, instName = InstName, helpURL = HelpURL, ) expStatusWdg.grid(row=row, column=0, sticky="news") row += 1 # create dither node controls ditherFrame = Tkinter.Frame(sr.master) # information about the dither nodes; each entry is: # - name of quadrant # - boresight offset multiplier in image x, image y ditherNodeData = [ ("Ctr", (0, 0)), ("UL", (-1, 1)), ("UR", (1, 1)), ("LR", (1, -1)), ("LL", (-1, -1)), ] self.ditherWdgSet = [] # (stateWdg, orderWdg, boolWdg), one per dither node for name, offMult in ditherNodeData: nodeFrame = Tkinter.Frame(ditherFrame) stateWdg = RO.Wdg.StrLabel( master = nodeFrame, width = 7, relief = "flat", helpText = "State of node in dither sequence", helpURL = HelpURL, ) orderWdg = RO.Wdg.IntLabel( master = nodeFrame, width = 1, relief = "flat", helpText = "Order of node in dither sequence", helpURL = HelpURL, ) boolWdg = RO.Wdg.Checkbutton( master = nodeFrame, text = name, callFunc = self.updOrder, defValue = True, relief = "flat", helpText = "Check to use this dither node", helpURL = HelpURL, ) # add attribute "offMult" to widget # so it can be read by "run" boolWdg.offMult = numpy.array(offMult, dtype=float) self.ditherWdgSet.append((stateWdg, orderWdg, boolWdg)) stateWdg.pack(side="left") orderWdg.pack(side="left") boolWdg.pack(side="left") # display quadrant checkbutton in appropriate location row = 1 - offMult[1] col = 1 + offMult[0] nodeFrame.grid(row=row, column=col) ditherFrame.grid(row=row, column=0, sticky="news") row += 1 # standard exposure input widget self.expWdg = ExposeInputWdg( master = sr.master, instName = InstName, expTypes = "object", helpURL = HelpURL, ) self.expWdg.numExpWdg.helpText = "# of exposures at each point" self.expWdg.grid(row=row, column=0, sticky="news") row += 1 # add controls to exposure input widget frame self.boxSizeWdg = RO.Wdg.IntEntry( master = self.expWdg, minValue = 0, defValue = DefBoxSize, helpText = "size of dither box", helpURL = HelpURL, ) self.expWdg.gridder.gridWdg("Box Size", self.boxSizeWdg, "arcsec") self.doRandomWdg = RO.Wdg.Checkbutton( master = self.expWdg, defValue = DefDoRandom, helpText = "Add random scatter to dither pattern?", helpURL = HelpURL, ) self.expWdg.gridder.gridWdg("Randomize?", self.doRandomWdg) if sr.debug: # set useful debug defaults self.expWdg.timeWdg.set("1.0") self.expWdg.numExpWdg.set(2) self.expWdg.fileNameWdg.set("debug") self.ditherWdgSet[1][-1].setBool(False) self.ditherWdgSet[3][-1].setBool(False) self.updOrder()