#! /usr/env/python #-------------------------------------------------------------------------------- """ Application: Dialog_Col for DAQ_96_Gui Local Command File Dialog for the Graphical User Interface to the DAQ_96 Control Program """ #-------------------------------------------------------------------------------- #-------------------------------------------------------------------------------- import os import sys import string import time from Tkinter import * import Pmw from MultiShell import updateComboBox from Print_Utils import printLine from showException import showException from Site_Dependent import CommandFileDir from Site_Dependent import AdfCardTot from Site_Dependent import DAQ96_Collect_CmdFile #-------------------------------------------------------------------------------- # these are not needed in this module per se, but useful in the command files being called from Misc_Constants import eOk, eError from Misc_Constants import TT_EM, TT_HD, TtType_str, TtType_tot from Misc_Constants import SlotNumMax #-------------------------------------------------------------------------------- from threading import Semaphore #-------------------------------------------------------------------------------- #-------------------------------------------------------------------------------- class Dialog_Col : def __init__ ( self, MShell, FrameNum ) : self.MShell = MShell self.ColFrame = FrameNum self.ColStopRequest = Semaphore () self.RunIsUnderway = 0 # printLine ( "Dialog", 'Frame #%d is "%s"' % ( FrameNum, MShell.frameName[FrameNum] ) ) #-------------------------------------------------------------------------------- def createInterface(self): MShell = self.MShell MShell.addFieldLabel ( nFrame = self.ColFrame, labelName = 'DAQ96: Collect Events', column = 1, columnspan = 3, height = 3, width = 35, row = MShell.nextFieldRow() ) MShell.addFieldLabel ( nFrame = self.ColFrame, labelName = 'Included Cards', column = 1, row = MShell.nextFieldRow() ) ColAdfSelectFrame = \ MShell.addFieldFrame ( nFrame = self.ColFrame, labelName = "Select ADF Card(s) in the run", column = 2, columnspan = 3, row = MShell.currentFieldRow() ) self.ColAdfSelect_var = AdfCardTot * [ None, ] for AdfNum in range(AdfCardTot) : self.ColAdfSelect_var[AdfNum] = IntVar() self.ColAdfSelect_var[AdfNum].set(0) MShell.addFieldCheckB ( frame = ColAdfSelectFrame, labelName = "ADF#%d" % AdfNum, helpMessage = "Include ADF #%d" % AdfNum, statusMessage= "Include ADF #%d" % AdfNum, column = AdfNum % 3, row = AdfNum / 3, variable = self.ColAdfSelect_var[AdfNum] ) self.ColEventTotal = \ MShell.addFieldCombo ( nFrame = self.ColFrame, labelName ="Total Event", helpMessage ="Total Event", statusMessage="Total Event", initValue ="10", width = 15 ) MShell.addFieldButton ( nFrame = self.ColFrame, labelName = 'Start New Run', helpMessage = 'Start the DAQ Command File', statusMessage= 'Start the DAQ Command File', width = 15, column = 3, row = MShell.currentFieldRow(), command = self.StartRun ) self.ColCoolDownSec = \ MShell.addFieldCombo ( nFrame = self.ColFrame, labelName ='"Prescale"', helpMessage ="Cooldowm delay between successive Events", statusMessage="Cooldowm delay between successive Events", initValue ="1", width = 15 ) MShell.addFieldLabel ( nFrame = self.ColFrame, labelName = '<- sec of cool down', column = 3, row = MShell.currentFieldRow() ) MShell.addFieldLabel ( nFrame = self.ColFrame, labelName = 'Pause', column = 1, row = MShell.nextFieldRow() ) self.ColAutoPause_var = IntVar() self.ColAutoPause_var.set(0) MShell.addFieldCheckB ( nFrame = self.ColFrame, labelName = 'Auto-Pause', helpMessage = 'Auto Pause between events', statusMessage= 'Auto Pause between events', column = 2, row = MShell.currentFieldRow(), variable = self.ColAutoPause_var ) MShell.addFieldButton ( nFrame = self.ColFrame, labelName = 'Pause/Resume', helpMessage = 'Pause/Resume Run', statusMessage= 'Pause/Resume Run', width = 15, column = 3, row = MShell.currentFieldRow(), command = self.FlipPauseResume ) MShell.addFieldButton ( nFrame = self.ColFrame, labelName = 'Stop Run', helpMessage = 'Request Command File Stop', statusMessage= 'Request Command File Stop', width = 15, column = 3, row = MShell.nextFieldRow(), command = self.StopRun ) self.ColRunNumber = \ MShell.addFieldEntry ( nFrame = self.ColFrame, labelName ="Run Number", helpMessage ="Current Run Number", statusMessage="Current Run Number", initValue ="-", bg = 'gray80', width = 17 ) self.ColRunStatus = \ MShell.addFieldEntry ( nFrame = self.ColFrame, helpMessage ="Current Run Status", statusMessage="Current Run Status", initValue ="-", bg = 'gray80', column = 3, row = MShell.currentFieldRow(), width = 17 ) self.ColEventNumber = \ MShell.addFieldEntry ( nFrame = self.ColFrame, labelName ="Event Number", helpMessage ="Current Event Number", statusMessage="Current Event Number", initValue ="-", bg = 'gray80', width = 17 ) self.ColEventStatus = \ MShell.addFieldEntry ( nFrame = self.ColFrame, helpMessage ="Current Event Status", statusMessage="Current Event Status", initValue ="-", bg = 'gray80', column = 3, row = MShell.currentFieldRow(), width = 17 ) #-------------------------------------------------------------------------------- def GetAdfIncluded ( self ) : AdfIncluded = AdfCardTot * [ None, ] for AdfNum in range(AdfCardTot) : AdfIncluded[AdfNum] = self.ColAdfSelect_var[AdfNum].get() return AdfIncluded #-------------------------------------------------------------------------------- def SetRunNumber ( self, RunNumber ) : self.ColRunNumber.setentry( RunNumber ) #-------------------------------------------------------------------------------- def SetEventNumber ( self, EventNumber ) : self.ColEventNumber.setentry( EventNumber ) #-------------------------------------------------------------------------------- def SetRunStatus ( self, Status ) : self.ColRunStatus.setentry( Status ) #-------------------------------------------------------------------------------- def GetRunStatus ( self ) : return self.ColRunStatus.get() #-------------------------------------------------------------------------------- def SetEventStatus ( self, Status ) : self.ColEventStatus.setentry( Status ) #-------------------------------------------------------------------------------- def GetEventTotal ( self ) : return updateComboBox ( self.ColEventTotal ) #-------------------------------------------------------------------------------- def GetCoolDownSec ( self ) : return updateComboBox ( self.ColCoolDownSec ) #-------------------------------------------------------------------------------- def HandleAutoPause ( self ) : if self.ColAutoPause_var.get() : printLine ( "Pause", "Auto-Pause request noticed" ) self.SetPause () #-------------------------------------------------------------------------------- def ClearPause ( self ) : self.Pause = 0 #-------------------------------------------------------------------------------- def SetPause ( self, Resume = None ) : if ( Resume == 1 ) : printLine ( "Pause", "Resume requested" ) self.Pause = 0 else : printLine ( "Pause", "Pause requested" ) self.Pause = 1 #-------------------------------------------------------------------------------- def FlipPauseResume ( self ) : self.SetPause ( self.Pause ) #-------------------------------------------------------------------------------- def CheckIfPaused ( self ) : return self.Pause #-------------------------------------------------------------------------------- def SetRunIsUnderway ( self, Running = 1 ) : if ( Running != 0 ) : self.RunIsUnderway = 1 else : self.RunIsUnderway = 0 #-------------------------------------------------------------------------------- def StartRun ( self ) : # make sure there is not another run going if ( self.RunIsUnderway == 1 ) : if ( self.MShell.confirm( "Warning: Run Underway", "Override and start new run anyway?" ) != TRUE ) : return # make sure we start out not paused self.ClearPause() # make sure the Command File Stop Request is cleared self.MShell.Dialog_Cmd.ClearStopRequest() self.MShell.Dialog_Cmd.Cmd_Exec_ComFile ( ComFile = CommandFileDir + DAQ96_Collect_CmdFile ) #-------------------------------------------------------------------------------- def StopRun ( self ) : # request command file to stop self.MShell.Dialog_Cmd.RequestCmdFileStop () # make sure get out of pause, if needed self.ClearPause()