ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/OSUT3Analysis/Configuration/scripts/makePlots.py
Revision: 1.3
Committed: Tue Jan 29 09:21:38 2013 UTC (12 years, 3 months ago) by lantonel
Content type: text/x-python
Branch: MAIN
Changes since 1.2: +61 -22 lines
Log Message:
fixed bug that required >0 bgMC samples

File Contents

# User Rev Content
1 lantonel 1.1 #!/usr/bin/env python
2     import sys
3     import os
4     from array import *
5 lantonel 1.3 from decimal import *
6 lantonel 1.1 from optparse import OptionParser
7 lantonel 1.2 from OSUT3Analysis.Configuration.configurationOptions import *
8 lantonel 1.1
9     parser = OptionParser()
10    
11     parser.add_option("-l", "--localConfig", dest="localConfig",
12     help="local configuration file")
13    
14     parser.add_option("-c", "--condorDir", dest="condorDir",
15     help="condor output directory")
16    
17     (options, args) = parser.parse_args()
18    
19     if options.localConfig:
20     sys.path.append(os.getcwd())
21     exec("from " + options.localConfig.rstrip('.py') + " import *")
22    
23     if options.condorDir:
24     condor_dir = "condor/%s" % options.condorDir
25     else: #get most recent condor submission directory
26     dir_list = []
27     for directory in os.listdir("./condor/"):
28     if directory.find("condor_") is not -1:
29     dir_list.append(directory)
30     if len(dir_list) is 0:
31     sys.exit("Cannot find last condor working directory")
32     dir_list.sort(reverse=True)
33     condor_dir = "condor/%s" % dir_list[0]
34    
35    
36    
37    
38     from ROOT import TFile, gROOT, gStyle, gDirectory, TStyle, THStack, TH1F, TCanvas, TString, TLegend, TArrow, THStack, TIter, TKey, TPaveLabel
39    
40     gROOT.SetBatch()
41     gStyle.SetOptStat(0)
42     gStyle.SetCanvasBorderMode(0)
43     gStyle.SetPadBorderMode(0)
44     gStyle.SetPadColor(0)
45     gStyle.SetCanvasColor(0)
46     gStyle.SetTextFont(42)
47 lantonel 1.3 gROOT.ForceStyle()
48 lantonel 1.1 outputFile = TFile(condor_dir + "/stacked_histograms.root", "RECREATE")
49    
50     channels = []
51     processed_datasets = []
52    
53     #### check which input datasets have valid output files
54     for sample in datasets:
55     fileName = condor_dir + "/" + sample + ".root"
56     if not os.path.exists(fileName):
57     continue
58     testFile = TFile(fileName)
59     if not (testFile.IsZombie()):
60     processed_datasets.append(sample)
61    
62     if len(processed_datasets) is 0:
63     sys.exit("No datasets have been processed")
64    
65     #### open first input file and re-make its directory structure in the output file
66     testFile = TFile(condor_dir + "/" + processed_datasets[0] + ".root")
67     testFile.cd()
68     for key in testFile.GetListOfKeys():
69     if (key.GetClassName() != "TDirectoryFile"):
70     continue
71     outputFile.cd()
72     outputFile.mkdir(key.GetName())
73     rootDirectory = key.GetName()
74    
75     testFile.cd(key.GetName())
76     for key2 in gDirectory.GetListOfKeys():
77     if (key2.GetClassName() != "TDirectoryFile"):
78     continue
79     outputFile.cd(key.GetName())
80     gDirectory.mkdir(key2.GetName())
81     channels.append(key2.GetName())
82    
83    
84    
85    
86     for channel in channels: # loop over final states, which each have their own directory
87    
88     testFile.cd(rootDirectory+"/"+channel)
89     histograms = []
90     for key in gDirectory.GetListOfKeys():
91     histograms.append(key.GetName())
92    
93     for histogramName in histograms: # loop over histograms in the current directory
94    
95 lantonel 1.3 numBgMCSamples = 0
96     numDataSamples = 0
97     numSignalSamples = 0
98    
99 lantonel 1.1 Stack = THStack("stack",histogramName)
100    
101     if(intLumi < 1000.):
102     LumiText = "L_{int} = " + str(intLumi) + " pb^{-1}"
103     else:
104 lantonel 1.3 getcontext().prec = 2
105     LumiInFb = intLumi/1000.
106 lantonel 1.1 LumiText = "L_{int} = " + str(LumiInFb) + " fb^{-1}"
107    
108 lantonel 1.3 LumiLabel = TPaveLabel(0.1,0.8,0.34,0.9,LumiText,"NDC")
109     LumiLabel.SetBorderSize(0)
110     LumiLabel.SetFillColor(0)
111     LumiLabel.SetFillStyle(0)
112 lantonel 1.1
113    
114     BgMCLegend = TLegend(0.70,0.65,0.99,0.89, "Data & Bkgd. MC")
115 lantonel 1.3 BgMCLegend.SetBorderSize(0)
116     BgMCLegend.SetFillColor(0)
117     BgMCLegend.SetFillStyle(0)
118 lantonel 1.1 SignalMCLegend = TLegend(0.45,0.65,0.70,0.89,"Signal MC")
119 lantonel 1.3 SignalMCLegend.SetBorderSize(0)
120     SignalMCLegend.SetFillColor(0)
121     SignalMCLegend.SetFillStyle(0)
122 lantonel 1.1
123    
124    
125     outputFile.cd(rootDirectory+"/"+channel)
126     Canvas = TCanvas(histogramName)
127     SignalMCHistograms = []
128     DataHistograms = []
129    
130     for sample in processed_datasets: # loop over different samples as listed in configurationOptions.py
131     inputFile = TFile(condor_dir + "/" + sample + ".root")
132     if(inputFile.IsZombie()):
133     continue
134     Histogram = inputFile.Get(rootDirectory+"/"+channel+"/"+histogramName).Clone()
135     Histogram.SetDirectory(0)
136     xAxisLabel = Histogram.GetXaxis().GetTitle()
137    
138     if( types[sample] == "bgMC"):
139 lantonel 1.3
140     numBgMCSamples += 1
141 lantonel 1.1
142     Histogram.SetFillStyle(1001)
143     Histogram.SetFillColor(colors[sample])
144     Histogram.SetLineColor(1)
145     Histogram.SetLineStyle(1)
146     Histogram.SetLineWidth(1)
147    
148     BgMCLegend.AddEntry(Histogram,labels[sample],"F")
149     Stack.Add(Histogram)
150     elif( types[sample] == "signalMC"):
151 lantonel 1.3
152     numSignalSamples += 1
153 lantonel 1.1
154     Histogram.SetFillStyle(0)
155     Histogram.SetLineColor(colors[sample])
156     Histogram.SetLineStyle(1)
157     Histogram.SetLineWidth(2)
158    
159     SignalMCLegend.AddEntry(Histogram,labels[sample],"L")
160     SignalMCHistograms.append(Histogram)
161    
162     elif( types[sample] == "data"):
163 lantonel 1.3
164     numDataSamples += 1
165 lantonel 1.1
166     Histogram.SetFillStyle(0)
167     Histogram.SetLineColor(colors[sample])
168     Histogram.SetLineStyle(1)
169     Histogram.SetLineWidth(2)
170    
171     BgMCLegend.AddEntry(Histogram,labels[sample],"LEP")
172     DataHistograms.append(Histogram)
173    
174    
175     stackMax = Stack.GetMaximum()
176     finalMax = stackMax
177     for signalMCHist in SignalMCHistograms:
178     if(signalMCHist.GetMaximum() > finalMax):
179     finalMax = signalMCHist.GetMaximum()
180     for dataHist in DataHistograms:
181     if(dataHist.GetMaximum() > finalMax):
182     finalMax = dataHist.GetMaximum()
183    
184 lantonel 1.3 outputFile.cd(rootDirectory+"/"+channel)
185    
186     if(numBgMCSamples is not 0):
187     Stack.Draw("HIST")
188     Stack.SetMaximum(1.1*finalMax)
189     for signalMCHist in SignalMCHistograms:
190     signalMCHist.Draw("HIST SAME")
191     for dataHist in DataHistograms:
192     dataHist.Draw("E SAME")
193    
194     elif(numSignalSamples is not 0):
195     SignalMCHistograms[0].Draw("HIST")
196     SignalMCHistograms[0].SetMaximum(1.1*finalMax)
197     for signalMCHist in SignalMCHistograms:
198     if(signalMCHist is not SignalMCHistograms[0]):
199     signalMCHist.Draw("HIST SAME")
200     for dataHist in DataHistograms:
201     dataHist.Draw("E SAME")
202     elif(numDataSamples is not 0):
203     DataHistograms[0].Draw("E")
204     DataHistograms[0].SetMaximum(1.1*finalMax)
205     for dataHist in DataHistograms:
206     if(dataHist is not DataHistograms[0]):
207     dataHist.Draw("E SAME")
208    
209    
210     if(numBgMCSamples is not 0):
211     Stack.GetXaxis().SetTitle(xAxisLabel)
212     elif(numSignalSamples is not 0):
213     SignalMCHistograms[0].GetXaxis().SetTitle(xAxisLabel)
214     elif(numDataSamples is not 0):
215     DataHistograms[0].GetXaxis().SetTitle(xAxisLabel)
216    
217     if(numBgMCSamples is not 0 or numDataSamples is not 0):
218     BgMCLegend.Draw()
219     if(numSignalSamples is not 0):
220     SignalMCLegend.Draw()
221 lantonel 1.1
222     LumiLabel.Draw()
223     Canvas.Write()
224    
225    
226     outputFile.Close()