ATLAS Offline Software
Functions
python.plotting.G4DebuggerUtils Namespace Reference

Functions

def rename (label)
 
def fillHisto (h, catDict, i, p, cat)
 
def setFillLineColor (h, p, hcolors)
 
def divide (hs1, hs2)
 
def plotSummaryRatio (dict1, dict2, xaxis, v1, v2, directory="", name="")
 
def plotHistogramRatio (h1, h2, v1, v2, lab, ALL, hisType, directory)
 
def plot2D (h, G4Version, v, ALL_STEPS, yaxis, directory)
 

Function Documentation

◆ divide()

def python.plotting.G4DebuggerUtils.divide (   hs1,
  hs2 
)

Definition at line 43 of file G4DebuggerUtils.py.

43 def divide(hs1,hs2):
44  h1 = hs1.GetStack().Last().Clone()
45  h2 = hs2.GetStack().Last().Clone()
46  name = h1.GetName()+"ratio"
47  nHalf = int(h1.GetNbinsX()/2)
48  h = ROOT.TH1F(name,name,nHalf,0,nHalf)
49  for i in range(nHalf):
50  denum = h1.GetBinContent(1+2*i) if h1.GetBinContent(1+2*i)!=0 else -1
51  h.SetBinContent(i+1,h2.GetBinContent(1+2*i+1)/denum)
52  binLabel = rename(h1.GetXaxis().GetBinLabel(1+2*i))
53  h.GetXaxis().SetBinLabel(1+i, binLabel)
54  return h
55 
56 

◆ fillHisto()

def python.plotting.G4DebuggerUtils.fillHisto (   h,
  catDict,
  i,
  p,
  cat 
)

Definition at line 21 of file G4DebuggerUtils.py.

21 def fillHisto(h,catDict,i,p,cat):
22  if cat in catDict.keys() and p in catDict[cat].keys():
23  h.SetBinContent(i,catDict[cat][p])
24  else:
25  h.SetBinContent(i,0)
26  if not cat in translate.keys():
27  h.GetXaxis().SetBinLabel(i, cat)
28  else:
29  h.GetXaxis().SetBinLabel(i, translate[cat])
30 

◆ plot2D()

def python.plotting.G4DebuggerUtils.plot2D (   h,
  G4Version,
  v,
  ALL_STEPS,
  yaxis,
  directory 
)

Definition at line 257 of file G4DebuggerUtils.py.

257 def plot2D(h,G4Version,v,ALL_STEPS,yaxis,directory):
258  if not h:
259  return
260  uniqueName = h.GetName()+G4Version+v
261  canv = ROOT.TCanvas(uniqueName+"c",uniqueName+"c",800,600)
262  canv.SetRightMargin(0.20)
263  canv.SetTopMargin(0.07)
264  if not yaxis:
265  canv.SetLogz()
266  nx = h.GetNbinsX()
267  ny = h.GetNbinsY()
268  integral = h.Integral(0,nx+1,0,ny+1)
269  h.Draw("COLZ")
270  h.GetXaxis().SetTitle("z [mm]")
271  h.GetYaxis().SetTitle("r [mm]")
272  h.GetZaxis().SetTitle("Steps" if not yaxis else yaxis)
273  h.GetZaxis().SetTitleOffset(1.2)
274  h.GetXaxis().SetNdivisions(505)
275  if AtlasStyle:
276  ROOT.ATLASLabel(0.18,0.87,"Simulation Internal",1)
277  ROOT.myText(0.18,0.81,1,"#sqrt{s}=13 TeV, G4.%s" % G4Version)
278  ROOT.myText(0.18,0.75,1,v + (" (%2.1f%s)" % (100*integral/ALL_STEPS,"%")) if ALL_STEPS else "")
279  ROOT.gPad.RedrawAxis()
280  if not yaxis:
281  canv.Print(os.path.join(directory,"2DMapGeant4.%s.pdf" % G4Version))
282  canv.Print(os.path.join(directory,"2DMapGeant4.%s.png" % G4Version))
283  else:
284  canv.Print(os.path.join(directory,"2DMapDiff.pdf"))
285  canv.Print(os.path.join(directory,"2DMapDiff.png"))

◆ plotHistogramRatio()

