ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/Jeng/tools/calcMCEff.py
Revision: 1.6
Committed: Tue Jan 18 15:26:51 2011 UTC (14 years, 3 months ago) by jengbou
Content type: text/x-python
Branch: MAIN
CVS Tags: gregj-20110224, gregj-20110223-v1, gregj-20110223, gregj-20110205, gregj-20110114, HEAD
Changes since 1.5: +5 -5 lines
Log Message:
update

File Contents

# Content
1 #!/usr/bin/env python
2 from ROOT import *
3 import sys,os,commands,fnmatch
4
5 infiles = {}
6 skfiles = {}
7 srcDir_ = "./"
8 dataDir_ = "merged_Data/36.15pb-1_v6/"
9 mcDir_ = "skimmed_MC/V00-01-05_v6_PF/"
10 txtDir_ = srcDir_+"MCEffTable_v6/"
11
12 lint_ = 36
13 lumi = "36pb-1"
14 sample = 0
15 category = "Nominal"
16
17 if len(sys.argv) < 2:
18 print "[usage] calcMCEff.py <sample>"
19 print "e.g. calcMCEff.py 0"
20 sys.exit()
21
22 sample = int(sys.argv[1])
23
24 ## PATNtuples
25 ## MC
26 if abs(sample) < 2:
27 infiles["TTbar"] = srcDir_+"/MC/V00-01-05/TTbar_D6T_Mu.root"
28 infiles["STtch"] = srcDir_+"/MC/V00-01-05/STtch_Z2_Mu.root"
29 infiles["STtWch"] = srcDir_+"/MC/V00-01-05/STtWch_Z2_Mu.root"
30 infiles["WJets"] = srcDir_+"/MC/V00-01-05/WJets_D6T_Mu.root"
31 infiles["ZJets"] = srcDir_+"/MC/V00-01-05/ZJets_D6T_Mu.root"
32 infiles["Vqq"] = srcDir_+"/MC/V00-01-05/Vqq_D6T_Mu.root"
33 infiles["Wc"] = srcDir_+"/MC/V00-01-05/Wc_D6T_Mu.root"
34 infiles["QCD"] = srcDir_+"/MC/V00-01-05/QCD_Z2_Mu.root"
35 infiles["WW"] = srcDir_+"/MC/V00-01-05/WW_Z2_Mu.root"
36
37 if sample == 1:
38 category = "JESUP"
39
40 if sample == -1:
41 category = "JESDOWN"
42
43 if sample == 2:
44 category = "SCALEUP"
45 infiles["TTbar"] = srcDir_+"/MC/V00-01-05/TTbar_scaleup_Mu.root"
46 infiles["WJets"] = srcDir_+"/MC/V00-01-05/WJets_scaleup_Mu.root"
47 infiles["ZJets"] = srcDir_+"/MC/V00-01-05/ZJets_scaleup_Mu.root"
48
49 if sample == -2:
50 category = "SCALEDOWN"
51 infiles["TTbar"] = srcDir_+"/MC/V00-01-05/TTbar_scaledown_Mu.root"
52 infiles["WJets"] = srcDir_+"/MC/V00-01-05/WJets_scaledown_Mu.root"
53 infiles["ZJets"] = srcDir_+"/MC/V00-01-05/ZJets_scaledown_Mu.root"
54
55 if sample == 3:
56 category = "MATCHINGUP"
57 infiles["TTbar"] = srcDir_+"/MC/V00-01-05/TTbar_matchingup_Mu.root"
58 infiles["WJets"] = srcDir_+"/MC/V00-01-05/WJets_matchingup_Mu.root"
59 infiles["ZJets"] = srcDir_+"/MC/V00-01-05/ZJets_matchingup_Mu.root"
60
61 if sample == -3:
62 category = "MATCHINGDOWN"
63 infiles["TTbar"] = srcDir_+"/MC/V00-01-05/TTbar_matchingdown_Mu.root"
64 infiles["WJets"] = srcDir_+"/MC/V00-01-05/WJets_matchingdown_Mu.root"
65 infiles["ZJets"] = srcDir_+"/MC/V00-01-05/ZJets_matchingdown_Mu.root"
66
67 print "Sample: " + str(sample) + " Category: " + category
68 ## skimmed files
69 ## MC
70 if sample == 0:
71 skfiles["TTbar"] = srcDir_+mcDir_ +"TTbar_Sel5_PF_TCHEM.root"
72 skfiles["STtch"] = srcDir_+mcDir_ +"STtch_Sel5_PF_TCHEM.root"
73 skfiles["STtWch"] = srcDir_+mcDir_ +"STtWch_Sel5_PF_TCHEM.root"
74 skfiles["WJets"] = srcDir_+mcDir_ +"WJets_Sel5_PF_TCHEM.root"
75 skfiles["ZJets"] = srcDir_+mcDir_ +"ZJets_Sel5_PF_TCHEM.root"
76 skfiles["Vqq"] = srcDir_+mcDir_ +"Vqq_Sel5_PF_TCHEM.root"
77 skfiles["Wc"] = srcDir_+mcDir_ +"Wc_Sel5_PF_TCHEM.root"
78 skfiles["QCD"] = srcDir_+mcDir_ +"QCD_Sel5_PF_TCHEM.root"
79 skfiles["WW"] = srcDir_+mcDir_ +"WW_Sel5_PF_TCHEM.root"
80
81 if sample != 0:
82 mcDir_ = "skimmed_MC/V00-01-05_SYST_v6_PF/"
83 if sample == 1:
84 skfiles["TTbar"] = srcDir_+mcDir_ +"TTbar_Sel5_PF_TCHEM_JESUP.root"
85 skfiles["STtch"] = srcDir_+mcDir_ +"STtch_Sel5_PF_TCHEM_JESUP.root"
86 skfiles["STtWch"] = srcDir_+mcDir_ +"STtWch_Sel5_PF_TCHEM_JESUP.root"
87 skfiles["WJets"] = srcDir_+mcDir_ +"WJets_Sel5_PF_TCHEM_JESUP.root"
88 skfiles["ZJets"] = srcDir_+mcDir_ +"ZJets_Sel5_PF_TCHEM_JESUP.root"
89 skfiles["Vqq"] = srcDir_+mcDir_ +"Vqq_Sel5_PF_TCHEM_JESUP.root"
90 skfiles["Wc"] = srcDir_+mcDir_ +"Wc_Sel5_PF_TCHEM_JESUP.root"
91 skfiles["QCD"] = srcDir_+mcDir_ +"QCD_Sel5_PF_TCHEM_JESUP.root"
92 skfiles["WW"] = srcDir_+mcDir_ +"WW_Sel5_PF_TCHEM_JESUP.root"
93
94 if sample == -1:
95 skfiles["TTbar"] = srcDir_+mcDir_ +"TTbar_Sel5_PF_TCHEM_JESDN.root"
96 skfiles["STtch"] = srcDir_+mcDir_ +"STtch_Sel5_PF_TCHEM_JESDN.root"
97 skfiles["STtWch"] = srcDir_+mcDir_ +"STtWch_Sel5_PF_TCHEM_JESDN.root"
98 skfiles["WJets"] = srcDir_+mcDir_ +"WJets_Sel5_PF_TCHEM_JESDN.root"
99 skfiles["ZJets"] = srcDir_+mcDir_ +"ZJets_Sel5_PF_TCHEM_JESDN.root"
100 skfiles["Vqq"] = srcDir_+mcDir_ +"Vqq_Sel5_PF_TCHEM_JESDN.root"
101 skfiles["Wc"] = srcDir_+mcDir_ +"Wc_Sel5_PF_TCHEM_JESDN.root"
102 skfiles["QCD"] = srcDir_+mcDir_ +"QCD_Sel5_PF_TCHEM_JESDN.root"
103 skfiles["WW"] = srcDir_+mcDir_ +"WW_Sel5_PF_TCHEM_JESDN.root"
104
105 if abs(sample) > 1:
106 mcDir_ = "skimmed_MC/V00-01-05_SYST_v6_PF/"
107 if sample == 2:
108 skfiles["TTbar"] = srcDir_+mcDir_ +"TTbar_Sel5_PF_TCHEM_SCALEUP.root"
109 skfiles["WJets"] = srcDir_+mcDir_ +"WJets_Sel5_PF_TCHEM_SCALEUP.root"
110 skfiles["ZJets"] = srcDir_+mcDir_ +"ZJets_Sel5_PF_TCHEM_SCALEUP.root"
111
112 if sample == -2:
113 skfiles["TTbar"] = srcDir_+mcDir_ +"TTbar_Sel5_PF_TCHEM_SCALEDN.root"
114 skfiles["WJets"] = srcDir_+mcDir_ +"WJets_Sel5_PF_TCHEM_SCALEDN.root"
115 skfiles["ZJets"] = srcDir_+mcDir_ +"ZJets_Sel5_PF_TCHEM_SCALEDN.root"
116
117 if sample == 3:
118 skfiles["TTbar"] = srcDir_+mcDir_ +"TTbar_Sel5_PF_TCHEM_MATCHINGUP.root"
119 skfiles["WJets"] = srcDir_+mcDir_ +"WJets_Sel5_PF_TCHEM_MATCHINGUP.root"
120 skfiles["ZJets"] = srcDir_+mcDir_ +"ZJets_Sel5_PF_TCHEM_MATCHINGUP.root"
121
122 if sample == -3:
123 skfiles["TTbar"] = srcDir_+mcDir_ +"TTbar_Sel5_PF_TCHEM_MATCHINGDN.root"
124 skfiles["WJets"] = srcDir_+mcDir_ +"WJets_Sel5_PF_TCHEM_MATCHINGDN.root"
125 skfiles["ZJets"] = srcDir_+mcDir_ +"ZJets_Sel5_PF_TCHEM_MATCHINGDN.root"
126
127 n_col = len(skfiles)
128
129 tmpfile = TFile(skfiles["TTbar"])
130 tmpfile.cd()
131 tmpHist = ROOT.gDirectory.Get('cutFlowTable')
132 n_row = tmpHist.GetNbinsX()
133
134 mtxVal = [[0 for col in range(n_col)] for row in range(n_row)]
135 vecNam = [0 for col in range(n_col)]
136 vecWgt = {}
137
138 vecNevt = {}
139 vecXsec = {'TTbar':157.5,
140 'WJets':31314,
141 'ZJets':3048,
142 'STtch':20.93,
143 'STtWch':10.6,
144 'Wc':606,
145 'Vqq':36,
146 'QCD':84679.3,
147 'WW':43
148 }
149
150 nTotData = 0
151
152 gROOT.Reset()
153
154 for fName,infile in infiles.iteritems():
155 tfile = TFile(infile)
156 tfile.cd()
157 TrigHist = ROOT.gDirectory.Get('/triggerFilter/eventCount')
158 nevtTot = TrigHist.GetBinContent(1)
159
160 print "Total number of " + fName + " = " + str(int(nevtTot))
161 vecNevt[fName] = int(nevtTot)
162 vecWgt[fName] = float(vecXsec[fName])*float(lint_)/int(nevtTot)
163
164 ncol = 0
165
166 for fName,infile in skfiles.iteritems():
167 tfile = TFile(infile)
168 tfile.cd()
169 cutFlowHist = ROOT.gDirectory.Get('cutFlowTable')
170 for nrow in range(n_row):
171 mtxVal[nrow][ncol] = cutFlowHist.GetBinContent(nrow+1)
172 vecNam[ncol] = fName
173
174 ncol = ncol + 1
175
176 print "Total number of events (Data) = " + str(int(nTotData))
177 print vecWgt
178 print vecNam
179 print mtxVal
180
181 if not os.path.exists(txtDir_):
182 print "Creating output directory: " + txtDir_
183 os.makedirs(txtDir_)
184
185 fout = open(txtDir_+"MCEff_"+lumi+"_"+category+".html","w")
186
187 fout.write('<STYLE type="text/css">')
188 fout.write('td.alr {text-align: right}')
189 fout.write('</STYLE>\n')
190
191 ## Raw numbers of MC
192 fout.write('<table border="1">')
193 fout.write('<tr><th colspan='+str(int(n_col+1))+'>'+category+'</th></tr>')
194 fout.write('<tr><th BGCOLOR="#99CCFF" width=100> Sample </th>')
195 for n in range(n_col):
196 fout.write('<th BGCOLOR="#78c7c7" width=60>' + vecNam[n] + '</th>')
197 fout.write('</tr>\n')
198
199 nrr = 0
200 for nr in range(8,n_row-1):
201 nrr = nrr + 1
202 if nrr == 3:
203 fout.write('<th BGCOLOR="#99CCFF"> Efficiency </th>')
204 for nc in range(n_col):
205 fout.write('<th>' + str(float(mtxVal[nr][nc])/float(vecNevt[vecNam[nc]])) + '</th>')
206 fout.write('</tr>\n')
207
208 fout.write('<th BGCOLOR="#99CCFF"> Uncertainty (%)</th>')
209 for nc in range(n_col):
210 fout.write('<th>' + str(round(sqrt((1./mtxVal[nr][nc]-1./vecNevt[vecNam[nc]])/vecWgt[vecNam[nc]])*100,2)) + '</th>')
211 fout.write('</tr>\n')
212
213 fout.write('</table>\n')
214 fout.write('<br><br>\n')
215 fout.close()
216
217
218 fout = open(txtDir_+"MCEff_"+lumi+"_"+category+".txt","w")
219 fout.write('Sample\t'+'{0:16}'.format('Efficiency')+'\tUncertainty (%)\n')
220 for n in range(n_col):
221 fout.write(vecNam[n])
222 fout.write('\t' + '{0:16.15f}'.format(float(mtxVal[10][n])/float(vecNevt[vecNam[n]])))
223 fout.write('\t' + str(round(sqrt((1./mtxVal[10][n]-1./vecNevt[vecNam[n]])/vecWgt[vecNam[n]])*100,2)) + '\n')
224 fout.close()