ATLAS Offline Software
Public Member Functions | Public Attributes | List of all members
TileDCSDataPlotter.TileDCSDataPlotter Class Reference
Inheritance diagram for TileDCSDataPlotter.TileDCSDataPlotter:
Collaboration diagram for TileDCSDataPlotter.TileDCSDataPlotter:

Public Member Functions

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

Public Attributes

 useCool
 
 useTestBeam
 
 cmd
 
 drawer
 
 varExp
 
 iovBeg
 
 iovEnd
 
 dataGrabber
 
 info
 
 cutExp
 
 outName
 
 rangeStr
 

Detailed Description

Definition at line 15 of file TileDCSDataPlotter.py.

Constructor & Destructor Documentation

◆ __init__()

def 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 

Member Function Documentation

◆ cutReplace()

def 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()

def 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 

◆ getDistributionPlot()

def 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()

def 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()

def 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()

def 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 

◆ printDistributionStat()

def 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()

def 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()

def 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 

◆ scantree()

def 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 

Member Data Documentation

◆ cmd

TileDCSDataPlotter.TileDCSDataPlotter.cmd

Definition at line 34 of file TileDCSDataPlotter.py.

◆ cutExp

TileDCSDataPlotter.TileDCSDataPlotter.cutExp

Definition at line 45 of file TileDCSDataPlotter.py.

◆ dataGrabber

TileDCSDataPlotter.TileDCSDataPlotter.dataGrabber

Definition at line 42 of file TileDCSDataPlotter.py.

◆ drawer

TileDCSDataPlotter.TileDCSDataPlotter.drawer

Definition at line 35 of file TileDCSDataPlotter.py.

◆ info

TileDCSDataPlotter.TileDCSDataPlotter.info

Definition at line 43 of file TileDCSDataPlotter.py.

◆ iovBeg

TileDCSDataPlotter.TileDCSDataPlotter.iovBeg

Definition at line 39 of file TileDCSDataPlotter.py.

◆ iovEnd

TileDCSDataPlotter.TileDCSDataPlotter.iovEnd

Definition at line 40 of file TileDCSDataPlotter.py.

◆ outName

TileDCSDataPlotter.TileDCSDataPlotter.outName

Definition at line 50 of file TileDCSDataPlotter.py.

◆ rangeStr

TileDCSDataPlotter.TileDCSDataPlotter.rangeStr

Definition at line 60 of file TileDCSDataPlotter.py.

◆ useCool

TileDCSDataPlotter.TileDCSDataPlotter.useCool

Definition at line 21 of file TileDCSDataPlotter.py.

◆ useTestBeam

TileDCSDataPlotter.TileDCSDataPlotter.useTestBeam

Definition at line 24 of file TileDCSDataPlotter.py.

◆ varExp

TileDCSDataPlotter.TileDCSDataPlotter.varExp

Definition at line 36 of file TileDCSDataPlotter.py.


The documentation for this class was generated from the following file:
DerivationFramework::TriggerMatchingUtils::sorted
std::vector< typename R::value_type > sorted(const R &r, PROJ proj={})
Helper function to create a sorted vector from an unsorted range.
replace
std::string replace(std::string s, const std::string &s2, const std::string &s3)
Definition: hcg.cxx:307
python.processes.powheg.ZZj_MiNNLO.ZZj_MiNNLO.__init__
def __init__(self, base_directory, **kwargs)
Constructor: all process options are set here.
Definition: ZZj_MiNNLO.py:18
H5Utils::getTree
std::string getTree(const std::string &file_name)
Definition: getTree.cxx:36
XMLtoHeader.count
count
Definition: XMLtoHeader.py:84
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:232
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:26
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
scan
void scan(TDirectory *td=0, int depth=0)
Definition: listroot.cxx:440
str
Definition: BTagTrackIpAccessor.cxx:11
Trk::split
@ split
Definition: LayerMaterialProperties.h:38