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

# User Rev Content
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()