def python.plotting.G4DebuggerUtils.plotHistogramRatio (   h1,
  h2,
  v1,
  v2,
  lab,
  ALL,
  hisType,
  directory 
)

Definition at line 158 of file G4DebuggerUtils.py.

158 def plotHistogramRatio(h1,h2,v1,v2,lab,ALL,hisType,directory):
159 
160  leg = ROOT.TLegend(0.18,0.74-0.05*len(h1),0.4,0.74)
161  leg.SetNColumns(2)
162  leg.SetBorderSize(0)
163  leg.SetFillColor(0)
164  leg.SetFillStyle(0)
165  leg.SetTextSize(0.045)
166 
167  hs = ROOT.THStack()
168  hsR = ROOT.THStack()
169 
170  underflow1 = 0
171  underflow2 = 0
172  all1 = 0
173  all2 = 0
174 
175  uniqueName = ""
176 
177  for p in particles:
178  if not p in h1.keys(): continue
179  if not p in h2.keys(): continue
180  uniqueName = h1[p].GetName()
181  hs.Add(h2[p])
182  hs.Add(h1[p])
183  h1[p].SetLineColor(colors[p]+2)
184  h2[p].SetLineColor(colorsNew[p])
185  underflow1 += h1[p].GetBinContent(0)
186  underflow2 += h2[p].GetBinContent(0)
187  all1 += h1[p].GetEntries()
188  all2 += h2[p].GetEntries()
189  # print(h1[p]," ",all1)
190  hR = h2[p].Clone()
191  hR.Divide(h1[p])
192  # hR.Smooth()
193  hR.SetMarkerSize(0)
194  hR.SetMarkerStyle(0)
195  hR.SetBinContent(0,1)
196  hsR.Add(hR)
197  leg.AddEntry(h1[p],"#font[42]{%s}"%p,"l")
198  leg.AddEntry(h2[p],"#font[42]{%s}"%p,"l")
199 
200  if not uniqueName:
201  return
202 
203  nologx = True
204  if hisType in ["numberOfSteps"]:
205  nologx = False
206  nology = False
207  if hisType in ["CumulativeInitialE","CumulativeNumberOfStepsPerInitialE"]:
208  nology = True
209  # if hisType in ["averageNumberOfStepsPerInitialE"]:
210  # nology = True
211  canv, pad1, pad2 = histograms.getCanvas(uniqueName+"canv", nologx, nology)
212 
213  frac = 100*all1/ALL
214  frac1 = 100*underflow1/all1
215  frac2 = 100*underflow2/all2
216 
217  pad1.cd()
218  hs.Draw("nostack hist")
219  if not nology:
220  hs.SetMaximum(hs.GetStack().Last().GetMaximum()*1e3)
221  if AtlasStyle:
222  ROOT.ATLASLabel(0.18,0.87,"Simulation Internal",1)
223  ROOT.myText(0.18,0.81,1,"#sqrt{s}=13 TeV, %s (%2.1f%s)" % (lab,frac,"%"))
224  # ROOT.myText(0.18,0.75,1,"particle: %s" % p)
225  underTxt = "under: %1.2E (%2.2f%s) %1.2E (%2.2f%s)" % (underflow1, frac1, "%", underflow2, frac2, "%")
226  ROOT.myText(0.51,0.81,1,underTxt)
227  ROOT.myText(0.58,0.87,1,"%s %s" % (v1,v2))
228  if hisType in ["numberOfSteps"]:
229  shiftx = 0.5
230  legTemp = leg.Clone()
231  legTemp.SetX1(legTemp.GetX1()+shiftx)
232  legTemp.SetX2(legTemp.GetX2()+shiftx)
233  legTemp.Draw()
234  ROOT.myText(0.18+shiftx,0.75,1,"%s: %s:" % (v1,v2))
235  else:
236  leg.Draw()
237  ROOT.myText(0.18,0.75,1,"%s: %s:" % (v1,v2))
238  yaxis = ""
239  if hisType in ["numberOfSteps","InitialE"]:
240  yaxis = "Tracks"
241  elif hisType in ["CumulativeInitialE"]:
242  yaxis = "Cumulative tracks"
243  elif hisType in ["CumulativeNumberOfStepsPerInitialE"]:
244  yaxis = "Cumulative steps"
245  elif hisType == "averageNumberOfStepsPerInitialE":
246  yaxis = "Avg. number of steps in track"
247  histograms.configureUpperPad(hs, yaxis)
248 
249 
250  pad2.cd()
251  hsR.Draw("nostack hist")
252  histograms.configureLowerPad(hsR, 0.5 if "Leng" in hisType else 1.0, labelAll[hisType], v2+"/"+v1)
253 
254  canv.Print(os.path.join(directory,hisType+".pdf"))
255  canv.Print(os.path.join(directory,hisType+".png"))
256 

