1 |
jengbou |
1.1 |
#!/usr/bin/env python
|
2 |
|
|
from ROOT import *
|
3 |
|
|
import sys,os,commands,fnmatch
|
4 |
|
|
|
5 |
|
|
infiles = {}
|
6 |
|
|
skfiles = {}
|
7 |
|
|
srcDir_ = "./"
|
8 |
jengbou |
1.6 |
dataDir_ = "merged_Data/36.15pb-1_v6/"
|
9 |
|
|
mcDir_ = "skimmed_MC/V00-01-05_v6_PF/"
|
10 |
|
|
txtDir_ = srcDir_+"MCEffTable_v6/"
|
11 |
jengbou |
1.1 |
|
12 |
jengbou |
1.4 |
lint_ = 36
|
13 |
|
|
lumi = "36pb-1"
|
14 |
jengbou |
1.1 |
sample = 0
|
15 |
|
|
category = "Nominal"
|
16 |
|
|
|
17 |
jengbou |
1.5 |
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 |
jengbou |
1.1 |
## PATNtuples
|
25 |
|
|
## MC
|
26 |
|
|
if abs(sample) < 2:
|
27 |
jengbou |
1.4 |
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 |
jengbou |
1.1 |
|
37 |
|
|
if sample == 1:
|
38 |
|
|
category = "JESUP"
|
39 |
|
|
|
40 |
|
|
if sample == -1:
|
41 |
|
|
category = "JESDOWN"
|
42 |
|
|
|
43 |
|
|
if sample == 2:
|
44 |
|
|
category = "SCALEUP"
|
45 |
jengbou |
1.4 |
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 |
jengbou |
1.1 |
|
49 |
|
|
if sample == -2:
|
50 |
|
|
category = "SCALEDOWN"
|
51 |
jengbou |
1.4 |
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 |
jengbou |
1.1 |
|
55 |
|
|
if sample == 3:
|
56 |
|
|
category = "MATCHINGUP"
|
57 |
jengbou |
1.4 |
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 |
jengbou |
1.1 |
|
61 |
|
|
if sample == -3:
|
62 |
|
|
category = "MATCHINGDOWN"
|
63 |
jengbou |
1.4 |
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 |
jengbou |
1.1 |
|
67 |
jengbou |
1.5 |
print "Sample: " + str(sample) + " Category: " + category
|
68 |
jengbou |
1.1 |
## 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 |
jengbou |
1.4 |
skfiles["WW"] = srcDir_+mcDir_ +"WW_Sel5_PF_TCHEM.root"
|
80 |
jengbou |
1.1 |
|
81 |
|
|
if sample != 0:
|
82 |
jengbou |
1.6 |
mcDir_ = "skimmed_MC/V00-01-05_SYST_v6_PF/"
|
83 |
jengbou |
1.1 |
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 |
jengbou |
1.5 |
skfiles["WW"] = srcDir_+mcDir_ +"WW_Sel5_PF_TCHEM_JESUP.root"
|
93 |
jengbou |
1.1 |
|
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 |
jengbou |
1.5 |
skfiles["WW"] = srcDir_+mcDir_ +"WW_Sel5_PF_TCHEM_JESDN.root"
|
104 |
jengbou |
1.1 |
|
105 |
|
|
if abs(sample) > 1:
|
106 |
jengbou |
1.6 |
mcDir_ = "skimmed_MC/V00-01-05_SYST_v6_PF/"
|
107 |
jengbou |
1.1 |
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 |
jengbou |
1.4 |
'QCD':84679.3,
|
147 |
|
|
'WW':43
|
148 |
|
|
}
|
149 |
jengbou |
1.1 |
|
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 |
jengbou |
1.2 |
for nr in range(8,n_row-1):
|
201 |
jengbou |
1.1 |
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 |
jengbou |
1.3 |
|
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()
|