00001 #!/usr/local/bin/python
00002 #
00003 # Copyright 2004
00004 # by
00005 # The Board of Trustees of the
00006 # Leland Stanford Junior University.
00007 # All rights reserved.
00008 #
00009
00010
00011 __facility__ = "Trigger"
00012 __abstract__ = "Trigger display implementation"
00013 __author__ = "Martin Kocian, SLAC"
00014 __date__ = ("$Date: 2005/06/15 23:42:31 $").split(' ')[1]
00015 __version__ = "$Revision: 2.17 $"
00016 __release__ = "$Name: R04-12-00 $"
00017 __credits__ = "SLAC"
00018
00019 import LATTE.copyright_SLAC
00020
00021 import sys
00022 from qt import *
00023 from trgDisplay import trgDisplay
00024 from towerwidgetImpl import towerwidgetImpl
00025 import time
00026 from listmean import *
00027 import logging as myLog
00028 from trgConsumer import *
00029 from imagedata import *
00030
00031 CLOCKTICK=50.e-9
00032 TIMEOUT=10.
00033 class eventThread(QThread):
00034 def __init__(self,cons):
00035 QThread.__init__(self)
00036 self.cons=cons
00037 def run(self):
00038 self.cons.loop()
00039
00040 class trgDisplayImpl(trgDisplay):
00041
00042 def __init__(self,lat,ocs,server,infile,parent = None,name = None,modal=0,fl = 0):
00043 trgDisplay.__init__(self,parent,name,modal,fl)
00044 self.cons=trgConsumer(server,infile)
00045 self.__firstresize=False
00046 self.__thewidth=0
00047 self.__theheight=0
00048 self.__solicited=0
00049 self.__tkr=0
00050 self.__callow=0
00051 self.__calhigh=0
00052 self.__cno=0
00053 self.__roi=0
00054 self.__periodic=0
00055 self.__ext=0
00056 self.timestamp=0
00057 self.timeout=0
00058 self.tkrvecold=[]
00059 self.tkrveclist=[]
00060 self.roivecold=[]
00061 self.roiveclist=[]
00062 self.cnovecold=[]
00063 self.cnoveclist=[]
00064 self.callowvecold=[]
00065 self.callowveclist=[]
00066 self.calhighvecold=[]
00067 self.calhighveclist=[]
00068 self.orvecold=[]
00069 self.orveclist=[]
00070 self.lut=[]
00071 self.englist=[]
00072 self.engnew=[]
00073 self.engold=[]
00074 for i in range(16):
00075 self.tkrvecold.append(0)
00076 self.tkrveclist.append([])
00077 self.roivecold.append(0)
00078 self.roiveclist.append([])
00079 self.cnovecold.append(0)
00080 self.cnoveclist.append([])
00081 self.callowvecold.append(0)
00082 self.callowveclist.append([])
00083 self.calhighvecold.append(0)
00084 self.calhighveclist.append([])
00085 self.orvecold.append(0)
00086 self.orveclist.append([])
00087 self.engold.append(0)
00088 self.engnew.append(0)
00089 self.englist.append([])
00090 self.__samplingrate=1000
00091 self.__ratehaschanged=False
00092 self.__numsamples=10
00093 self.__tkrlist=[]
00094 self.__callowlist=[]
00095 self.__calhighlist=[]
00096 self.__cnolist=[]
00097 self.__roilist=[]
00098 self.__periodiclist=[]
00099 self.__solicitedlist=[]
00100 self.__extlist=[]
00101 self.__consevents=0
00102 self.ref=5
00103 self.roion=False
00104 self.tkron=False
00105 self.callowon=False
00106 self.calhighon=False
00107 self.cnoon=False
00108 self.exton=False
00109 self.__lat = lat
00110 self.__ocs = ocs
00111 self.towerlist=[]
00112 for temid in range(16):
00113 tem=self.__lat.downTEM(temid)
00114 if tem==None: continue
00115 self.towerlist.append(temid)
00116 self.__oldtime=time.time()
00117 self.__timebase=lat.GEM.GEMST.timebase
00118 self.__livetime=lat.GEM.GEMST.livetime
00119 self.__discarded=lat.GEM.GEMST.discarded
00120 self.__deadzone=lat.GEM.GEMST.deadzone
00121 self.__prescaled=lat.GEM.GEMST.prescaled
00122 self.__sent=lat.GEM.GEMST.sent
00123 self.__validev=ocs.stats_valid_events
00124 self.__window=lat.GEM.GEMW.window_width
00125 self.cons.winwidth=self.__window
00126 self.cons.conf=lat.GEM.GEMC.configuration&1
00127 self.__livelist=[]
00128 self.__sentlist=[]
00129 self.__discardedlist=[]
00130 self.__prescaledlist=[]
00131 self.__deadzonelist=[]
00132 self.rate.setText("")
00133 #self.number.setProperty("value",QVariant(self.step))
00134 QObject.connect(self.samplingrate,SIGNAL("clicked(int)"),self.changeRate)
00135 QObject.connect(self.avrate,SIGNAL("clicked(int)"),self.changeSampling)
00136
00137 self.rate1.setHigh("10")
00138 self.rate10.setHigh("100")
00139 self.rate100.setHigh("1000")
00140 self.rate1.setLow("0")
00141 self.rate10.setLow("0")
00142 self.rate100.setLow("0")
00143 self.rate1.bar.setScale(10)
00144 self.rate10.bar.setScale(100)
00145 self.rate100.bar.setScale(1000)
00146 self.rate1.setTitle("")
00147 self.rate10.setTitle("")
00148 self.rate100.setTitle("")
00149 self.rate1.bar.setMinor(500)
00150 self.rate1.bar.setMajor(1000)
00151 self.rate10.bar.setMinor(500)
00152 self.rate10.bar.setMajor(1000)
00153 self.rate100.bar.setMinor(500)
00154 self.rate100.bar.setMajor(1000)
00155 self.instrate1.setHigh("10")
00156 self.instrate10.setHigh("100")
00157 self.instrate100.setHigh("1000")
00158 self.instrate1.setLow("0")
00159 self.instrate10.setLow("0")
00160 self.instrate100.setLow("0")
00161 self.instrate1.bar.setScale(10)
00162 self.instrate10.bar.setScale(100)
00163 self.instrate100.bar.setScale(1000)
00164 self.instrate1.setTitle("")
00165 self.instrate10.setTitle("")
00166 self.instrate100.setTitle("")
00167 self.instrate1.bar.setMinor(500)
00168 self.instrate1.bar.setMajor(1000)
00169 self.instrate10.bar.setMinor(500)
00170 self.instrate10.bar.setMajor(1000)
00171 self.instrate100.bar.setMinor(500)
00172 self.instrate100.bar.setMajor(1000)
00173 self.deadtime1.setHigh("1")
00174 self.deadtime10.setHigh("10")
00175 self.deadtime100.setHigh("100")
00176 self.deadtime1.setLow("0")
00177 self.deadtime10.setLow("0")
00178 self.deadtime100.setLow("0")
00179 self.deadtime1.bar.setScale(1)
00180 self.deadtime10.bar.setScale(10)
00181 self.deadtime100.bar.setScale(100)
00182 self.deadtime1.setTitle("")
00183 self.deadtime10.setTitle("")
00184 self.deadtime100.setTitle("")
00185 self.deadtime1.bar.setMinor(.5)
00186 self.deadtime1.bar.setMajor(5)
00187 self.deadtime10.bar.setMinor(.5)
00188 self.deadtime10.bar.setMajor(5)
00189 self.deadtime100.bar.setMinor(.5)
00190 self.deadtime100.bar.setMajor(5)
00191 self.deadtime.setText("")
00192 self.prescaledb.setTitle("Prescaled")
00193 self.prescaledb.setSlidingScale(1)
00194 self.discardedb.setTitle("Discarded")
00195 self.discardedb.setSlidingScale(1)
00196 self.deadzoneb.setTitle("Dead zone")
00197 self.deadzoneb.setSlidingScale(1)
00198 self.histo.setup(100,1,65536,True,True)
00199 self.histo.boxwidth=.35
00200 self.histo.addHisto("deltaetime","black",0,1)
00201 self.histo.addHisto("deltawtime","orange",1,1)
00202 self.histo.xaxislabel.setText("clock ticks (50 ns)")
00203 self.histo.histolabel[0].setText("Delta Event Time")
00204 self.histo.histolabel[1].setText("Delta Window Time")
00205 self.multibar1.setup(8)
00206 self.multibar1.setSlidingScale(1)
00207 self.multibar1.setTitle("Conditions Rates (Aver.)" )
00208 self.multibar2.setup(16,2)
00209 self.multibar2.setTitle("Tower Rates (Average)")
00210 self.multibar2.setSlidingScale(1)
00211 self.multibartower.setup(16,2)
00212 self.multibartower.setTitle("Tower Rates (Average)")
00213 self.multibartower.setSlidingScale(1)
00214 self.multibartkr.setup(16,2)
00215 self.multibartkr.setTitle("Tracker Rates (Average)")
00216 self.multibartkr.setSlidingScale(1)
00217 self.multibarcallow.setup(16,2)
00218 self.multibarcallow.setTitle("Cal low Rates (Average)")
00219 self.multibarcallow.setSlidingScale(1)
00220 self.multibarcalhigh.setup(16,2)
00221 self.multibarcalhigh.setTitle("Cal high Rates (Average)")
00222 self.multibarcalhigh.setSlidingScale(1)
00223 self.multibarroi.setup(16,2)
00224 self.multibarroi.setTitle("ROI Rates (Average)")
00225 self.multibarroi.setSlidingScale(1)
00226 self.multibarcno.setup(12,0)
00227 self.multibarcno.setTitle("CNO Rates (Average)")
00228 self.multibarcno.setSlidingScale(1)
00229 cnotitles=["1LA","1RB","2LA","2LB","2RA","2RB","3LA","3RB","4LA","4LB","4RA","4RB"]
00230 for i in range (16):
00231 self.multibar2.setBarTitle(i,str(i))
00232 self.multibartower.setBarTitle(i,str(i))
00233 self.multibartkr.setBarTitle(i,str(i))
00234 self.multibarcallow.setBarTitle(i,str(i))
00235 self.multibarcalhigh.setBarTitle(i,str(i))
00236 self.multibarroi.setBarTitle(i,str(i))
00237 if i<12:
00238 self.multibarcno.setBarTitle(i,cnotitles[i])
00239
00240 self.multibareng.setup(16,0)
00241 self.multibareng.setSlidingScale(1)
00242 self.multibareng.setTitle("")
00243 for i in range (16):
00244 self.multibareng.setBarTitle(i,str(i))
00245 self.engmeters=[]
00246 for i in range(16):
00247 self.engmeters.append(QLabel(self.tab_5,""))
00248 self.engmeters[i].setText("")
00249 self.engmeters[i].setAlignment(QLabel.AlignCenter)
00250 self.engmeters[i].setGeometry(163+i*31,250,30,12)
00251 self.prescalelabels=[]
00252 for i in range(16):
00253 self.prescalelabels.append(QLabel(self.tab_5,""))
00254 self.prescalelabels[i].setText("")
00255 self.prescalelabels[i].setAlignment(QLabel.AlignCenter)
00256 self.prescalelabels[i].setGeometry(163+i*31,120,30,12)
00257 plabel=QLabel(self.tab_5,"")
00258 plabel.setText("Prescale:")
00259 plabel.setGeometry(60,117,85,16)
00260
00261
00262 self.image0 = QPixmap(image0_data)
00263 self.image1 = QPixmap(image1_data)
00264 self.calstrobe=[]
00265 for i in range(16):
00266 self.calstrobe.append(QLabel(self.tab_5,""))
00267 self.calstrobe[i].setGeometry(168+i*31,217,14,14)
00268 cslabel=QLabel(self.tab_5,"")
00269 cslabel.setText("Calstrobe:")
00270 cslabel.setGeometry(60,217,65,16)
00271 self.tack=[]
00272 for i in range(16):
00273 self.tack.append(QLabel(self.tab_5,""))
00274 self.tack[i].setGeometry(168+i*31,197,14,14)
00275 tacklabel=QLabel(self.tab_5,"")
00276 tacklabel.setText("TACK:")
00277 tacklabel.setGeometry(60,197,65,16)
00278 self.fourrange=[]
00279 for i in range(16):
00280 self.fourrange.append(QLabel(self.tab_5,""))
00281 self.fourrange[i].setGeometry(168+i*31,177,14,14)
00282 frlabel=QLabel(self.tab_5,"")
00283 frlabel.setText("Four-range:")
00284 frlabel.setGeometry(60,177,65,16)
00285 self.zerosup=[]
00286 for i in range(16):
00287 self.zerosup.append(QLabel(self.tab_5,""))
00288 self.zerosup[i].setGeometry(168+i*31,157,14,14)
00289 zslabel=QLabel(self.tab_5,"")
00290 zslabel.setText("0 suppression:")
00291 zslabel.setGeometry(60,157,85,16)
00292 self.inhib=[]
00293 for i in range(16):
00294 self.inhib.append(QLabel(self.tab_5,""))
00295 self.inhib[i].setGeometry(168+i*31,137,14,14)
00296 illabel=QLabel(self.tab_5,"")
00297 illabel.setText("Inhibited:")
00298 illabel.setGeometry(60,137,85,16)
00299
00300 if len(self.towerlist)>0:
00301 self.radiomask1.setup(len(self.towerlist))
00302 self.radiomask2.setup(len(self.towerlist))
00303 self.radiomask1.setTitle("Display Data from Tower:")
00304 self.radiomask2.setTitle("Display Data from Tower:")
00305 for i in range(len(self.towerlist)):
00306 self.radiomask1.setLabel(i,str(self.towerlist[i]))
00307 self.radiomask2.setLabel(i,str(self.towerlist[i]))
00308 self.tower1=None
00309 self.tower2=None
00310 if len(self.towerlist)>0:
00311 self.tower1=0
00312 self.radiomask1.click(0)
00313 if len(self.towerlist)>1:
00314 self.tower2=1
00315 self.radiomask2.click(1)
00316 else:
00317 self.tower2=0
00318 self.radiomask2.click(0)
00319
00320
00321 self.maskcal11.setup(8)
00322 self.maskcalh11.setup(8)
00323 self.maskcal12.setup(8)
00324 self.maskcalh12.setup(8)
00325 self.maskcal21.setup(8)
00326 self.maskcalh21.setup(8)
00327 self.maskcal22.setup(8)
00328 self.maskcalh22.setup(8)
00329 for i in range(8):
00330 if i<4:
00331 a="x%d"%i
00332 else:
00333 a="y%d"%(i-4)
00334 self.maskcal11.setLabel(i,a)
00335 self.maskcalh11.setLabel(i,a)
00336 self.maskcal12.setLabel(i,a)
00337 self.maskcalh12.setLabel(i,a)
00338 self.maskcal21.setLabel(i,a)
00339 self.maskcalh21.setLabel(i,a)
00340 self.maskcal22.setLabel(i,a)
00341 self.maskcalh22.setLabel(i,a)
00342 self.maskcal11.setTitle("FLE")
00343 self.maskcalh11.setTitle("FHE")
00344 self.maskcal12.setTitle("FLE")
00345 self.maskcalh12.setTitle("FHE")
00346 self.barwcal11.setSlidingScale(1)
00347 self.barwcal11.bar.setMajor(100000)
00348 self.barwcal12.setSlidingScale(1)
00349 self.barwcal12.bar.setMajor(100000)
00350 self.maskcal21.setTitle("FLE")
00351 self.maskcalh21.setTitle("FHE")
00352 self.maskcal22.setTitle("FLE")
00353 self.maskcalh22.setTitle("FHE")
00354 self.barwcal21.setSlidingScale(1)
00355 self.barwcal21.bar.setMajor(100000)
00356 self.barwcal22.setSlidingScale(1)
00357 self.barwcal22.bar.setMajor(100000)
00358 self.masktkr11.setup(4)
00359 self.masktkr12.setup(4)
00360 self.masktkr13.setup(4)
00361 self.masktkr14.setup(4)
00362 for i in range(4):
00363 self.masktkr11.setLabel(i,"C%d"%i)
00364 self.masktkr12.setLabel(i,"C%d"%(i+4))
00365 self.masktkr13.setLabel(i,"C%d"%(i+8))
00366 self.masktkr14.setLabel(i,"C%d"%(i+12))
00367 self.masktkr11.setTitle("Comb")
00368 self.masktkr12.setTitle("Comb")
00369 self.masktkr13.setTitle("Comb")
00370 self.masktkr14.setTitle("Comb")
00371 self.barwtkr11.setSlidingScale(1)
00372 self.barwtkr11.bar.setMajor(100000)
00373 self.barwtkr12.setSlidingScale(1)
00374 self.barwtkr12.bar.setMajor(100000)
00375 self.barwtkr13.setSlidingScale(1)
00376 self.barwtkr13.bar.setMajor(100000)
00377 self.barwtkr14.setSlidingScale(1)
00378 self.barwtkr14.bar.setMajor(100000)
00379 self.masktkr21.setup(4)
00380 self.masktkr22.setup(4)
00381 self.masktkr23.setup(4)
00382 self.masktkr24.setup(4)
00383 for i in range(4):
00384 self.masktkr21.setLabel(i,"C%d"%i)
00385 self.masktkr22.setLabel(i,"C%d"%(i+4))
00386 self.masktkr23.setLabel(i,"C%d"%(i+8))
00387 self.masktkr24.setLabel(i,"C%d"%(i+12))
00388 self.masktkr21.setTitle("Comb")
00389 self.masktkr22.setTitle("Comb")
00390 self.masktkr23.setTitle("Comb")
00391 self.masktkr24.setTitle("Comb")
00392 self.barwtkr21.setSlidingScale(1)
00393 self.barwtkr21.bar.setMajor(100000)
00394 self.barwtkr22.setSlidingScale(1)
00395 self.barwtkr22.bar.setMajor(100000)
00396 self.barwtkr23.setSlidingScale(1)
00397 self.barwtkr23.bar.setMajor(100000)
00398 self.barwtkr24.setSlidingScale(1)
00399 self.barwtkr24.bar.setMajor(100000)
00400 self.barwtile1.setSlidingScale(1)
00401 self.barwtile1.bar.setMajor(100000)
00402 self.barwtile2.setSlidingScale(1)
00403 self.barwtile2.bar.setMajor(100000)
00404 self.barwcno1.setSlidingScale(1)
00405 self.barwcno1.bar.setMajor(100000)
00406 self.barwcno2.setSlidingScale(1)
00407 self.barwcno2.bar.setMajor(100000)
00408
00409
00410 self.calcounterlist11=[]
00411 self.calcounterlist12=[]
00412 self.calcounterlist21=[]
00413 self.calcounterlist22=[]
00414 self.tkrcounterlist11=[]
00415 self.tkrcounterlist12=[]
00416 self.tkrcounterlist13=[]
00417 self.tkrcounterlist14=[]
00418 self.tkrcounterlist21=[]
00419 self.tkrcounterlist22=[]
00420 self.tkrcounterlist23=[]
00421 self.tkrcounterlist24=[]
00422 self.tile0list=[]
00423 self.tile1list=[]
00424 self.cno0list=[]
00425 self.cno1list=[]
00426 if self.tower1 is not None:
00427 calmask=self.__lat.downTEM(self.towerlist[self.tower1]).TIC.cal_lrs_mask
00428 calmask=(~calmask)&0xffffffffL
00429 self.maskcal11.setMask(calmask&0xff)
00430 self.maskcalh11.setMask((calmask>>8)&0xff)
00431 self.maskcal12.setMask((calmask>>16)&0xff)
00432 self.maskcalh12.setMask((calmask>>24)&0xff)
00433 calcounter=self.__lat.downTEM(self.towerlist[self.tower1]).TIC.cal_lrs_counters
00434 self.calcounter11=calcounter&0xffff
00435 self.calcounter12=(calcounter>>16)&0xffff
00436 tkrmask= self.__lat.downTEM(self.towerlist[self.tower1]).TIC.tkr_out_lrs_mask
00437 tkrmask=(~tkrmask)&0xffff
00438 self.masktkr11.setMask(tkrmask&0xf)
00439 self.masktkr12.setMask((tkrmask>>4)&0xf)
00440 self.masktkr13.setMask((tkrmask>>8)&0xf)
00441 self.masktkr14.setMask((tkrmask>>12)&0xf)
00442 tkrcounter0=self.__lat.downTEM(self.towerlist[self.tower1]).TIC.tkr_lrs_counter_0
00443 tkrcounter1=self.__lat.downTEM(self.towerlist[self.tower1]).TIC.tkr_lrs_counter_1
00444 self.tkrcounter12=tkrcounter0&0xffff
00445 self.tkrcounter11=(tkrcounter0>>16)&0xffff
00446 self.tkrcounter14=tkrcounter1&0xffff
00447 self.tkrcounter13=(tkrcounter1>>16)&0xffff
00448
00449 if self.tower2 is not None:
00450 calmask=self.__lat.downTEM(self.towerlist[self.tower2]).TIC.cal_lrs_mask
00451 calmask=(~calmask)&0xffffffffL
00452 self.maskcal21.setMask(calmask&0xff)
00453 self.maskcalh21.setMask((calmask>>8)&0xff)
00454 self.maskcal22.setMask((calmask>>16)&0xff)
00455 self.maskcalh22.setMask((calmask>>24)&0xff)
00456 calcounter=self.__lat.downTEM(self.towerlist[self.tower2]).TIC.cal_lrs_counters
00457 self.calcounter21=calcounter&0xffff
00458 self.calcounter22=(calcounter>>16)&0xffff
00459 tkrmask= self.__lat.downTEM(self.towerlist[self.tower2]).TIC.tkr_out_lrs_mask
00460 tkrmask=(~tkrmask)&0xffff
00461 self.masktkr21.setMask(tkrmask&0xf)
00462 self.masktkr22.setMask((tkrmask>>4)&0xf)
00463 self.masktkr23.setMask((tkrmask>>8)&0xf)
00464 self.masktkr24.setMask((tkrmask>>12)&0xf)
00465 tkrcounter0=self.__lat.downTEM(self.towerlist[self.tower2]).TIC.tkr_lrs_counter_0
00466 tkrcounter1=self.__lat.downTEM(self.towerlist[self.tower2]).TIC.tkr_lrs_counter_1
00467 self.tkrcounter22=tkrcounter0&0xffff
00468 self.tkrcounter21=(tkrcounter0>>16)&0xffff
00469 self.tkrcounter24=tkrcounter1&0xffff
00470 self.tkrcounter23=(tkrcounter1>>16)&0xffff
00471 tile_0=self.__lat.GEM.GEMST.tile_0
00472 tile_1=self.__lat.GEM.GEMST.tile_1
00473 self.tile1.setValue(tile_0)
00474 self.tile2.setValue(tile_1)
00475 acdcounters=self.__lat.GEM.GEMST.tile_counters
00476 self.tile_0=acdcounters&0xffff
00477 self.tile_1=(acdcounters>>16)&0xffff
00478 cno_0=self.__lat.GEM.GEMST.cno_0
00479 cno_1=self.__lat.GEM.GEMST.cno_1
00480 self.cno1.setValue(cno_0)
00481 self.cno2.setValue(cno_1)
00482 acdcounters=self.__lat.GEM.GEMST.cno_counters
00483 self.cno_0=acdcounters&0xffff
00484 self.cno_1=(acdcounters>>16)&0xffff
00485 #counters saturated? reset and ignore reading
00486 self.ignoretile=False
00487 self.ignorecno=False
00488 self.ignorecal1=False
00489 self.ignoretkr11=False
00490 self.ignoretkr12=False
00491 self.ignorecal2=False
00492 self.ignoretkr21=False
00493 self.ignoretkr22=False
00494
00495 QObject.connect(self.maskcal11,PYSIGNAL("update"),self.changecalmask11)
00496 QObject.connect(self.maskcal12,PYSIGNAL("update"),self.changecalmask12)
00497 QObject.connect(self.maskcalh11,PYSIGNAL("update"),self.changecalmaskh11)
00498 QObject.connect(self.maskcalh12,PYSIGNAL("update"),self.changecalmaskh12)
00499 QObject.connect(self.maskcal21,PYSIGNAL("update"),self.changecalmask21)
00500 QObject.connect(self.maskcal22,PYSIGNAL("update"),self.changecalmask22)
00501 QObject.connect(self.maskcalh21,PYSIGNAL("update"),self.changecalmaskh21)
00502 QObject.connect(self.maskcalh22,PYSIGNAL("update"),self.changecalmaskh22)
00503 QObject.connect(self.masktkr11,PYSIGNAL("update"),self.changetkrmask11)
00504 QObject.connect(self.masktkr12,PYSIGNAL("update"),self.changetkrmask12)
00505 QObject.connect(self.masktkr13,PYSIGNAL("update"),self.changetkrmask13)
00506 QObject.connect(self.masktkr14,PYSIGNAL("update"),self.changetkrmask14)
00507 QObject.connect(self.masktkr21,PYSIGNAL("update"),self.changetkrmask21)
00508 QObject.connect(self.masktkr22,PYSIGNAL("update"),self.changetkrmask22)
00509 QObject.connect(self.masktkr23,PYSIGNAL("update"),self.changetkrmask23)
00510 QObject.connect(self.masktkr24,PYSIGNAL("update"),self.changetkrmask24)
00511 QObject.connect(self.tile1,SIGNAL("valueChanged(int)"),self.changetile1)
00512 QObject.connect(self.tile2,SIGNAL("valueChanged(int)"),self.changetile2)
00513 QObject.connect(self.cno1,SIGNAL("valueChanged(int)"),self.changecno1)
00514 QObject.connect(self.cno2,SIGNAL("valueChanged(int)"),self.changecno2)
00515 QObject.connect(self.radiomask1,PYSIGNAL("update"),self.changetower1)
00516 QObject.connect(self.radiomask2,PYSIGNAL("update"),self.changetower2)
00517 QObject.connect(self.resetcal1,SIGNAL("clicked()"),self.doresetcal1)
00518 QObject.connect(self.resetcal2,SIGNAL("clicked()"),self.doresetcal2)
00519 QObject.connect(self.resettkr11,SIGNAL("clicked()"),self.doresettkr11)
00520 QObject.connect(self.resettkr12,SIGNAL("clicked()"),self.doresettkr12)
00521 QObject.connect(self.resettkr21,SIGNAL("clicked()"),self.doresettkr21)
00522 QObject.connect(self.resettkr22,SIGNAL("clicked()"),self.doresettkr22)
00523 QObject.connect(self.resettile,SIGNAL("clicked()"),self.doresettile)
00524 QObject.connect(self.resetcno,SIGNAL("clicked()"),self.doresetcno)
00525
00526
00527 #self.multibar1.setBarTitle(0,"ROI\n ")
00528 ##self.multibar1.setBarTitle(1,"TKR\n ")
00529 #self.multibar1.setBarTitle(2,"CAL\nlow")
00530 ##self.multibar1.setBarTitle(3,"CAL\nhigh")
00531 #self.multibar1.setBarTitle(4,"CNO\n ")
00532 #self.multibar1.setBarTitle(5,"Per.\n ")
00533 #self.multibar1.setBarTitle(6,"Sol.\n ")
00534 #self.multibar1.setBarTitle(7,"EXT\n ")
00535 QObject.connect(self.logy,SIGNAL("toggled(bool)"),self.histo.setLogy)
00536 QObject.connect(self.resetlin,SIGNAL("clicked()"),self.histo.resetlin)
00537 QObject.connect(self.resetlog,SIGNAL("clicked()"),self.histo.resetlog)
00538
00539 self.timehisto.setup(2*self.__window+1,-self.__window-.5,self.__window+.5,False,False)
00540 self.cons.timehisto=self.timehisto
00541 self.timehisto.bds=10
00542 self.timehisto.boxwidth=.25
00543 self.timehisto.xaxislabel.setText("clock ticks (50 ns)")
00544 self.timehisto.addHisto("ROI","black",0,1,0)
00545 self.timehisto.setHistoLabel("ROI","ROI")
00546 self.timehisto.addHisto("TKR","blue",0,1,0)
00547 self.timehisto.setHistoLabel("TKR","TKR")
00548 self.timehisto.addHisto("CALlow","red",0,1,0)
00549 self.timehisto.setHistoLabel("CALlow","CAL low")
00550 self.timehisto.addHisto("CALhigh","orange",0,1,0)
00551 self.timehisto.setHistoLabel("CALhigh","CAL high")
00552 self.timehisto.addHisto("CNO","magenta",0,1,0)
00553 self.timehisto.setHistoLabel("CNO","CNO")
00554 self.timehisto.addHisto("EXT","green",0,1,0)
00555 self.timehisto.setHistoLabel("EXT","External")
00556 QObject.connect(self.logytime,SIGNAL("toggled(bool)"),self.timehisto.setLogy)
00557 QObject.connect(self.resettime,SIGNAL("clicked()"),self.resettimehisto)
00558 QObject.connect(self.reference,SIGNAL("clicked(int)"),self.setReference)
00559 QObject.connect(self.roitime,SIGNAL("toggled(bool)"),self.setROI)
00560 QObject.connect(self.tkrtime,SIGNAL("toggled(bool)"),self.setTKR)
00561 QObject.connect(self.callowtime,SIGNAL("toggled(bool)"),self.setCALlow)
00562 QObject.connect(self.calhightime,SIGNAL("toggled(bool)"),self.setCALhigh)
00563 QObject.connect(self.cnotime,SIGNAL("toggled(bool)"),self.setCNO)
00564 QObject.connect(self.exttime,SIGNAL("toggled(bool)"),self.setEXT)
00565
00566 self.__timer=QTimer(self)
00567 QObject.connect(self.__timer,SIGNAL("timeout()"),self.update)
00568 self.__timer.start(self.__samplingrate,False)
00569 self.consthread=eventThread(self.cons)
00570 self.consthread.start()
00571
00572 #tower tab
00573 self.towers=[]
00574 for i in self.towerlist:
00575 xcoord=i%4
00576 ycoord=i/4
00577 self.towers.append(towerwidgetImpl(self.__lat,i,self.tab_2,"tower_%d"%i))
00578 self.towers[-1].frame.setTitle("TEM %d"%i)
00579 self.towers[-1].setGeometry(10+180*xcoord,10+155*ycoord,130,150)
00580 self.towers[-1].barw.setHigh("100 %")
00581 self.towers[-1].barw.setLow("0")
00582 self.towers[-1].barw.bar.setScale(100)
00583 QObject.connect(self.__timer,SIGNAL("timeout()"),self.towers[-1].update)
00584 QObject.connect(self.avrate,SIGNAL("clicked(int)"),self.towers[-1].changeSampling)
00585
00586 def resettimehisto(self):
00587 self.timehisto.resetlin()
00588 self.cons.timematrix=None
00589 def changecalmask11(self,mask):
00590 if self.tower1 is not None:
00591 calmask=self.__lat.downTEM(self.towerlist[self.tower1]).TIC.cal_lrs_mask
00592 calmask=~calmask&0xffffffffl
00593 calmask&=0xffffff00L
00594 calmask|=mask
00595 calmask=~calmask&0xffffffffl
00596 self.__lat.downTEM(self.towerlist[self.tower1]).TIC.cal_lrs_mask=calmask
00597 def changecalmask12(self,mask):
00598 if self.tower1 is not None:
00599 calmask=self.__lat.downTEM(self.towerlist[self.tower1]).TIC.cal_lrs_mask
00600 calmask=~calmask&0xffffffffl
00601 calmask&=0xff00ffffL
00602 calmask|=mask<<16
00603 calmask=~calmask&0xffffffffl
00604 self.__lat.downTEM(self.towerlist[self.tower1]).TIC.cal_lrs_mask=calmask
00605 def changecalmaskh11(self,mask):
00606 if self.tower1 is not None:
00607 calmask=self.__lat.downTEM(self.towerlist[self.tower1]).TIC.cal_lrs_mask
00608 calmask=~calmask&0xffffffffl
00609 calmask&=0xffff00ffL
00610 calmask|=mask<<8
00611 calmask=~calmask&0xffffffffl
00612 self.__lat.downTEM(self.towerlist[self.tower1]).TIC.cal_lrs_mask=calmask
00613 def changecalmaskh12(self,mask):
00614 if self.tower1 is not None:
00615 calmask=self.__lat.downTEM(self.towerlist[self.tower1]).TIC.cal_lrs_mask
00616 calmask=~calmask&0xffffffffl
00617 calmask&=0xffffffL
00618 calmask|=mask<<24
00619 calmask=~calmask&0xffffffffl
00620 self.__lat.downTEM(self.towerlist[self.tower1]).TIC.cal_lrs_mask=calmask
00621 def changecalmask21(self,mask):
00622 if self.tower2 is not None:
00623 calmask=self.__lat.downTEM(self.towerlist[self.tower2]).TIC.cal_lrs_mask
00624 calmask=~calmask&0xffffffffl
00625 calmask&=0xffffff00L
00626 calmask|=mask
00627 calmask=~calmask&0xffffffffl
00628 self.__lat.downTEM(self.towerlist[self.tower2]).TIC.cal_lrs_mask=calmask
00629 def changecalmaskh21(self,mask):
00630 if self.tower2 is not None:
00631 calmask=self.__lat.downTEM(self.towerlist[self.tower2]).TIC.cal_lrs_mask
00632 calmask=~calmask&0xffffffffl
00633 calmask&=0xffff00ffL
00634 calmask|=mask<<8
00635 calmask=~calmask&0xffffffffl
00636 self.__lat.downTEM(self.towerlist[self.tower2]).TIC.cal_lrs_mask=calmask
00637 def changecalmask22(self,mask):
00638 if self.tower2 is not None:
00639 calmask=self.__lat.downTEM(self.towerlist[self.tower2]).TIC.cal_lrs_mask
00640 calmask=~calmask&0xffffffffl
00641 calmask&=0xff00ffffL
00642 calmask|=mask<<16
00643 calmask=~calmask&0xffffffffl
00644 self.__lat.downTEM(self.towerlist[self.tower2]).TIC.cal_lrs_mask=calmask
00645 def changecalmaskh22(self,mask):
00646 if self.tower2 is not None:
00647 calmask=self.__lat.downTEM(self.towerlist[self.tower2]).TIC.cal_lrs_mask
00648 calmask=~calmask&0xffffffffl
00649 calmask&=0xffffffL
00650 calmask|=mask<<24
00651 calmask=~calmask&0xffffffffl
00652 self.__lat.downTEM(self.towerlist[self.tower2]).TIC.cal_lrs_mask=calmask
00653 def changetkrmask11(self,mask):
00654 if self.tower1 is not None:
00655 tkrmask= self.__lat.downTEM(self.towerlist[self.tower1]).TIC.tkr_out_lrs_mask
00656 tkrmask=~tkrmask&0xffff
00657 tkrmask&=0xfff0
00658 tkrmask|=mask
00659 tkrmask=~tkrmask&0xffff
00660 self.__lat.downTEM(self.towerlist[self.tower1]).TIC.tkr_out_lrs_mask=tkrmask
00661 def changetkrmask12(self,mask):
00662 if self.tower1 is not None:
00663 tkrmask= self.__lat.downTEM(self.towerlist[self.tower1]).TIC.tkr_out_lrs_mask
00664 tkrmask=~tkrmask&0xffff
00665 tkrmask&=0xff0f
00666 tkrmask|=mask<<4
00667 tkrmask=~tkrmask&0xffff
00668 self.__lat.downTEM(self.towerlist[self.tower1]).TIC.tkr_out_lrs_mask=tkrmask
00669 def changetkrmask13(self,mask):
00670 if self.tower1 is not None:
00671 tkrmask= self.__lat.downTEM(self.towerlist[self.tower1]).TIC.tkr_out_lrs_mask
00672 tkrmask=~tkrmask&0xffff
00673 tkrmask&=0xf0ff
00674 tkrmask|=mask<<8
00675 tkrmask=~tkrmask&0xffff
00676 self.__lat.downTEM(self.towerlist[self.tower1]).TIC.tkr_out_lrs_mask=tkrmask
00677 def changetkrmask14(self,mask):
00678 if self.tower1 is not None:
00679 tkrmask= self.__lat.downTEM(self.towerlist[self.tower1]).TIC.tkr_out_lrs_mask
00680 tkrmask=~tkrmask&0xffff
00681 tkrmask&=0xfff
00682 tkrmask|=mask<<12
00683 tkrmask=~tkrmask&0xffff
00684 self.__lat.downTEM(self.towerlist[self.tower1]).TIC.tkr_out_lrs_mask=tkrmask
00685 def changetkrmask21(self,mask):
00686 if self.tower2 is not None:
00687 tkrmask= self.__lat.downTEM(self.towerlist[self.tower2]).TIC.tkr_out_lrs_mask
00688 tkrmask=~tkrmask&0xffff
00689 tkrmask&=0xfff0
00690 tkrmask|=mask
00691 tkrmask=~tkrmask&0xffff
00692 self.__lat.downTEM(self.towerlist[self.tower2]).TIC.tkr_out_lrs_mask=tkrmask
00693 def changetkrmask22(self,mask):
00694 if self.tower2 is not None:
00695 tkrmask= self.__lat.downTEM(self.towerlist[self.tower2]).TIC.tkr_out_lrs_mask
00696 tkrmask=~tkrmask&0xffff
00697 tkrmask&=0xff0f
00698 tkrmask|=mask<<4
00699 tkrmask=~tkrmask&0xffff
00700 self.__lat.downTEM(self.towerlist[self.tower2]).TIC.tkr_out_lrs_mask=tkrmask
00701 def changetkrmask23(self,mask):
00702 if self.tower2 is not None:
00703 tkrmask= self.__lat.downTEM(self.towerlist[self.tower2]).TIC.tkr_out_lrs_mask
00704 tkrmask=~tkrmask&0xffff
00705 tkrmask&=0xf0ff
00706 tkrmask|=mask<<8
00707 tkrmask=~tkrmask&0xffff
00708 self.__lat.downTEM(self.towerlist[self.tower2]).TIC.tkr_out_lrs_mask=tkrmask
00709 def changetkrmask24(self,mask):
00710 if self.tower2 is not None:
00711 tkrmask= self.__lat.downTEM(self.towerlist[self.tower2]).TIC.tkr_out_lrs_mask
00712 tkrmask=~tkrmask&0xffff
00713 tkrmask&=0xfff
00714 tkrmask|=mask<<12
00715 tkrmask=~tkrmask&0xffff
00716 self.__lat.downTEM(self.towerlist[self.tower2]).TIC.tkr_out_lrs_mask=tkrmask
00717 def changetile1(self,tile):
00718 self.__lat.GEM.GEMST.tile_0 = tile
00719
00720 def changetile2(self,tile):
00721 self.__lat.GEM.GEMST.tile_1 = tile
00722
00723 def changecno1(self,tile):
00724 self.__lat.GEM.GEMST.cno_0 = tile
00725
00726 def changecno2(self,tile):
00727 self.__lat.GEM.GEMST.cno_1 = tile
00728
00729 def changetower1(self,id):
00730 self.tower1=id
00731
00732 def changetower2(self,id):
00733 self.tower2=id
00734
00735 def doresetcal1(self):
00736 self.__lat.downTEM(self.towerlist[self.tower1]).TIC.cal_lrs_counters=0
00737 self.calcounter11=0
00738 self.calcounter12=0
00739 self.ignorecal1=True
00740 if self.tower1==self.tower2:
00741 self.__lat.downTEM(self.towerlist[self.tower2]).TIC.cal_lrs_counters=0
00742 self.calcounter21=0
00743 self.calcounter22=0
00744 self.ignorecal2=True
00745 def doresetcal2(self):
00746 self.__lat.downTEM(self.towerlist[self.tower2]).TIC.cal_lrs_counters=0
00747 self.calcounter21=0
00748 self.calcounter22=0
00749 self.ignorecal2=True
00750 if self.tower1==self.tower2:
00751 self.__lat.downTEM(self.towerlist[self.tower1]).TIC.cal_lrs_counters=0
00752 self.calcounter11=0
00753 self.calcounter12=0
00754 self.ignorecal1=True
00755 def doresettkr11(self):
00756 self.__lat.downTEM(self.towerlist[self.tower1]).TIC.tkr_lrs_counter_0=0
00757 self.tkrcounter11=0
00758 self.tkrcounter12=0
00759 self.ignoretkr11==True
00760 if self.tower1==self.tower2:
00761 self.__lat.downTEM(self.towerlist[self.tower2]).TIC.tkr_lrs_counter_0=0
00762 self.tkrcounter21=0
00763 self.tkrcounter22=0
00764 self.ignoretkr21==True
00765 def doresettkr12(self):
00766 self.__lat.downTEM(self.towerlist[self.tower1]).TIC.tkr_lrs_counter_1=0
00767 self.tkrcounter13=0
00768 self.tkrcounter14=0
00769 self.ignoretkr12==True
00770 if self.tower1==self.tower2:
00771 self.__lat.downTEM(self.towerlist[self.tower2]).TIC.tkr_lrs_counter_1=0
00772 self.tkrcounter23=0
00773 self.tkrcounter24=0
00774 self.ignoretkr22==True
00775 def doresettkr21(self):
00776 self.__lat.downTEM(self.towerlist[self.tower2]).TIC.tkr_lrs_counter_0=0
00777 self.tkrcounter21=0
00778 self.tkrcounter22=0
00779 self.ignoretkr21==True
00780 if self.tower1==self.tower2:
00781 self.__lat.downTEM(self.towerlist[self.tower1]).TIC.tkr_lrs_counter_0=0
00782 self.tkrcounter11=0
00783 self.tkrcounter12=0
00784 self.ignoretkr11==True
00785 def doresettkr22(self):
00786 self.__lat.downTEM(self.towerlist[self.tower2]).TIC.tkr_lrs_counter_1=0
00787 self.tkrcounter23=0
00788 self.tkrcounter24=0
00789 self.ignoretkr22==True
00790 if self.tower1==self.tower2:
00791 self.__lat.downTEM(self.towerlist[self.tower1]).TIC.tkr_lrs_counter_1=0
00792 self.tkrcounter13=0
00793 self.tkrcounter14=0
00794 self.ignoretkr12==True
00795 def doresettile(self):
00796 self.__lat.GEM.GEMST.tile_counters=0
00797 self.tile_0=0
00798 self.tile_1=0
00799 self.ignoretile=True
00800 def doresetcno(self):
00801 self.__lat.GEM.GEMST.cno_counters=0
00802 self.cno_0=0
00803 self.cno_1=0
00804 self.ignorecno=True
00805 def update(self):
00806 ignoreevent=False
00807
00808 # read livetime first to sample counters
00809 if self.__ratehaschanged:
00810 self.__timer.changeInterval(self.__samplingrate)
00811 self.__ratehaschanged=False
00812 newtime=time.time()
00813 timebase=self.__lat.GEM.GEMST.timebase
00814 livetime=self.__lat.GEM.GEMST.livetime
00815 sent=self.__lat.GEM.GEMST.sent
00816 validev=self.__ocs.stats_valid_events
00817 discarded=self.__lat.GEM.GEMST.discarded
00818 deadzone=self.__lat.GEM.GEMST.deadzone
00819 prescaled=self.__lat.GEM.GEMST.prescaled
00820 self.cons.conf=self.__lat.GEM.GEMC.configuration&1
00821 timestamp=self.cons.timestamp
00822 newtowerlist=[]
00823 for temid in range(16):
00824 tem=self.__lat.downTEM(temid)
00825 if tem==None: continue
00826 newtowerlist.append(temid)
00827 if newtowerlist!=self.towerlist:
00828 print "configuration has changed"
00829 tile_0=self.__lat.GEM.GEMST.tile_0
00830 tile_1=self.__lat.GEM.GEMST.tile_1
00831 if tile_0!=self.tile1.value():
00832 self.tile1.setValue(tile_0)
00833 self.tile0list=[]
00834 if tile_1!=self.tile2.value():
00835 self.tile2.setValue(tile_1)
00836 self.tile1list=[]
00837 acdcounters=self.__lat.GEM.GEMST.tile_counters
00838 tile_0=acdcounters&0xffff
00839 tile_1=(acdcounters>>16)&0xffff
00840 difftile0=tile_0-self.tile_0
00841 difftile1=tile_1-self.tile_1
00842 self.tile_0=tile_0
00843 self.tile_1=tile_1
00844 cno_0=self.__lat.GEM.GEMST.cno_0
00845 cno_1=self.__lat.GEM.GEMST.cno_1
00846 if cno_0!=self.cno1.value():
00847 self.cno1.setValue(cno_0)
00848 self.cno0list=[]
00849 if cno_1!=self.cno2.value():
00850 self.cno2.setValue(cno_1)
00851 self.cno1list=[]
00852 acdcounters=self.__lat.GEM.GEMST.cno_counters
00853 cno_0=acdcounters&0xffff
00854 cno_1=(acdcounters>>16)&0xffff
00855 diffcno0=cno_0-self.cno_0
00856 diffcno1=cno_1-self.cno_1
00857 self.cno_0=cno_0
00858 self.cno_1=cno_1
00859
00860 if self.tower1 is not None:
00861 calmask=self.__lat.downTEM(self.towerlist[self.tower1]).TIC.cal_lrs_mask
00862 calmask=(~calmask)&0xffffffffL
00863 if self.maskcal11.getMask()!=calmask&0xff:
00864 self.maskcal11.setMask(calmask&0xff)
00865 self.calcounterlist11=[]
00866 if self.maskcalh11.getMask()!=(calmask>>8)&0xff:
00867 self.maskcalh11.setMask((calmask>>8)&0xff)
00868 self.calcounterlist11=[]
00869 if self.maskcal12.getMask()!=(calmask>>16)&0xff:
00870 self.maskcal12.setMask((calmask>>16)&0xff)
00871 self.calcounterlist12=[]
00872 if self.maskcalh12.getMask()!=(calmask>>24)&0xff:
00873 self.maskcalh12.setMask((calmask>>24)&0xff)
00874 self.calcounterlist12=[]
00875 tkrmask= self.__lat.downTEM(self.towerlist[self.tower1]).TIC.tkr_out_lrs_mask
00876 tkrmask=(~tkrmask)&0xffff
00877 if self.masktkr11.getMask()!=tkrmask&0xf:
00878 self.masktkr11.setMask(tkrmask&0xf)
00879 self.tkrcounterlist11=[]
00880 if self.masktkr12.getMask()!=(tkrmask>>4)&0xf:
00881 self.masktkr12.setMask((tkrmask>>4)&0xf)
00882 self.tkrcounterlist12=[]
00883 if self.masktkr13.getMask()!=(tkrmask>>8)&0xf:
00884 self.masktkr13.setMask((tkrmask>>8)&0xf)
00885 self.tkrcounterlist13=[]
00886 if self.masktkr14.getMask()!=(tkrmask>>12)&0xf:
00887 self.masktkr14.setMask((tkrmask>>12)&0xf)
00888 self.tkrcounterlist14=[]
00889 calcounter=self.__lat.downTEM(self.towerlist[self.tower1]).TIC.cal_lrs_counters
00890 calcounter11=calcounter&0xffff
00891 calcounter12=(calcounter>>16)&0xffff
00892 tkrcounter0=self.__lat.downTEM(self.towerlist[self.tower1]).TIC.tkr_lrs_counter_0
00893 tkrcounter1=self.__lat.downTEM(self.towerlist[self.tower1]).TIC.tkr_lrs_counter_1
00894 tkrcounter12=tkrcounter0&0xffff
00895 tkrcounter11=(tkrcounter0>>16)&0xffff
00896 tkrcounter14=tkrcounter1&0xffff
00897 tkrcounter13=(tkrcounter1>>16)&0xffff
00898 diffcalcounter11=calcounter11-self.calcounter11
00899 diffcalcounter12=calcounter12-self.calcounter12
00900 self.calcounter11=calcounter11
00901 self.calcounter12=calcounter12
00902 difftkrcounter11=tkrcounter11-self.tkrcounter11
00903 difftkrcounter12=tkrcounter12-self.tkrcounter12
00904 self.tkrcounter11=tkrcounter11
00905 self.tkrcounter12=tkrcounter12
00906 difftkrcounter13=tkrcounter13-self.tkrcounter13
00907 difftkrcounter14=tkrcounter14-self.tkrcounter14
00908 self.tkrcounter13=tkrcounter13
00909 self.tkrcounter14=tkrcounter14
00910 if self.tower2 is not None:
00911 calmask=self.__lat.downTEM(self.towerlist[self.tower2]).TIC.cal_lrs_mask
00912 calmask=(~calmask)&0xffffffffL
00913 if self.maskcal21.getMask()!=calmask&0xff:
00914 self.maskcal21.setMask(calmask&0xff)
00915 self.calcounterlist21=[]
00916 if self.maskcalh21.getMask()!=(calmask>>8)&0xff:
00917 self.maskcalh21.setMask((calmask>>8)&0xff)
00918 self.calcounterlist21=[]
00919 if self.maskcal22.getMask()!=(calmask>>16)&0xff:
00920 self.maskcal22.setMask((calmask>>16)&0xff)
00921 self.calcounterlist22=[]
00922 if self.maskcalh22.getMask()!=(calmask>>24)&0xff:
00923 self.maskcalh22.setMask((calmask>>24)&0xff)
00924 self.calcounterlist22=[]
00925 tkrmask= self.__lat.downTEM(self.towerlist[self.tower2]).TIC.tkr_out_lrs_mask
00926 tkrmask=(~tkrmask)&0xffff
00927 if self.masktkr21.getMask()!=tkrmask&0xf:
00928 self.masktkr21.setMask(tkrmask&0xf)
00929 self.tkrcounterlist21=[]
00930 if self.masktkr22.getMask()!=(tkrmask>>4)&0xf:
00931 self.masktkr22.setMask((tkrmask>>4)&0xf)
00932 self.tkrcounterlist22=[]
00933 if self.masktkr23.getMask()!=(tkrmask>>8)&0xf:
00934 self.masktkr23.setMask((tkrmask>>8)&0xf)
00935 self.tkrcounterlist23=[]
00936 if self.masktkr24.getMask()!=(tkrmask>>12)&0xf:
00937 self.masktkr24.setMask((tkrmask>>12)&0xf)
00938 self.tkrcounterlist24=[]
00939 calcounter=self.__lat.downTEM(self.towerlist[self.tower2]).TIC.cal_lrs_counters
00940 calcounter21=calcounter&0xffff
00941 calcounter22=(calcounter>>16)&0xffff
00942 tkrcounter0=self.__lat.downTEM(self.towerlist[self.tower2]).TIC.tkr_lrs_counter_0
00943 tkrcounter1=self.__lat.downTEM(self.towerlist[self.tower2]).TIC.tkr_lrs_counter_1
00944 tkrcounter22=tkrcounter0&0xffff
00945 tkrcounter21=(tkrcounter0>>16)&0xffff
00946 tkrcounter24=tkrcounter1&0xffff
00947 tkrcounter23=(tkrcounter1>>16)&0xffff
00948 diffcalcounter21=calcounter21-self.calcounter21
00949 diffcalcounter22=calcounter22-self.calcounter22
00950 self.calcounter21=calcounter21
00951 self.calcounter22=calcounter22
00952 difftkrcounter21=tkrcounter21-self.tkrcounter21
00953 difftkrcounter22=tkrcounter22-self.tkrcounter22
00954 self.tkrcounter21=tkrcounter21
00955 self.tkrcounter22=tkrcounter22
00956 difftkrcounter23=tkrcounter23-self.tkrcounter23
00957 difftkrcounter24=tkrcounter24-self.tkrcounter24
00958 self.tkrcounter23=tkrcounter23
00959 self.tkrcounter24=tkrcounter24
00960
00961 if self.cons.readlut:
00962 gemsc=self.__lat.GEM.GEMSC
00963 gemmg=self.__lat.GEM.GEMMG
00964 self.cons.readlut=False
00965 self.lut=self.readlut(gemsc)
00966 validengines={}
00967 for it in self.lut.values():
00968 validengines[it]=1
00969 engines=self.getEngines(gemmg,validengines)
00970 for key in engines:
00971 if engines[key]&1<<15:self.inhib[key].setPixmap(self.image0)
00972 else:self.inhib[key].setPixmap(self.image1)
00973 if engines[key]&1<<16:self.calstrobe[key].setPixmap(self.image0)
00974 else: self.calstrobe[key].setPixmap(self.image1)
00975 if engines[key]&1<<19:self.tack[key].setPixmap(self.image0)
00976 else: self.tack[key].setPixmap(self.image1)
00977 if engines[key]&1<<20: self.fourrange[key].setPixmap(self.image0)
00978 else: self.fourrange[key].setPixmap(self.image1)
00979 if engines[key]&1<<21: self.zerosup[key].setPixmap(self.image0)
00980 else: self.zerosup[key].setPixmap(self.image1)
00981 self.prescalelabels[key].setText("%d"%(engines[key]&0xff))
00982 utimediff=newtime-self.__oldtime
00983 self.__oldtime=newtime
00984 if utimediff>1.62:
00985 ignoreevent=True
00986 myLog.debug("No update - Time between samples too long")
00987 if timebase>=self.__timebase:
00988 timediff=timebase-self.__timebase
00989 else:
00990 timediff=timebase+33554432-self.__timebase
00991 self.__timebase=timebase
00992 #if abs(timediff*CLOCKTICK/utimediff-1.) > 0.001:
00993 # myLog.debug( "Warning! Timebase out of spec")
00994 # myLog.debug (str(timediff/utimediff*CLOCKTICK))
00995 # myLog.debug (str(timediff/CLOCKTICK,utimediff))
00996 if self.timestamp==0 and timestamp!=0:
00997 ignoreevent=True
00998 else:
00999 if self.timestamp<timestamp:
01000 evtimediff=timestamp-self.timestamp
01001 self.timeout=newtime
01002 elif self.timestamp==timestamp:
01003 evtimediff=0
01004 else:
01005 evtimediff=timestamp+128-self.timestamp
01006 self.timeout=newtime
01007 self.timestamp=timestamp
01008 tkr=self.cons.tkr
01009 deltatkr=tkr-self.__tkr
01010 self.__tkr=tkr
01011 callow=self.cons.callow
01012 deltacallow=callow-self.__callow
01013 self.__callow=callow
01014 calhigh=self.cons.calhigh
01015 deltacalhigh=calhigh-self.__calhigh
01016 self.__calhigh=calhigh
01017 cno=self.cons.cno
01018 deltacno=cno-self.__cno
01019 self.__cno=cno
01020 roi=self.cons.roi
01021 deltaroi=roi-self.__roi
01022 self.__roi=roi
01023 ext=self.cons.ext
01024 deltaext=ext-self.__ext
01025 self.__ext=ext
01026 periodic=self.cons.periodic
01027 deltaperiodic=periodic-self.__periodic
01028 self.__periodic=periodic
01029 solicited=self.cons.solicited
01030 deltasolicited=solicited-self.__solicited
01031 self.__solicited=solicited
01032 consevents=self.cons.events
01033 eventdiff=consevents-self.__consevents
01034 deltatkrvec=[]
01035 deltaroivec=[]
01036 deltacnovec=[]
01037 deltacallowvec=[]
01038 deltacalhighvec=[]
01039 deltaorvec=[]
01040 deltaeng=[]
01041 for i in self.cons.condsum:
01042 self.engnew[self.lut[i]]+=1
01043 for i in range (16):
01044 deltatkrvec.append(self.cons.tkrvector[i]-self.tkrvecold[i])
01045 deltaroivec.append(self.cons.roivector[i]-self.roivecold[i])
01046 deltacnovec.append(self.cons.cnovector[i]-self.cnovecold[i])
01047 deltacallowvec.append(self.cons.callowvector[i]-self.callowvecold[i])
01048 deltacalhighvec.append(self.cons.calhighvector[i]-self.calhighvecold[i])
01049 deltaorvec.append(self.cons.orvector[i]-self.orvecold[i])
01050 deltaeng.append(self.engnew[i]-self.engold[i])
01051 self.tkrvecold=list(self.cons.tkrvector)
01052 self.callowvecold=list(self.cons.callowvector)
01053 self.calhighvecold=list(self.cons.calhighvector)
01054 self.roivecold=list(self.cons.roivector)
01055 self.cnovecold=list(self.cons.cnovector)
01056 self.orvecold=list(self.cons.orvector)
01057 self.engold=list(self.engnew)
01058 self.__consevents=consevents
01059
01060 if sent>=self.__sent:
01061 sentdiff=sent-self.__sent
01062 else:
01063 sentdiff=sent+65536-self.__sent
01064 ignoreevent=True
01065 self.__sent=sent
01066 validevdiff=validev-self.__validev
01067 self.__validev=validev
01068
01069 if livetime>=self.__livetime:
01070 livediff=livetime-self.__livetime
01071 else:
01072 livediff=livetime+33554432-self.__livetime
01073 self.__livetime=livetime
01074
01075 if discarded >=self.__discarded:
01076 discdiff=discarded-self.__discarded
01077 else:
01078 discdiff=discarded+16777216-self.__discarded
01079 self.__discarded=discarded
01080
01081 if prescaled>=self.__prescaled:
01082 prescalediff=prescaled-self.__prescaled
01083 else:
01084 prescalediff=prescaled+16777216-self.__prescaled
01085 self.__prescaled=prescaled
01086
01087 if deadzone>=self.__deadzone:
01088 deadzonediff=deadzone-self.__deadzone
01089 else:
01090 deadzonediff=deadzone+65536-self.__deadzone
01091 self.__deadzone=deadzone
01092
01093 if ignoreevent==False:
01094 diff=0.
01095 #rate
01096 instdiff=0.
01097 if utimediff>0:
01098 diff=listmean(self.__sentlist,float(sentdiff)/utimediff,self.__numsamples)
01099 instdiff=float(sentdiff)/utimediff
01100 self.rate.setText("%.1f Hz"%diff)
01101 self.rate1.bar.displayValue(diff)
01102 self.rate10.bar.displayValue(diff)
01103 self.rate100.bar.displayValue(diff)
01104 self.instrate.setText("%.0f Hz"%instdiff)
01105 self.instrate1.bar.displayValue(instdiff)
01106 self.instrate10.bar.displayValue(instdiff)
01107 self.instrate100.bar.displayValue(instdiff)
01108 # Dead time
01109 deadtime=0.
01110 if utimediff>0:
01111 deadtime=100.*(utimediff/CLOCKTICK-livediff)/utimediff*CLOCKTICK
01112 diff=listmean(self.__livelist,deadtime,self.__numsamples)
01113 if diff<0:diff=0.
01114 self.deadtime.setText("%.2f" % diff+" %")
01115 self.deadtime1.bar.displayValue(diff)
01116 self.deadtime10.bar.displayValue(diff)
01117 self.deadtime100.bar.displayValue(diff)
01118 # Discarded
01119 diff=0.
01120 if utimediff>0.:
01121 diff=listmean(self.__discardedlist,float(discdiff)/utimediff,self.__numsamples)
01122 self.discarded.setText("%.1f Hz"%diff)
01123 self.discardedb.displaySlidingScaleValue(diff)
01124 #Dead zone
01125 diff=0.
01126 if utimediff>0:
01127 diff=listmean(self.__deadzonelist,float(deadzonediff)/utimediff,self.__numsamples)
01128 self.deadzone.setText("%.1f Hz"%diff)
01129 self.deadzoneb.displaySlidingScaleValue(diff)
01130 # Prescaled
01131 diff=0.
01132 if utimediff>0:
01133 diff=listmean(self.__prescaledlist,float(prescalediff)/utimediff,self.__numsamples)
01134 self.prescaled.setText("%.1f Hz"%diff)
01135 self.prescaledb.displaySlidingScaleValue(diff)
01136 #counters
01137 diff=0.
01138 if tile_0==0xffff:
01139 self.barwtile1.setTitle("Full")
01140 self.barwtile1.bar.displayValue(100001)
01141 elif utimediff>0 and not self.ignoretile:
01142 diff=listmean(self.tile0list,float(difftile0)/utimediff,self.__numsamples)
01143 self.barwtile1.setTitle("%d"%(diff+.5))
01144 self.barwtile2.displaySlidingScaleValue(diff)
01145 diff=0.
01146 if tile_1==0xffff:
01147 self.barwtile2.setTitle("Full")
01148 self.barwtile2.bar.displayValue(100001)
01149 elif utimediff>0 and not self.ignoretile:
01150 diff=listmean(self.tile1list,float(difftile1)/utimediff,self.__numsamples)
01151 self.barwtile2.setTitle("%d"%(diff+.5))
01152 self.barwtile2.displaySlidingScaleValue(diff)
01153 diff=0.
01154 if cno_0==0xffff:
01155 self.barwcno1.setTitle("Full")
01156 self.barwcno1.bar.displayValue(100001)
01157 elif utimediff>0 and not self.ignorecno:
01158 diff=listmean(self.cno0list,float(diffcno0)/utimediff,self.__numsamples)
01159 self.barwcno1.setTitle("%d"%(diff+.5))
01160 self.barwcno2.displaySlidingScaleValue(diff)
01161 diff=0.
01162 if cno_1==0xffff:
01163 self.barwcno2.setTitle("Full")
01164 self.barwcno2.bar.displayValue(100001)
01165 elif utimediff>0 and not self.ignorecno:
01166 diff=listmean(self.cno1list,float(diffcno1)/utimediff,self.__numsamples)
01167 self.barwcno2.setTitle("%d"%(diff+.5))
01168 self.barwcno2.displaySlidingScaleValue(diff)
01169 if self.tower1 is not None:
01170 diff=0.
01171 if calcounter11==0xffff:
01172 self.barwcal11.setTitle("Full")
01173 self.barwcal11.bar.displayValue(100001)
01174 elif utimediff>0 and not self.ignorecal1:
01175 diff=listmean(self.calcounterlist11,float(diffcalcounter11)/utimediff,self.__numsamples)
01176 self.barwcal11.setTitle("%d"%(diff+.5))
01177 self.barwcal11.displaySlidingScaleValue(diff)
01178 diff=0.
01179 if calcounter12==0xffff:
01180 self.barwcal12.setTitle("Full")
01181 self.barwcal12.bar.displayValue(100001)
01182 elif utimediff>0 and not self.ignorecal1:
01183 diff=listmean(self.calcounterlist12,float(diffcalcounter12)/utimediff,self.__numsamples)
01184 self.barwcal12.setTitle("%d"%(diff+.5))
01185 self.barwcal12.displaySlidingScaleValue(diff)
01186 diff=0.
01187 if tkrcounter11==0xffff:
01188 self.barwtkr11.setTitle("Full")
01189 self.barwtkr11.bar.displayValue(100001)
01190 elif utimediff>0 and not self.ignoretkr11:
01191 diff=listmean(self.tkrcounterlist11,float(difftkrcounter11)/utimediff,self.__numsamples)
01192 self.barwtkr11.setTitle("%d"%(diff+.5))
01193 self.barwtkr11.displaySlidingScaleValue(diff)
01194 diff=0.
01195 if tkrcounter12==0xffff:
01196 self.barwtkr12.setTitle("Full")
01197 self.barwtkr12.bar.displayValue(100001)
01198 elif utimediff>0 and not self.ignoretkr11:
01199 diff=listmean(self.tkrcounterlist12,float(difftkrcounter12)/utimediff,self.__numsamples)
01200 self.barwtkr12.setTitle("%d"%(diff+.5))
01201 self.barwtkr12.displaySlidingScaleValue(diff)
01202 diff=0.
01203 if tkrcounter13==0xffff:
01204 self.barwtkr13.setTitle("Full")
01205 self.barwtkr13.bar.displayValue(100001)
01206 elif utimediff>0 and not self.ignoretkr12:
01207 diff=listmean(self.tkrcounterlist13,float(difftkrcounter13)/utimediff,self.__numsamples)
01208 self.barwtkr13.setTitle("%d"%(diff+.5))
01209 self.barwtkr13.displaySlidingScaleValue(diff)
01210 diff=0.
01211 if tkrcounter14==0xffff:
01212 self.barwtkr14.setTitle("Full")
01213 self.barwtkr14.bar.displayValue(100001)
01214 elif utimediff>0 and not self.ignoretkr12:
01215 diff=listmean(self.tkrcounterlist14,float(difftkrcounter14)/utimediff,self.__numsamples)
01216 self.barwtkr14.setTitle("%d"%(diff+.5))
01217 self.barwtkr14.displaySlidingScaleValue(diff)
01218 if self.tower2 is not None:
01219 diff=0.
01220 if calcounter21==0xffff:
01221 self.barwcal21.setTitle("Full")
01222 self.barwcal21.bar.displayValue(100001)
01223 elif utimediff>0 and not self.ignorecal2:
01224 diff=listmean(self.calcounterlist21,float(diffcalcounter21)/utimediff,self.__numsamples)
01225 self.barwcal21.setTitle("%d"%(diff+.5))
01226 self.barwcal21.displaySlidingScaleValue(diff)
01227 diff=0.
01228 if calcounter22==0xffff:
01229 self.barwcal22.setTitle("Full")
01230 self.barwcal22.bar.displayValue(100001)
01231 elif utimediff>0 and not self.ignorecal2:
01232 diff=listmean(self.calcounterlist22,float(diffcalcounter22)/utimediff,self.__numsamples)
01233 self.barwcal22.setTitle("%d"%(diff+.5))
01234 self.barwcal22.displaySlidingScaleValue(diff)
01235 diff=0.
01236 if tkrcounter21==0xffff:
01237 self.barwtkr21.setTitle("Full")
01238 self.barwtkr21.bar.displayValue(100001)
01239 elif utimediff>0 and not self.ignoretkr21:
01240 diff=listmean(self.tkrcounterlist21,float(difftkrcounter21)/utimediff,self.__numsamples)
01241 self.barwtkr21.setTitle("%d"%(diff+.5))
01242 self.barwtkr21.displaySlidingScaleValue(diff)
01243 diff=0.
01244 if tkrcounter22==0xffff:
01245 self.barwtkr22.setTitle("Full")
01246 self.barwtkr22.bar.displayValue(100001)
01247 elif utimediff>0 and not self.ignoretkr21:
01248 diff=listmean(self.tkrcounterlist22,float(difftkrcounter22)/utimediff,self.__numsamples)
01249 self.barwtkr22.setTitle("%d"%(diff+.5))
01250 self.barwtkr22.displaySlidingScaleValue(diff)
01251 diff=0.
01252 if tkrcounter23==0xffff:
01253 self.barwtkr23.setTitle("Full")
01254 self.barwtkr23.bar.displayValue(100001)
01255 elif utimediff>0 and not self.ignoretkr22:
01256 diff=listmean(self.tkrcounterlist23,float(difftkrcounter23)/utimediff,self.__numsamples)
01257 self.barwtkr23.setTitle("%d"%(diff+.5))
01258 self.barwtkr23.displaySlidingScaleValue(diff)
01259 diff=0.
01260 if tkrcounter24==0xffff:
01261 self.barwtkr24.setTitle("Full")
01262 self.barwtkr24.bar.displayValue(100001)
01263 elif utimediff>0 and not self.ignoretkr22:
01264 diff=listmean(self.tkrcounterlist24,float(difftkrcounter24)/utimediff,self.__numsamples)
01265 self.barwtkr24.setTitle("%d"%(diff+.5))
01266 self.barwtkr24.displaySlidingScaleValue(diff)
01267
01268 self.ignoretile=False
01269 self.ignorecno=False
01270 self.ignorecal1=False
01271 self.ignoretkr11=False
01272 self.ignoretkr12=False
01273 self.ignorecal2=False
01274 self.ignoretkr21=False
01275 self.ignoretkr22=False
01276
01277 if eventdiff>0:
01278 factor2=float(sentdiff)/float(eventdiff)
01279 factor=0.
01280 if eventdiff>0:
01281 factor=float(validevdiff)/float(eventdiff)
01282 diff=0.
01283 factor=1.
01284 if evtimediff>0:
01285 diff=listmean(self.__tkrlist,float(deltatkr)/evtimediff*factor,self.__numsamples)
01286 self.multibar1.displaySlidingScaleValue(1,diff)
01287 self.multibar1.setBarTitle(1,"%d"%(diff+.5))
01288 diff=listmean(self.__callowlist,float(deltacallow)/evtimediff*factor,self.__numsamples)
01289 self.multibar1.displaySlidingScaleValue(2,diff)
01290 self.multibar1.setBarTitle(2,"%d"%(diff+.5))
01291 diff=listmean(self.__calhighlist,float(deltacalhigh)/evtimediff*factor,self.__numsamples)
01292 self.multibar1.displaySlidingScaleValue(3,diff)
01293 self.multibar1.setBarTitle(3,"%d"%(diff+.5))
01294 diff=listmean(self.__roilist,float(deltaroi)/evtimediff*factor,self.__numsamples)
01295 self.multibar1.displaySlidingScaleValue(0,diff)
01296 self.multibar1.setBarTitle(0,"%d"%(diff+.5))
01297 diff=listmean(self.__cnolist,float(deltacno)/evtimediff*factor,self.__numsamples)
01298 self.multibar1.displaySlidingScaleValue(4,diff)
01299 self.multibar1.setBarTitle(4,"%d"%(diff+.5))
01300 diff=listmean(self.__periodiclist,float(deltaperiodic)/evtimediff*factor,self.__numsamples)
01301 self.multibar1.displaySlidingScaleValue(5,diff)
01302 self.multibar1.setBarTitle(5,"%d"%(diff+.5))
01303 diff=listmean(self.__solicitedlist,float(deltasolicited)/evtimediff*factor,self.__numsamples)
01304 self.multibar1.displaySlidingScaleValue(6,diff)
01305 self.multibar1.setBarTitle(6,"%d"%(diff+.5))
01306 diff=listmean(self.__extlist,float(deltaext)/evtimediff*factor,self.__numsamples)
01307 self.multibar1.displaySlidingScaleValue(7,diff)
01308 self.multibar1.setBarTitle(7,"%d"%(diff+.5))
01309 diff0=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
01310 diff1=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
01311 diff2=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
01312 diff3=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
01313 diff4=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
01314 diff5=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
01315 diff6=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
01316 for i in range(16):
01317 diff0[i]=listmean(self.tkrveclist[i],float(deltatkrvec[i])/evtimediff*factor,self.__numsamples)
01318 diff1[i]=listmean(self.roiveclist[i],float(deltaroivec[i])/evtimediff*factor,self.__numsamples)
01319 diff5[i]=listmean(self.cnoveclist[i],float(deltacnovec[i])/evtimediff*factor,self.__numsamples)
01320 diff2[i]=listmean(self.callowveclist[i],float(deltacallowvec[i])/evtimediff*factor,self.__numsamples)
01321 diff3[i]=listmean(self.calhighveclist[i],float(deltacalhighvec[i])/evtimediff*factor,self.__numsamples)
01322 diff4[i]=listmean(self.orveclist[i],float(deltaorvec[i])/evtimediff*factor,self.__numsamples)
01323 diff6[i]=listmean(self.englist[i],float(deltaeng[i])/evtimediff*factor,self.__numsamples)
01324 self.multibar2.displaySlidingScaleValue(i,diff4[i])
01325 self.multibartower.displaySlidingScaleValue(i,diff4[i])
01326 self.multibartkr.displaySlidingScaleValue(i,diff0[i])
01327 self.multibarcallow.displaySlidingScaleValue(i,diff2[i])
01328 self.multibarcalhigh.displaySlidingScaleValue(i,diff3[i])
01329 self.multibarroi.displaySlidingScaleValue(i,diff1[i])
01330 if i < 12:
01331 self.multibarcno.displaySlidingScaleValue(i,diff5[i])
01332 self.multibareng.displaySlidingScaleValue(i,diff6[i])
01333 self.engmeters[i].setText("%d"%(diff6[i]+.5))
01334 elif newtime-self.timeout>TIMEOUT:
01335 self.timestamp=0
01336 self.__tkrlist=[]
01337 self.multibar1.bars[1].displayValue(0)
01338 self.multibar1.setBarTitle(1,"%d"%0)
01339 self.__callowlist=[]
01340 self.multibar1.bars[2].displayValue(0)
01341 self.multibar1.setBarTitle(2,"%d"%0)
01342 self.__calhighlist=[]
01343 self.multibar1.bars[3].displayValue(0)
01344 self.multibar1.setBarTitle(3,"%d"%0)
01345 self.__roilist=[]
01346 self.multibar1.bars[0].displayValue(0)
01347 self.multibar1.setBarTitle(0,"%d"%0)
01348 self.__cnolist=[]
01349 self.multibar1.bars[4].displayValue(0)
01350 self.multibar1.setBarTitle(4,"%d"%0)
01351 self.__periodiclist=[]
01352 self.multibar1.bars[5].displayValue(0)
01353 self.multibar1.setBarTitle(5,"%d"%0)
01354 self.__solicitedlist=[]
01355 self.multibar1.bars[6].displayValue(0)
01356 self.multibar1.setBarTitle(6,"%d"%0)
01357 self.__extlist=[]
01358 self.multibar1.bars[7].displayValue(0)
01359 self.multibar1.setBarTitle(7,"%d"%0)
01360 for i in range(16):
01361 self.tkrveclist[i]=[]
01362 self.roiveclist[i]=[]
01363 self.cnoveclist[i]=[]
01364 self.callowveclist[i]=[]
01365 self.calhighveclist[i]=[]
01366 self.orveclist[i]=[]
01367 self.englist[i]=[]
01368 self.multibar2.bars[i].displayValue(0)
01369 self.multibartower.bars[i].displayValue(0)
01370 self.multibartkr.bars[i].displayValue(0)
01371 self.multibarcallow.bars[i].displayValue(0)
01372 self.multibarcalhigh.bars[i].displayValue(0)
01373 self.multibarroi.bars[i].displayValue(0)
01374 if i < 12:
01375 self.multibarcno.bars[i].displayValue(0)
01376 self.multibareng.bars[i].displayValue(0)
01377 self.engmeters[i].setText("%d"%(0))
01378
01379 #use the results of the consumer
01380 win=self.__lat.GEM.GEMW.window_width
01381 if win !=self.__window:
01382 self.__window=win
01383 self.cons.timematrix=None
01384 self.cons.winwidth=win
01385 self.timehisto.removeAllHistos()
01386 self.timehisto.setup(2*self.__window+1,-self.__window-.5,self.__window+.5,False,False)
01387 self.timehisto.bds=10
01388 self.timehisto.boxwidth=.25
01389 self.timehisto.xaxislabel.setText("timing in clock ticks of 50 ns")
01390 self.timehisto.addHisto("ROI","black",0,1,self.roion)
01391 self.timehisto.setHistoLabel("ROI","ROI")
01392 self.timehisto.addHisto("TKR","blue",0,1,self.tkron)
01393 self.timehisto.setHistoLabel("TKR","TKR")
01394 self.timehisto.addHisto("CALlow","red",0,1,self.callowon)
01395 self.timehisto.setHistoLabel("CALlow","CAL low")
01396 self.timehisto.addHisto("CALhigh","orange",0,1,self.calhighon)
01397 self.timehisto.setHistoLabel("CALhigh","CAL high")
01398 self.timehisto.addHisto("CNO","magenta",0,1,self.cnoon)
01399 self.timehisto.setHistoLabel("CNO","CNO")
01400 self.timehisto.addHisto("EXT","green",0,1,self.exton)
01401 self.timehisto.setHistoLabel("EXT","External")
01402 self.timehisto.update()
01403 self.timehisto.drawLabels()
01404 if self.cons.resethistos==True:
01405 self.cons.resethistos=False
01406 self.histo.resetAllHistos()
01407 self.timehisto.resetAllHistos()
01408 for ti in self.cons.deltawtime:
01409 self.histo.fill("deltawtime",ti)
01410 for ti in self.cons.deltatime:
01411 self.histo.fill("deltaetime",ti)
01412 self.histo.updateHisto()
01413 #consumer fills histo
01414 self.timehisto.updateHisto()
01415 self.cons.resetWindowData()
01416
01417 def changeRate(self,rate):
01418 rates=[1.5,1.,0.5,0.2,0.1]
01419 self.__samplingrate=rates[rate]*1000
01420 self.__ratehaschanged=True
01421
01422 def changeSampling(self,sampling):
01423 sample=[100,50,20,10,5,2,1]
01424 self.__numsamples=sample[sampling]
01425
01426 def setReference(self,ref):
01427 self.ref=ref
01428 self.cons.ref=ref
01429 self.timehisto.resetAllHistos()
01430 self.timehisto.resetlin()
01431 self.cons.resetWindowData()
01432 self.roitime.setChecked(0)
01433 self.tkrtime.setChecked(0)
01434 self.callowtime.setChecked(0)
01435 self.calhightime.setChecked(0)
01436 self.cnotime.setChecked(0)
01437 self.exttime.setChecked(0)
01438 self.cons.reloadData()
01439
01440 def setROI(self,onoff):
01441 if onoff == True:
01442 if self.ref==0:
01443 self.roitime.setChecked(0)
01444 else:
01445 self.timehisto.showHisto("ROI")
01446 self.roion=True
01447 self.timehisto.update()
01448 else:
01449 self.timehisto.hideHisto("ROI")
01450 self.roion=False
01451 self.timehisto.update()
01452 def setTKR(self,onoff):
01453 if onoff == True:
01454 if self.ref==1:
01455 self.tkrtime.setChecked(0)
01456 else:
01457 self.timehisto.showHisto("TKR")
01458 self.tkron=True
01459 self.timehisto.update()
01460 else:
01461 self.timehisto.hideHisto("TKR")
01462 self.tkron=False
01463 self.timehisto.update()
01464 def setCALlow(self,onoff):
01465 if onoff == True:
01466 if self.ref==2:
01467 self.callowtime.setChecked(0)
01468 else:
01469 self.timehisto.showHisto("CALlow")
01470 self.callowon=True
01471 self.timehisto.update()
01472 else:
01473 self.timehisto.hideHisto("CALlow")
01474 self.callowon=False
01475 self.timehisto.update()
01476 pass
01477 def setCALhigh(self,onoff):
01478 if onoff == True:
01479 if self.ref==3:
01480 self.calhightime.setChecked(0)
01481 else:
01482 self.timehisto.showHisto("CALhigh")
01483 self.calhighon=True
01484 self.timehisto.update()
01485 else:
01486 self.timehisto.hideHisto("CALhigh")
01487 self.calhighon=False
01488 self.timehisto.update()
01489 pass
01490 def setCNO(self,onoff):
01491 if onoff == True:
01492 if self.ref==4:
01493 self.cnotime.setChecked(0)
01494 else:
01495 self.timehisto.showHisto("CNO")
01496 self.cnoon=True
01497 self.timehisto.update()
01498 else:
01499 self.timehisto.hideHisto("CNO")
01500 self.cnoon=False
01501 self.timehisto.update()
01502 pass
01503 def setEXT(self,onoff):
01504 if onoff == True:
01505 if self.ref==5:
01506 self.exttime.setChecked(0)
01507 else:
01508 self.timehisto.showHisto("EXT")
01509 self.exton=True
01510 self.timehisto.update()
01511 else:
01512 self.timehisto.hideHisto("EXT")
01513 self.exton=False
01514 self.timehisto.update()
01515 pass
01516 def closeEvent(self,e):
01517 self.stopthethread()
01518 e.accept()
01519 def stopthethread(self):
01520 myLog.debug( "terminating consumer")
01521 self.cons.exitConsumer()
01522 self.consthread.wait()
01523 def resizeEvent(self,rev):
01524 if self.__firstresize==False:
01525 self.__theheight=rev.oldSize().height()
01526 self.__thewidth=rev.oldSize().width()
01527 self.__firstresize=True
01528 def readlut(self,gemsc):
01529 cond=[]
01530 cond.append(gemsc.conditions_00_07)
01531 cond.append(gemsc.conditions_08_0f)
01532 cond.append(gemsc.conditions_10_17)
01533 cond.append(gemsc.conditions_18_1f)
01534 cond.append(gemsc.conditions_20_27)
01535 cond.append(gemsc.conditions_28_2f)
01536 cond.append(gemsc.conditions_30_37)
01537 cond.append(gemsc.conditions_38_3f)
01538 cond.append(gemsc.conditions_40_47)
01539 cond.append(gemsc.conditions_48_4f)
01540 cond.append(gemsc.conditions_50_57)
01541 cond.append(gemsc.conditions_58_5f)
01542 cond.append(gemsc.conditions_60_67)
01543 cond.append(gemsc.conditions_68_6f)
01544 cond.append(gemsc.conditions_70_77)
01545 cond.append(gemsc.conditions_78_7f)
01546 cond.append(gemsc.conditions_80_87)
01547 cond.append(gemsc.conditions_88_8f)
01548 cond.append(gemsc.conditions_90_97)
01549 cond.append(gemsc.conditions_98_9f)
01550 cond.append(gemsc.conditions_a0_a7)
01551 cond.append(gemsc.conditions_a8_af)
01552 cond.append(gemsc.conditions_b0_b7)
01553 cond.append(gemsc.conditions_b8_bf)
01554 cond.append(gemsc.conditions_c0_c7)
01555 cond.append(gemsc.conditions_c8_cf)
01556 cond.append(gemsc.conditions_d0_d7)
01557 cond.append(gemsc.conditions_d8_df)
01558 cond.append(gemsc.conditions_e0_e7)
01559 cond.append(gemsc.conditions_e8_ef)
01560 cond.append(gemsc.conditions_f0_f7)
01561 cond.append(gemsc.conditions_f8_ff)
01562 lut={}
01563 j=0
01564 for co in cond:
01565 for i in range(8):
01566 lut[j]=(co>>(i*4))&0xf
01567 j+=1
01568 return lut
01569
01570 def getEngines(self,gemmg,val):
01571 engall=[]
01572 engall.append(gemmg.engine_0)
01573 engall.append(gemmg.engine_1)
01574 engall.append(gemmg.engine_2)
01575 engall.append(gemmg.engine_3)
01576 engall.append(gemmg.engine_4)
01577 engall.append(gemmg.engine_5)
01578 engall.append(gemmg.engine_6)
01579 engall.append(gemmg.engine_7)
01580 engall.append(gemmg.engine_8)
01581 engall.append(gemmg.engine_9)
01582 engall.append(gemmg.engine_a)
01583 engall.append(gemmg.engine_b)
01584 engall.append(gemmg.engine_c)
01585 engall.append(gemmg.engine_d)
01586 engall.append(gemmg.engine_e)
01587 engall.append(gemmg.engine_f)
01588 res={}
01589 for a in val.keys():
01590 res[a]=engall[a]
01591 return res
01592
01593 def disconnectcmdcli():
01594 myLog.debug( "Disconnecting command client" )
01595 cmd.disconnect()
01596
01597 if __name__ == "__main__":
01598 from LATTE.client.gOptions import Options
01599 from LATTE.client.gCmdCli import CmdCli
01600 from LATTE.database.gLAT import GLAT
01601 from LATTE.database.gOCS import GOCS
01602
01603 options = Options(['cmdserver', 'schema'],['nevents','server','infile','rate'])
01604 try:
01605 options.parse()
01606 except Exception, msg:
01607 options.usage(str(msg))
01608 sys.exit(1)
01609 if options.infile==None and options.server==None:
01610 sys.exit(1)
01611 cmd = CmdCli()
01612 cmd.connect(options.cmdserver)
01613
01614 lat = GLAT(cmd)
01615 ocs = GOCS(cmd)
01616 lat.readSchema(options.schema)
01617
01618
01619
01620
01621 a = QApplication(sys.argv)
01622 QObject.connect(a,SIGNAL("lastWindowClosed()"),a,SLOT("quit()"))
01623 QObject.connect(a,SIGNAL("aboutToQuit()"),disconnectcmdcli)
01624 w = trgDisplayImpl(lat,ocs,options.server,options.infile)
01625 a.setMainWidget(w,)
01626 #QObject.connect(a,SIGNAL("aboutToQuit()"),w.stopthethread)
01627 w.show()
01628 a.exec_loop()