def __init__(self, vb): self.vb=vb self.tl=None self.getbs() #self.roc=0 warning="""Do not forget to set Cal. flag and ROC bits on right FO in FOs/Cluster window """ print warning; self.vb.io.write(warning) if self.tl: myw.RiseToplevel(self.tl) else: #self.tl=Toplevel(vb.master) self.tl=myw.NewToplevel("Test class") self.fbusy= myw.MywFrame(self.tl,side="top") # busys frame self.fbcnbcm= myw.MywFrame(self.tl,side="top") # entries frame self.fcq= myw.MywFrame(self.tl,side="top") # check/quit self.busys=myw.MywBits(self.fbusy,label="RO flags", defval= self.tcstatus, helptext="""RO Flags: explanation later... """, bits=[ ("ClusterBUSY",0), ("PPreq",0), ("L0req",0), ("L0ack",0), ("ClassBUSY",0), ("L1ack",0), ("L2Rack",0), ("L2Aack",0)], side="top") self.rwflags=myw.MywBits(self.fbusy,label="RW flags", defval= self.tcset, cmd=self.modRWflags, helptext="""RW Flags: Choosen Flgas (red) are set to '1' which means: -> don't care for VETOs flags (bcm*, PFveto) -> CAL or SYNCH triggers for 'non-veto' flags Notes: 1. When CAL flag is set, SYNCH flag is set automatically too and PP is generated ib BC 128 (the final exact shift is set on TTCvi) 2. BCmask (bcm1..bcm4) flags are ignored for SYNCH triggers -i.e. SYNCH triggers can be issued in any BC 3. The FO and INT boards are not programmed. For CAL trigger, corresponding FO should be flagged with CalFlag and Test class (T) has to be set for detector(s) which are supposed to get SW trigger. INT board: word INT_TC_SET should be correctly set with RoC and CalFlag for CTP readout. """, bits=[("bc0",1), ("bc1",1), ("bc2",1), ("bc3",1), ("bc4",1), ("bc5",1), ("bc6",1), ("bc7",1), ("bc8",1), ("bc9",1), ("bc10",1), ("bc11",1), "SYNCH -off ->ASYNCHRONOUS trigger", "CAL -off ->not calibration trigger", "bcm1", "bcm2", "bcm3", "bcm4", "L0 PFveto -P/F protection veto", "L1 PFveto -P/F protection veto", "L2 PFveto -P/F protection veto",], side="top") self.bbcn= myw.MywEntry(self.fbcnbcm,label="BC number", helptext="""BC number. Relevant only for synchronous triggers. Valid values are: 0..3563 3563:last BC in the Orbit 0: 1st BC in the Orbit. If L0_BCOFFSET is set to 0, it corresponds to BC 3 when counted from Orbit signal. Or, set L0_BCOFFSET=3562 to have numbering conforming with Orbit signal. """, side="left", bind='lr', cmdlabel=self.bcmod, defvalue= str(self.tcset&0xfff)) # Commented, FOs are managed in FOs/Clusters window. self.broc= """myw.MywEntry(self.fbcnbcm,label="ROC", helptext="4 ROC bits. The combinations with most significant one (0x8) set to 1 are reserved for CTP use. side="left", bind='lr', cmdlabel=self.brocmod, defvalue= str(self.roc&0xf))""" self.detectorsw=myw.MywBits(self.fbusy,label="Detectors", defval= self.detectors, cmd=self.moddetectors, helptext="""Detectors: 1-24, (DAQdet numbers). The set choosen here is writen to L2_TCSET word. BUSY board is not programmed. """, bits=["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24"], side="top") self.butstart=myw.MywButton(self.fcq, label="Generate\nsw. trigger", helptext="""Clear flags and generate SW trigger. Only L0_TCCLEAR (clear flags) and L0_TCSET (generate) written.""", side="left",cmd=self.gensw) self.butssmstart=myw.MywButton(self.fcq, label="Start SSM+\nsw. trigger", helptext="""Clear flags, start L0-SSM (27ms) in outmon mode, and generate SW trigger""", side="left",cmd= myw.curry(self.gensw, "1")) self.butcheck=myw.MywButton(self.fcq, label="Check\nflags", helptext="Check L0_TCSTATUS register",side="left",cmd=self.checkbs) self.butclear=myw.MywButton(self.fcq, label="Clear\nflags", helptext="Clear L0_TCSTATUS register",side="left",cmd=self.clear) self.butquit=myw.MywButton(self.fcq, label="Quit", helptext="QUIT this window", side="right",cmd=self.quitcb)
def __init__(self,vb): self.vb=vb self.sigfdir= os.environ['VMECFDIR'] +"/CFG/ctp/ssmsigs/" workfdir= os.environ['VMECFDIR'] +"/WORK/" self.tl= myw.NewToplevel("SSM browser") self.basebc=0 self.savedsigs=[] # list of saved signals self.fsigs= myw.MywFrame(self.tl,side=TOP,relief=FLAT) # signals frame self.fbuts= myw.MywFrame(self.tl,side=TOP,relief=FLAT) # contr. buttons frame #self.sms=[] done in findAllSMS() self.findAllSMS() # fill in self.sms (the copy of sms from ssm.c) self.ssmboards=[] #items for BSnames.ssmboards self.dossmboards() # find SSMs with highest syncflag: self.syncflag=None # STRING self.sigs=[]; self.findSynced() # only relevant SSMs self.newsigbut= myw.MywButton(self.fbuts, label="Add new signal", cmd=self.addnewsig, side=LEFT, helptext=""" Add new signal: The new signal widget is created in SSMbrowser window. The SSM and its bit can be choosen by 2 left most buttons. The SSM can be choosen from boards, from which SSM was read - i.e. unsynchronised SSMs can be viewed too. """) self.refreshbut= myw.MywButton(self.fbuts, label="Refresh shown signals", cmd=self.refreshsigs, side=LEFT, helptext=""" Redraw the signals on the screen. Note: SSM on the board is not read into computer memory -the refresh is done only from computer memory """) self.savebut= myw.MywButton(self.fbuts, label="Save shown signals", cmd=self.savesigs, side=LEFT, helptext=""" Save choosen boards/bits names for future restore with new instance of SSMbrowser and pressing Restore button """) self.restorebut= myw.MywButton(self.fbuts, label="Restore signals", cmd=self.restoresigs, side=LEFT, helptext=""" Restore shown signals from file created before by 'Save shown signals' button. """) llbut= myw.MywButton(self.fbuts, label="<<", cmd=myw.curry(self.shiftsigs,0), side=LEFT) lbut= myw.MywButton(self.fbuts, label="<", cmd=myw.curry(self.shiftsigs,-100), side=LEFT) rbut= myw.MywButton(self.fbuts, label=">", cmd=myw.curry(self.shiftsigs,100), side=LEFT) self.bcent= myw.MywEntry(self.fbuts, label="bc:", defvalue=str(self.basebc),bind='lr',side=LEFT, cmdlabel=self.bcmodified, helptext=""" 0 corresponds to synchronised SSM beginning (if more synced SSM are available) """) synctxt='SyncFlag:'+self.syncflag+' SSMs:' for nt in self.sigs: ix= eval(nt.ssmix) #print "bla1:", type(ix), ix #print "bla:", type(nt.ssmix), type(self.sms[ix]), ix synctxt= synctxt+ ' '+nt.ssmix+ '-' + self.sms[ix][0] self.synclab= myw.MywLabel(self.fbuts, label=synctxt,side=LEFT, helptext=""" Highest syncflag (has to be >0 for synced boards) and the numbers-boardnames of boards with synchronised SSMs. """)