◆ plotSummaryRatio()

def python.plotting.G4DebuggerUtils.plotSummaryRatio (   dict1,
  dict2,
  xaxis,
  v1,
  v2,
  directory = "",
  name = "" 
)

Definition at line 57 of file G4DebuggerUtils.py.

57 def plotSummaryRatio(dict1, dict2, xaxis, v1, v2, directory="", name =""):
58  NCats = len(dict1)
59  integral1 = sum([sum(dict1[cat].values()) for cat in dict1])
60  integral2 = sum([sum(dict2[cat].values()) for cat in dict2])
61  print(NCats," ",integral1," ",integral2)
62  sorted1 = sorted(dict1.items(), key=lambda kv: sum(kv[1].values()), reverse=True)
63  uniqueName = name + sorted1[0][0]
64  hmap1 = {}
65  hmap2 = {}
66 
67  nevents = 1000.
68 
69  leg = ROOT.TLegend(0.7,0.89-0.07*len(particles),0.92,0.89)
70  leg.SetNColumns(1)
71  leg.SetBorderSize(0)
72  leg.SetFillColor(0)
73  leg.SetFillStyle(0)
74  leg.SetTextSize(0.06)
75 
76  for p in particles:
77  h1 = ROOT.TH1F(uniqueName+"1"+p,uniqueName+"1"+p,2*len(sorted1),0,2*len(sorted1))
78  h2 = ROOT.TH1F(uniqueName+"2"+p,uniqueName+"2"+p,2*len(sorted1),0,2*len(sorted1))
79  i_adjusted = 0
80  for i,a in enumerate(sorted1):
81  cat = a[0]
82  if cat == "other":
83  continue
84  fillHisto(h1,dict1,2*i_adjusted+1,p,cat)
85  fillHisto(h2,dict2,2*i_adjusted+1+1,p,cat)
86  i_adjusted += 1
87  if not xaxis == "Processes":
88  fillHisto(h1,dict1,2*len(sorted1)-1,p,"other")
89  fillHisto(h2,dict2,2*len(sorted1),p,"other")
90  hmap1[p] = h1
91  hmap2[p] = h2
92 
93  hs1 = ROOT.THStack()
94  hs2 = ROOT.THStack()
95  for p in particles:
96  hmap1[p].Scale(1./nevents)
97  hmap2[p].Scale(1./nevents)
98  hs1.Add(hmap1[p])
99  hs2.Add(hmap2[p])
100  setFillLineColor(hmap1[p],p, colors)
101  setFillLineColor(hmap2[p],p, colorsNew)
102  for p in reversed(particles):
103  if p in translate.keys() and p != 'other':
104  leg.AddEntry(hmap1[p],"#font[42]{%s}"%translate[p],"f")
105  else:
106  leg.AddEntry(hmap1[p],"#font[42]{%s}"%p,"f")
107 
108  canv, pad1, pad2 = summary.getCanvas(uniqueName)
109 
110  h2 = divide(hs1,hs2)
111 
112  pad1.cd()
113 
114  hs1.SetMaximum(hs1.GetStack().Last().GetBinContent(1)*1.2)
115  hs1.Draw("hist")
116  hs2.Draw("hist same")
117  if xaxis == "Processes":
118  hs1.GetXaxis().SetRangeUser(0,40)
119  hs2.GetXaxis().SetRangeUser(0,40)
120 
121  hs1.GetYaxis().SetTitleOffset(0.7)
122  leg.Draw()
123  if AtlasStyle:
124  ROOT.ATLASLabel(0.3,0.84,"Simulation Preliminary",1,0.06)
125  ROOT.myText(0.3,0.77,1,"#sqrt{s}=13 TeV, 10k t#bar{t} events",0.06)
126  ROOT.myText(0.3,0.70,1,"NRR (E = 1 MeV, w = 10)",0.06)
127  ROOT.myText(0.3,0.63,1,"#oplus EM Range Cuts",0.06)
128 
129  summary.configureUpperPad(hs1)
130 
131  pad1.Update()
132  ymax = ROOT.gPad.GetUymax()*0.55
133  ymin = ROOT.gPad.GetUymin()
134  l1 = ROOT.TLine(6,ymin,6,ymax)
135  l1.SetLineStyle(2)
136  l1.Draw()
137  l2 = ROOT.TLine(7,ymin,7,ymax)
138  l2.SetLineStyle(2)
139  l2.Draw()
140  l3 = ROOT.TLine(8,ymin,8,ymax)
141  l3.SetLineStyle(2)
142  l3.Draw()
143  ROOT.myTextAbs(6.1, 0.8*ymax, 1, "Non optimized", 0.055)
144  ROOT.myTextAbs(7.1, 0.6*ymax, 1, "Optimized", 0.055)
145 
146 
147  pad2.cd()
148  pad2.SetGridy()
149  h2.Draw("hist")
150  if xaxis == "Processes":
151  h2.GetXaxis().SetRangeUser(0,20)
152  summary.configureLowerPad(h2, 0.5, 0.1, xaxis, v2+" / "+v1)
153 
154  canv.Print(os.path.join(directory,("%s.pdf" % xaxis)))
155  canv.Print(os.path.join(directory,("%s.png" % xaxis)))
156 
157 

