ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/OSUT3Analysis/Configuration/scripts/makePlots.py
Revision: 1.33
Committed: Sun Apr 28 14:29:05 2013 UTC (12 years ago) by lantonel
Content type: text/x-python
Branch: MAIN
Changes since 1.32: +24 -24 lines
Log Message:
error bars on data and stacked backgrounds are now taken into account when setting the y-axis scale maximum

File Contents

# Content
1 #!/usr/bin/env python
2 import sys
3 import os
4 import re
5 from math import *
6 from array import *
7 from decimal import *
8 from optparse import OptionParser
9 from OSUT3Analysis.Configuration.configurationOptions import *
10 from OSUT3Analysis.Configuration.processingUtilities import *
11
12 parser = OptionParser()
13 parser = set_commandline_arguments(parser)
14 (arguments, args) = parser.parse_args()
15
16 if arguments.localConfig:
17 sys.path.append(os.getcwd())
18 exec("from " + arguments.localConfig.rstrip('.py') + " import *")
19
20
21 outputFileName = "stacked_histograms.root"
22 if arguments.outputFileName:
23 outputFileName = arguments.outputFileName
24
25 condor_dir = set_condor_output_dir(arguments)
26
27
28
29 #### deal with conflicting arguments
30 if arguments.normalizeToData and arguments.normalizeToUnitArea:
31 print "Conflicting normalizations requsted, will normalize to unit area"
32 arguments.normalizeToData = False
33 if arguments.normalizeToData and arguments.noStack:
34 print "You have asked to scale non-stacked backgrounds to data. This is a very strange request. Will normalize to unit area instead"
35 arguments.normalizeToData = False
36 arguments.normalizeToUnitArea = True
37 if arguments.makeRatioPlots and arguments.makeDiffPlots:
38 print "You have requested both ratio and difference plots. Will make just ratio plots instead"
39 arguments.makeRatioPlots = False
40
41 from ROOT import TFile, gROOT, gStyle, gDirectory, TStyle, THStack, TH1F, TCanvas, TString, TLegend, TLegendEntry, TArrow, THStack, TIter, TKey, TPaveLabel, gPad
42
43 gROOT.SetBatch()
44 gStyle.SetOptStat(0)
45 gStyle.SetCanvasBorderMode(0)
46 gStyle.SetPadBorderMode(0)
47 gStyle.SetPadColor(0)
48 gStyle.SetCanvasColor(0)
49 gStyle.SetTextFont(42)
50 gROOT.ForceStyle()
51 outputFile = TFile(condor_dir + "/" + outputFileName, "RECREATE")
52
53 channels = []
54 processed_datasets = []
55
56 #### check which input datasets have valid output files
57 for sample in datasets:
58 fileName = condor_dir + "/" + sample + ".root"
59 if not os.path.exists(fileName):
60 continue
61 testFile = TFile(fileName)
62 if testFile.IsZombie() or not testFile.GetNkeys():
63 continue
64 processed_datasets.append(sample)
65
66 if len(processed_datasets) is 0:
67 sys.exit("No datasets have been processed")
68
69 #### open first input file and re-make its directory structure in the output file
70 testFile = TFile(condor_dir + "/" + processed_datasets[0] + ".root")
71 testFile.cd()
72 for key in testFile.GetListOfKeys():
73 if (key.GetClassName() != "TDirectoryFile"):
74 continue
75 outputFile.cd()
76 outputFile.mkdir(key.GetName())
77 rootDirectory = key.GetName()
78
79 testFile.cd(key.GetName())
80 for key2 in gDirectory.GetListOfKeys():
81 if (key2.GetClassName() != "TDirectoryFile"):
82 continue
83 outputFile.cd(key.GetName())
84 gDirectory.mkdir(key2.GetName())
85 channels.append(key2.GetName())
86
87
88 ## weight = intLumi / 10000.0
89 ## for dataset in processed_datasets:
90 ## dataset_file = "%s/%s.root" % (condor_dir,dataset)
91 ## fin = TFile (dataset_file)
92 ## flags = fin.Get ("flags")
93 ## noWeights = flags and flags.GetBinContent (1)
94 ## fin.Close ()
95
96 ## if types[dataset] != "data" and not noWeights:
97 ## os.system("mergeTFileServiceHistograms -i %s -o %s -w %g" % (dataset_file, dataset_file + "_tmp", weight))
98 ## else:
99 ## os.system("mergeTFileServiceHistograms -i %s -o %s -w %g" % (dataset_file, dataset_file + "_tmp", 1.0))
100
101
102 for channel in channels: # loop over final states, which each have their own directory
103
104 testFile.cd(rootDirectory+"/"+channel)
105
106 for key in gDirectory.GetListOfKeys(): # loop over histograms in the current directory
107 histogramName = key.GetName()
108
109 if re.match ('TH1', key.GetClassName()): # plot a 1-D histogram
110
111 numBgMCSamples = 0
112 numDataSamples = 0
113 numSignalSamples = 0
114
115 Stack = THStack("stack",histogramName)
116
117 if(intLumi < 1000.):
118 LumiText = "L_{int} = " + str(intLumi) + " pb^{-1}"
119 else:
120 getcontext().prec = 2
121 LumiInFb = intLumi/1000.
122 LumiText = "L_{int} = " + str(LumiInFb) + " fb^{-1}"
123
124 LumiLabel = TPaveLabel(0.1,0.8,0.34,0.9,LumiText,"NDC")
125 LumiLabel.SetBorderSize(0)
126 LumiLabel.SetFillColor(0)
127 LumiLabel.SetFillStyle(0)
128
129 BgMCLegend = TLegend()
130 BgTitle = BgMCLegend.AddEntry(0, "Data & Bkgd. MC", "H")
131 BgTitle.SetTextAlign(21)
132 BgTitle.SetTextFont(62)
133 BgMCLegend.SetBorderSize(0)
134 BgMCLegend.SetFillColor(0)
135 BgMCLegend.SetFillStyle(0)
136 SignalMCLegend = TLegend()
137 SignalTitle = SignalMCLegend.AddEntry(0, "Signal MC", "H")
138 SignalTitle.SetTextAlign(21)
139 SignalTitle.SetTextFont(62)
140 SignalMCLegend.SetBorderSize(0)
141 SignalMCLegend.SetFillColor(0)
142 SignalMCLegend.SetFillStyle(0)
143
144 outputFile.cd(rootDirectory+"/"+channel)
145 Canvas = TCanvas(histogramName)
146 BgMCHistograms = []
147 BgMCLegendEntries = []
148 SignalMCHistograms = []
149 SignalMCLegendEntries = []
150 DataHistograms = []
151 DataLegendEntries = []
152
153
154 backgroundIntegral = 0
155 dataIntegral = 0
156 scaleFactor = 1
157
158 for sample in processed_datasets: # loop over different samples as listed in configurationOptions.py
159 dataset_file = "%s/%s.root" % (condor_dir,sample)
160 inputFile = TFile(dataset_file)
161 Histogram = inputFile.Get(rootDirectory+"/"+channel+"/"+histogramName).Clone()
162 Histogram.SetDirectory(0)
163 if arguments.rebinFactor:
164 RebinFactor = int(arguments.rebinFactor)
165 if Histogram.GetNbinsX() >= RebinFactor*10:
166 Histogram.Rebin(RebinFactor)
167 inputFile.Close()
168 xAxisLabel = Histogram.GetXaxis().GetTitle()
169 histoTitle = Histogram.GetTitle()
170
171
172 if (arguments.printYields):
173 yieldHist = Histogram.Integral()
174 legLabel = legLabel + " (%.1f)" % yieldHist
175
176 if( types[sample] == "bgMC"):
177
178 numBgMCSamples += 1
179 backgroundIntegral += Histogram.Integral()
180
181 Histogram.SetLineStyle(1)
182 if(arguments.noStack):
183 Histogram.SetFillStyle(0)
184 Histogram.SetLineColor(colors[sample])
185 Histogram.SetLineWidth(2)
186 else:
187 Histogram.SetFillStyle(1001)
188 Histogram.SetFillColor(colors[sample])
189 Histogram.SetLineColor(1)
190 Histogram.SetLineWidth(1)
191
192 BgMCLegendEntries.append(labels[sample])
193 BgMCHistograms.append(Histogram)
194
195
196 elif( types[sample] == "signalMC"):
197
198 numSignalSamples += 1
199
200 Histogram.SetFillStyle(0)
201 Histogram.SetLineColor(colors[sample])
202 Histogram.SetLineStyle(1)
203 Histogram.SetLineWidth(2)
204 if(arguments.normalizeToUnitArea and Histogram.Integral() > 0):
205 Histogram.Scale(1./Histogram.Integral())
206
207 SignalMCLegendEntries.append(labels[sample])
208 SignalMCHistograms.append(Histogram)
209
210 elif( types[sample] == "data"):
211
212 numDataSamples += 1
213 dataIntegral += Histogram.Integral()
214
215 Histogram.SetFillStyle(0)
216 Histogram.SetLineColor(colors[sample])
217 Histogram.SetLineStyle(1)
218 Histogram.SetLineWidth(2)
219 if(arguments.normalizeToUnitArea and Histogram.Integral() > 0):
220 Histogram.Scale(1./Histogram.Integral())
221
222 DataLegendEntries.append(labels[sample])
223 DataHistograms.append(Histogram)
224
225 if dataIntegral > 0 and backgroundIntegral > 0:
226 scaleFactor = dataIntegral/backgroundIntegral
227 for bgMCHist in BgMCHistograms:
228 if arguments.normalizeToData:
229 bgMCHist.Scale(scaleFactor)
230 if arguments.normalizeToUnitArea and not arguments.noStack and backgroundIntegral > 0:
231 bgMCHist.Scale(1./backgroundIntegral)
232 elif arguments.normalizeToUnitArea and arguments.noStack and bgMCHist.Integral() > 0:
233 bgMCHist.Scale(1./bgMCHist.Integral())
234 if not arguments.noStack:
235 Stack.Add(bgMCHist)
236
237
238
239
240
241 ### formatting data histograms and adding to legend
242 counter = 0
243 for Histogram in DataHistograms:
244 BgMCLegend.AddEntry(Histogram,DataLegendEntries[counter],"LEP").SetTextFont (42)
245 counter = counter+1
246
247
248 ### creating the histogram to represent the statistical errors on the stack
249 if numBgMCSamples is not 0 and not arguments.noStack:
250 ErrorHisto = BgMCHistograms[0].Clone("errors")
251 ErrorHisto.SetFillStyle(3001)
252 ErrorHisto.SetFillColor(13)
253 ErrorHisto.SetLineWidth(0)
254 BgMCLegend.AddEntry(ErrorHisto,"Stat. Errors","F").SetTextFont (42)
255 for Histogram in BgMCHistograms:
256 if Histogram is not BgMCHistograms[0]:
257 ErrorHisto.Add(Histogram)
258
259
260 ### formatting bgMC histograms and adding to legend
261 counter = numBgMCSamples-1
262 for Histogram in reversed(BgMCHistograms):
263 if(arguments.noStack):
264 BgMCLegend.AddEntry(Histogram,BgMCLegendEntries[counter],"L").SetTextFont (42)
265 else:
266 BgMCLegend.AddEntry(Histogram,BgMCLegendEntries[counter],"F").SetTextFont (42)
267 counter = counter-1
268
269 ### formatting signalMC histograms and adding to legend
270 counter = 0
271 for Histogram in SignalMCHistograms:
272 SignalMCLegend.AddEntry(Histogram,SignalMCLegendEntries[counter],"L").SetTextFont (42)
273 counter = counter+1
274
275
276
277 ### finding the maximum value of anything going on the canvas, and know how to set the y-axis
278 finalMax = 0
279 if numBgMCSamples is not 0 and not arguments.noStack:
280 finalMax = ErrorHisto.GetMaximum() + ErrorHisto.GetBinError(ErrorHisto.GetMaximumBin())
281 else:
282 for bgMCHist in BgMCHistograms:
283 if(bgMCHist.GetMaximum() > finalMax):
284 finalMax = bgMCHist.GetMaximum()
285 for signalMCHist in SignalMCHistograms:
286 if(signalMCHist.GetMaximum() > finalMax):
287 finalMax = signalMCHist.GetMaximum()
288 for dataHist in DataHistograms:
289 if(dataHist.GetMaximum() > finalMax):
290 finalMax = dataHist.GetMaximum() + dataHist.GetBinError(dataHist.GetMaximumBin())
291 finalMax = 1.1*finalMax
292
293
294 ### Drawing histograms to canvas
295
296
297 outputFile.cd(rootDirectory+"/"+channel)
298
299 makeRatioPlots = arguments.makeRatioPlots
300 makeDiffPlots = arguments.makeDiffPlots
301
302 if numBgMCSamples is 0 or numDataSamples is not 1:
303 makeRatioPlots = False
304 makeDiffPlots = False
305 if makeRatioPlots or makeDiffPlots:
306 Canvas.SetFillStyle(0)
307 Canvas.Divide(1,2)
308 Canvas.cd(1)
309 gPad.SetPad(0.01,0.25,0.99,0.99)
310 gPad.SetMargin(0.1,0.05,0.02,0.07)
311 gPad.SetFillStyle(0)
312 gPad.Update()
313 gPad.Draw()
314 Canvas.cd(2)
315 gPad.SetPad(0.01,0.01,0.99,0.25)
316 #format: gPad.SetMargin(l,r,b,t)
317 gPad.SetMargin(0.1,0.05,0.4,0.02)
318 gPad.SetFillStyle(0)
319 gPad.SetGridy(1)
320 gPad.Update()
321 gPad.Draw()
322
323 Canvas.cd(1)
324
325 if numBgMCSamples is not 0:
326
327 if not arguments.noStack:
328 Stack.SetTitle(histoTitle)
329 Stack.Draw("HIST")
330 Stack.GetXaxis().SetTitle(xAxisLabel)
331 Stack.SetMaximum(finalMax)
332 Stack.SetMinimum(0.0001)
333 if makeRatioPlots or makeDiffPlots:
334 Stack.GetHistogram().GetXaxis().SetLabelSize(0)
335 #draw shaded error bands
336 ErrorHisto.Draw("A E2 SAME")
337
338
339 else:
340 BgMCHistograms[0].SetTitle(histoTitle)
341 BgMCHistograms[0].Draw("HIST")
342 BgMCHistograms[0].GetXaxis().SetTitle(xAxisLabel)
343 BgMCHistograms[0].SetMaximum(finalMax)
344 BgMCHistograms[0].SetMinimum(0.0001)
345 for bgMCHist in BgMCHistograms:
346 bgMCHist.Draw("A HIST SAME")
347 for signalMCHist in SignalMCHistograms:
348 signalMCHist.Draw("A HIST SAME")
349 for dataHist in DataHistograms:
350 dataHist.Draw("A E SAME")
351
352 elif numSignalSamples is not 0:
353 SignalMCHistograms[0].SetTitle(histoTitle)
354 SignalMCHistograms[0].Draw("HIST")
355 SignalMCHistograms[0].GetXaxis().SetTitle(xAxisLabel)
356 SignalMCHistograms[0].SetMaximum(finalMax)
357 SignalMCHistograms[0].SetMinimum(0.0001)
358 for signalMCHist in SignalMCHistograms:
359 if(signalMCHist is not SignalMCHistograms[0]):
360 signalMCHist.Draw("A HIST SAME")
361 for dataHist in DataHistograms:
362 dataHist.Draw("A E SAME")
363
364 elif(numDataSamples is not 0):
365 DataHistograms[0].SetTitle(histoTitle)
366 DataHistograms[0].Draw("E")
367 DataHistograms[0].GetXaxis().SetTitle(xAxisLabel)
368 DataHistograms[0].SetMaximum(finalMax)
369 DataHistograms[0].SetMinimum(0.0001)
370 for dataHist in DataHistograms:
371 if(dataHist is not DataHistograms[0]):
372 dataHist.Draw("A E SAME")
373
374
375 if(numBgMCSamples is not 0 or numDataSamples is not 0):
376 BgMCLegend.SetX1NDC(0.75)
377 if numBgMCSamples is 0:
378 BgMCLegend.SetY1NDC(0.9-0.05*(1+numDataSamples))
379 else:
380 BgMCLegend.SetY1NDC(0.9-0.05*(2+numBgMCSamples+numDataSamples))
381 BgMCLegend.SetX2NDC(0.9)
382 BgMCLegend.SetY2NDC(0.9)
383 BgMCLegend.Draw()
384 if(numSignalSamples is not 0):
385 SignalMCLegend.SetX1NDC(0.6)
386 SignalMCLegend.SetY1NDC(0.9-0.05*(1+numSignalSamples))
387 SignalMCLegend.SetX2NDC(0.75)
388 SignalMCLegend.SetY2NDC(0.9)
389 SignalMCLegend.Draw()
390 elif numSignalSamples is not 0:
391 SignalMCLegend.SetX1NDC(0.75)
392 SignalMCLegend.SetY1NDC(0.9-0.05*(1+numSignalSamples))
393 SignalMCLegend.SetX2NDC(0.9)
394 SignalMCLegend.SetY2NDC(0.9)
395 SignalMCLegend.Draw()
396
397 if not arguments.normalizeToUnitArea or numDataSamples > 0:
398 LumiLabel.Draw()
399 if arguments.normalizeToData and numBgMCSamples > 0 and numDataSamples > 0:
400 if numSignalSamples is 0:
401 NormLabel = TPaveLabel(0.6,0.85,0.75,0.9,"MC scaled to data","NDC")
402 else:
403 NormLabel = TPaveLabel(0.45,0.85,0.6,0.9,"MC scaled to data","NDC")
404 NormLabel.SetBorderSize(0)
405 NormLabel.SetFillColor(0)
406 NormLabel.SetFillStyle(0)
407 NormLabel.Draw()
408 elif arguments.normalizeToUnitArea:
409 if (numBgMCSamples is not 0 or numDataSamples is not 0) and numSignalSamples is 0:
410 NormLabel = TPaveLabel(0.6,0.85,0.75,0.9,"Scaled to unit area","NDC")
411 else:
412 NormLabel = TPaveLabel(0.45,0.85,0.6,0.9,"Scaled to unit area","NDC")
413 NormLabel.SetBorderSize(0)
414 NormLabel.SetFillColor(0)
415 NormLabel.SetFillStyle(0)
416 NormLabel.Draw()
417
418
419 if makeRatioPlots or makeDiffPlots:
420 Canvas.cd(2)
421 BgSum = Stack.GetStack().Last()
422 Comparison = DataHistograms[0].Clone()
423 Comparison.Add(BgSum,-1)
424 if not makeDiffPlots:
425 Comparison.Divide(BgSum)
426 Comparison.SetTitle("")
427 Comparison.GetXaxis().SetTitle(xAxisLabel)
428 if makeRatioPlots:
429 Comparison.GetYaxis().SetTitle("#frac{Data-MC}{MC}")
430 elif makeDiffPlots:
431 Comparison.GetYaxis().SetTitle("Data-MC")
432 Comparison.GetYaxis().CenterTitle()
433 Comparison.GetYaxis().SetTitleSize(0.1)
434 Comparison.GetYaxis().SetTitleOffset(0.35)
435 Comparison.GetXaxis().SetTitleSize(0.15)
436 Comparison.GetYaxis().SetLabelSize(0.1)
437 Comparison.GetXaxis().SetLabelSize(0.15)
438 if makeRatioPlots:
439 Comparison.GetYaxis().SetRangeUser(-1.15,1.15)
440 elif makeDiffPlots:
441 YMax = Comparison.GetMaximum()
442 YMin = Comparison.GetMinimum()
443 if YMax <= 0 and YMin <= 0:
444 Comparison.GetYaxis().SetRangeUser(-1.2*YMin,0)
445 elif YMax >= 0 and YMin >= 0:
446 Comparison.GetYaxis().SetRangeUser(0,1.2*YMax)
447 else: #axis crosses y=0
448 if abs(YMax) > abs(YMin):
449 Comparison.GetYaxis().SetRangeUser(-1.2*YMax,1.2*YMax)
450 else:
451 Comparison.GetYaxis().SetRangeUser(-1.2*YMin,1.2*YMin)
452
453 Comparison.GetYaxis().SetNdivisions(205)
454 Comparison.Draw()
455
456 Canvas.Write()
457
458
459 if re.match ('TH2', key.GetClassName()) and arguments.draw2DPlots: # plot a 2-D histogram
460
461 numBgMCSamples = 0
462 numDataSamples = 0
463 numSignalSamples = 0
464
465 if(intLumi < 1000.):
466 LumiText = "L_{int} = " + str(intLumi) + " pb^{-1}"
467 else:
468 getcontext().prec = 2
469 LumiInFb = intLumi/1000.
470 LumiText = "L_{int} = " + str(LumiInFb) + " fb^{-1}"
471
472 LumiLabel = TPaveLabel(0.1,0.8,0.34,0.9,LumiText,"NDC")
473 LumiLabel.SetBorderSize(0)
474 LumiLabel.SetFillColor(0)
475 LumiLabel.SetFillStyle(0)
476
477 BgMCLegend = TLegend(0.76,0.65,0.99,0.9)
478 BgMCLegend.AddEntry (0, "Data & Bkgd. MC", "H").SetTextFont (62)
479 BgMCLegend.SetBorderSize(0)
480 BgMCLegend.SetFillColor(0)
481 BgMCLegend.SetFillStyle(0)
482 SignalMCLegend = TLegend(0.76,0.135,0.99,0.377)
483 SignalMCLegend.AddEntry (0, "Signal MC", "H").SetTextFont (62)
484 SignalMCLegend.SetBorderSize(0)
485 SignalMCLegend.SetFillColor(0)
486 SignalMCLegend.SetFillStyle(0)
487
488 outputFile.cd(rootDirectory+"/"+channel)
489 Canvas = TCanvas(histogramName)
490 Canvas.SetRightMargin(0.2413793);
491 BgMCHistograms = []
492 SignalMCHistograms = []
493 DataHistograms = []
494
495 for sample in processed_datasets: # loop over different samples as listed in configurationOptions.py
496 dataset_file = "%s/%s.root" % (condor_dir,sample)
497 inputFile = TFile(dataset_file)
498 Histogram = inputFile.Get(rootDirectory+"/"+channel+"/"+histogramName).Clone()
499 Histogram.SetDirectory(0)
500 RebinFactor = int(arguments.rebinFactor)
501 if arguments.rebinFactor and Histogram.GetNbinsX() >= RebinFactor*10 and Histogram.GetNbinsY() >= RebinFactor*10:
502 Histogram.Rebin2D(RebinFactor)
503 inputFile.Close()
504 xAxisLabel = Histogram.GetXaxis().GetTitle()
505 yAxisLabel = Histogram.GetYaxis().GetTitle()
506 histoTitle = Histogram.GetTitle()
507
508 if( types[sample] == "bgMC"):
509
510 numBgMCSamples += 1
511 Histogram.SetMarkerColor(colors[sample])
512 Histogram.SetFillColor(colors[sample])
513 BgMCLegend.AddEntry(Histogram,labels[sample],"F").SetTextFont (42)
514 BgMCHistograms.append(Histogram)
515
516 elif( types[sample] == "signalMC"):
517
518 numSignalSamples += 1
519 Histogram.SetMarkerColor(colors[sample])
520 Histogram.SetFillColor(colors[sample])
521 SignalMCLegend.AddEntry(Histogram,labels[sample],"F").SetTextFont (42)
522 SignalMCHistograms.append(Histogram)
523
524 elif( types[sample] == "data"):
525
526 numDataSamples += 1
527 Histogram.SetMarkerColor(colors[sample])
528 Histogram.SetFillColor(colors[sample])
529 BgMCLegend.AddEntry(Histogram,labels[sample],"F").SetTextFont (42)
530 DataHistograms.append(Histogram)
531
532
533 outputFile.cd(rootDirectory+"/"+channel)
534
535 if(numBgMCSamples is not 0):
536 BgMCHistograms[0].SetTitle(histoTitle)
537 BgMCHistograms[0].GetXaxis().SetTitle(xAxisLabel)
538 BgMCHistograms[0].GetYaxis().SetTitle(yAxisLabel)
539 BgMCHistograms[0].Draw()
540 for signalMCHist in SignalMCHistograms:
541 signalMCHist.Draw("SAME")
542 for dataHist in DataHistograms:
543 dataHist.Draw("SAME")
544
545 elif(numSignalSamples is not 0):
546 SignalMCHistograms[0].SetTitle(histoTitle)
547 SignalMCHistograms[0].Draw()
548 SignalMCHistograms[0].GetXaxis().SetTitle(xAxisLabel)
549 SignalMCHistograms[0].GetYaxis().SetTitle(yAxisLabel)
550 for signalMCHist in SignalMCHistograms:
551 if(signalMCHist is not SignalMCHistograms[0]):
552 signalMCHist.Draw("SAME")
553 for dataHist in DataHistograms:
554 dataHist.Draw("SAME")
555
556 elif(numDataSamples is not 0):
557 DataHistograms[0].SetTitle(histoTitle)
558 DataHistograms[0].GetXaxis().SetTitle(xAxisLabel)
559 DataHistograms[0].GetYaxis().SetTitle(yAxisLabel)
560 DataHistograms[0].Draw()
561 for dataHist in DataHistograms:
562 if(dataHist is not DataHistograms[0]):
563 dataHist.Draw("SAME")
564
565
566 if(numBgMCSamples is not 0 or numDataSamples is not 0):
567 BgMCLegend.Draw()
568 if(numSignalSamples is not 0):
569 SignalMCLegend.Draw()
570 if not arguments.normalizeToUnitArea or numDataSamples > 0:
571 LumiLabel.Draw()
572
573 Canvas.Write()
574
575
576 #for dataset in processed_datasets:
577 # dataset_file = "%s/%s.root_tmp" % (condor_dir,dataset)
578 # os.remove(dataset_file)
579
580 outputFile.Close()