ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbb/python/write_regression_systematics.py
Revision: 1.27
Committed: Mon Oct 8 14:54:25 2012 UTC (12 years, 7 months ago) by nmohr
Content type: text/x-python
Branch: MAIN
CVS Tags: hcpPreAppFreeze
Changes since 1.26: +83 -46 lines
Log Message:
Re-enable syst and fixes

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