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): """Display the exposure status panel. """ # if True, run in debug-only mode (which doesn't DO anything, it just pretends) sr.debug = False expStatusWdg = ExposeStatusWdg( master = sr.master, instName = "DIS", ) expStatusWdg.grid(row=0, column=0) # get the exposure model self.expModel = TUI.Inst.ExposeModel.getModel("DIS")
def __init__(self, sr): """Display the exposure status panel. """ # if True, run in debug-only mode (which doesn't DO anything, it just pretends) sr.debug = False expStatusWdg = ExposeStatusWdg( master=sr.master, instName="DIS", ) expStatusWdg.grid(row=0, column=0) # get the exposure model self.expModel = TUI.Inst.ExposeModel.getModel("DIS")
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): """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): """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 expStatusWdg = ExposeStatusWdg( master = sr.master, instName = "DIS", ) expStatusWdg.grid(row=0, column=0, sticky="w") wdgFrame = Tkinter.Frame(sr.master) gr = RO.Wdg.Gridder(wdgFrame) self.expModel = ExposeModel.getModel("DIS") timeUnitsVar = Tkinter.StringVar() self.timeWdg = RO.Wdg.DMSEntry ( master = wdgFrame, minValue = self.expModel.instInfo.minExpTime, maxValue = self.expModel.instInfo.maxExpTime, isRelative = True, isHours = True, unitsVar = timeUnitsVar, width = 10, helpText = "Exposure time", ) gr.gridWdg("Time", self.timeWdg, timeUnitsVar) self.numExpWdg = RO.Wdg.IntEntry( master = wdgFrame, defValue = 1, minValue = 1, maxValue = 999, helpText = "Number of exposures in the sequence", ) gr.gridWdg("#Exp", self.numExpWdg) wdgFrame.grid(row=1, column=0, sticky="w")
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 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): """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 expStatusWdg = ExposeStatusWdg( master=sr.master, instName="DIS", ) expStatusWdg.grid(row=0, column=0, sticky="w") wdgFrame = Tkinter.Frame(sr.master) gr = RO.Wdg.Gridder(wdgFrame) self.expModel = ExposeModel.getModel("DIS") timeUnitsVar = Tkinter.StringVar() self.timeWdg = RO.Wdg.DMSEntry( master=wdgFrame, minValue=self.expModel.instInfo.minExpTime, maxValue=self.expModel.instInfo.maxExpTime, isRelative=True, isHours=True, unitsVar=timeUnitsVar, width=10, helpText="Exposure time", ) gr.gridWdg("Time", self.timeWdg, timeUnitsVar) self.numExpWdg = RO.Wdg.IntEntry( master=wdgFrame, defValue=1, minValue=1, maxValue=999, helpText="Number of exposures in the sequence", ) gr.gridWdg("#Exp", self.numExpWdg) wdgFrame.grid(row=1, column=0, sticky="w")
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(sr.master, InstName) 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(sr.master, InstName, expTypes="object") self.expWdg.numExpWdg.helpText = "# of pairs of exposures at each node" 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) self.skyOffsetWdgSet = [] for ii in range(2): axisStr = ("RA", "Dec")[ii] unitsVar = Tkinter.StringVar() offsetWdg = RO.Wdg.DMSEntry( master = self.expWdg, minValue = -MaxOffset, maxValue = MaxOffset, defValue = DefOffset, isHours = False, isRelative = True, helpText = "Offset to sky in %s (typically)" % (axisStr,), helpURL = HelpURL, unitsVar = unitsVar, ) self.skyOffsetWdgSet.append(offsetWdg) self.expWdg.gridder.gridWdg( "Sky Offset %s" % (ii + 1,), offsetWdg, units = unitsVar, ) self.expWdg.gridder.allGridded() 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()
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()
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)