ATLAS Offline Software
Loading...
Searching...
No Matches
TileDCSDataPlotter.TileDCSDataPlotter Class Reference
Inheritance diagram for TileDCSDataPlotter.TileDCSDataPlotter:
Collaboration diagram for TileDCSDataPlotter.TileDCSDataPlotter:

Public Types

typedef HLT::TypeInformation::for_each_type_c< typenameEDMLIST::map, my_functor, my_result<>, my_arg< HLT::TypeInformation::get_cont, CONTAINER > >::type result

Public Member Functions

 __init__ (self, argv, useCool, useTestBeam, verbose, dbstring=None, putDuplicates=False, hvonly=False)
 parseVarExpression (self, varExpression)
 getTree (self, drawer=None, var=None, lastOnly=False, firstAndLast=False)
 cutReplace (self, incut, var)
 scan (self)
 scantree (self, t, treevar, cut)
 getTimelinePlot (self)
 getDiffPlot (self, opt)
 getDistributionPlot (self)
 printDistributionStatAll (self)
 printDistributionStat (self, lastOnly=False)

Public Attributes

 useCool = useCool or hvonly
 useTestBeam = useTestBeam
 cmd = argv[1]
str drawer = argv[2]
 varExp = argv[3]
 iovBeg = int(time.mktime(time.strptime(beg,"%Y-%m-%d %H:%M:%S")))
 iovEnd = int(time.mktime(time.strptime(end,"%Y-%m-%d %H:%M:%S")))
 dataGrabber = TileDCSDataGrabber(dbSource, logLvl, dbstring, putDuplicates, self.iovBeg)
 info = self.dataGrabber.info
str cutExp = ""
str outName = self.drawer+"_"+self.varExp[:100]+"__"+beg+"__"+end
str rangeStr = "FROM: "+time.asctime(timeBegInfo)+" UNTIL: "+time.asctime(timeEndInfo)

Detailed Description

Definition at line 15 of file TileDCSDataPlotter.py.

Member Typedef Documentation

◆ result

Definition at line 90 of file EDM_MasterSearch.h.

Constructor & Destructor Documentation

◆ __init__()

TileDCSDataPlotter.TileDCSDataPlotter.__init__ ( self,
argv,
useCool,
useTestBeam,
verbose,
dbstring = None,
putDuplicates = False,
hvonly = False )

Definition at line 18 of file TileDCSDataPlotter.py.

18 def __init__( self, argv, useCool, useTestBeam, verbose, dbstring=None, putDuplicates=False, hvonly=False ):
19
20 dbSource = "ORACLE"
21 self.useCool = useCool or hvonly
22 if useCool:
23 dbSource = "COOL"
24 self.useTestBeam = useTestBeam
25 if useTestBeam:
26 dbSource = "TESTBEAM"
27 logLvl = logging.WARNING
28 if verbose:
29 logLvl = logging.DEBUG
30
31# self.dataGrabber = TileDCSDataGrabber(dbSource, logLvl, dbstring, putDuplicates)
32# self.info = self.dataGrabber.info
33
34 self.cmd = argv[1]
35 self.drawer = argv[2]
36 self.varExp = argv[3]
37 beg = argv[4]
38 end = argv[5]
39 self.iovBeg = int(time.mktime(time.strptime(beg,"%Y-%m-%d %H:%M:%S")))
40 self.iovEnd = int(time.mktime(time.strptime(end,"%Y-%m-%d %H:%M:%S")))
41
42 self.dataGrabber = TileDCSDataGrabber(dbSource, logLvl, dbstring, putDuplicates, self.iovBeg)
43 self.info = self.dataGrabber.info
44
45 self.cutExp = ""
46 if len(argv) >6:
47 self.cutExp = argv[6]
48 beg = beg.replace(' ','_')
49 end = end.replace(' ','_')
50 self.outName = self.drawer+"_"+self.varExp[:100]+"__"+beg+"__"+end
51 self.outName = self.outName.replace('/',':')
52 self.outName = self.outName.replace('(','0')
53 self.outName = self.outName.replace(')','0')
54 if len(argv) >7:
55 self.outName = argv[7]
56 print ("---> OUTNAME: " , self.outName)
57
58 timeBegInfo = time.localtime(self.iovBeg)
59 timeEndInfo = time.localtime(self.iovEnd)
60 self.rangeStr = "FROM: "+time.asctime(timeBegInfo)+" UNTIL: "+time.asctime(timeEndInfo)
61
62 part=["LBA","LBC","EBA","EBC"]
63 if self.drawer == "ALL":
64 self.drawer=""
65 for p in range(4):
66 for m in range(64):
67 self.drawer+="%s%2.2d," % (part[p],m+1)
68 self.drawer=self.drawer[:-1]
69 elif self.drawer in part:
70 p=self.drawer
71 self.drawer=""
72 for m in range(64):
73 self.drawer+="%s%2.2d," % (p,m+1)
74 self.drawer=self.drawer[:-1]
75
76
std::string replace(std::string s, const std::string &s2, const std::string &s3)
Definition hcg.cxx:310

