ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbb/python/write_regression_systematics.py
Revision: 1.32
Committed: Wed Jan 16 10:16:32 2013 UTC (12 years, 3 months ago) by peller
Content type: text/x-python
Branch: MAIN
Changes since 1.31: +1 -6 lines
Log Message:
resolving merge conflict

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