ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbb/python/write_regression_systematics.py
Revision: 1.29
Committed: Fri Dec 7 14:29:56 2012 UTC (12 years, 5 months ago) by nmohr
Content type: text/x-python
Branch: MAIN
Changes since 1.28: +2 -4 lines
Log Message:
Fix help message

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