Member Function Documentation

◆ cutReplace()

TileDCSDataPlotter.TileDCSDataPlotter.cutReplace ( self,
incut,
var )
Relace "ALL" keywords in cut variable by appropriate names from var variable

Definition at line 243 of file TileDCSDataPlotter.py.

243 def cutReplace(self, incut, var):
244 """
245 Relace "ALL" keywords in cut variable by appropriate names from var variable
246
247 """
248
249 cut = incut
250 for vv in var.split("-"):
251 if "hvOut" in vv:
252 if "Set" in vv:
253 cut = cut.replace("ALL_SETHV",vv)
254 cut = cut.replace("ALL_HVSET",vv)
255 vvv=vv.replace("Set.hv","hv")
256 cut = cut.replace("ALL_HV",vvv)
257 else:
258 vvv=vv.replace("hv","Set.hv")
259 cut = cut.replace("ALL_SETHV",vvv)
260 cut = cut.replace("ALL_HVSET",vvv)
261 cut = cut.replace("ALL_HV",vv)
262 cut = cut.replace("ALL",var)
263 return cut
264
265

◆ getDiffPlot()

TileDCSDataPlotter.TileDCSDataPlotter.getDiffPlot ( self,
opt )
Returns a TCanvas with 2D plot showing difference between last and first entries.

Definition at line 439 of file TileDCSDataPlotter.py.

439 def getDiffPlot(self,opt):
440 """
441 Returns a TCanvas with 2D plot showing difference between last and first entries.
442
443 """
444
445 ROOT.gStyle.SetOptStat(0)
446 tree = self.getTree(firstAndLast=(opt==1))
447
448 if tree.GetEntries()==1:
449 print ("ERROR: Only one data point, need at least 2")
450 print ("---> Try increasing the time span")
451 sys.exit(1)
452
453 if len(self.cutExp) and "ALL" not in self.cutExp:
454 print ("Cut expression is ignored in diff plot")
455
456 #=== extract the values
457 leaves=tree.GetListOfLeaves()
458 xaxis=[]
459 yaxis=[]
460 for leaf in leaves:
461 z=leaf.GetTitle().split('.')
462 if len(z)==2 or (len(z)==3 and z[1]=="Set"):
463 x=z[0]
464 y=z[1]
465 if len(z)==3:
466 y+= "."+z[2]
467 if not y[-2].isdigit() and y[-1].isdigit():
468 y=y[:-2]+'0'+y[-1]
469 if x not in xaxis:
470 xaxis+=[x]
471 if y not in yaxis:
472 yaxis+=[y]
473 xaxis.sort()
474 yaxis.sort()
475 nx=len(xaxis)
476 ny=len(yaxis)
477 if opt==1:
478 pref="Diff "
479 elif opt==2:
480 pref="Diff_Prof "
481 elif opt==3:
482 pref="Prof "
483 else:
484 pref=""
485 if opt==1:
486 hist=ROOT.TH2F("hist2D",pref+self.outName,nx,-0.5,nx-0.5,ny,-0.5,ny-0.5)
487 else:
488 hist=ROOT.TProfile2D("hist2D",pref+self.outName,nx,-0.5,nx-0.5,ny,-0.5,ny-0.5)
489
490 XA=hist.GetXaxis()
491 n=0
492 for i in range(nx):
493 if n:
494 XA.SetBinLabel(i + 1, '')
495 else:
496 XA.SetBinLabel(i + 1, xaxis[i])
497 n=1-n
498
499 YA=hist.GetYaxis()
500 for i in range(ny):
501 YA.SetBinLabel(i + 1, yaxis[i])
502
503 tree.GetEntry(0)
504 val = {}
505 for leaf in leaves:
506 if opt>2:
507 val[leaf.GetTitle()] = 0
508 else:
509 val[leaf.GetTitle()] = leaf.GetValue()
510
511 ne=tree.GetEntries()
512 if opt==1:
513 n1=ne-1
514 elif opt==2:
515 n1=1
516 else:
517 n1=0
518 bar = progressBar(n1,ne, 78)
519 for n in range(n1,ne):
520 tree.GetEntry(n)
521 bar.update(n)
522 for leaf in leaves:
523 v1=val[leaf.GetTitle()]
524 z=leaf.GetTitle().split('.')
525 if len(z)==2 or (len(z)==3 and z[1]=="Set"):
526 x=z[0]
527 y=z[1]
528 if len(z)==3:
529 y+= "."+z[2]
530 if not y[-2].isdigit() and y[-1].isdigit():
531 y=y[:-2]+'0'+y[-1]
532 v2=leaf.GetValue()
533 if "ALL" in self.cutExp:
534 var=str(v2)
535 vardiff=str(v2-v1)
536 cut = self.cutExp.replace("ALL_DIFF",vardiff)
537 cut = self.cutReplace(cut,var)
538 ok = eval(cut)
539 #print (cut)
540 #print (ok)
541 else:
542 ok = True
543 if ok:
544 hist.Fill(xaxis.index(x),yaxis.index(y),v2-v1)
545 bar.done()
546
547 return hist
548
549
std::vector< std::string > split(const std::string &s, const std::string &t=":")
Definition hcg.cxx:177

