ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/JohnStupak/python/doPostProc.py
Revision: 1.5
Committed: Wed Feb 13 23:28:38 2013 UTC (12 years, 2 months ago) by jstupak
Content type: text/x-python
Branch: MAIN
Changes since 1.4: +14 -125 lines
Log Message:
removed data driven QCD stuff, added Muon_DeltaR_LjetsTopoCalcNew cut, updated electron and muon channel scale factors

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