69 def Init(self,options,monitor):
73 self.
gtime = {
'all':{0:[],1:[],3:[]},
'B1only':{0:[],1:[],3:[]},
'B2noB1':{0:[],1:[],3:[]},
'noBeam':{0:[],1:[],3:[]}}
74 self.
QDCtime = {0:ROOT.TGraph(),1:ROOT.TGraph(),2:ROOT.TGraph(),3:ROOT.TGraph()}
80 self.
offsets = {1:[0,7*16,16],2:[7*2*2*8,0,8],3:[7*2*2*8+7*8,10*16,16],4:[7*2*2*8+7*8+10*5*2*8,60*2,2],5:[7*2*2*8+7*8+10*5*2*8+3*60*2,60,1]}
81 ut.bookHist(h,
'ctime',
'delta event time per channel; dt [s]' ,1000,0.0,10.,1700,-0.5,1699.5)
82 ut.bookHist(h,
'ctimeZ',
'delta event time per channel; dt [us]',10000,0.0,100.,1700,-0.5,1699.5)
83 ut.bookHist(h,
'ctimeM',
'delta event time per channel; dt [ms]',1000,0.0,10.,1700,-0.5,1699.5)
84 ut.bookHist(h,
'btime',
'delta timestamp per channel; ',self.
M.Nbunches*4+200,-0.5,self.
M.Nbunches*4-0.5+200,1700,-0.5,1699.5)
85 ut.bookHist(h,
'bnr',
'bunch number; ',self.
M.Nbunches,-0.5,self.
M.Nbunches-0.5)
86 ut.bookHist(h,
'Xbnr',
'bunch number; ',self.
M.Nbunches*4,-0.5,self.
M.Nbunches*4-0.5)
87 ut.bookHist(h,
'bnrF',
'bunch number forward tracks; ',self.
M.Nbunches,-0.5,self.
M.Nbunches-0.5)
88 ut.bookHist(h,
'bnrB',
'bunch number backward tracks; ',self.
M.Nbunches,-0.5,self.
M.Nbunches-0.5)
90 self.
xing = {
'all':
True,
'B1only':
False,
'B2noB1':
False,
'noBeam':
False}
92 ut.bookHist(h,
'bnr'+x,
'bunch number; ',self.
M.Nbunches,-0.5,self.
M.Nbunches-0.5)
97 ut.bookHist(h,
'trackDir'+x,
'track direction;',300,-0.5,0.25)
98 ut.bookHist(h,
'trackDirSig'+x,
'track direction significance;',100,-20,10)
99 if not self.
M.fsdict
and not self.
M.hasBunchInfo
and x!=
'all':
continue
100 ut.bookHist(h,
'trackSlopes'+x,
'track slope; x/z [mrad]; y/z [mrad]',1000,-100,100,1000,-100,100)
101 ut.bookHist(h,
'trackSlopesXL'+x,
'track slope; x/z [rad]; y/z [rad]',2200,-1.1,1.1,2200,-1.1,1.1)
102 ut.bookHist(h,
'trackPos'+x,
'track pos; x [cm]; y [cm]',100,-90,10.,80,0.,80.)
103 ut.bookHist(h,
'trackPosBeam'+x,
'beam track pos slopes<0.1rad; x [cm]; y [cm]',100,-90,10.,80,0.,80.)
105 if isinstance(h[item], ROOT.TH2)
and (item.find(
'trackPos')>0
or item.find(
'trackSlopes')>0):
106 h[item].SetTitleOffset(1.1,
'Y')
108 ut.bookHist(h,
'Tboard',
'Hit time per board, wrt SciFi 4Y board 40; board id; t_{hit} - t_{board 40 mean} [clock cycles]',62,0.5,62.5,100,-5.,5.)
109 ut.bookHist(h,
'Cckboard',
'160 MHz bunch number; board id; SND clock align phase wrt LHC [clock cycles]',62,0.5,62.5,100,0.,16.)
110 ut.bookHist(h,
'Cckboard_normalized',
'160 MHz bunch number; board id; SND clock align phase wrt LHC [clock cycles]',62,0.5,62.5,100,0.,16.)
111 ut.bookHist(h,
'CckboardB2',
'160 MHz bunch number; board id; SND clock align phase wrt LHC [clock cycles]',62,0.5,62.5,100,0.,16.)
122 T = event.EventHeader.GetEventTime()
123 Tsec = int(T/self.
M.freq)
125 trackTask = self.
M.FairTasks[
'simpleTracking']
130 for theTrack
in self.
M.Reco_MuonTracks:
131 if not theTrack.getFitStatus().isFitConverged()
and theTrack.GetUniqueID()==1:
continue
132 if theTrack.GetUniqueID()!=1:
136 state = theTrack.getFittedState()
139 slopeX = mom.X()/mom.Z()
140 slopeY = mom.Y()/mom.Z()
143 self.
M.fillHist2(
'trackSlopes'+x,slopeX*1000-pos.X()/48.2,slopeY*1000-pos.Y()/48.2)
144 self.
M.fillHist2(
'trackSlopesXL'+x,slopeX-pos.X()/48200,slopeY-pos.Y()/48200)
145 self.
M.fillHist2(
'trackPos'+x,pos.X(),pos.Y())
146 if abs(slopeX)<0.1
and abs(slopeY)<0.1: self.
M.fillHist2(
'trackPosBeam'+x,pos.X(),pos.Y())
148 SL = trackTask.trackDir(theTrack)
151 if abs(SL[0])<0.03: direction = 1
152 elif SL[0]<-0.07: direction = -1
153 bn = int((T%(self.
M.div*self.
M.Nbunches))/self.
M.div+0.5)
154 sbn = T%(self.
M.div*self.
M.Nbunches)
155 rc = h[
'bnr'].Fill( bn ,W)
156 rc = h[
'Xbnr'].Fill( sbn,W)
159 if x==
'all' or (DStrack
or SFtrack): rc = h[
'bnr'+x].Fill( bn ,W)
161 rc = h[
'trackDir'+x].Fill(SL[0],W)
162 rc = h[
'trackDirSig'+x].Fill(SL[1],W)
164 if direction >0: rc = h[
'bnrF'].Fill(bn,W)
165 elif direction <0: rc = h[
'bnrB'].Fill(bn,W)
168 self.
gtime[x][0].append(T/self.
M.freq)
169 if DStrack: self.
gtime[x][3].append(T/self.
M.freq)
170 if SFtrack: self.
gtime[x][1].append(T/self.
M.freq)
172 qdc = {0:0,1:0,2:0,3:0}
174 for aHit
in event.Digi_MuFilterHits:
175 if not aHit.isValid():
continue
176 detID = aHit.GetDetectorID()
180 allChannels = self.
M.map2Dict(aHit,
'GetAllSignals')
181 for c
in allChannels:
182 qdc[s]+= allChannels[c]
185 if s==1
and p<2: s_index = s
187 if (s==1
and p==2)
or s==2
or s==3: s_index = s+1
191 if self.
Tprev[cNr]>0:
192 dT = (T - self.
Tprev[cNr])/self.
M.freq
193 if dT<5E-9: print(
'something wrong',self.
Nevent,s,p,b,c,dT,T,self.
Tprev[cNr])
194 rc = h[
'ctimeZ'].Fill(dT*1E6,cNr,W)
195 rc = h[
'btime'].Fill(T-self.
Tprev[cNr],cNr,W)
196 rc = h[
'ctimeM'].Fill(dT*1E3,cNr,W)
197 rc = h[
'ctime'].Fill(dT,cNr,W)
198 nb = aHit.GetBoardID(c)
203 for aHit
in event.Digi_ScifiHits:
204 if not aHit.isValid():
continue
206 nb = aHit.GetBoardID(0)
214 for aHit
in event.Digi_MuFilterHits:
215 for x
in aHit.GetAllTimes():
216 bid = aHit.GetBoardID(x.first)
217 if not bid
in boards: boards[bid]=[]
218 boards[bid].append(x.second)
219 for aHit
in event.Digi_ScifiHits:
220 bid = aHit.GetBoardID(0)
221 if not bid
in boards: boards[bid]=[]
222 boards[bid].append(aHit.GetTime())
225 boards[self.
board0].sort()
227 for x
in boards[self.
board0]: T0+=x
228 T0 = T0/len(boards[self.
board0])
231 rc = h[
'Tboard'].Fill(b,x-T0)
234 rc = h[
'Cckboard'].Fill(b, sbn%4+x )
235 if self.
M.fsdict
or self.
M.hasBunchInfo:
236 if self.
M.xing[
'B2noB1']: rc = h[
'CckboardB2'].Fill(b, sbn%4+x )
241 if self.
M.TStart < 0:
242 T0 = gtime[
'all'][0][0]
243 tmax = gtime[
'all'][0][len(gtime[
'all'][0])-1] - T0
245 T0 = self.
M.TStart/self.
M.freq
246 tmax = self.
M.TEnd/self.
M.freq - T0
249 yunit =
"events per s"
250 systems = {0:
'Scifi',1:
'Veto',2:
'US',3:
'DS'}
251 if self.
fsdict or self.
M.hasBunchInfo: Xi = [
'',
'B1only',
'B2noB1',
'noBeam']
255 if self.
M.TStart < 0:
257 for y
in [
'time',
'timeWt',
'timeWtDS']:
259 h.pop(
'boardVStime').Delete()
262 ut.bookHist(h,
'time'+x,
'DAQ Event Rate '+x+
'; elapsed time from run start t [s];'+yunit,nbins,0,tmax)
263 ut.bookHist(h,
'timeWt'+x,
'events with Scifi(red) DS(cyan) tracks; elapsed time from run start t [s];'+yunit,nbins,0,tmax)
264 ut.bookHist(h,
'timeWtDS'+x,
'elapsed time from start, events with DS tracks; t [s];'+yunit,nbins,0,tmax)
266 ut.bookHist(h,
'boardVStime',
'Board Hit Rate; t [s]; board id',nbins,0,tmax,len(self.
boardsVsTime),0.5,len(self.
boardsVsTime)+0.5)
268 ut.bookHist(h,
'Etime',
'time difference between consecutive events; dt [s]',100,0.0,1.)
269 ut.bookHist(h,
'EtimeZ',
'time difference between consecutive events; dt [us]',10000,0.0,100.)
271 if isinstance(h[x], ROOT.TH2):
274 for n
in range(1,len(gtime[
'all'][0])):
275 dT = gtime[
'all'][0][n]-gtime[
'all'][0][n-1]
276 rc = h[
'Etime'].Fill( dT )
277 rc = h[
'EtimeZ'].Fill( dT*1E6)
278 K = {0:
'',1:
'Wt',3:
'WtDS'}
280 for n
in range(len(gtime[
'all'][k])):
281 rc = h[
'time'+K[k]].Fill(gtime[
'all'][k][n]-T0)
282 if self.
fsdict or self.
M.hasBunchInfo:
283 for x
in [
'B1only',
'B2noB1',
'noBeam']:
285 for n
in range(len(gtime[x][k])):
286 rc = h[
'time'+K[k]+x].Fill(gtime[x][k][n]-T0)
291 yAx = h[
'boardVStime'].GetYaxis()
294 yAx.SetBinLabel(i,snb)
296 rc = h[
'boardVStime'].Fill(t-T0,i,self.
boardsVsTime[nb][t])
298 ut.bookCanvas(h,
'boardsVsTimeStats',
'board nr vs time',2000,1600,1,1)
299 tc = h[
'boardsVsTimeStats'].cd()
300 h[
'boardVStime'].Draw(
'colz')
302 self.
M.myPrint(h[
'boardsVsTimeStats'],
"board nr versus time",subdir=
'daq/expert')
303 self.
M.myPrint(h[
'boardsVsTimeStats'],
"board nr versus time",subdir=
'daq/shifter')
308 if anaSplash
and withTGraph:
310 av = h[
'time'].GetEntries()/nbins
311 for i
in range(1,nbins+1):
312 B = h[
'time'].GetBinContent(i)
314 tmin = h[
'time'].GetBinLowEdge(i)
315 tmax = tmin+h[
'time'].GetBinWidth(i)
316 if 'splash'+str(i)
in h:
317 h.pop(
'splash'+str(i)).Delete()
318 h.pop(
'Qsplash'+str(i)).Delete()
319 ut.bookHist(h,
'splash'+str(i),
'; t [us];events per usec',1000000,0,(tmax-tmin)*1E6)
320 ut.bookHist(h,
'Qsplash'+str(i),
' qdc; t [us];sum qdc per usec',1000000,0,(tmax-tmin)*1E6)
323 h[systems[sy]+
'splash'+str(i)] = ROOT.TGraph()
324 splashBins.append( [i,tmin,tmax] )
325 for n
in range(1,len(gtime[
'all'][0])):
326 T = gtime[
'all'][0][n-1]-T0
328 if T>s[1]
and T<s[2]:
329 rc = h[
'splash'+str(s[0])].Fill((T-s[1])*1E6)
331 N = h[systems[sy]+
'splash'+str(s[0])].GetN()
332 h[systems[sy]+
'splash'+str(s[0])].SetPoint(N,(T-s[1])*1E6,self.
QDCtime[sy].GetPointY(n-1))
335 iy = int(ROOT.TMath.Sqrt(N))
338 ut.bookCanvas(h,
'Tsplash',
'rates',1800,1200,ix,iy)
339 for sy
in systems: ut.bookCanvas(h,systems[sy]+
'splash',
'qdc sum',1800,1200,ix,iy)
343 h[
'splash'+str(s[0])].Draw(
'hist')
345 tc = h[systems[sy]+
'splash'].cd(n)
347 hist = h[
'Qsplash'+str(s[0])]
349 g = h[systems[sy]+
'splash'+str(s[0])]
350 for i
in range(g.GetN()):
351 T,QDC = g.GetPointX(i),g.GetPointY(i)
352 rc = hist.Fill(T,QDC)
353 h[systems[sy]+
'Qsplash'+str(s[0])] = ROOT.TGraph()
354 for i
in range(hist.GetNbinsX()):
355 QDC = hist.GetBinContent(i+1)
356 if not QDC>0:
continue
357 T = hist.GetBinCenter(i+1)
358 h[systems[sy]+
'Qsplash'+str(s[0])].AddPoint(T,QDC)
359 h[
'QXsplash'+str(s[0])] = h[
'Qsplash'+str(s[0])].RebinX(10000,
'QXsplash'+str(s[0]))
360 xmax = hist.GetMaximum()
361 h[
'QXsplash'+str(s[0])].Reset()
362 h[
'QXsplash'+str(s[0])].SetMaximum(xmax)
363 h[
'QXsplash'+str(s[0])].DrawClone()
364 h[systems[sy]+
'Qsplash'+str(s[0])].SetName(systems[sy]+
'Gsplash'+str(s[0]))
365 h[systems[sy]+
'Qsplash'+str(s[0])].Draw(
'Bsame')
367 self.
M.myPrint(h[
'Tsplash'],
"Splashes",subdir=
'daq/expert')
368 for sy
in systems: self.
M.myPrint(h[systems[sy]+
'splash'],systems[sy]+
" qdc sum",subdir=
'daq/expert')
373 av = h[
'time'].GetEntries()/nbins
374 for i
in range(1,nbins+1):
375 B = h[
'time'].GetBinContent(i)
377 tmin = h[
'time'].GetBinLowEdge(i)
378 tmax = tmin+h[
'time'].GetBinWidth(i)
379 if 'splash'+str(i)
in h: h.pop(
'splash'+str(i)).Delete()
380 ut.bookHist(h,
'splash'+str(i),
'; t [#mus];events per #mus',1000000,0,(tmax-tmin)*1E6)
382 if systems[sy]+
'splash'+str(i)
in h: h.pop(systems[sy]+
'splash'+str(i)).Delete()
383 ut.bookHist(h,systems[sy]+
'splash'+str(i),systems[sy]+
'sum qdc / N; t [1#mus];average sum qdc per event #mus',1000000,0,(tmax-tmin)*1E6)
384 splashBins.append( [i,tmin,tmax] )
385 for n
in range(1,len(gtime[
'all'][0])):
386 T = gtime[
'all'][0][n-1]-T0
388 if T>s[1]
and T<s[2]:
389 rc = h[
'splash'+str(s[0])].Fill((T-s[1])*1E6)
391 rc = h[systems[sy]+
'splash'+str(s[0])].Fill((T-s[1])*1E6,self.
QDCtime[sy].GetPointY(n-1))
394 iy = int(ROOT.TMath.Sqrt(N))
397 ut.bookCanvas(h,
'Tsplash',
'rates',1800,1200,ix,iy)
398 for sy
in systems: ut.bookCanvas(h,systems[sy]+
'splash',
'qdc sum',1800,1200,ix,iy)
402 h[
'splash'+str(s[0])].Draw(
'hist')
404 tc = h[systems[sy]+
'splash'].cd(n)
406 h[systems[sy]+
'splash'+str(s[0])].Divide(h[
'splash'+str(s[0])])
407 h[systems[sy]+
'splash'+str(s[0])].Draw(
'hist')
409 self.
M.myPrint(h[
'Tsplash'],
"Splashes",subdir=
'daq/expert')
410 for sy
in systems: self.
M.myPrint(h[systems[sy]+
'splash'],systems[sy]+
" qdc sum",subdir=
'daq/expert')
412 ut.bookCanvas(h,
'eventAndTrackRates',
'rates',1024,3*768,1,3)
413 ut.bookCanvas(h,
'Txing',
'rates per xing type',1024,3*768,1,4)
415 tc = h[
'eventAndTrackRates'].cd(1)
416 h[
'time'].SetStats(0)
418 tc = h[
'eventAndTrackRates'].cd(2)
419 h[
'timeWt'].SetStats(0)
420 h[
'timeWt'].SetLineColor(ROOT.kRed)
421 h[
'timeWtDS'].SetStats(0)
422 h[
'timeWtDS'].SetLineColor(ROOT.kCyan)
423 mx = max( h[
'timeWt'].GetBinContent(h[
'timeWtDS'].GetMaximumBin()),\
424 h[
'timeWtDS'].GetBinContent(h[
'timeWtDS'].GetMaximumBin()) )
425 h[
'timeWt'].SetMaximum(mx)
427 h[
'timeWtDS'].Draw(
'same')
428 tc = h[
'eventAndTrackRates'].cd(3)
432 h[
'eventAndTrackRates'].Update()
433 stats = h[
'EtimeZ'].FindObject(
'stats')
434 stats.SetOptFit(1111111)
435 tc = h[
'eventAndTrackRates'].cd(4)
439 h[
'eventAndTrackRates'].Update()
440 stats = h[
'Etime'].FindObject(
'stats')
441 stats.SetOptFit(1111111)
442 h[
'eventAndTrackRates'].Update()
443 self.
M.myPrint(h[
'eventAndTrackRates'],
"Rates",subdir=
'daq/shifter')
444 if self.
fsdict or self.
M.hasBunchInfo:
446 for x
in [
'B1only',
'B2noB1',
'noBeam']:
447 tc = h[
'Txing'].cd(j)
449 for ty
in [
'',
'Wt',
'WtDS']:
450 mx = h[
'time'+ty+x].GetMaximum()
451 if mx>hmax: hmax = mx
452 for ty
in [
'',
'Wt',
'WtDS']:
453 h[
'time'+ty+x].SetMaximum(hmax)
454 h[
'time'+ty+x].SetStats(0)
456 h[
'timeWt'+x].SetLineColor(ROOT.kRed)
457 h[
'timeWtDS'+x].SetLineColor(ROOT.kCyan)
458 h[
'timeWt'+x].Draw(
'same')
459 h[
'timeWtDS'+x].Draw(
'same')
461 tc = h[
'Txing'].cd(j)
463 for x
in [
'B1only',
'B2noB1',
'noBeam']:
464 mx = h[
'bnr'+x].GetMaximum()
465 if mx>hmax: hmax = mx
466 h[
'bnrB1only'].SetMaximum(hmax)
467 h[
'bnrB1only'].SetStats(0)
468 h[
'bnrB1only'].SetLineColor(ROOT.kBlue)
469 h[
'bnrB1only'].Draw()
470 h[
'bnrB2noB1'].SetStats(0)
471 h[
'bnrB2noB1'].SetLineColor(ROOT.kGreen)
472 h[
'bnrB2noB1'].Draw(
'same')
473 h[
'bnrnoBeam'].SetStats(0)
474 h[
'bnrnoBeam'].SetLineColor(ROOT.kOrange)
475 h[
'bnrnoBeam'].Draw(
'same')
477 self.
M.myPrint(h[
'Txing'],
"RatesXing",subdir=
'daq/expert')
480 if not self.
M.fsdict
and not self.
M.hasBunchInfo
and xi!=
'all':
continue
484 tname =
'scifi-trackSlopes'+x
485 ut.bookCanvas(h,tname,
"track directions",1600,1800,3,2)
487 rc = h[
'trackSlopes'+xi].Draw(
'colz')
489 rc = h[
'trackSlopes'+xi].ProjectionX(
"slopeX"+xi)
491 rc.SetTitle(
'track X slope')
493 rc = h[
'trackSlopes'+xi].ProjectionY(
"slopeY"+xi)
495 rc.SetTitle(
'track Y slope')
497 rc = h[
'trackSlopesXL'+xi].Draw(
'colz')
499 rc = h[
'trackSlopesXL'+xi].ProjectionX(
"slopeXL"+xi)
501 rc.SetTitle(
'track X slope')
503 rc = h[
'trackSlopesXL'+xi].ProjectionY(
"slopeYL"+xi)
505 rc.SetTitle(
'track Y slope')
506 if xi==
'all': self.
M.myPrint(self.
M.h[tname],tname,subdir=
'scifi/shifter')
507 else: self.
M.myPrint(self.
M.h[tname],tname,subdir=
'scifi/shifter/'+xi)
508 tname =
'scifi-trackPos'+x
509 ut.bookCanvas(h,tname,
"track position first state",600,1200,1,2)
511 rc = h[
'trackPosBeam'+xi].Draw(
'colz')
513 rc = h[
'trackPos'+xi].Draw(
'colz')
514 if xi==
'all': self.
M.myPrint(self.
M.h[tname],
'trackPos'+xi,subdir=
'scifi/shifter')
515 else: self.
M.myPrint(self.
M.h[tname],
'trackPos'+xi,subdir=
'scifi/shifter/'+xi)
517 if self.
fsdict or self.
M.hasBunchInfo:
518 ut.bookCanvas(h,
'scifi-trackDirection',
' ',1024,768,4,2)
521 h[
'scifi-trackDirection'].cd(j)
522 h[
'trackDir'+x].Draw()
523 h[
'scifi-trackDirection'].cd(4+j)
524 h[
'trackDir'+x].Draw()
527 ut.bookCanvas(h,
'scifi-trackDirection',
' ',1024,768,2,1)
528 h[
'scifi-trackDirection'].cd(1)
529 h[
'trackDirall'].Draw()
530 h[
'scifi-trackDirection'].cd(2)
531 h[
'trackDirSigall'].Draw()
532 self.
M.myPrint(h[
'scifi-trackDirection'],
'trackdirections',subdir=
'scifi/expert')
534 ut.bookCanvas(h,
'bunchNumber',
'bunch nr',2048,1600,1,3)
535 tc = h[
'bunchNumber'].cd(1)
538 tc = h[
'bunchNumber'].cd(2)
539 h[
'bnrF'].SetStats(0)
541 tc = h[
'bunchNumber'].cd(3)
542 h[
'bnrB'].SetStats(0)
544 self.
M.myPrint(h[
'bunchNumber'],
"BunchNr",subdir=
'daq/shifter')
546 ut.bookCanvas(h,
'sndclock',
'snd bunch nr',1200,900,1,1)
547 tc = h[
'sndclock'].cd()
548 h[
'Xbnr'].SetStats(0)
550 self.
M.myPrint(h[
'sndclock'],
"XBunchNr",subdir=
'daq/expert')
552 ut.bookCanvas(h,
'channels',
' channel dt',1024,4*768,1,4)
553 tc = h[
'channels'].cd(1)
554 h[
'ctimeZ'].Draw(
'colz')
555 tc = h[
'channels'].cd(2)
556 h[
'ctimeM'].Draw(
'colz')
557 tc = h[
'channels'].cd(3)
558 h[
'ctime'].Draw(
'colz')
559 tc = h[
'channels'].cd(4)
560 h[
'btime'].Draw(
'colz')
561 self.
M.myPrint(h[
'channels'],
"mufilter channel dT",subdir=
'daq/expert')
565 for ix
in range(1,h[
'Cckboard'].GetNbinsX()+1):
567 for iy
in range(1,h[
'Cckboard'].GetNbinsY()+1):
568 NixSum +=h[
'Cckboard'].GetBinContent(ix,iy)
569 for iy
in range(1,h[
'Cckboard'].GetNbinsY()+1):
572 h[
'Cckboard_normalized'].SetBinContent(ix, iy, h[
'Cckboard'].GetBinContent(ix,iy)/NixSum)
573 h[
'Cckboard_normalized'].GetZaxis().SetTitle(
'normalized entries per board')
574 h[
'Cckboard_normalized'].GetZaxis().RotateTitle()
575 ut.bookCanvas(h,
'boardsAlignment_expert',
'',1024,768,2,1)
576 h[
'boardsAlignment_expert'].cd(1)
577 ROOT.gPad.SetMargin(0.15,0.15,0.1,0.1)
579 h[
'Tboard'].Draw(
'colz')
580 h[
'boardsAlignment_expert'].cd(2)
581 ROOT.gPad.SetMargin(0.15,0.15,0.1,0.1)
582 h[
'Cckboard_normalized'].Draw(
'colz')
584 self.
M.myPrint(h[
'boardsAlignment_expert'],
"board time diff",subdir=
'daq/expert')
587 ut.bookCanvas(h,
'boardsAlignment',
'',1024,768,1,1)
588 h[
'Cckboard_normalized'].Draw(
'colz')
590 self.
M.myPrint(h[
'boardsAlignment'],
"board time diff",subdir=
'daq/shifter')