◆ getDistributionPlot()

TileDCSDataPlotter.TileDCSDataPlotter.getDistributionPlot ( self)
Returns a TCanvas with the variable distribution plotted (using weights)

Definition at line 551 of file TileDCSDataPlotter.py.

551 def getDistributionPlot(self):
552 """
553 Returns a TCanvas with the variable distribution plotted (using weights)
554
555 """
556
557 t = self.getTree()
558
559 hh=[]
560 ih=0
561 color = [2,4,3,5,6,7]
562 xmin=1000000000
563 xmax=-1000000000
564 ymin=1000000000
565 ymax=-1000000000
566 hmin=1000000000
567 hmax=-1000000000
568 dim=0
569 xtit=""
570 ytit=""
571 for var in sorted(self.varExp.split(",")):
572 cut=self.cutExp
573 dim = var.count(':')
574 if dim>0:
575 varX = var.split(":")[1]
576 varY = var.split(":")[0]
577 if len(cut):
578 cutY = self.cutReplace(cut,varY)
579 cut = self.cutReplace(cut,varX)
580 cut = "("+cut+") && ("+cutY+")"
581 else:
582 varX=var
583 varY=""
584 if len(cut):
585 cut = self.cutReplace(cut,varX)
586 if cut!="":
587 cut = "weight*("+cut+")"
588 else:
589 cut = "weight"
590 #print (var)
591 #print (cut)
592
593 t.Draw(var,cut,"goff")
594 h = ROOT.gDirectory.Get("htemp")
595 h.SetXTitle(var.split(":")[0])
596 h.SetTitle(self.rangeStr)
597 h.SetName("TileDCSDataPlotter"+str(ih))
598 #print ("n=",h.GetEntries())
599
600 if h.GetEntries()>0:
601 xmi = h.GetXaxis().GetBinLowEdge(1)
602 xma = h.GetXaxis().GetBinLowEdge(h.GetNbinsX())+h.GetXaxis().GetBinWidth(h.GetNbinsX())
603 if xmi<xmin:
604 xmin=xmi
605 if xma>xmax:
606 xmax=xma
607 if dim>0:
608 ymi = h.GetYaxis().GetBinLowEdge(1)
609 yma = h.GetYaxis().GetBinLowEdge(h.GetNbinsY())+h.GetYaxis().GetBinWidth(h.GetNbinsY())
610 if ymi<ymin:
611 ymin=ymi
612 if yma>ymax:
613 ymax=yma
614 hmi = h.GetMinimum()
615 hma = h.GetMaximum()
616 if hmi<hmin:
617 hmin=hmi
618 if hma>hmax:
619 hmax=hma
620 xtit+=varX+","
621 if dim>0:
622 ytit+=varY+","
623
624 h.SetLineColor(color[ih%len(color)])
625 h.SetMarkerColor(color[ih%len(color)])
626
627 ih+=1
628 hh+=[h]
629
630 if len(hh)>1:
631 if xmin>xmax:
632 xmin=0
633 xmax=0
634 delta=(xmax-xmin)/20.
635 if delta<=0:
636 delta=0.5
637 xmin-=delta
638 xmax+=delta
639 if ymin>ymax:
640 ymin=0
641 ymax=0
642 delta=(ymax-ymin)/20.
643 if delta<=0:
644 delta=0.5
645 ymin-=delta
646 ymax+=delta
647 if hmin>hmax:
648 hmin=0
649 hmax=1
650 delta=(hmax-hmin)/20.
651 if delta<=0:
652 delta=0.5
653 if hmin!=0:
654 hmin-=delta
655 hmax+=delta
656 if dim>0:
657 h0 = TH2D("hDCS","dummy",2,xmin,xmax,2,ymin,ymax)
658 h0.SetYTitle(ytit[:-1])
659 else:
660 h0 = TH1D("hDCS","dummy",2,xmin,xmax)
661 h0.SetXTitle(xtit[:-1])
662 h0.SetTitle(self.rangeStr)
663 h0.SetMaximum(hmax)
664 if hmin!=0:
665 h0.SetMinimum(hmin)
666 hh=[h0]+hh
667 ROOT.gStyle.SetOptStat(0)
668
669 return hh
670
671

