ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbb/python/write_regression_systematics.py
Revision: 1.33
Committed: Wed Jan 16 16:22:47 2013 UTC (12 years, 3 months ago) by peller
Content type: text/x-python
Branch: MAIN
CVS Tags: workingVersionAfterHCP
Changes since 1.32: +17 -21 lines
Log Message:
reorganized the whole repository. Macros im myutils, config files in subdirectories. Config file split in parts. Path config file restructured. Moved all path options to the path config. Changed the code accordingly.

File Contents

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