ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbb/python/write_regression_systematics.py
Revision: 1.26
Committed: Sat Oct 6 17:57:51 2012 UTC (12 years, 7 months ago) by nmohr
Content type: text/x-python
Branch: MAIN
Changes since 1.25: +26 -26 lines
Log Message:
Fix init on data

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.16 ROOT.gSystem.Load(btagLibrary)
94 peller 1.15 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     elif anaTag == '8TeV':
106 nmohr 1.16 ROOT.gSystem.Load(btagLibrary)
107 peller 1.15 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     hJet_ptRawArray = [array('f',[0]),array('f',[0])]
172 nmohr 1.1 hJet_MET_dPhi = array('f',[0]*2)
173     hJet_regWeight = array('f',[0]*2)
174     hJet_MET_dPhiArray = [array('f',[0]),array('f',[0])]
175     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.17 lheWeight = array('f',[0])
264     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     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     hJet_e0 = tree.hJet_e[0]
289     hJet_e1 = tree.hJet_e[1]
290     hJet_phi0 = tree.hJet_phi[0]
291     hJet_phi1 = tree.hJet_phi[1]
292     hJet_JECUnc0 = tree.hJet_JECUnc[0]
293     hJet_JECUnc1 = tree.hJet_JECUnc[1]
294    
295     Event[0]=fEvent.EvalInstance()
296     METet[0]=fMETet.EvalInstance()
297     rho25[0]=fRho25.EvalInstance()
298     METphi[0]=fMETphi.EvalInstance()
299     for key, value in regDict.items():
300 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'):
301 nmohr 1.24 theVars0[key][0] = theForms["form_reg_%s_0" %(key)].EvalInstance()
302     theVars1[key][0] = theForms["form_reg_%s_1" %(key)].EvalInstance()
303 nmohr 1.1 for i in range(2):
304     hJet_MET_dPhi[i] = deltaPhi(METphi[0],tree.hJet_phi[i])
305     hJet_MET_dPhiArray[i][0] = deltaPhi(METphi[0],tree.hJet_phi[i])
306 nmohr 1.24 corrRes = 1.
307 nmohr 1.26 if not job.type == 'Data':
308     corrRes = corrPt(tree.hJet_pt[i],tree.hJet_eta[i],tree.hJet_genPt[i])
309     hJet_ptRawArray[i][0] = tree.hJet_ptRaw[i]*corrRes
310 nmohr 1.1
311 peller 1.15
312 nmohr 1.1 if applyRegression:
313     hJ0.SetPtEtaPhiE(hJet_pt0,hJet_eta0,hJet_phi0,hJet_e0)
314     hJ1.SetPtEtaPhiE(hJet_pt1,hJet_eta1,hJet_phi1,hJet_e1)
315     HNoReg.HiggsFlag = 1
316     HNoReg.mass = (hJ0+hJ1).M()
317     HNoReg.pt = (hJ0+hJ1).Pt()
318     HNoReg.eta = (hJ0+hJ1).Eta()
319     HNoReg.phi = (hJ0+hJ1).Phi()
320     HNoReg.dR = hJ0.DeltaR(hJ1)
321     HNoReg.dPhi = hJ0.DeltaPhi(hJ1)
322     HNoReg.dEta = abs(hJ0.Eta()-hJ1.Eta())
323 nmohr 1.21 hJet_MtArray[0][0] = hJ0.Mt()
324     hJet_MtArray[1][0] = hJ1.Mt()
325 nmohr 1.24 hJet_EtArray[0][0] = hJ0.Et()
326     hJet_EtArray[1][0] = hJ1.Et()
327 peller 1.15 rPt0 = max(0.0001,readerJet0.EvaluateRegression( "jet0Regression" )[0])
328     rPt1 = max(0.0001,readerJet1.EvaluateRegression( "jet1Regression" )[0])
329 nmohr 1.1 hJet_regWeight[0] = rPt0/hJet_pt0
330     hJet_regWeight[1] = rPt1/hJet_pt1
331     rE0 = hJet_e0*hJet_regWeight[0]
332     rE1 = hJet_e1*hJet_regWeight[1]
333     hJ0.SetPtEtaPhiE(rPt0,hJet_eta0,hJet_phi0,rE0)
334     hJ1.SetPtEtaPhiE(rPt1,hJet_eta1,hJet_phi1,rE1)
335     tree.hJet_pt[0] = rPt0
336     tree.hJet_pt[1] = rPt1
337     tree.hJet_e[0] = rE0
338     tree.hJet_e[1] = rE1
339     H.HiggsFlag = 1
340     H.mass = (hJ0+hJ1).M()
341     H.pt = (hJ0+hJ1).Pt()
342     H.eta = (hJ0+hJ1).Eta()
343     H.phi = (hJ0+hJ1).Phi()
344     H.dR = hJ0.DeltaR(hJ1)
345     H.dPhi = hJ0.DeltaPhi(hJ1)
346     H.dEta = abs(hJ0.Eta()-hJ1.Eta())
347     if hJet_regWeight[0] > 5. or hJet_regWeight[1] > 5.:
348 nmohr 1.24 print 'Event %.0f' %(Event[0])
349 nmohr 1.1 print 'MET %.2f' %(METet[0])
350     print 'rho25 %.2f' %(rho25[0])
351     for key, value in regDict.items():
352 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'):
353 nmohr 1.24 print '%s 0: %.2f'%(key, theVars0[key][0])
354 nmohr 1.26 print '%s 1: %.2f'%(key, theVars1[key][0])
355 nmohr 1.1 for i in range(2):
356     print 'dPhi %.0f %.2f' %(i,hJet_MET_dPhiArray[i][0])
357 nmohr 1.24 for i in range(2):
358     print 'ptRaw %.0f %.2f' %(i,hJet_ptRawArray[i][0])
359     for i in range(2):
360     print 'Mt %.0f %.2f' %(i,hJet_MtArray[i][0])
361     for i in range(2):
362     print 'Et %.0f %.2f' %(i,hJet_EtArray[i][0])
363 nmohr 1.1 print 'corr 0 %.2f' %(hJet_regWeight[0])
364     print 'corr 1 %.2f' %(hJet_regWeight[1])
365     print 'rPt0 %.2f' %(rPt0)
366     print 'rPt1 %.2f' %(rPt1)
367     print 'rE0 %.2f' %(rE0)
368     print 'rE1 %.2f' %(rE1)
369     print 'Mass %.2f' %(H.mass)
370    
371     if job.type == 'DATA':
372     newtree.Fill()
373     continue
374    
375     for i in range(2):
376 peller 1.15 flavour = int(tree.hJet_flavour[i])
377     pt = float(tree.hJet_pt[i])
378     eta = float(tree.hJet_eta[i])
379     csv = float(tree.hJet_csv[i])
380 nmohr 1.26 hJet_csvOld[i] = csv
381     if anaTag == '7TeV':
382     tree.hJet_csv[i] = corrCSV(btagNom,csv,flavour)
383     hJet_csvDown[i] = corrCSV(btagDown,csv,flavour)
384     hJet_csvUp[i] = corrCSV(btagUp,csv,flavour)
385     hJet_csvFDown[i] = corrCSV(btagFDown,csv,flavour)
386     hJet_csvFUp[i] = corrCSV(btagFUp,csv,flavour)
387     elif anaTag == '8TeV':
388     tree.hJet_csv[i] = btagNom.reshape(eta,pt,csv,flavour)
389     hJet_csvDown[i] = btagDown.reshape(eta,pt,csv,flavour)
390     hJet_csvUp[i] = btagUp.reshape(eta,pt,csv,flavour)
391     hJet_csvFDown[i] = btagFDown.reshape(eta,pt,csv,flavour)
392     hJet_csvFUp[i] = btagFUp.reshape(eta,pt,csv,flavour)
393 nmohr 1.1
394     for updown in ['up','down']:
395     #JER
396     if updown == 'up':
397     inner = 0.06
398     outer = 0.1
399     if updown == 'down':
400     inner = -0.06
401     outer = -0.1
402     #Calculate
403     if abs(hJet_eta0)<1.1: res0 = inner
404     else: res0 = outer
405     if abs(hJet_eta1)<1.1: res1 = inner
406     else: res1 = outer
407     rPt0 = hJet_pt0 + (hJet_pt0-hJet_genPt0)*res0
408     rPt1 = hJet_pt1 + (hJet_pt1-hJet_genPt1)*res1
409     rE0 = hJet_e0*rPt0/hJet_pt0
410     rE1 = hJet_e1*rPt1/hJet_pt1
411 nmohr 1.24 #if applyRegression:
412     # theVars0['Jet_pt'][0] = rPt0
413     # theVars1['Jet_pt'][0] = rPt1
414     # theVars0['Jet_e'][0] = rE0
415     # theVars1['Jet_e'][0] = rE1
416     # rPt0 = max(0.0001,readerJet0.EvaluateRegression( "jet0Regression" )[0])
417     # rPt1 = max(0.0001,readerJet1.EvaluateRegression( "jet1Regression" )[0])
418     # rE0 = hJet_e0*rPt0/hJet_pt0
419     # rE1 = hJet_e1*rPt1/hJet_pt1
420 nmohr 1.1 hJ0.SetPtEtaPhiE(rPt0,hJet_eta0,hJet_phi0,rE0)
421     hJ1.SetPtEtaPhiE(rPt1,hJet_eta1,hJet_phi1,rE1)
422     #Set
423     if updown == 'up':
424     hJet_pt_JER_up[0]=rPt0
425     hJet_pt_JER_up[1]=rPt1
426     hJet_e_JER_up[0]=rE0
427     hJet_e_JER_up[1]=rE1
428     H_JER[0]=(hJ0+hJ1).M()
429     H_JER[2]=(hJ0+hJ1).Pt()
430     if updown == 'down':
431     hJet_pt_JER_down[0]=rPt0
432     hJet_pt_JER_down[1]=rPt1
433     hJet_e_JER_down[0]=rE0
434     hJet_e_JER_down[1]=rE1
435     H_JER[1]=(hJ0+hJ1).M()
436     H_JER[3]=(hJ0+hJ1).Pt()
437    
438     #JES
439     if updown == 'up':
440     variation=1
441     if updown == 'down':
442     variation=-1
443     #calculate
444     rPt0 = hJet_pt0*(1+variation*hJet_JECUnc0)
445     rPt1 = hJet_pt1*(1+variation*hJet_JECUnc1)
446     rE0 = hJet_e0*(1+variation*hJet_JECUnc0)
447     rE1 = hJet_e1*(1+variation*hJet_JECUnc1)
448 nmohr 1.24 #if applyRegression:
449     # theVars0['Jet_pt'][0] = rPt0
450     # theVars1['Jet_pt'][0] = rPt1
451     # theVars0['Jet_e'][0] = rE0
452     # theVars1['Jet_e'][0] = rE1
453     # rPt0 = max(0.0001,readerJet0.EvaluateRegression( "jet0Regression" )[0])
454     # rPt1 = max(0.0001,readerJet1.EvaluateRegression( "jet1Regression" )[0])
455     # rE0 = hJet_e0*rPt0/hJet_pt0
456     # rE1 = hJet_e1*rPt1/hJet_pt1
457 nmohr 1.1 hJ0.SetPtEtaPhiE(rPt0,hJet_eta0,hJet_phi0,rE0)
458     hJ1.SetPtEtaPhiE(rPt1,hJet_eta1,hJet_phi1,rE1)
459     #Fill
460     if updown == 'up':
461     hJet_pt_JES_up[0]=rPt0
462     hJet_pt_JES_up[1]=rPt1
463     hJet_e_JES_up[0]=rE0
464     hJet_e_JES_up[1]=rE1
465     H_JES[0]=(hJ0+hJ1).M()
466     H_JES[2]=(hJ0+hJ1).Pt()
467     if updown == 'down':
468     hJet_pt_JES_down[0]=rPt0
469     hJet_pt_JES_down[1]=rPt1
470     hJet_e_JES_down[0]=rE0
471     hJet_e_JES_down[1]=rE1
472     H_JES[1]=(hJ0+hJ1).M()
473     H_JES[3]=(hJ0+hJ1).Pt()
474    
475     newtree.Fill()
476    
477     newtree.AutoSave()
478     output.Close()
479    
480     #dump info
481 peller 1.15 #infofile = open(path+'/sys'+'/samples.info','w')
482     #pickle.dump(info,infofile)
483     #infofile.close()