◆ getTimelinePlot()

TileDCSDataPlotter.TileDCSDataPlotter.getTimelinePlot ( self)
Returns a TCanvas with the variable plotted vs time.

Definition at line 336 of file TileDCSDataPlotter.py.

336 def getTimelinePlot(self):
337 """
338 Returns a TCanvas with the variable plotted vs time.
339
340 """
341
342 ROOT.gStyle.SetOptStat(0)
343 t = self.getTree()
344
345 if t.GetEntries()==1:
346 print ("ERROR: Only one data point, need at least 2")
347 print ("---> Try increasing the time span")
348 sys.exit(1)
349
350 #=== extract the values
351 hh=[]
352 ih=0
353 hmin=1000000000
354 hmax=-1000000000
355 color = [2,4,3,5,6,7]
356 for var in self.varExp.split(","):
357 cut=self.cutReplace(self.cutExp,var)
358 #print (var)
359 #print (cut)
360 t.Draw(var+":EvTime",cut,"goff")
361 n = t.GetSelectedRows()
362 if len(cut)>0:
363 print ("var=",var," \tcut=",cut," \tnpoints=",n)
364 else:
365 print ("var=",var," \tnpoints=",n)
366 if n>0: # at least one point passed the cut
367 x1 = t.GetV2()
368 y1 = t.GetV1()
369 x = TArrayD(n)
370 y = TArrayD(n)
371 for i in range(n):
372 x[i] = x1[i]
373 y[i] = y1[i]
374
375 t.Draw(var+":EvTime","","goff") # the same but without cut
376 n0 = t.GetSelectedRows()
377 x0 = t.GetV2()
378
379 #=== fix for **** root time convention and add end time
380 offset = 788918400 # = 1.1.1995(UTC), the root offset
381 xarr = TArrayD(n0+1)
382 for i in range(n0):
383 xarr[i] = x0[i]-offset
384 xarr[n0] = self.iovEnd-offset
385 #=== create and fill histogram with values
386 title = var
387 h = TH1D("hDCS"+str(ih),title,n0,xarr.GetArray())
388 for i in range(n):
389 h.Fill(x[i]-offset,y[i])
390 if y[i]>hmax:
391 hmax=y[i]
392 if y[i]<hmin:
393 hmin=y[i]
394
395 #=== set time display
396 sec_min = 60
397 sec_hrs = sec_min*60
398 sec_day = sec_hrs*24
399 sec_mon = sec_day*30
400 timeDiff = self.iovEnd-self.iovBeg
401 h.GetXaxis().SetTimeFormat("%S")
402 h.SetXTitle("time [seconds]")
403 if timeDiff > 12*sec_mon:
404 h.GetXaxis().SetTimeFormat("%m/%y")
405 h.SetXTitle("time [month/year]")
406 #elif timeDiff >3.33448*sec_mon:
407 elif timeDiff > 6*sec_day:
408 h.GetXaxis().SetTimeFormat("%d/%m")
409 h.SetXTitle("time [day/month]")
410 elif timeDiff > 2*sec_day:
411 h.GetXaxis().SetTimeFormat("%d(%H)")
412 h.SetXTitle("time [day(hour)]")
413 elif timeDiff > 2*sec_hrs:
414 h.GetXaxis().SetTimeFormat("%H:%M")
415 h.SetXTitle("time [hour:min]")
416 elif timeDiff > 2*sec_min:
417 h.GetXaxis().SetTimeFormat("%M")
418 h.SetXTitle("time [min]")
419 h.GetXaxis().SetTimeDisplay(1)
420 h.SetLineColor(color[ih%len(color)])
421
422 ih+=1
423 hh+=[h]
424
425 if len(hh)>1:
426 delta=(hmax-hmin)/20.
427 if delta<=0:
428 delta=0.5
429 hmin-=delta
430 hmax+=delta
431 for h in hh:
432 h.SetMaximum(hmax)
433 h.SetMinimum(hmin)
434
435 return hh
436
437

◆ getTree()

TileDCSDataPlotter.TileDCSDataPlotter.getTree ( self,
drawer = None,
var = None,
lastOnly = False,
firstAndLast = False )

Definition at line 148 of file TileDCSDataPlotter.py.

