ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbb/python/write_regression_systematics.py
Revision: 1.30
Committed: Tue Jan 15 14:54:58 2013 UTC (12 years, 4 months ago) by nmohr
Content type: text/x-python
Branch: MAIN
Changes since 1.29: +71 -1 lines
Log Message:
Add angular likelihood

File Contents

# User Rev Content
1 nmohr 1.1 #!/usr/bin/env python
2     from samplesclass import sample
3     from printcolor import printc
4     import pickle
5     import sys
6     import os
7     import ROOT
8     import math
9     import shutil
10     from array import array
11     import warnings
12 peller 1.15 from optparse import OptionParser
13     from BetterConfigParser import BetterConfigParser
14 nmohr 1.1 warnings.filterwarnings( action='ignore', category=RuntimeWarning, message='creating converter.*' )
15    
16    
17     #usage: ./write_regression_systematic.py path
18    
19    
20     #os.mkdir(path+'/sys')
21 nmohr 1.16 argv = sys.argv
22 peller 1.15 parser = OptionParser()
23 nmohr 1.16 parser.add_option("-P", "--path", dest="path", default="",
24     help="path to samples")
25     parser.add_option("-S", "--samples", dest="names", default="",
26     help="samples you want to run on")
27 nmohr 1.19 parser.add_option("-C", "--config", dest="config", default=[], action="append",
28 peller 1.15 help="configuration defining the plots to make")
29     (opts, args) = parser.parse_args(argv)
30 nmohr 1.16 if opts.config =="":
31 peller 1.15 opts.config = "config"
32     print opts.config
33     config = BetterConfigParser()
34     config.read(opts.config)
35     anaTag = config.get("Analysis","tag")
36 peller 1.23 TrainFlag = eval(config.get('Analysis','TrainFlag'))
37 nmohr 1.16 btagLibrary = config.get('BTagReshaping','library')
38 nmohr 1.28 samplesinfo=config.get('Directories','samplesinfo')
39 nmohr 1.30
40     VHbbNameSpace=config.get('VHbbNameSpace','library')
41     ROOT.gSystem.Load(VHbbNameSpace)
42     AngLikeBkgs=eval(config.get('AngularLike','backgrounds'))
43     ang_yield=eval(config.get('AngularLike','yields'))
44    
45 nmohr 1.16 path=opts.path
46     namelist=opts.names.split(',')
47     #load info
48 nmohr 1.28 infofile = open(samplesinfo,'r')
49 nmohr 1.16 info = pickle.load(infofile)
50     infofile.close()
51 nmohr 1.1
52     def deltaPhi(phi1, phi2):
53     result = phi1 - phi2
54     while (result > math.pi): result -= 2*math.pi
55     while (result <= -math.pi): result += 2*math.pi
56     return result
57    
58 peller 1.15 def resolutionBias(eta):
59     if(eta< 1.1): return 0.05
60     if(eta< 2.5): return 0.10
61     if(eta< 5): return 0.30
62     return 0
63    
64     def corrPt(pt,eta,mcPt):
65     return (pt+resolutionBias(math.fabs(eta))*(pt-mcPt))/pt
66    
67 nmohr 1.1 def corrCSV(btag, csv, flav):
68     if(csv < 0.): return csv
69     if(csv > 1.): return csv;
70     if(flav == 0): return csv;
71     if(math.fabs(flav) == 5): return btag.ib.Eval(csv)
72     if(math.fabs(flav) == 4): return btag.ic.Eval(csv)
73     if(math.fabs(flav) != 4 and math.fabs(flav) != 5): return btag.il.Eval(csv)
74     return -10000
75    
76    
77 peller 1.15 def csvReshape(sh, pt, eta, csv, flav):
78     return sh.reshape(float(eta), float(pt), float(csv), int(flav))
79    
80    
81 nmohr 1.1 for job in info:
82 peller 1.15 if not job.name in namelist: continue
83 nmohr 1.1 #print job.name
84 peller 1.15 #if job.name != 'ZH120': continue
85 nmohr 1.1 ROOT.gROOT.ProcessLine(
86     "struct H {\
87     int HiggsFlag;\
88     float mass;\
89     float pt;\
90     float eta;\
91     float phi;\
92     float dR;\
93     float dPhi;\
94     float dEta;\
95     } ;"
96     )
97 peller 1.15 if anaTag == '7TeV':
98 nmohr 1.27 ROOT.gSystem.Load(btagLibrary)
99     from ROOT import BTagShape
100     btagNom = BTagShape("../data/csvdiscr.root")
101     btagNom.computeFunctions()
102     btagUp = BTagShape("../data/csvdiscr.root")
103     btagUp.computeFunctions(+1.,0.)
104     btagDown = BTagShape("../data/csvdiscr.root")
105     btagDown.computeFunctions(-1.,0.)
106     btagFUp = BTagShape("../data/csvdiscr.root")
107     btagFUp.computeFunctions(0.,+1.)
108     btagFDown = BTagShape("../data/csvdiscr.root")
109     btagFDown.computeFunctions(0.,-1.)
110 peller 1.15 elif anaTag == '8TeV':
111 nmohr 1.27 ROOT.gSystem.Load(btagLibrary)
112     from ROOT import BTagShapeInterface
113     btagNom = BTagShapeInterface("../data/csvdiscr.root",0,0)
114     btagUp = BTagShapeInterface("../data/csvdiscr.root",+1,0)
115     btagDown = BTagShapeInterface("../data/csvdiscr.root",-1,0)
116     btagFUp = BTagShapeInterface("../data/csvdiscr.root",0,+1.)
117     btagFDown = BTagShapeInterface("../data/csvdiscr.root",0,-1.)
118 nmohr 1.1
119     print '\t - %s' %(job.name)
120 nmohr 1.29 input = ROOT.TFile.Open(path+'/'+job.getpath(),'read')
121     output = ROOT.TFile.Open(path+'/sys/'+job.prefix+job.identifier+'.root','recreate')
122 nmohr 1.1
123     input.cd()
124     obj = ROOT.TObject
125     for key in ROOT.gDirectory.GetListOfKeys():
126     input.cd()
127     obj = key.ReadObj()
128     #print obj.GetName()
129     if obj.GetName() == job.tree:
130     continue
131     output.cd()
132     #print key.GetName()
133     obj.Write(key.GetName())
134    
135 nmohr 1.3 input.cd()
136 nmohr 1.1 tree = input.Get(job.tree)
137     nEntries = tree.GetEntries()
138    
139     job.addpath('/sys')
140     if job.type != 'DATA':
141     job.SYS = ['Nominal','JER_up','JER_down','JES_up','JES_down','beff_up','beff_down','bmis_up','bmis_down']
142    
143     H = ROOT.H()
144     HNoReg = ROOT.H()
145     tree.SetBranchStatus('H',0)
146     output.cd()
147     newtree = tree.CloneTree(0)
148    
149     hJ0 = ROOT.TLorentzVector()
150     hJ1 = ROOT.TLorentzVector()
151    
152 peller 1.15 regWeight = config.get("Regression","regWeight")
153     regDict = eval(config.get("Regression","regDict"))
154     regVars = eval(config.get("Regression","regVars"))
155     useMET = eval(config.get("Regression","useMET"))
156     usePtRaw = eval(config.get("Regression","usePtRaw"))
157 nmohr 1.21 useMt = eval(config.get("Regression","useMt"))
158 peller 1.15 useRho25 = eval(config.get("Regression","useRho25"))
159 nmohr 1.1
160     #Regression branches
161     applyRegression = True
162     hJet_pt = array('f',[0]*2)
163     hJet_e = array('f',[0]*2)
164     newtree.Branch( 'H', H , 'HiggsFlag/I:mass/F:pt/F:eta:phi/F:dR/F:dPhi/F:dEta/F' )
165     newtree.Branch( 'HNoReg', HNoReg , 'HiggsFlag/I:mass/F:pt/F:eta:phi/F:dR/F:dPhi/F:dEta/F' )
166     Event = array('f',[0])
167     METet = array('f',[0])
168     rho25 = array('f',[0])
169     METphi = array('f',[0])
170     fRho25 = ROOT.TTreeFormula("rho25",'rho25',tree)
171     fEvent = ROOT.TTreeFormula("Event",'EVENT.event',tree)
172     fMETet = ROOT.TTreeFormula("METet",'METnoPU.et',tree)
173     fMETphi = ROOT.TTreeFormula("METphi",'METnoPU.phi',tree)
174 nmohr 1.30 fHVMass = ROOT.TTreeFormula("HVMass",'HVMass',tree)
175 nmohr 1.21 hJet_MtArray = [array('f',[0]),array('f',[0])]
176 nmohr 1.24 hJet_EtArray = [array('f',[0]),array('f',[0])]
177 nmohr 1.1 hJet_MET_dPhi = array('f',[0]*2)
178     hJet_regWeight = array('f',[0]*2)
179     hJet_MET_dPhiArray = [array('f',[0]),array('f',[0])]
180 nmohr 1.27 hJet_ptRawArray = [array('f',[0]),array('f',[0])]
181 nmohr 1.1 newtree.Branch('hJet_MET_dPhi',hJet_MET_dPhi,'hJet_MET_dPhi[2]/F')
182     newtree.Branch('hJet_regWeight',hJet_regWeight,'hJet_regWeight[2]/F')
183     readerJet0 = ROOT.TMVA.Reader("!Color:!Silent" )
184     readerJet1 = ROOT.TMVA.Reader("!Color:!Silent" )
185    
186     theForms = {}
187     theVars0 = {}
188     theVars1 = {}
189 nmohr 1.25 def addVarsToReader(reader,theVars,theForms,i,hJet_MET_dPhiArray,METet,rho25,hJet_MtArray,hJet_EtArray,hJet_ptRawArray):
190 nmohr 1.24 for key in regVars:
191     var = regDict[key]
192     theVars[key] = array( 'f', [ 0 ] )
193     if var == 'Jet_MET_dPhi':
194     print 'Adding var: %s with %s to readerJet%.0f' %(key,var,i)
195     reader.AddVariable( key, hJet_MET_dPhiArray[i] )
196     elif var == 'METet':
197     print 'Adding var: %s with %s to readerJet%.0f' %(key,var,i)
198 nmohr 1.26 reader.AddVariable( key, METet )
199 nmohr 1.24 elif var == 'rho25':
200     print 'Adding var: %s with %s to readerJet%.0f' %(key,var,i)
201 nmohr 1.26 reader.AddVariable( key, rho25 )
202 nmohr 1.24 elif var == 'Jet_mt':
203     print 'Adding var: %s with %s to readerJet%.0f' %(key,var,i)
204 nmohr 1.26 reader.AddVariable( key, hJet_MtArray[i] )
205 nmohr 1.24 elif var == 'Jet_et':
206     print 'Adding var: %s with %s to readerJet%.0f' %(key,var,i)
207 nmohr 1.26 reader.AddVariable( key, hJet_EtArray[i] )
208 nmohr 1.24 elif var == 'Jet_ptRaw':
209     print 'Adding var: %s with %s to readerJet%.0f' %(key,var,i)
210 nmohr 1.26 reader.AddVariable( key, hJet_ptRawArray[i] )
211 nmohr 1.24 else:
212     reader.AddVariable(key,theVars[key])
213     formula = regDict[key].replace("[0]","[%.0f]" %i)
214     print 'Adding var: %s with %s to readerJet%.0f' %(key,formula,i)
215     theForms['form_reg_%s_%.0f'%(key,i)] = ROOT.TTreeFormula("form_reg_%s_%.0f"%(key,i),'%s' %(formula),tree)
216     return
217 nmohr 1.25 addVarsToReader(readerJet0,theVars0,theForms,0,hJet_MET_dPhiArray,METet,rho25,hJet_MtArray,hJet_EtArray,hJet_ptRawArray)
218     addVarsToReader(readerJet1,theVars1,theForms,1,hJet_MET_dPhiArray,METet,rho25,hJet_MtArray,hJet_EtArray,hJet_ptRawArray)
219 nmohr 1.24 readerJet0.BookMVA( "jet0Regression", regWeight )
220     readerJet1.BookMVA( "jet1Regression", regWeight )
221    
222    
223 nmohr 1.1
224 bortigno 1.4 #Add training Flag
225 nmohr 1.18 EventForTraining = array('i',[0])
226     newtree.Branch('EventForTraining',EventForTraining,'EventForTraining/I')
227 bortigno 1.4 EventForTraining[0]=0
228 bortigno 1.6
229 bortigno 1.5 TFlag=ROOT.TTreeFormula("EventForTraining","EVENT.event%2",tree)
230 nmohr 1.30
231     #Angular Likelihood
232     angleHB = array('f',[0])
233     newtree.Branch('angleHB',angleHB,'angleHB/F')
234     angleLZ = array('f',[0])
235     newtree.Branch('angleLZ',angleLZ,'angleLZ/F')
236     angleZZS = array('f',[0])
237     newtree.Branch('angleZZS',angleZZS,'angleZZS/F')
238     kinLikeRatio = array('f',[0]*len(AngLikeBkgs))
239     newtree.Branch('kinLikeRatio',kinLikeRatio,'%s/F' %(':'.join(AngLikeBkgs)))
240     fAngleHB = ROOT.TTreeFormula("fAngleHB",'abs(VHbb::ANGLEHB(hJet_pt[0],hJet_eta[0],hJet_phi[0],hJet_e[0]*(hJet_pt[0]/hJet_pt[0]),hJet_pt[1],hJet_eta[1],hJet_phi[1],hJet_e[1]*(hJet_pt[1]/hJet_pt[1])))',newtree)
241     fAngleLZ = ROOT.TTreeFormula("fAngleLZ",'abs(VHbb::ANGLELZ(vLepton_pt[0],vLepton_eta[0],vLepton_phi[0],vLepton_mass[0],vLepton_pt[1],vLepton_eta[1],vLepton_phi[1],vLepton_mass[1]))',newtree)
242     fAngleZZS = ROOT.TTreeFormula("fAngleZZS",'abs(VHbb::ANGLELZ(H.pt,H.eta,H.phi,H.pt,V.pt,V.eta,V.phi,V.mass))',newtree)
243     likeSBH = array('f',[0]*len(AngLikeBkgs))
244     likeBBH = array('f',[0]*len(AngLikeBkgs))
245     likeSLZ = array('f',[0]*len(AngLikeBkgs))
246     likeBLZ = array('f',[0]*len(AngLikeBkgs))
247     likeSZZS = array('f',[0]*len(AngLikeBkgs))
248     likeBZZS = array('f',[0]*len(AngLikeBkgs))
249     likeSMassZS = array('f',[0]*len(AngLikeBkgs))
250     likeBMassZS = array('f',[0]*len(AngLikeBkgs))
251    
252     SigBH = []; BkgBH = []; SigLZ = []; BkgLZ = []; SigZZS = []; BkgZZS = []; SigMassZS = []; BkgMassZS = [];
253     for angLikeBkg in AngLikeBkgs:
254     f = ROOT.TFile("../data/angleFitFunctions-%s.root"%(angLikeBkg),"READ")
255     SigBH.append(f.Get("sigFuncBH"))
256     BkgBH.append(f.Get("bkgFuncBH"))
257     SigLZ.append(f.Get("sigFuncLZ"))
258     BkgLZ.append(f.Get("bkgFuncLZ"))
259     SigZZS.append(f.Get("sigFuncZZS"))
260     BkgZZS.append(f.Get("bkgFuncZZS"))
261     SigMassZS.append(f.Get("sigFuncMassZS"))
262     BkgMassZS.append(f.Get("bkgFuncMassZS"))
263     f.Close()
264    
265 nmohr 1.1
266     if job.type != 'DATA':
267     #CSV branches
268     hJet_flavour = array('f',[0]*2)
269     hJet_csv = array('f',[0]*2)
270     hJet_csvOld = array('f',[0]*2)
271     hJet_csvUp = array('f',[0]*2)
272     hJet_csvDown = array('f',[0]*2)
273     hJet_csvFUp = array('f',[0]*2)
274     hJet_csvFDown = array('f',[0]*2)
275     newtree.Branch('hJet_csvOld',hJet_csvOld,'hJet_csvOld[2]/F')
276     newtree.Branch('hJet_csvUp',hJet_csvUp,'hJet_csvUp[2]/F')
277     newtree.Branch('hJet_csvDown',hJet_csvDown,'hJet_csvDown[2]/F')
278     newtree.Branch('hJet_csvFUp',hJet_csvFUp,'hJet_csvFUp[2]/F')
279     newtree.Branch('hJet_csvFDown',hJet_csvFDown,'hJet_csvFDown[2]/F')
280    
281     #JER branches
282     hJet_pt_JER_up = array('f',[0]*2)
283     newtree.Branch('hJet_pt_JER_up',hJet_pt_JER_up,'hJet_pt_JER_up[2]/F')
284     hJet_pt_JER_down = array('f',[0]*2)
285     newtree.Branch('hJet_pt_JER_down',hJet_pt_JER_down,'hJet_pt_JER_down[2]/F')
286     hJet_e_JER_up = array('f',[0]*2)
287     newtree.Branch('hJet_e_JER_up',hJet_e_JER_up,'hJet_e_JER_up[2]/F')
288     hJet_e_JER_down = array('f',[0]*2)
289     newtree.Branch('hJet_e_JER_down',hJet_e_JER_down,'hJet_e_JER_down[2]/F')
290     H_JER = array('f',[0]*4)
291     newtree.Branch('H_JER',H_JER,'mass_up:mass_down:pt_up:pt_down/F')
292    
293     #JES branches
294     hJet_pt_JES_up = array('f',[0]*2)
295     newtree.Branch('hJet_pt_JES_up',hJet_pt_JES_up,'hJet_pt_JES_up[2]/F')
296     hJet_pt_JES_down = array('f',[0]*2)
297     newtree.Branch('hJet_pt_JES_down',hJet_pt_JES_down,'hJet_pt_JES_down[2]/F')
298     hJet_e_JES_up = array('f',[0]*2)
299     newtree.Branch('hJet_e_JES_up',hJet_e_JES_up,'hJet_e_JES_up[2]/F')
300     hJet_e_JES_down = array('f',[0]*2)
301     newtree.Branch('hJet_e_JES_down',hJet_e_JES_down,'hJet_e_JES_down[2]/F')
302     H_JES = array('f',[0]*4)
303     newtree.Branch('H_JES',H_JES,'mass_up:mass_down:pt_up:pt_down/F')
304 nmohr 1.27 lheWeight = array('f',[0])
305 nmohr 1.17 if job.type != 'DY':
306 nmohr 1.26 newtree.Branch('lheWeight',lheWeight,'lheWeight/F')
307     lheWeight[0] = 1.
308 nmohr 1.1
309    
310     #iter=0
311    
312    
313     for entry in range(0,nEntries):
314     tree.GetEntry(entry)
315    
316 peller 1.22 if job.type != 'DATA' and TrainFlag:
317 nmohr 1.18 EventForTraining[0]=int(not TFlag.EvalInstance())
318 bortigno 1.9
319 nmohr 1.1
320     #get
321     hJet_pt = tree.hJet_pt
322     hJet_e = tree.hJet_e
323 nmohr 1.27 hJet_pt1 = tree.hJet_pt[1]
324 nmohr 1.1 hJet_pt0 = tree.hJet_pt[0]
325     hJet_pt1 = tree.hJet_pt[1]
326     hJet_eta0 = tree.hJet_eta[0]
327     hJet_eta1 = tree.hJet_eta[1]
328     hJet_genPt0 = tree.hJet_genPt[0]
329     hJet_genPt1 = tree.hJet_genPt[1]
330 nmohr 1.27 hJet_ptRaw0 = tree.hJet_ptRaw[0]
331     hJet_ptRaw1 = tree.hJet_ptRaw[1]
332 nmohr 1.1 hJet_e0 = tree.hJet_e[0]
333     hJet_e1 = tree.hJet_e[1]
334     hJet_phi0 = tree.hJet_phi[0]
335     hJet_phi1 = tree.hJet_phi[1]
336     hJet_JECUnc0 = tree.hJet_JECUnc[0]
337     hJet_JECUnc1 = tree.hJet_JECUnc[1]
338    
339     Event[0]=fEvent.EvalInstance()
340     METet[0]=fMETet.EvalInstance()
341     rho25[0]=fRho25.EvalInstance()
342     METphi[0]=fMETphi.EvalInstance()
343     for key, value in regDict.items():
344 nmohr 1.26 if not (value == 'Jet_MET_dPhi' or value == 'METet' or value == "rho25" or value == "Jet_et" or value == 'Jet_mt' or value == 'Jet_ptRaw'):
345 nmohr 1.24 theVars0[key][0] = theForms["form_reg_%s_0" %(key)].EvalInstance()
346     theVars1[key][0] = theForms["form_reg_%s_1" %(key)].EvalInstance()
347 nmohr 1.27 hJet_MET_dPhi[0] = deltaPhi(METphi[0],hJet_phi0)
348     hJet_MET_dPhi[1] = deltaPhi(METphi[0],hJet_phi1)
349     hJet_MET_dPhiArray[0][0] = deltaPhi(METphi[0],hJet_phi0)
350     hJet_MET_dPhiArray[1][0] = deltaPhi(METphi[0],hJet_phi1)
351     if not job.type == 'DATA':
352     corrRes0 = corrPt(hJet_pt0,hJet_eta0,hJet_genPt0)
353     corrRes1 = corrPt(hJet_pt1,hJet_eta1,hJet_genPt1)
354     hJet_ptRaw0 *= corrRes0
355     hJet_ptRaw1 *= corrRes1
356     hJet_ptRawArray[0][0] = hJet_ptRaw0
357     hJet_ptRawArray[1][0] = hJet_ptRaw1
358 nmohr 1.1
359 peller 1.15
360 nmohr 1.1 if applyRegression:
361     hJ0.SetPtEtaPhiE(hJet_pt0,hJet_eta0,hJet_phi0,hJet_e0)
362     hJ1.SetPtEtaPhiE(hJet_pt1,hJet_eta1,hJet_phi1,hJet_e1)
363     HNoReg.HiggsFlag = 1
364     HNoReg.mass = (hJ0+hJ1).M()
365     HNoReg.pt = (hJ0+hJ1).Pt()
366     HNoReg.eta = (hJ0+hJ1).Eta()
367     HNoReg.phi = (hJ0+hJ1).Phi()
368     HNoReg.dR = hJ0.DeltaR(hJ1)
369     HNoReg.dPhi = hJ0.DeltaPhi(hJ1)
370     HNoReg.dEta = abs(hJ0.Eta()-hJ1.Eta())
371 nmohr 1.21 hJet_MtArray[0][0] = hJ0.Mt()
372     hJet_MtArray[1][0] = hJ1.Mt()
373 nmohr 1.24 hJet_EtArray[0][0] = hJ0.Et()
374     hJet_EtArray[1][0] = hJ1.Et()
375 peller 1.15 rPt0 = max(0.0001,readerJet0.EvaluateRegression( "jet0Regression" )[0])
376     rPt1 = max(0.0001,readerJet1.EvaluateRegression( "jet1Regression" )[0])
377 nmohr 1.1 hJet_regWeight[0] = rPt0/hJet_pt0
378     hJet_regWeight[1] = rPt1/hJet_pt1
379     rE0 = hJet_e0*hJet_regWeight[0]
380     rE1 = hJet_e1*hJet_regWeight[1]
381     hJ0.SetPtEtaPhiE(rPt0,hJet_eta0,hJet_phi0,rE0)
382     hJ1.SetPtEtaPhiE(rPt1,hJet_eta1,hJet_phi1,rE1)
383     tree.hJet_pt[0] = rPt0
384     tree.hJet_pt[1] = rPt1
385     tree.hJet_e[0] = rE0
386     tree.hJet_e[1] = rE1
387     H.HiggsFlag = 1
388     H.mass = (hJ0+hJ1).M()
389     H.pt = (hJ0+hJ1).Pt()
390     H.eta = (hJ0+hJ1).Eta()
391     H.phi = (hJ0+hJ1).Phi()
392     H.dR = hJ0.DeltaR(hJ1)
393     H.dPhi = hJ0.DeltaPhi(hJ1)
394     H.dEta = abs(hJ0.Eta()-hJ1.Eta())
395     if hJet_regWeight[0] > 5. or hJet_regWeight[1] > 5.:
396 nmohr 1.24 print 'Event %.0f' %(Event[0])
397 nmohr 1.1 print 'MET %.2f' %(METet[0])
398     print 'rho25 %.2f' %(rho25[0])
399     for key, value in regDict.items():
400 nmohr 1.26 if not (value == 'Jet_MET_dPhi' or value == 'METet' or value == "rho25" or value == "Jet_et" or value == 'Jet_mt' or value == 'Jet_ptRaw'):
401 nmohr 1.24 print '%s 0: %.2f'%(key, theVars0[key][0])
402 nmohr 1.26 print '%s 1: %.2f'%(key, theVars1[key][0])
403 nmohr 1.1 for i in range(2):
404     print 'dPhi %.0f %.2f' %(i,hJet_MET_dPhiArray[i][0])
405 nmohr 1.24 for i in range(2):
406     print 'ptRaw %.0f %.2f' %(i,hJet_ptRawArray[i][0])
407     for i in range(2):
408     print 'Mt %.0f %.2f' %(i,hJet_MtArray[i][0])
409     for i in range(2):
410     print 'Et %.0f %.2f' %(i,hJet_EtArray[i][0])
411 nmohr 1.1 print 'corr 0 %.2f' %(hJet_regWeight[0])
412     print 'corr 1 %.2f' %(hJet_regWeight[1])
413     print 'rPt0 %.2f' %(rPt0)
414     print 'rPt1 %.2f' %(rPt1)
415     print 'rE0 %.2f' %(rE0)
416     print 'rE1 %.2f' %(rE1)
417     print 'Mass %.2f' %(H.mass)
418 nmohr 1.30
419     angleHB[0]=fAngleHB.EvalInstance()
420     angleLZ[0]=fAngleLZ.EvalInstance()
421     angleZZS[0]=fAngleZZS.EvalInstance()
422    
423     for i, angLikeBkg in enumerate(AngLikeBkgs):
424     likeSBH[i] = math.fabs(SigBH[i].Eval(angleHB[0]))
425     likeBBH[i] = math.fabs(BkgBH[i].Eval(angleHB[0]))
426    
427     likeSZZS[i] = math.fabs(SigZZS[i].Eval(angleZZS[0]))
428     likeBZZS[i] = math.fabs(BkgZZS[i].Eval(angleZZS[0]))
429    
430     likeSLZ[i] = math.fabs(SigLZ[i].Eval(angleLZ[0]))
431     likeBLZ[i] = math.fabs(BkgLZ[i].Eval(angleLZ[0]))
432    
433     likeSMassZS[i] = math.fabs(SigMassZS[i].Eval(fHVMass.EvalInstance()))
434     likeBMassZS[i] = math.fabs(BkgMassZS[i].Eval(fHVMass.EvalInstance()))
435    
436     scaleSig = float( ang_yield['Sig'] / (ang_yield['Sig'] + ang_yield[angLikeBkg]))
437     scaleBkg = float( ang_yield[angLikeBkg] / (ang_yield['Sig'] + ang_yield[angLikeBkg]) )
438    
439     numerator = (likeSBH[i]*likeSZZS[i]*likeSLZ[i]*likeSMassZS[i]);
440     denominator = ((scaleBkg*likeBLZ[i]*likeBZZS[i]*likeBBH[i]*likeBMassZS[i])+(scaleSig*likeSBH[i]*likeSZZS[i]*likeSLZ[i]*likeSMassZS[i]))
441    
442     if denominator > 0:
443     kinLikeRatio[i] = numerator/denominator;
444     else:
445     kinLikeRatio[i] = 0;
446    
447 nmohr 1.1 if job.type == 'DATA':
448     newtree.Fill()
449     continue
450    
451     for i in range(2):
452 peller 1.15 flavour = int(tree.hJet_flavour[i])
453     pt = float(tree.hJet_pt[i])
454     eta = float(tree.hJet_eta[i])
455     csv = float(tree.hJet_csv[i])
456 nmohr 1.26 hJet_csvOld[i] = csv
457     if anaTag == '7TeV':
458     tree.hJet_csv[i] = corrCSV(btagNom,csv,flavour)
459     hJet_csvDown[i] = corrCSV(btagDown,csv,flavour)
460     hJet_csvUp[i] = corrCSV(btagUp,csv,flavour)
461     hJet_csvFDown[i] = corrCSV(btagFDown,csv,flavour)
462     hJet_csvFUp[i] = corrCSV(btagFUp,csv,flavour)
463     elif anaTag == '8TeV':
464     tree.hJet_csv[i] = btagNom.reshape(eta,pt,csv,flavour)
465     hJet_csvDown[i] = btagDown.reshape(eta,pt,csv,flavour)
466     hJet_csvUp[i] = btagUp.reshape(eta,pt,csv,flavour)
467     hJet_csvFDown[i] = btagFDown.reshape(eta,pt,csv,flavour)
468     hJet_csvFUp[i] = btagFUp.reshape(eta,pt,csv,flavour)
469 nmohr 1.1
470     for updown in ['up','down']:
471     #JER
472     if updown == 'up':
473     inner = 0.06
474     outer = 0.1
475     if updown == 'down':
476     inner = -0.06
477     outer = -0.1
478     #Calculate
479     if abs(hJet_eta0)<1.1: res0 = inner
480     else: res0 = outer
481     if abs(hJet_eta1)<1.1: res1 = inner
482     else: res1 = outer
483     rPt0 = hJet_pt0 + (hJet_pt0-hJet_genPt0)*res0
484     rPt1 = hJet_pt1 + (hJet_pt1-hJet_genPt1)*res1
485     rE0 = hJet_e0*rPt0/hJet_pt0
486     rE1 = hJet_e1*rPt1/hJet_pt1
487 nmohr 1.27 if applyRegression:
488     for key in regVars:
489     var = regDict[key]
490     if var == 'Jet_pt' or var == 'Jet_e' or var == 'hJet_pt' or var == 'hJet_e' or var == 'Jet_ptRaw':
491     if var == 'Jet_ptRaw':
492     hJet_ptRawArray[0][0] = hJet_ptRaw0*corrRes0*rPt0/hJet_pt0
493     hJet_ptRawArray[1][0] = hJet_ptRaw1*rPt1/hJet_pt1
494    
495     elif var == 'Jet_pt' or var == 'hJet_pt':
496     theVars0[key] = rPt0
497     theVars1[key] = rPt1
498     elif var == 'Jet_e' or var == 'hJet_e':
499     theVars0[key] = rE0
500     theVars1[key] = rE1
501     hJ0.SetPtEtaPhiE(rPt0,hJet_eta0,hJet_phi0,rE0)
502     hJ1.SetPtEtaPhiE(rPt1,hJet_eta1,hJet_phi1,rE1)
503     hJet_MtArray[0][0] = hJ0.Mt()
504     hJet_MtArray[1][0] = hJ1.Mt()
505     hJet_EtArray[0][0] = hJ0.Et()
506     hJet_EtArray[1][0] = hJ1.Et()
507     rPt0 = max(0.0001,readerJet0.EvaluateRegression( "jet0Regression" )[0])
508     rPt1 = max(0.0001,readerJet1.EvaluateRegression( "jet1Regression" )[0])
509     rE0 = hJet_e0*rPt0/hJet_pt0
510     rE1 = hJet_e1*rPt1/hJet_pt1
511 nmohr 1.1 hJ0.SetPtEtaPhiE(rPt0,hJet_eta0,hJet_phi0,rE0)
512     hJ1.SetPtEtaPhiE(rPt1,hJet_eta1,hJet_phi1,rE1)
513     #Set
514     if updown == 'up':
515     hJet_pt_JER_up[0]=rPt0
516     hJet_pt_JER_up[1]=rPt1
517     hJet_e_JER_up[0]=rE0
518     hJet_e_JER_up[1]=rE1
519     H_JER[0]=(hJ0+hJ1).M()
520     H_JER[2]=(hJ0+hJ1).Pt()
521     if updown == 'down':
522     hJet_pt_JER_down[0]=rPt0
523     hJet_pt_JER_down[1]=rPt1
524     hJet_e_JER_down[0]=rE0
525     hJet_e_JER_down[1]=rE1
526     H_JER[1]=(hJ0+hJ1).M()
527     H_JER[3]=(hJ0+hJ1).Pt()
528    
529     #JES
530     if updown == 'up':
531     variation=1
532     if updown == 'down':
533     variation=-1
534     #calculate
535     rPt0 = hJet_pt0*(1+variation*hJet_JECUnc0)
536     rPt1 = hJet_pt1*(1+variation*hJet_JECUnc1)
537     rE0 = hJet_e0*(1+variation*hJet_JECUnc0)
538     rE1 = hJet_e1*(1+variation*hJet_JECUnc1)
539 nmohr 1.27 if applyRegression:
540     for key in regVars:
541     var = regDict[key]
542     if var == 'Jet_pt' or var == 'Jet_e' or var == 'hJet_pt' or var == 'hJet_e' or var == 'Jet_ptRaw':
543     if var == 'Jet_ptRaw':
544     hJet_ptRawArray[0][0] = hJet_ptRaw0*(1+variation*hJet_JECUnc0)
545     hJet_ptRawArray[1][0] = hJet_ptRaw1*(1+variation*hJet_JECUnc1)
546    
547     elif var == 'Jet_pt' or var == 'hJet_pt':
548     theVars0[key] = rPt0
549     theVars1[key] = rPt1
550     elif var == 'Jet_e' or var == 'hJet_e':
551     theVars0[key] = rE0
552     theVars1[key] = rE1
553     hJ0.SetPtEtaPhiE(rPt0,hJet_eta0,hJet_phi0,rE0)
554     hJ1.SetPtEtaPhiE(rPt1,hJet_eta1,hJet_phi1,rE1)
555     hJet_MtArray[0][0] = hJ0.Mt()
556     hJet_MtArray[1][0] = hJ1.Mt()
557     hJet_EtArray[0][0] = hJ0.Et()
558     hJet_EtArray[1][0] = hJ1.Et()
559     rPt0 = max(0.0001,readerJet0.EvaluateRegression( "jet0Regression" )[0])
560     rPt1 = max(0.0001,readerJet1.EvaluateRegression( "jet1Regression" )[0])
561     rE0 = hJet_e0*rPt0/hJet_pt0
562     rE1 = hJet_e1*rPt1/hJet_pt1
563 nmohr 1.1 hJ0.SetPtEtaPhiE(rPt0,hJet_eta0,hJet_phi0,rE0)
564     hJ1.SetPtEtaPhiE(rPt1,hJet_eta1,hJet_phi1,rE1)
565     #Fill
566     if updown == 'up':
567     hJet_pt_JES_up[0]=rPt0
568     hJet_pt_JES_up[1]=rPt1
569     hJet_e_JES_up[0]=rE0
570     hJet_e_JES_up[1]=rE1
571     H_JES[0]=(hJ0+hJ1).M()
572     H_JES[2]=(hJ0+hJ1).Pt()
573     if updown == 'down':
574     hJet_pt_JES_down[0]=rPt0
575     hJet_pt_JES_down[1]=rPt1
576     hJet_e_JES_down[0]=rE0
577     hJet_e_JES_down[1]=rE1
578     H_JES[1]=(hJ0+hJ1).M()
579     H_JES[3]=(hJ0+hJ1).Pt()
580    
581     newtree.Fill()
582    
583     newtree.AutoSave()
584     output.Close()
585    
586     #dump info
587 nmohr 1.28 #infofile = open(samplesinfo,'w')
588 peller 1.15 #pickle.dump(info,infofile)
589     #infofile.close()