#! /usr/env/python #-------------------------------------------------------------------------------- """ Application: Dialog_Adc for DAQ_96_Gui ADC Analysis Dialog for the Graphical User Interface to the DAQ_96 Control Program """ #-------------------------------------------------------------------------------- #-------------------------------------------------------------------------------- import string from Tkinter import * import Pmw from MultiShell import updateComboBox from MultiShell import updateIntVar from Print_Utils import printLine from Misc_Utils import RegAddrString from Xml_Utils import CreateXmlCommand from Xml_Utils import AppendCommentField from Xml_Utils import RetrieveXmlAttr from Misc_Constants import eOk, eError from Misc_Constants import TT_EM, TT_HD, TtType_str, TtType_tot from Misc_Constants import Eta_Pos, Eta_Neg, EtaSign_tot, EtaSignTypes, EtaSign_str #-------------------------------------------------------------------------------- #-------------------------------------------------------------------------------- class Dialog_Adc : def __init__ ( self, MShell, FrameNum ) : # Flag to prevent usage of non-existing objects during dialog construction self.InterfaceCreated = "No" self.MShell = MShell self.AdcFrame = FrameNum # printLine ( "Dialog", 'Frame #%d is "%s"' % ( FrameNum, MShell.frameName[FrameNum] ) ) #-------------------------------------------------------------------------------- def createInterface(self): MShell = self.MShell MShell.addFieldLabel ( nFrame = self.AdcFrame, labelName = 'Access: ADC Channel Analysis', column = 1, columnspan = 4, height = 1, width = 35, row = MShell.nextFieldRow() ) # MShell.addFieldLabel ( nFrame = self.AdcFrame, # labelName = "VI Mst/Slv", # column = 1, # row = MShell.nextFieldRow() ) # AdcCrateMasterFrame = \ # MShell.addFieldFrame ( nFrame = self.AdcFrame, # labelName = "VI Frame for Adc", # column = 2, # columnspan = 3, # row = MShell.currentFieldRow() ) self.AdcMasterNum_var = IntVar() self.AdcMasterNum_var.set(0) # MShell.addFieldRadioB ( frame = AdcCrateMasterFrame, # labelName ="M#0", # value = 0, # variable = self.AdcMasterNum_var ) # MShell.addFieldRadioB ( frame = AdcCrateMasterFrame, # labelName ="#1", # value = 1, # variable = self.AdcMasterNum_var ) self.AdcSlaveNum_var = IntVar() self.AdcSlaveNum_var.set(0) # MShell.addFieldRadioB ( frame = AdcCrateMasterFrame, # labelName ="S#0", # value = 0, # variable = self.AdcSlaveNum_var ) # MShell.addFieldRadioB ( frame = AdcCrateMasterFrame, # labelName ="#1", # value = 1, # variable = self.AdcSlaveNum_var ) # MShell.addFieldRadioB ( frame = AdcCrateMasterFrame, # labelName ="#2", # value = 2, # variable = self.AdcSlaveNum_var ) # MShell.addFieldRadioB ( frame = AdcCrateMasterFrame, # labelName ="#3", # value = 3, # variable = self.AdcSlaveNum_var ) self.AdcSlotNum_box = \ MShell.addFieldCombo ( nFrame = self.AdcFrame, labelName ="Slot Num (*)", helpMessage ="Slot Num", statusMessage="Slot Num", initValue ="0", width = 6, command = self.Adc_UpdateSlotNum ) self.AdcRelEta_box = \ MShell.addFieldCombo ( nFrame = self.AdcFrame, labelName ="Rel Eta", helpMessage ="Relative Eta 0:3", statusMessage="Relative Eta 0:3", initValue ="0", width = 6 ) self.AdcRelPhi_box = \ MShell.addFieldCombo ( nFrame = self.AdcFrame, labelName ="Rel Phi", helpMessage ="Relative Phi 0:3", statusMessage="Relative Phi 0:3", initValue ="0", column = 3, width = 6, row = MShell.currentFieldRow() ) MShell.addFieldLabel ( nFrame = self.AdcFrame, labelName = '(*) or use Slot#=0 and select L1Cal TT_Eta/Phi:', column = 1, columnspan = 4, width = 40, row = MShell.nextFieldRow() ) MShell.addFieldLabel ( nFrame = self.AdcFrame, labelName = "Eta Sign", column = 1, row = MShell.nextFieldRow() ) self.AdcEtaSignFrame = \ MShell.addFieldFrame ( nFrame = self.AdcFrame, labelName = "ADC Eta Sign", helpMessage ="Absolute Eta Sign Pos:Neg", column = 2, columnspan = 3, row = MShell.currentFieldRow() ) self.AdcEtaSign_var = IntVar() self.AdcEtaSign_var.set(Eta_Pos) MShell.addFieldRadioB ( frame = self.AdcEtaSignFrame, labelName ="Pos", value = Eta_Pos, variable = self.AdcEtaSign_var ) MShell.addFieldRadioB ( frame = self.AdcEtaSignFrame, labelName ="Neg", value = Eta_Neg, variable = self.AdcEtaSign_var ) self.AdcEtaMagn_box = \ MShell.addFieldCombo ( nFrame = self.AdcFrame, labelName ="Eta Magn", helpMessage ="Absolute Eta Magnitute 1:20", statusMessage="Absolute Eta Magnitute 1:20", initValue ="1", width = 6, row = MShell.nextFieldRow() ) self.AdcPhi_box = \ MShell.addFieldCombo ( nFrame = self.AdcFrame, labelName ="Phi", helpMessage ="Absolute Phi 1:32", statusMessage="Absolute Phi 1:32", initValue ="1", column = 3, width = 6, row = MShell.currentFieldRow() ) MShell.addFieldLabel ( nFrame = self.AdcFrame, labelName = "Trg Twr Type", column = 1, row = MShell.nextFieldRow() ) AdcTtTypeFrame = \ MShell.addFieldFrame ( nFrame = self.AdcFrame, labelName = "Adc Trg Twr Type", column = 2, columnspan = 3, row = MShell.currentFieldRow() ) self.AdcTtType_var = IntVar() self.AdcTtType_var.set(TT_EM) MShell.addFieldRadioB ( frame = AdcTtTypeFrame, labelName ="TT_EM", value = TT_EM, variable = self.AdcTtType_var ) MShell.addFieldRadioB ( frame = AdcTtTypeFrame, labelName ="TT_HD", value = TT_HD, variable = self.AdcTtType_var ) self.AdcThreshold_box = \ MShell.addFieldCombo ( nFrame = self.AdcFrame, labelName ="Cnt Thresh", helpMessage ="Looking for Samples above this Threshold", statusMessage="Looking for Samples above this Threshold", initValue ="0", width = 6 ) self.AdcMaxWaitSec_box = \ MShell.addFieldCombo ( nFrame = self.AdcFrame, labelName ="Wait Sec", helpMessage ="Maximum Time to Wait", statusMessage="Maximum Time to Wait", initValue ="1", column = 3, width = 6, row = MShell.currentFieldRow() ) MShell.addFieldButton ( nFrame = self.AdcFrame, labelName = 'Try and Capture', helpMessage = 'Try and Capture', statusMessage= 'Try and Capture', column = 2, row = MShell.nextFieldRow(), command = self.Adc_Capture ) self.AdcDumpToFile_var = IntVar() self.AdcDumpToFile_var.set(0) MShell.addFieldCheckB ( nFrame = self.AdcFrame, labelName = 'Write Dump File', helpMessage = 'Write to Dump File', statusMessage= 'Write to Dump File', column = 3, columnspan = 3, row = MShell.currentFieldRow(), variable = self.AdcDumpToFile_var ) self.AdcReply_box = \ MShell.addFieldEntry ( nFrame = self.AdcFrame, labelName ="Reply", helpMessage ="Reply", statusMessage="Reply", initValue ="-", bg = 'gray80', columnspan = 3, font = ('Verdana',7), width = 43 ) # The interface objects have now been created self.InterfaceCreated = "Yes" # disable certain fields self.Adc_UpdateSlotNum () #-------------------------------------------------------------------------------- #-------------------------------------------------------------------------------- def Adc_Capture ( self, MasterNum = None, SlaveNum = None, SlotNum = None, TtType = None, RelEta = None, RelPhi = None, EtaSign = None, EtaMagn = None, Phi = None, Threshold = None, MaxWaitSec = None, DumpToFile = None, Comment = None ) : MasterNum_int = updateIntVar ( self.AdcMasterNum_var, MasterNum ) SlaveNum_int = updateIntVar ( self.AdcSlaveNum_var, SlaveNum ) SlotNum_int = updateComboBox ( self.AdcSlotNum_box, SlotNum ) TtType_int = updateIntVar ( self.AdcTtType_var, TtType ) TtType_int = TtType_int % TtType_tot RelEta_int = updateComboBox ( self.AdcRelEta_box, RelEta ) RelPhi_int = updateComboBox ( self.AdcRelPhi_box, RelPhi ) EtaSign_int = updateIntVar ( self.AdcEtaSign_var, EtaSign ) EtaSign_int = EtaSign_int % EtaSign_tot EtaMagn_int = updateComboBox ( self.AdcEtaMagn_box, EtaMagn ) Phi_int = updateComboBox ( self.AdcPhi_box, Phi ) Threshold_int = updateComboBox ( self.AdcThreshold_box, Threshold ) MaxWaitSec_int = updateComboBox ( self.AdcMaxWaitSec_box, MaxWaitSec ) DumpToFile_int = updateIntVar ( self.AdcDumpToFile_var, DumpToFile ) if ( SlotNum_int == 0 ) : printLine ( "Adc_Capt", "Try %s(%s%d,%d) up to %d sec for ADC .gt. %4d" \ % ( TtType_str[TtType_int], EtaSign_str[EtaSign_int], EtaMagn_int, Phi_int, MaxWaitSec_int, Threshold_int ) ) else : printLine ( "Adc_Capt", "Try %s(%d,%d) %s up to %d sec for ADC .gt. %4d" \ % ( TtType_str[TtType_int], RelEta_int, RelPhi_int, RegAddrString ( MasterNum_int, SlaveNum_int, SlotNum_int ), MaxWaitSec_int, Threshold_int ) ) guiCmdName = "Adc_Capture" xmlCmdDoc = CreateXmlCommand ( guiCmdName, { "ADF" : { "MASTER" : str(MasterNum_int), "SLAVE" : str(SlaveNum_int), "SLOT" : str(SlotNum_int) }, "TRGTWR" : { "TYPE" : TtType_str[TtType_int], "REL_ETA" : str(RelEta_int), "REL_PHI" : str(RelPhi_int), "ETA_SIGN" : EtaSign_str[EtaSign_int], "ETA_MAGN" : str(EtaMagn_int), "PHI" : str(Phi_int) }, "TRIGGER" : { "THRESHOLD" : str(Threshold_int), "MAX_TRY" : str(MaxWaitSec_int), "DUMPTOFILE": str(DumpToFile_int) } } ) AppendCommentField ( xmlCmdDoc, Comment ) guiCmdReply = self.MShell.sendGuiComand ( xmlCmdDoc ) MaxValue_str, \ FileName_str, \ Reply_Status = RetrieveXmlAttr ( CmdReply = guiCmdReply, CmdName = guiCmdName, EltAttrList = [ [ "DATA", "ADC", None ], [ "FILE", "NAME", "NoFile"] ], ReplyBox = self.AdcReply_box ) if ( Reply_Status == eOk ) : printLine ( "Adc_Histo", "Peak Value Found = %s " % MaxValue_str ) if ( DumpToFile_int != 0 ) : printLine ( "Adc_Capt","File Created <%s>" % FileName_str ) else : printLine ( "Adc_Capt", "*** Error Detected ***" ) return MaxValue_str, FileName_str, Reply_Status #-------------------------------------------------------------------------------- def Adc_UpdateSlotNum ( self ) : if ( self.InterfaceCreated == "Yes" ) : SlotNum = updateComboBox ( self.AdcSlotNum_box ) if ( SlotNum == 0 ) : self.AdcRelEta_box.configure( entry_state="disabled") self.AdcRelPhi_box.configure( entry_state="disabled") self.AdcEtaMagn_box.configure( entry_state="normal") self.AdcPhi_box.configure( entry_state="normal") else : self.AdcRelEta_box.configure( entry_state="normal") self.AdcRelPhi_box.configure( entry_state="normal") self.AdcEtaMagn_box.configure( entry_state="disabled") self.AdcPhi_box.configure( entry_state="disabled") return