148 def getTree(self, drawer=None, var=None,lastOnly=False,firstAndLast=False):
149
150 #=== parse for variables needed
151 varList = self.parseVarExpression(self.varExp+" "+self.cutExp)
152
153 #=== get the variable
154 if drawer is None:
155 t = self.dataGrabber.getDCSTree(self.iovBeg, self.iovEnd, self.drawer.split(","), varList, lastOnly, firstAndLast)
156 elif var is None:
157 drl=[drawer]
158 t = self.dataGrabber.getDCSTree(self.iovBeg, self.iovEnd, drl, varList, lastOnly, firstAndLast)
159 else:
160 drl=[drawer]
161 varl=[var]
162 t = self.dataGrabber.getDCSTree(self.iovBeg, self.iovEnd, drl, varl, lastOnly, firstAndLast)
163
164 if t.GetEntries()==0:
165 print ("ERROR: No data in time interval!")
166 sys.exit(1)
167 else:
168 print ("Found number of entries: ", t.GetEntries())
169
170 #=== append drawer to all variables
171 if self.cmd!="tree" and drawer is None and var is None:
172 for var in varList:
173 if "," in self.drawer:
174 newvar=""
175 newcut=""
176 if var in self.cutExp:
177 cut=self.cutExp
178 else:
179 cut=None
180 for dr in self.drawer.split(","):
181 newvar += dr+"."+var+","
182 if cut:
183 newcut += dr+"."+cut+","
184 self.varExp = self.varExp.replace(var,newvar[:-1])
185 if cut:
186 self.cutExp = newcut[:-1]
187 self.varExp = self.varExp.replace("Set."+newvar[:-1],"Set."+var)
188 if cut and "Set." in cut and "Set." not in var:
189 self.cutExp=cut
190 else:
191 self.varExp = self.varExp.replace(var,self.drawer+"."+var)
192 self.cutExp = self.cutExp.replace(var,self.drawer+"."+var)
193 self.varExp = self.varExp.replace(self.drawer+"."+self.drawer,self.drawer)
194 self.cutExp = self.cutExp.replace(self.drawer+"."+self.drawer,self.drawer)
195 self.varExp = self.varExp.replace("Set."+self.drawer,"Set")
196 self.cutExp = self.cutExp.replace("Set."+self.drawer,"Set")
197 if "ALL_LVPS_AI" in self.varExp:
198 newvar=""
199 for dr in self.drawer.split(","):
200 for var in list(self.info.vars_LVPS_AI.keys()):
201 newvar += dr+"."+var+","
202 self.varExp = self.varExp.replace("ALL_LVPS_AI",newvar[:-1])
203
204 if "ALL_LVPS_STATES" in self.varExp:
205 newvar=""
206 for dr in self.drawer.split(","):
207 for var in list(self.info.vars_LVPS_STATES.keys()):
208 newvar += dr+"."+var+","
209 self.varExp = self.varExp.replace("ALL_LVPS_STATES",newvar[:-1])
210
211 if "ALL_HV-ALL_SETHV" in self.varExp or "ALL_HV-ALL_HVSET" in self.varExp:
212 newvar=""
213 for dr in self.drawer.split(","):
214 for var in list(self.info.vars_HVSET.keys()):
215 if not ("Set.vFix" in var or "Set.hvIn" in var or "Set.volt" in var or "Set.temp" in var):
216 newvar += dr+"."+var.replace("Set.","")+"-"+dr+"."+var+","
217 self.varExp = self.varExp.replace("ALL_HV-ALL_SETHV",newvar[:-1])
218 self.varExp = self.varExp.replace("ALL_HV-ALL_HVSET",newvar[:-1])
219 if "ALL_HVSET" in self.varExp or "ALL_SETHV" in self.varExp:
220 newvar=""
221 for dr in self.drawer.split(","):
222 for var in list(self.info.vars_HVSET.keys()):
223 if not self.useCool or not ("Set.vFix" in var or "Set.hvIn" in var or "Set.volt" in var or "Set.temp" in var):
224 newvar += dr+"."+var+","
225 self.varExp = self.varExp.replace("ALL_HVSET",newvar[:-1])
226 self.varExp = self.varExp.replace("ALL_SETHV",newvar[:-1])
227 if "ALL_HV" in self.varExp and "ALL_HVSET" not in self.varExp :
228 newvar=""
229 for dr in self.drawer.split(","):
230 for var in list(self.info.vars_HV.keys()):
231 if not self.useCool or not ("hvIn" in var or "volt" in var or "temp" in var):
232 newvar += dr+"."+var+","
233 self.varExp = self.varExp.replace("ALL_HV",newvar[:-1])
234
235 print ("self.drawer: ", self.drawer)
236 print ("self.varExp: ", self.varExp)
237 print ("self.cutExp: ", self.cutExp)
238
239 return t
240
241

◆ parseVarExpression()

TileDCSDataPlotter.TileDCSDataPlotter.parseVarExpression ( self,
varExpression )

Definition at line 78 of file TileDCSDataPlotter.py.