◆ rename()

def python.plotting.G4DebuggerUtils.rename (   label)

Definition at line 11 of file G4DebuggerUtils.py.

11 def rename(label):
12  if label == "FCO":
13  return "FC Other"
14  elif label == "HCB":
15  return "Tile"
16  elif label == "Sev":
17  return "Services"
18  else:
19  return label
20 

◆ setFillLineColor()

def python.plotting.G4DebuggerUtils.setFillLineColor (   h,
  p,
  hcolors 
)

Definition at line 31 of file G4DebuggerUtils.py.

31 def setFillLineColor(h,p, hcolors):
32  h.SetFillColor(hcolors[p])
33  if p not in samecolor:
34  if p in linecolor:
35  h.SetLineColor(linecolor[p])
36  else:
37  h.SetLineColor(hcolors[p]+2)
38  else:
39  h.SetLineColor(hcolors[p])
40  if p in styles.keys():
41  h.SetFillStyle(styles[p])
42 
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.
python.plotting.G4DebuggerUtils.divide
def divide(hs1, hs2)
Definition: G4DebuggerUtils.py:43
python.plotting.G4DebuggerUtils.plot2D
def plot2D(h, G4Version, v, ALL_STEPS, yaxis, directory)
Definition: G4DebuggerUtils.py:257
python.plotting.G4DebuggerUtils.plotHistogramRatio
def plotHistogramRatio(h1, h2, v1, v2, lab, ALL, hisType, directory)
Definition: G4DebuggerUtils.py:158
GetEntries
TGraphErrors * GetEntries(TH2F *histo)
Definition: TRTCalib_makeplots.cxx:4019
python.plotting.G4DebuggerUtils.fillHisto
def fillHisto(h, catDict, i, p, cat)
Definition: G4DebuggerUtils.py:21
python.Bindings.values
values
Definition: Control/AthenaPython/python/Bindings.py:808
convertTimingResiduals.sum
sum
Definition: convertTimingResiduals.py:55
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
Scale
void Scale(TH1 *h, double d=1)
Definition: comparitor.cxx:79
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:25
python.plotting.G4DebuggerUtils.setFillLineColor
def setFillLineColor(h, p, hcolors)
Definition: G4DebuggerUtils.py:31
python.plotting.G4DebuggerUtils.rename
def rename(label)
Definition: G4DebuggerUtils.py:11
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:801
python.plotting.G4DebuggerUtils.plotSummaryRatio
def plotSummaryRatio(dict1, dict2, xaxis, v1, v2, directory="", name="")
Definition: G4DebuggerUtils.py:57