ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/JohnStupak/python/doPostProc.py
Revision: 1.7
Committed: Tue Feb 19 20:57:06 2013 UTC (12 years, 2 months ago) by jstupak
Content type: text/x-python
Branch: MAIN
Changes since 1.6: +23 -26 lines
Log Message:
minor aesthetic tweaks

File Contents

# User Rev Content
1 jstupak 1.1 from ROOT import *
2     gROOT.SetBatch(1)
3     from LJMet.Com.Sample import samplesForPlotting as samples
4     from tdrStyle import *
5 jstupak 1.4 from sys import argv
6     import os
7 jstupak 1.1 setTDRStyle()
8     gStyle.SetOptStat(False)
9    
10     DEBUG=False
11    
12 jstupak 1.4 if len(argv)>1:
13     inputDir=argv[1]
14     else:
15     inputDir='/uscms_data/d1/jstupak/chargedHiggs/2013_2_8/test'
16 jstupak 1.6 #inputDir='/uscms_data/d2/dsperka/8TeV/Samples/07Feb_All'
17 jstupak 1.1
18 jstupak 1.6 doCuts=['0p','0','1','1p','2p','3p','final']
19     doChannels=['el','mu']
20 jstupak 1.1
21 jstupak 1.7 doCutTable=False #produce selection yield table
22 jstupak 1.4
23     #These currently do nothing, just thinking ahead
24     doJES=False
25     doJER=False
26     doBTS=False
27 jstupak 1.1
28 jstupak 1.4 outputDir=inputDir+'/plots'
29    
30     sharedSelectionCuts='jet_0_pt_ChargedHiggsCalc >= 120 && jet_1_pt_ChargedHiggsCalc >= 40'
31 jstupak 1.5 elSelectionCuts='elec_1_pt_ChargedHiggsCalc > 50 && abs(elec_1_eta_ChargedHiggsCalc) < 2.5 && elec_1_RelIso_ChargedHiggsCalc < 0.1 && corr_met_ChargedHiggsCalc > 20 && Muon_DeltaR_LjetsTopoCalcNew > 0.3'
32     muSelectionCuts='muon_1_pt_ChargedHiggsCalc > 50 && abs(muon_1_eta_ChargedHiggsCalc) < 2.1 && muon_1_RelIso_ChargedHiggsCalc < 0.12 && corr_met_ChargedHiggsCalc > 20 && Muon_DeltaR_LjetsTopoCalcNew > 0.3'
33 jstupak 1.4
34     finalCuts='BestTop_Pt_LjetsTopoCalcNew > 85 && Jet1Jet2_Pt_LjetsTopoCalcNew > 140 && 130 < BestTop_LjetsTopoCalcNew && BestTop_LjetsTopoCalcNew < 210'
35 jstupak 1.1
36     #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
37    
38 jstupak 1.4 elLumi=19624
39     muLumi=19624
40 jstupak 1.1
41     treeName='ljmet'
42    
43 jstupak 1.4 SFWj = 0.82
44     SFWc = 0.93*1.66
45     SFWb = 0.93*1.21
46 jstupak 1.1
47     lumiFracUnc = 0.022
48     ttbarSigmaFracUnc = 0.15
49     wJetsSigmaFracUnc = 0.20
50     otherSigmaFracUnc = 0.20
51    
52     #---------------------------------------------------------------------------------------------------------------------------------------------
53    
54 jstupak 1.6 if not os.path.isdir(outputDir) and not DEBUG: os.system("mkdir -p "+outputDir)
55 jstupak 1.4 output=TFile(outputDir+'/plots.root',"RECREATE")
56 jstupak 1.6 if DEBUG: output=TFile('plots.root',"RECREATE")
57 jstupak 1.1
58 jstupak 1.4 class ChargedHiggsPlot:
59 jstupak 1.6
60     def __init__(self,name,distribution,nBins=100,xMin=0,xMax=100,xTitle='',yLog=True,cuts="0",channel='el'):
61     self.name=name; self.distribution=distribution; self.nBins=nBins; self.xMin=xMin; self.xMax=xMax; self.xTitle=xTitle; self.yLog=yLog; self.cuts=cuts; self.channel=channel;
62 jstupak 1.1
63     def Prepare(self):
64     result={}
65    
66     cuts=sharedSelectionCuts
67     if self.channel=='el': cuts+='&&'+elSelectionCuts
68     elif self.channel=='mu': cuts+='&&'+muSelectionCuts
69    
70 jstupak 1.6 if self.cuts=="0":
71 jstupak 1.4 bTagCut='((jet_0_tag_ChargedHiggsCalc + jet_1_tag_ChargedHiggsCalc)==0)'
72 jstupak 1.6 elif self.cuts=="0p":
73 jstupak 1.1 bTagCut='1'
74 jstupak 1.6 elif self.cuts=="1":
75 jstupak 1.4 bTagCut='((jet_0_tag_ChargedHiggsCalc + jet_1_tag_ChargedHiggsCalc)==1)'
76 jstupak 1.6 elif self.cuts=="1p" or self.cuts=="final":
77 jstupak 1.4 bTagCut='((jet_0_tag_ChargedHiggsCalc + jet_1_tag_ChargedHiggsCalc)>=1)'
78 jstupak 1.6 elif self.cuts=="2":
79 jstupak 1.4 bTagCut='((jet_0_tag_ChargedHiggsCalc + jet_1_tag_ChargedHiggsCalc)==2)'
80 jstupak 1.6 elif self.cuts=="2p":
81 jstupak 1.4 #bTagCut='((jet_0_tag_ChargedHiggsCalc + jet_1_tag_ChargedHiggsCalc)>=2)'
82     bTagCut='((jet_0_tag_ChargedHiggsCalc==1 && (jet_1_tag_ChargedHiggsCalc + jet_2_tag_ChargedHiggsCalc + jet_3_tag_ChargedHiggsCalc + jet_4_tag_ChargedHiggsCalc + jet_5_tag_ChargedHiggsCalc + jet_6_tag_ChargedHiggsCalc + jet_7_tag_ChargedHiggsCalc + jet_8_tag_ChargedHiggsCalc + jet_9_tag_ChargedHiggsCalc) >= 1 ) || (jet_1_tag_ChargedHiggsCalc==1 && (jet_0_tag_ChargedHiggsCalc + jet_2_tag_ChargedHiggsCalc + jet_3_tag_ChargedHiggsCalc + jet_4_tag_ChargedHiggsCalc + jet_5_tag_ChargedHiggsCalc + jet_6_tag_ChargedHiggsCalc + jet_7_tag_ChargedHiggsCalc + jet_8_tag_ChargedHiggsCalc + jet_9_tag_ChargedHiggsCalc) >= 1))'
83 jstupak 1.6 elif self.cuts=="3p":
84     bTagCut='((jet_0_tag_ChargedHiggsCalc==1 && (jet_1_tag_ChargedHiggsCalc + jet_2_tag_ChargedHiggsCalc + jet_3_tag_ChargedHiggsCalc + jet_4_tag_ChargedHiggsCalc + jet_5_tag_ChargedHiggsCalc +jet_6_tag_ChargedHiggsCalc + jet_7_tag_ChargedHiggsCalc + jet_8_tag_ChargedHiggsCalc + jet_9_tag_ChargedHiggsCalc) >= 1 ) || (jet_1_tag_ChargedHiggsCalc==1 && (jet_0_tag_ChargedHiggsCalc + jet_2_tag_ChargedHiggsCalc + jet_3_tag_ChargedHiggsCalc + jet_4_tag_ChargedHiggsCalc + jet_5_tag_ChargedHiggsCalc + jet_6_tag_ChargedHiggsCalc + jet_7_tag_ChargedHiggsCalc + jet_8_tag_ChargedHiggsCalc + jet_9_tag_ChargedHiggsCalc) >= 2))'
85    
86     if self.cuts=='final':
87     cuts+='&& '+finalCuts
88 jstupak 1.2
89     #make name unique
90 jstupak 1.6 self.name+='_'+self.cuts+'_'+self.channel
91 jstupak 1.1
92     if (self.channel == 'el'): lumi=elLumi
93     elif (self.channel == 'mu'): lumi=muLumi
94 jstupak 1.2
95     #get histograms with proper normalization
96 jstupak 1.1 for sample in samples:
97 jstupak 1.2 #skip electron (muon) data for muon (electron) channel
98 jstupak 1.1 if (self.channel=='el' and 'SingleMu' in sample.name) or (self.channel=='mu' and 'SingleEl' in sample.name): continue
99    
100     sample.file=TFile(inputDir+'/'+sample.name+'.root')
101 jstupak 1.6 if DEBUG and sample.isSignal: continue
102     if DEBUG and sample.isData:
103     if self.channel=='el' and 'SingleElectron_13Jul2012A' in sample.name: sample.file=TFile(inputDir+'/Data_el_19pt6fb.root')
104     elif self.channel=='mu' and 'SingleMu_13Jul2012A' in sample.name: sample.file=TFile(inputDir+'/Data_mu_19pt6fb.root')
105     else: continue
106    
107 jstupak 1.1 sample.tree=sample.file.Get(treeName)
108     hName=self.name+'_'+sample.name
109     sample.h=TH1F(hName,";"+self.xTitle,self.nBins,self.xMin,self.xMax)
110    
111 jstupak 1.5 weight='1'
112 jstupak 1.1 if sample.isMC:
113 jstupak 1.5 weight+='* weight_PU_ABCD_PileUpCalc'
114     if (self.channel == 'el'):
115     weight+='* weight_ElectronEff_53x_ChargedHiggsCalc'
116     weight+='* (0.973*(abs(elec_1_eta_ChargedHiggsCalc)<1.5) + 1.02*(abs(elec_1_eta_ChargedHiggsCalc)>1.5&&abs(elec_1_eta_ChargedHiggsCalc)<2.5))'
117     elif (self.channel == 'mu'): weight+='* weight_MuonEff_ChargedHiggsCalc'
118 jstupak 1.1
119     if sample.name=='WJets':
120 jstupak 1.4 sample.tree.Draw(self.distribution+">>"+hName,weight+'*'+str(SFWj)+'*('+cuts+'&&'+bTagCut+'&& n_Bjets_ChargedHiggsCalc==0 && n_Cjets_ChargedHiggsCalc==0)','goff')
121 jstupak 1.6 result['W+light']=sample.h.Integral(0,self.nBins+1)
122 jstupak 1.4 sample.tree.Draw(self.distribution+">>+"+hName,weight+'*'+str(SFWc)+'*('+cuts+'&&'+bTagCut+'&& n_Bjets_ChargedHiggsCalc==0 && n_Cjets_ChargedHiggsCalc>0)','goff')
123 jstupak 1.6 result['W+c']=sample.h.Integral(0,self.nBins+1)-result['W+light']
124 jstupak 1.4 sample.tree.Draw(self.distribution+">>+"+hName,weight+'*'+str(SFWb)+'*('+cuts+'&&'+bTagCut+'&& n_Bjets_ChargedHiggsCalc>0)','goff')
125 jstupak 1.6 result['W+b']=sample.h.Integral(0,self.nBins+1)-result['W+light']-result['W+c']
126 jstupak 1.1 bTagEff=sample.h.Integral(0,self.nBins+1)
127 jstupak 1.2
128     #get shape from untagged sample
129 jstupak 1.4 sample.tree.Draw(self.distribution+">>"+hName,weight+'*'+str(SFWj)+'*('+cuts+'&& n_Bjets_ChargedHiggsCalc==0 && n_Cjets_ChargedHiggsCalc==0)','goff')
130     sample.tree.Draw(self.distribution+">>+"+hName,weight+'*'+str(SFWc)+'*('+cuts+'&& n_Bjets_ChargedHiggsCalc==0 && n_Cjets_ChargedHiggsCalc>0)','goff')
131     sample.tree.Draw(self.distribution+">>+"+hName,weight+'*'+str(SFWb)+'*('+cuts+'&& n_Bjets_ChargedHiggsCalc>0)','goff')
132 jstupak 1.1 bTagEff/=sample.h.Integral(0,self.nBins+1)
133 jstupak 1.6 sample.h.Scale(bTagEff) #normalize to tagged integrala
134 jstupak 1.1
135 jstupak 1.6 result['W+light']*=lumi*sample.crossSection/sample.nEvents
136     result['W+c']*=lumi*sample.crossSection/sample.nEvents
137     result['W+b']*=lumi*sample.crossSection/sample.nEvents
138    
139 jstupak 1.1 else:
140     nSelectedRaw=sample.tree.Draw(self.distribution+">>"+hName,weight+'*('+cuts+'&&'+bTagCut+')','goff')
141    
142 jstupak 1.5 if sample.isMC and sample.h.Integral(0,self.nBins+1)!=0: sample.h.Scale(lumi*sample.crossSection/sample.nEvents)
143 jstupak 1.1
144 jstupak 1.6 if DEBUG and False: #for event comparison
145 jstupak 1.1 if 'TTbar_Powheg' in sample.name and self.channel=='el':
146     sample.tree.SetScanField(0)
147 jstupak 1.2 print '\n',sample.name,' ',self.channel
148 jstupak 1.4 sample.tree.Scan('run_CommonCalc:lumi_CommonCalc:event_CommonCalc:corr_met_ChargedHiggsCalc:jet_0_pt_ChargedHiggsCalc:jet_1_pt_ChargedHiggsCalc:elec_1_pt_ChargedHiggsCalc:elec_1_eta_ChargedHiggsCalc:elec_1_RelIso_ChargedHiggsCalc:muon_1_pt_ChargedHiggsCalc:muon_1_eta_ChargedHiggsCalc:muon_1_RelIso_ChargedHiggsCalc','('+cuts+'&&'+bTagCut+')')
149 jstupak 1.1
150 jstupak 1.2 result[sample.name]=sample.h.Integral(0,self.nBins+1) #for cutflow table
151 jstupak 1.1
152 jstupak 1.2 #format histograms and draw plots
153 jstupak 1.1 output.cd()
154     self.signals=[]
155     self.backgroundStack=THStack()
156     self.ewk=TH1F(self.name+'_ewk',';'+self.xTitle,self.nBins,self.xMin,self.xMax)
157     self.top=TH1F(self.name+'_top',';'+self.xTitle,self.nBins,self.xMin,self.xMax)
158     self.data=TH1F(self.name+'_data',';'+self.xTitle,self.nBins,self.xMin,self.xMax)
159     self.data.SetMarkerStyle(20)
160     for sample in samples:
161     if (self.channel=='el' and 'SingleMu' in sample.name) or (self.channel=='mu' and 'SingleEl' in sample.name): continue
162     elif sample.isSignal:
163 jstupak 1.6 if DEBUG: continue
164 jstupak 1.1 sample.h.Scale(20)
165     sample.h.SetLineColor(1)
166     sample.h.SetLineStyle(6+len(self.signals))
167     self.signals+=[sample.h]
168     elif sample.isBackground:
169     if sample.name[0]=='T': self.top.Add(sample.h)
170     else: self.ewk.Add(sample.h)
171 jstupak 1.6 elif sample.isData:
172     if DEBUG and not ('SingleElectron_13Jul2012A' in sample.name or 'SingleMu_13Jul2012A' in sample.name): continue
173     self.data.Add(sample.h)
174 jstupak 1.1 sample.h.SetLineWidth(2)
175    
176     self.ewk.SetFillColor(ROOT.kGreen-3)
177     self.ewk.SetLineColor(ROOT.kGreen-2)
178     self.top.SetFillColor(ROOT.kRed-7)
179     self.top.SetLineColor(ROOT.kRed-4)
180    
181     self.backgroundStack.Add(self.ewk)
182     self.backgroundStack.Add(self.top)
183    
184     self.background=self.backgroundStack.GetStack().Last().Clone(self.name+'_background')
185     result['Total Background']=self.background.Integral(0,self.nBins+1)
186     result['Data']=self.data.Integral(0,self.nBins+1)
187    
188     return result
189    
190    
191     def Draw(self):
192    
193     self.canvas=TCanvas(self.name,"",1000,800)
194    
195     yDiv=0.35
196 jstupak 1.2 self.uPad=TPad("uPad","",0,yDiv,1,1) #for actual plots
197 jstupak 1.7 self.uPad.SetTopMargin(0.07)
198 jstupak 1.1 self.uPad.SetBottomMargin(0)
199     self.uPad.SetRightMargin(.05)
200     self.uPad.SetLeftMargin(.18)
201     self.uPad.Draw()
202    
203 jstupak 1.2 self.lPad=TPad("lPad","",0,0,1,yDiv) #for sigma runner
204 jstupak 1.1 self.lPad.SetTopMargin(0)
205 jstupak 1.2 self.lPad.SetBottomMargin(.4)
206 jstupak 1.1 self.lPad.SetRightMargin(.05)
207     self.lPad.SetLeftMargin(.18)
208     self.lPad.SetGridy()
209     self.lPad.Draw()
210    
211     self.data.SetMaximum(2*self.data.GetMaximum())
212     self.data.SetMinimum(0.025)
213     self.data.GetYaxis().CenterTitle()
214     self.data.GetXaxis().SetLabelSize(0)
215     self.data.GetYaxis().SetLabelSize(0.08)
216     self.data.GetYaxis().SetTitleSize(0.12)
217     self.data.GetYaxis().SetTitleOffset(.75)
218    
219     if self.yLog:
220     self.uPad.SetLogy()
221     self.data.SetMaximum(500*self.data.GetMaximum())
222    
223     binWidth=round(self.data.GetBinWidth(1),5)
224     if binWidth-round(binWidth)<.001*binWidth: binWidth=int(round(binWidth))
225     yTitle="Events / "+str(binWidth)
226 jstupak 1.2 if '[' in self.xTitle and ']' in self.xTitle: #get units from x axis title
227 jstupak 1.1 begin=self.xTitle.find('[')+1
228     end=self.xTitle.find(']')
229     yTitle+=' '+self.xTitle[begin:end]
230     self.data.GetYaxis().SetTitle(yTitle)
231    
232     self.uPad.cd()
233 jstupak 1.2 self.data.Draw("E1") #draw data first because its easier to format a TH1 than a THStack
234 jstupak 1.1 self.backgroundStack.Draw("SAME HIST")
235     for signal in self.signals: signal.Draw("SAME HIST")
236 jstupak 1.2 self.data.Draw("SAME E1") #redraw data so its not hidden
237 jstupak 1.1 self.uPad.RedrawAxis()
238    
239 jstupak 1.2 #calculate stat+sys uncertainty
240 jstupak 1.1 self.uncBand=self.background.Clone("unc")
241     for binNo in range(0,self.nBins+1):
242     lumiUnc=0
243     sigmaUnc=0
244     statUnc=0
245     for sample in samples:
246     if sample.isBackground:
247     lumiUnc+=(sample.h.GetBinContent(binNo)*lumiFracUnc)**2
248     if sample.name=='WJets': sigmaFracUnc=wJetsSigmaFracUnc
249     elif sample.name[0]=='T': sigmaFracUnc=ttbarSigmaFracUnc
250 jstupak 1.2 else: sigmaFracUnc=otherSigmaFracUnc #WW, Z+Jets
251 jstupak 1.1 sigmaUnc+=(sample.h.GetBinContent(binNo)*sigmaFracUnc)**2
252     statUnc+=sample.h.GetBinError(binNo)**2
253     totalUnc=sqrt(lumiUnc+sigmaUnc+statUnc)
254     self.uncBand.SetBinError(binNo,totalUnc)
255     self.background.SetBinError(binNo,totalUnc)
256 jstupak 1.7 print binNo, self.uncBand.GetBinContent(binNo),self.uncBand.GetBinError(binNo)
257 jstupak 1.1 self.uncBand.SetFillStyle(3344)
258     self.uncBand.SetFillColor(1)
259     self.uncBand.SetLineColor(1)
260     gStyle.SetHatchesLineWidth(1)
261     self.uncBand.Draw("SAME E2")
262    
263     legend=TLegend(0.60,0.60,0.90,0.90)
264     legend.SetShadowColor(0);
265     legend.SetFillColor(0);
266     legend.SetLineColor(0);
267     legend.AddEntry(self.data,"Data")
268     legend.AddEntry(self.top,"t#bar{t} + Single-Top", "f")
269     legend.AddEntry(self.ewk,"W#rightarrowl#nu + Z/#gamma*#rightarrowl^{+}l^{-} + VV" , "f")
270     for signal in self.signals:
271 jstupak 1.7 mass=signal.GetName()[-3:]
272     legend.AddEntry(signal, "H^{#pm} x 20, m="+mass+" GeV", "l")
273 jstupak 1.1 legend.AddEntry(self.uncBand , "Uncertainty" , "f")
274     legend.Draw("SAME")
275    
276     prelimTex=TLatex()
277     prelimTex.SetNDC()
278     prelimTex.SetTextSize(0.04)
279     prelimTex.SetTextAlign(31) # align right
280     if self.channel=='el': lumi=elLumi
281     elif self.channel=='mu': lumi=muLumi
282     lumi/=1000.
283     lumi=round(lumi,2)
284 jstupak 1.7 prelimTex.DrawLatex(0.9, 0.95, "CMS Preliminary, "+str(lumi)+" fb^{-1} at #sqrt{s} = 8 TeV");
285 jstupak 1.1
286 jstupak 1.6 if self.cuts=="0":
287 jstupak 1.1 bTagLabel="N_{b tags} = 0"
288 jstupak 1.6 elif self.cuts=="0p":
289 jstupak 1.1 bTagLabel="N_{b tags} #geq 0"
290 jstupak 1.6 elif self.cuts=="1":
291 jstupak 1.1 bTagLabel="N_{b tags} = 1"
292 jstupak 1.6 elif self.cuts=="1p":
293 jstupak 1.1 bTagLabel="N_{b tags} #geq 1"
294 jstupak 1.6 elif self.cuts=="2":
295 jstupak 1.1 bTagLabel="N_{b tags} = 2"
296 jstupak 1.6 elif self.cuts=="2p":
297 jstupak 1.1 bTagLabel="N_{b tags} #geq 2"
298 jstupak 1.6 elif self.cuts=="3p":
299     bTagLabel="N_{b tags} #geq 3"
300     elif self.cuts=="final":
301     bTagLabel="N_{b tags} #geq 1"
302 jstupak 1.1 channelTex = TLatex()
303     channelTex.SetNDC()
304     channelTex.SetTextSize(0.08)
305     channelTex.SetTextAlign(31) # align right
306     if self.channel=='el': text='e'
307     elif self.channel=='mu': text='#mu'
308     text+="+jets "+bTagLabel
309     channelTex.DrawLatex(0.5, 0.83, text);
310    
311     self.lPad.cd()
312     self.pull=self.data.Clone("pull")
313     for binNo in range(0,self.nBins+1):
314     if self.background.GetBinError(binNo)!=0:
315     self.pull.SetBinContent(binNo,(self.data.GetBinContent(binNo)-self.background.GetBinContent(binNo))/self.background.GetBinError(binNo))
316     self.pull.SetMaximum(3)
317     self.pull.SetMinimum(-3)
318     self.pull.SetFillColor(2)
319     self.pull.SetLineColor(2)
320     self.pull.GetXaxis().SetLabelSize(.15)
321     self.pull.GetXaxis().SetTitleSize(0.18)
322     self.pull.GetXaxis().SetTitle(self.xTitle)
323     self.pull.GetXaxis().SetTitleOffset(.95) #1.15
324     self.pull.GetYaxis().SetLabelSize(0.125)
325     self.pull.GetYaxis().SetTitleSize(0.1)
326     self.pull.GetYaxis().SetTitle('#sigma(Data-MC)')
327     self.pull.GetYaxis().SetTitleOffset(.35)
328     self.pull.GetYaxis().SetNdivisions(5);
329     self.pull.Draw("HIST")
330    
331     output.cd()
332 jstupak 1.2 self.canvas.Write()
333 jstupak 1.1 self.data.Write()
334     self.ewk.Write()
335     self.top.Write()
336 jstupak 1.4 self.canvas.SaveAs(outputDir+'/'+self.name+'.pdf')
337     #self.canvas.SaveAs(outputDir+'/'+self.name+'.eps')
338     #self.canvas.SaveAs(outputDir+'/'+self.name+'.C')
339 jstupak 1.1
340     ##################################################################################################################################################################
341    
342     if __name__=='__main__':
343    
344     yields={}
345     plots=[]
346 jstupak 1.6 for cuts in doCuts:
347     yields[cuts]={}
348 jstupak 1.1 if doCutTable:
349 jstupak 1.6 plots+=[ChargedHiggsPlot(name='electron0_pt',distribution='elec_1_pt_ChargedHiggsCalc',nBins=100,xMin=0,xMax=7000,xTitle='electron p_{T} [GeV]',yLog=True,cuts=cuts,channel='el'),
350     ChargedHiggsPlot(name='muon0_pt',distribution='muon_1_pt_ChargedHiggsCalc',nBins=100,xMin=0,xMax=7000,xTitle='muon p_{T} [GeV]',yLog=True,cuts=cuts,channel='mu')
351 jstupak 1.1 ]
352    
353     else:
354 jstupak 1.6 plots+=[ChargedHiggsPlot(name='electron0_pt',distribution='elec_1_pt_ChargedHiggsCalc',nBins=100,xMin=0,xMax=1000,xTitle='electron p_{T} [GeV]',yLog=True,cuts=cuts,channel='el'),
355     ChargedHiggsPlot(name='electron0_eta',distribution='elec_1_eta_ChargedHiggsCalc',nBins=50,xMin=-2.5,xMax=2.5,xTitle='electron #eta',yLog=False,cuts=cuts,channel='el'),
356     ChargedHiggsPlot(name='electron0_RelIso',distribution='elec_1_RelIso_ChargedHiggsCalc',nBins=30,xMin=0,xMax=0.15,xTitle='electron Rel. Isolation',yLog=True,cuts=cuts,channel='el'),
357    
358 jstupak 1.7 ChargedHiggsPlot(name='muon0_pt',distribution='muon_1_pt_ChargedHiggsCalc',nBins=100,xMin=0,xMax=1000,xTitle='muon p_{T} [GeV]',yLog=True,cuts=cuts,channel='mu'),
359     ChargedHiggsPlot(name='muon0_eta',distribution='muon_1_eta_ChargedHiggsCalc',nBins=50,xMin=-2.5,xMax=2.5,xTitle='muon #eta',yLog=False,cuts=cuts,channel='mu'),
360     ChargedHiggsPlot(name='muon0_RelIso',distribution='muon_1_RelIso_ChargedHiggsCalc',nBins=30,xMin=0,xMax=0.15,xTitle='muon Rel. Isolation',yLog=True,cuts=cuts,channel='mu')
361 jstupak 1.1 ]
362 jstupak 1.6
363    
364     for channel in doChannels:
365 jstupak 1.7 plots+=[ChargedHiggsPlot(name='BestJetJet2W_M',distribution='BestJetJet2W_M_LjetsTopoCalcNew',nBins=68,xMin=100,xMax=3500,xTitle='M(tb) [GeV]',yLog=True,cuts=cuts,channel=channel),
366     ChargedHiggsPlot(name='Jet1Jet2W_M',distribution='Jet1Jet2W_M_LjetsTopoCalcNew',nBins=68,xMin=100,xMax=3500,xTitle='M(tb) [GeV]',yLog=True,cuts=cuts,channel=channel),
367     ChargedHiggsPlot(name='corr_met',distribution='corr_met_ChargedHiggsCalc',nBins=100,xMin=0,xMax=1000,xTitle='E_{T}^{miss} [GeV]',yLog=True,cuts=cuts,channel=channel),
368     ChargedHiggsPlot(name='PFjet0_pt',distribution='jet_0_pt_ChargedHiggsCalc',nBins=130,xMin=0,xMax=1300,xTitle='p_{T} (jet1) [GeV]',yLog=True,cuts=cuts,channel=channel),
369     ChargedHiggsPlot(name='PFjet0_eta',distribution='jet_0_eta_ChargedHiggsCalc',nBins=50,xMin=-2.5,xMax=2.5,xTitle='#eta (jet1)',yLog=False,cuts=cuts,channel=channel),
370     ChargedHiggsPlot(name='PFjet1_pt',distribution='jet_1_pt_ChargedHiggsCalc',nBins=120,xMin=0,xMax=1200,xTitle='p_{T} (jet2) [GeV]',yLog=True,cuts=cuts,channel=channel),
371     ChargedHiggsPlot(name='PFjet1_eta',distribution='jet_1_eta_ChargedHiggsCalc',nBins=50,xMin=-2.5,xMax=2.5,xTitle='#eta (jet2)',yLog=False,cuts=cuts,channel=channel),
372     ChargedHiggsPlot(name='PFjet2_pt',distribution='jet_2_pt_ChargedHiggsCalc',nBins=80,xMin=0,xMax=800,xTitle='p_{T} (jet3) [GeV]',yLog=True,cuts=cuts,channel=channel),
373     ChargedHiggsPlot(name='PFjet2_eta',distribution='jet_2_eta_ChargedHiggsCalc',nBins=50,xMin=-2.5,xMax=2.5,xTitle='#eta (jet3)',yLog=False,cuts=cuts,channel=channel),
374     ChargedHiggsPlot(name='TopMass_Best',distribution='BestTop_LjetsTopoCalcNew',nBins=100,xMin=0,xMax=1000,xTitle='M(best jet,W) [GeV]',yLog=True,cuts=cuts,channel=channel),
375     ChargedHiggsPlot(name='TopPt_Best',distribution='BestTop_Pt_LjetsTopoCalcNew',nBins=150,xMin=0,xMax=1500,xTitle='p_{T}(best jet,W) [GeV]',yLog=True,cuts=cuts,channel=channel),
376     ChargedHiggsPlot(name='Pt_Jet1Jet2',distribution='Jet1Jet2_Pt_LjetsTopoCalcNew',nBins=150,xMin=0,xMax=1500,xTitle='p_{T}(jet1,jet2) [GeV]',yLog=True,cuts=cuts,channel=channel),
377     ChargedHiggsPlot(name='HT',distribution='Ht_LjetsTopoCalcNew',nBins=125,xMin=0,xMax=2500,xTitle='H_{T} [GeV]',yLog=True,cuts=cuts,channel=channel),
378     ChargedHiggsPlot(name='nPV',distribution='nPV_ChargedHiggsCalc',nBins=50,xMin=0,xMax=50,xTitle='# Vertices',yLog=True,cuts=cuts,channel=channel)
379 jstupak 1.1 ]
380 jstupak 1.6
381 jstupak 1.1 for plot in plots:
382 jstupak 1.6 yields[plot.cuts][plot.channel]=plot.Prepare()
383 jstupak 1.1 plot.Draw()
384    
385     cWidth=15; nameWidth=35
386 jstupak 1.6 for channel in doChannels:
387     print ("CHANNEL:"+channel).ljust(nameWidth+(2*cWidth+1)),"N_b"
388 jstupak 1.1 print "".ljust(nameWidth),
389 jstupak 1.6 for cuts in doCuts: print cuts.ljust(cWidth),
390 jstupak 1.1 print
391 jstupak 1.6 for sample in ['Data','W+light','W+c','W+b']:
392 jstupak 1.1 print sample.ljust(nameWidth),
393 jstupak 1.6 for cuts in doCuts:
394     try: print str(int(round(yields[cuts][channel][sample]))).ljust(cWidth),
395 jstupak 1.1 except: pass
396     print
397     for sample in samples:
398 jstupak 1.6 if (channel=='el' and 'SingleMu' in sample.name) or (channel=='mu' and 'SingleEl' in sample.name): continue
399 jstupak 1.1 if sample.isData: continue
400 jstupak 1.6 if DEBUG and sample.isSignal: continue
401 jstupak 1.1 print sample.name.ljust(nameWidth),
402 jstupak 1.6 for cuts in doCuts:
403     print str(int(round(yields[cuts][channel][sample.name]))).ljust(cWidth),
404     #print yields[cuts][channel][sample.name]
405 jstupak 1.1 print
406     for sample in ['Total Background']:
407     print sample.ljust(nameWidth),
408 jstupak 1.6 for cuts in doCuts:
409     print str(int(round(yields[cuts][channel][sample]))).ljust(cWidth),
410 jstupak 1.1 print
411     print 'Background/Data'.ljust(nameWidth),
412 jstupak 1.6 for cuts in doCuts:
413     print str(round(yields[cuts][channel]['Total Background']/yields[cuts][channel]['Data'],3)).ljust(cWidth),
414 jstupak 1.1 print 3*'\n'
415