78 def parseVarExpression(self, varExpression):
79
80 knownVars = self.info.get_all_variables()
81 varDict = {}
82 for var in knownVars:
83 pos = varExpression.find(var)
84 if pos>-1:
85 oldVar=""
86 if pos in varDict:
87 #=== other variable found at same place?
88 #=== -> choose the longer one
89 oldVar = varDict[pos]
90 if len(oldVar) > len(var):
91 vtmp = var
92 var = oldVar
93 oldVar = vtmp
94 varDict[pos] = var
95 if oldVar!="":
96 #=== check if shorter variable is also present at another place
97 varExpr = varExpression
98 for v in list(varDict.values()):
99 varExpr=varExpr.replace(v," "*len(v))
100 oldPos = varExpr.find(oldVar)
101 if oldPos>-1:
102 varDict[oldPos] = oldVar
103
104 #=== check for overlap
105 positions = sorted(varDict.keys())
106 posLength = len(positions)
107 if posLength > 1:
108 iPos = 1
109 while iPos < posLength:
110 if positions[iPos] < positions[iPos-1]+len(varDict[positions[iPos-1]]):
111 varDict.pop(positions[iPos])
112 positions.pop(iPos)
113 posLength=len(positions)
114 else:
115 iPos+=1
116
117 varList = list(varDict.values())
118 if "ALL_LVPS_AI" in varExpression:
119 varList.extend(list(self.info.vars_LVPS_AI.keys()))
120 if "ALL_LVPS_STATES" in varExpression:
121 varList.extend(list(self.info.vars_LVPS_STATES.keys()))
122 if "ALL_HVSET" in varExpression or "ALL_SETHV" in varExpression:
123 varList.extend(list(self.info.vars_HVSET.keys()))
124 if self.useCool or ("ALL_HV-ALL_SETHV" in varExpression or "ALL_HV-ALL_HVSET" in varExpression):
125 for i in range(2):
126 if "Set.vFix1%d" % (i+1) in varList:
127 varList.remove("Set.vFix1%d" % (i+1))
128 for i in range(4):
129 varList.remove("Set.hvIn%d" % (i+1))
130 for i in range(7):
131 varList.remove("Set.volt%d" % (i+1))
132 for i in range(7):
133 varList.remove("Set.temp%d" % (i+1))
134 if ("ALL_HV" in varExpression and "ALL_HVSET" not in varExpression) or "ALL_HV-ALL_HVSET" in varExpression:
135 varList.extend(list(self.info.vars_HV.keys()))
136 if self.useCool or ("ALL_HV-ALL_SETHV" in varExpression or "ALL_HV-ALL_HVSET" in varExpression):
137 for i in range(4):
138 varList.remove("hvIn%d" % (i+1))
139 for i in range(7):
140 varList.remove("volt%d" % (i+1))
141 for i in range(7):
142 varList.remove("temp%d" % (i+1))
143
144 return list(set(varList))
145
146
STL class.

◆ printDistributionStat()

TileDCSDataPlotter.TileDCSDataPlotter.printDistributionStat ( self,
lastOnly = False )
Print mean values from histograms

Definition at line 699 of file TileDCSDataPlotter.py.

699 def printDistributionStat(self, lastOnly=False):
700 """
701 Print mean values from histograms
702
703 """
704
705 if "ALL_LVPS_AI" in self.varExp:
706 self.varExp = self.varExp.replace("ALL_LVPS_AI",",".join(sorted(self.info.vars_LVPS_AI.keys())))
707 if "ALL_LVPS_STATES" in self.varExp:
708 self.varExp = self.varExp.replace("ALL_LVPS_STATES",",".join(sorted(self.info.vars_LVPS_STATES.keys())))
709 if "ALL_HV-ALL_SETHV" in self.varExp or "ALL_HV-ALL_HVSET" in self.varExp:
710 vlist = []
711 for var in list(self.info.vars_HVSET.keys()):
712 if not ("Set.vFix" in var or "Set.hvIn" in var or "Set.volt" in var or "Set.temp" in var):
713 vlist += [var.replace("Set.","")+"-"+var]
714 self.varExp = self.varExp.replace("ALL_HV-ALL_SETHV",",".join(sorted(vlist)))
715 self.varExp = self.varExp.replace("ALL_HV-ALL_HVSET",",".join(sorted(vlist)))
716 if "ALL_HVSET" in self.varExp or "ALL_SETHV" in self.varExp:
717 vlist = list(self.info.vars_HVSET.keys())
718 if self.useCool:
719 for i in range(2):
720 if "Set.vFix1%d" % (i+1) in vlist:
721 vlist.remove("Set.vFix1%d" % (i+1))
722 for i in range(4):
723 vlist.remove("Set.hvIn%d" % (i+1))
724 for i in range(7):
725 vlist.remove("Set.volt%d" % (i+1))
726 for i in range(7):
727 vlist.remove("Set.temp%d" % (i+1))
728 self.varExp = self.varExp.replace("ALL_HVSET",",".join(sorted(vlist)))
729 self.varExp = self.varExp.replace("ALL_SETHV",",".join(sorted(vlist)))
730 if "ALL_HV" in self.varExp and "ALL_HVSET" not in self.varExp:
731 vlist = list(self.info.vars_HV.keys())
732 if self.useCool:
733 for i in range(4):
734 vlist.remove("hvIn%d" % (i+1))
735 for i in range(7):
736 vlist.remove("volt%d" % (i+1))
737 for i in range(7):
738 vlist.remove("temp%d" % (i+1))
739 self.varExp = self.varExp.replace("ALL_HV",",".join(sorted(vlist)))
740 varlist=self.parseVarExpression(self.varExp)
741 print ("var list is",varlist)
742
743 reslist=[]
744 cutlist = self.parseVarExpression(self.cutExp)
745 print ("cut list is",cutlist)
746 fulllist=sorted(list(set(varlist+cutlist)))
747 print ("full list is",fulllist)
748 t = None
749 drlistprev=[]
750 varlistprev=[]
751 for drawer in self.drawer.split(","):
752 drlist=[drawer]
753 for v in self.varExp.split(","):
754 varlist=self.parseVarExpression(v)
755 varlist += cutlist
756 varlist=sorted(list(set(varlist)))
757 #for drawer in self.drawer.split(","):
758 # drlist=[drawer]
759 if not (t and drlist==drlistprev and varlist==varlistprev):
760 t = self.dataGrabber.getDCSTree(self.iovBeg, self.iovEnd, drlist, varlist, lastOnly)
761 drlistprev=drlist
762 varlistprev=varlist
763 if t and t.GetEntries()>0:
764 var = v
765 cut = self.cutReplace(self.cutExp,var)
766 for va in varlist:
767 var = var.replace(va,drawer+"."+va)
768 cut = cut.replace(va,drawer+"."+va)
769 var = var.replace(drawer+"."+drawer,drawer)
770 cut = cut.replace(drawer+"."+drawer,drawer)
771 var = var.replace("Set."+drawer,"Set")
772 cut = cut.replace("Set."+drawer,"Set")
773 print ("var is",var)
774 print ("cut is",cut)
775 t.Draw(var,cut,"goff")
776 h = ROOT.gDirectory.Get("htemp")
777 if h:
778 if cut!="":
779 reslist.append((var+" CUT "+cut,self.rangeStr,h.GetEntries(),h.GetMean(),h.GetRMS()))
780 else:
781 reslist.append((var,self.rangeStr,h.GetEntries(),h.GetMean(),h.GetRMS()))
782 else:
783 reslist.append((var,self.rangeStr,-1,0.0,0.0))
784
785 if lastOnly:
786 for res in reslist:
787 print ("%-25s %s Last %-9.3f" % (res[0],res[1],res[3]))
788 else:
789 for res in reslist:
790 print ("%-25s %s Nentries %-7d Mean %-9.3f RMS %-9.4f" % res)
791 return 0
792
793
794#================================================================================================
795
796
797#==== interactive use

◆ printDistributionStatAll()

TileDCSDataPlotter.TileDCSDataPlotter.printDistributionStatAll ( self)
Print mean values from histograms

Definition at line 673 of file TileDCSDataPlotter.py.

673 def printDistributionStatAll(self):
674 """
675 Print mean values from histograms
676
677 """
678
679 t = self.getTree()
680 if self.cutExp!="":
681 for v, c in zip(self.varExp.split(","), self.cutExp.split(",")):
682 t.Draw(v,c,"goff")
683 h = ROOT.gDirectory.Get("htemp")
684
685 print ("%s %s %s Nentries %d Mean %7.3f RMS %8.4f" % \
686 (v,c,self.rangeStr,h.GetEntries(),h.GetMean(),h.GetRMS()))
687 else:
688 cut = ""
689 for v in self.varExp.split(","):
690 t.Draw(v,cut,"goff")
691 h = ROOT.gDirectory.Get("htemp")
692 print ("%s %s Nentries %d Mean %7.3f RMS %8.4f" % \
693 (v,self.rangeStr,h.GetEntries(),h.GetMean(),h.GetRMS()))
694
695 return 0
696
697

◆ scan()

TileDCSDataPlotter.TileDCSDataPlotter.scan ( self)
Scan ROOT TTree and show all values on the screen

Definition at line 267 of file TileDCSDataPlotter.py.

267 def scan(self):
268 """
269 Scan ROOT TTree and show all values on the screen
270
271 """
272
273 t = self.getTree()
274 if "ALL" in self.cutExp or self.varExp.count(',')>2 :
275 #=== extract the values
276 for var in self.varExp.split(","):
277 treevar="EvTime:"+var
278 cut=self.cutReplace(self.cutExp,var)
279 self.scantree(t,treevar,cut)
280 else:
281 treevar="EvTime:"+self.varExp.replace(",",":")
282 self.scantree(t,treevar,self.cutExp)
283
284 return
285
286
int count(std::string s, const std::string &regx)
count how many occurances of a regx are in a string
Definition hcg.cxx:146
void scan(TDirectory *td=0, int depth=0)
Definition listroot.cxx:440

◆ scantree()

TileDCSDataPlotter.TileDCSDataPlotter.scantree ( self,
t,
treevar,
cut )
Scan ROOT TTree and show up to 4 variables on the screen

Definition at line 288 of file TileDCSDataPlotter.py.

288 def scantree(self,t,treevar,cut):
289 """
290 Scan ROOT TTree and show up to 4 variables on the screen
291
292 """
293
294 #t.Scan("-1000000000+"+treevar,cut)
295 t.Draw(treevar,cut,"goff")
296 n = t.GetSelectedRows()
297 if n>0: # at least one point passed the cut
298 vars = treevar.split(":")
299 nv = len(vars)
300 fmt = [ "%d" ]
301 for i in range(1,nv):
302 if "DAQ" in vars[i]:
303 fmt += [ "\t%6d\t\t" ]
304 else:
305 fmt += [ "\t%6.2f\t" ]
306 x = t.GetV1()
307 v1 = None
308 v2 = None
309 v3 = None
310 v=vars[0]
311 if v=="EvTime": v += 13*" "
312 if nv>1:
313 v1 = t.GetV2()
314 v += "\t"+vars[1]
315 if nv>2:
316 v2 = t.GetV3()
317 v += "\t"+vars[2]
318 if nv>3:
319 v3 = t.GetV4()
320 v += "\t"+vars[3]
321 print(v)
322 for i in range(n):
323 v=""
324 if v1 is not None:
325 v += fmt[1] % v1[i]
326 if v2 is not None:
327 v += fmt[2] % v2[i]
328 if v3 is not None:
329 v += fmt[3] % v3[i]
330 dt = datetime.datetime.fromtimestamp(int(x[i])).strftime('%Y-%m-%d %H:%M:%S')
331 print(dt,v)
332 return
333
334
void print(char *figname, TCanvas *c1)

Member Data Documentation

◆ cmd

TileDCSDataPlotter.TileDCSDataPlotter.cmd = argv[1]

Definition at line 34 of file TileDCSDataPlotter.py.

◆ cutExp

TileDCSDataPlotter.TileDCSDataPlotter.cutExp = ""

Definition at line 45 of file TileDCSDataPlotter.py.

◆ dataGrabber

TileDCSDataPlotter.TileDCSDataPlotter.dataGrabber = TileDCSDataGrabber(dbSource, logLvl, dbstring, putDuplicates, self.iovBeg)

Definition at line 42 of file TileDCSDataPlotter.py.

◆ drawer

TileDCSDataPlotter.TileDCSDataPlotter.drawer = argv[2]

Definition at line 35 of file TileDCSDataPlotter.py.

◆ info

TileDCSDataPlotter.TileDCSDataPlotter.info = self.dataGrabber.info

Definition at line 43 of file TileDCSDataPlotter.py.

◆ iovBeg

TileDCSDataPlotter.TileDCSDataPlotter.iovBeg = int(time.mktime(time.strptime(beg,"%Y-%m-%d %H:%M:%S")))

Definition at line 39 of file TileDCSDataPlotter.py.

◆ iovEnd

TileDCSDataPlotter.TileDCSDataPlotter.iovEnd = int(time.mktime(time.strptime(end,"%Y-%m-%d %H:%M:%S")))

Definition at line 40 of file TileDCSDataPlotter.py.

◆ outName

TileDCSDataPlotter.TileDCSDataPlotter.outName = self.drawer+"_"+self.varExp[:100]+"__"+beg+"__"+end

Definition at line 50 of file TileDCSDataPlotter.py.

◆ rangeStr

TileDCSDataPlotter.TileDCSDataPlotter.rangeStr = "FROM: "+time.asctime(timeBegInfo)+" UNTIL: "+time.asctime(timeEndInfo)

Definition at line 60 of file TileDCSDataPlotter.py.

◆ useCool

TileDCSDataPlotter.TileDCSDataPlotter.useCool = useCool or hvonly

Definition at line 21 of file TileDCSDataPlotter.py.

◆ useTestBeam

TileDCSDataPlotter.TileDCSDataPlotter.useTestBeam = useTestBeam

Definition at line 24 of file TileDCSDataPlotter.py.

◆ varExp

TileDCSDataPlotter.TileDCSDataPlotter.varExp = argv[3]

Definition at line 36 of file TileDCSDataPlotter.py.


The documentation for this class was generated from the following file: