ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbb/python/write_regression_systematics.py
Revision: 1.23
Committed: Wed Oct 3 10:23:09 2012 UTC (12 years, 7 months ago) by peller
Content type: text/x-python
Branch: MAIN
CVS Tags: hcpPreApp
Changes since 1.22: +1 -1 lines
Log Message:
missing )

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.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     newtree.Branch('hJet_MET_dPhi',hJet_MET_dPhi,'hJet_MET_dPhi[2]/F')
174     newtree.Branch('hJet_regWeight',hJet_regWeight,'hJet_regWeight[2]/F')
175     readerJet0 = ROOT.TMVA.Reader("!Color:!Silent" )
176     readerJet1 = ROOT.TMVA.Reader("!Color:!Silent" )
177    
178     theForms = {}
179     theVars0 = {}
180     for var in regVars:
181     theVars0[var] = array( 'f', [ 0 ] )
182     readerJet0.AddVariable(var,theVars0[var])
183     theForms['form_reg_%s_0'%(regDict[var])] = ROOT.TTreeFormula("form_reg_%s_0"%(regDict[var]),'%s[0]' %(regDict[var]),tree)
184 peller 1.15 if useMET:
185     readerJet0.AddVariable( "Jet_MET_dPhi", hJet_MET_dPhiArray[0] )
186     readerJet0.AddVariable( "METet", METet )
187 nmohr 1.21 if useMt: readerJet0.AddVariable( "Jet_mt", hJet_MtArray[0] )
188 peller 1.15 if useRho25: readerJet0.AddVariable( "rho25", rho25 )
189 nmohr 1.1
190     theVars1 = {}
191     for var in regVars:
192     theVars1[var] = array( 'f', [ 0 ] )
193     readerJet1.AddVariable(var,theVars1[var])
194     theForms['form_reg_%s_1'%(regDict[var])] = ROOT.TTreeFormula("form_reg_%s_1"%(regDict[var]),'%s[1]' %(regDict[var]),tree)
195 peller 1.15 if useMET:
196     readerJet1.AddVariable( "Jet_MET_dPhi", hJet_MET_dPhiArray[1] )
197     readerJet1.AddVariable( "METet", METet )
198 nmohr 1.21 if useMt: readerJet1.AddVariable( "Jet_mt", hJet_MtArray[1] )
199 peller 1.15 if useRho25: readerJet1.AddVariable( "rho25", rho25 )
200 nmohr 1.1 readerJet0.BookMVA( "jet0Regression", regWeight );
201     readerJet1.BookMVA( "jet1Regression", regWeight );
202    
203 bortigno 1.4 #Add training Flag
204 nmohr 1.18 EventForTraining = array('i',[0])
205     newtree.Branch('EventForTraining',EventForTraining,'EventForTraining/I')
206 bortigno 1.4 EventForTraining[0]=0
207 bortigno 1.6
208 bortigno 1.5 TFlag=ROOT.TTreeFormula("EventForTraining","EVENT.event%2",tree)
209 nmohr 1.1
210     if job.type != 'DATA':
211     #CSV branches
212     hJet_flavour = array('f',[0]*2)
213     hJet_csv = array('f',[0]*2)
214     hJet_csvOld = array('f',[0]*2)
215     hJet_csvUp = array('f',[0]*2)
216     hJet_csvDown = array('f',[0]*2)
217     hJet_csvFUp = array('f',[0]*2)
218     hJet_csvFDown = array('f',[0]*2)
219     newtree.Branch('hJet_csvOld',hJet_csvOld,'hJet_csvOld[2]/F')
220     newtree.Branch('hJet_csvUp',hJet_csvUp,'hJet_csvUp[2]/F')
221     newtree.Branch('hJet_csvDown',hJet_csvDown,'hJet_csvDown[2]/F')
222     newtree.Branch('hJet_csvFUp',hJet_csvFUp,'hJet_csvFUp[2]/F')
223     newtree.Branch('hJet_csvFDown',hJet_csvFDown,'hJet_csvFDown[2]/F')
224    
225     #JER branches
226     hJet_pt_JER_up = array('f',[0]*2)
227     newtree.Branch('hJet_pt_JER_up',hJet_pt_JER_up,'hJet_pt_JER_up[2]/F')
228     hJet_pt_JER_down = array('f',[0]*2)
229     newtree.Branch('hJet_pt_JER_down',hJet_pt_JER_down,'hJet_pt_JER_down[2]/F')
230     hJet_e_JER_up = array('f',[0]*2)
231     newtree.Branch('hJet_e_JER_up',hJet_e_JER_up,'hJet_e_JER_up[2]/F')
232     hJet_e_JER_down = array('f',[0]*2)
233     newtree.Branch('hJet_e_JER_down',hJet_e_JER_down,'hJet_e_JER_down[2]/F')
234     H_JER = array('f',[0]*4)
235     newtree.Branch('H_JER',H_JER,'mass_up:mass_down:pt_up:pt_down/F')
236    
237     #JES branches
238     hJet_pt_JES_up = array('f',[0]*2)
239     newtree.Branch('hJet_pt_JES_up',hJet_pt_JES_up,'hJet_pt_JES_up[2]/F')
240     hJet_pt_JES_down = array('f',[0]*2)
241     newtree.Branch('hJet_pt_JES_down',hJet_pt_JES_down,'hJet_pt_JES_down[2]/F')
242     hJet_e_JES_up = array('f',[0]*2)
243     newtree.Branch('hJet_e_JES_up',hJet_e_JES_up,'hJet_e_JES_up[2]/F')
244     hJet_e_JES_down = array('f',[0]*2)
245     newtree.Branch('hJet_e_JES_down',hJet_e_JES_down,'hJet_e_JES_down[2]/F')
246     H_JES = array('f',[0]*4)
247     newtree.Branch('H_JES',H_JES,'mass_up:mass_down:pt_up:pt_down/F')
248 nmohr 1.17 lheWeight = array('f',[0])
249     if job.type != 'DY':
250     newtree.Branch('lheWeight',lheWeight,'lheWeight/F')
251     lheWeight[0] = 1.
252 nmohr 1.1
253    
254     #iter=0
255    
256    
257     for entry in range(0,nEntries):
258     tree.GetEntry(entry)
259    
260 peller 1.22 if job.type != 'DATA' and TrainFlag:
261 nmohr 1.18 EventForTraining[0]=int(not TFlag.EvalInstance())
262 bortigno 1.9
263 nmohr 1.1
264     #get
265     hJet_pt = tree.hJet_pt
266     hJet_e = tree.hJet_e
267     hJet_pt0 = tree.hJet_pt[0]
268     hJet_pt1 = tree.hJet_pt[1]
269     hJet_eta0 = tree.hJet_eta[0]
270     hJet_eta1 = tree.hJet_eta[1]
271     hJet_genPt0 = tree.hJet_genPt[0]
272     hJet_genPt1 = tree.hJet_genPt[1]
273     hJet_e0 = tree.hJet_e[0]
274     hJet_e1 = tree.hJet_e[1]
275     hJet_phi0 = tree.hJet_phi[0]
276     hJet_phi1 = tree.hJet_phi[1]
277     hJet_JECUnc0 = tree.hJet_JECUnc[0]
278     hJet_JECUnc1 = tree.hJet_JECUnc[1]
279    
280     Event[0]=fEvent.EvalInstance()
281     METet[0]=fMETet.EvalInstance()
282     rho25[0]=fRho25.EvalInstance()
283     METphi[0]=fMETphi.EvalInstance()
284     for key, value in regDict.items():
285     theVars0[key][0] = theForms["form_reg_%s_0" %(value)].EvalInstance()
286     theVars1[key][0] = theForms["form_reg_%s_1" %(value)].EvalInstance()
287     for i in range(2):
288     hJet_MET_dPhi[i] = deltaPhi(METphi[0],tree.hJet_phi[i])
289     hJet_MET_dPhiArray[i][0] = deltaPhi(METphi[0],tree.hJet_phi[i])
290    
291 peller 1.15 if not job.type == 'DATA' and usePtRaw:
292     theVars0['Jet_ptRaw'][0] = theForms["form_reg_hJet_ptRaw_0"].EvalInstance()*corrPt(tree.hJet_pt[0],tree.hJet_eta[0],tree.hJet_genPt[0])
293     theVars1['Jet_ptRaw'][0] = theForms["form_reg_hJet_ptRaw_1"].EvalInstance()*corrPt(tree.hJet_pt[1],tree.hJet_eta[1],tree.hJet_genPt[1])
294    
295 nmohr 1.1 if applyRegression:
296     hJ0.SetPtEtaPhiE(hJet_pt0,hJet_eta0,hJet_phi0,hJet_e0)
297     hJ1.SetPtEtaPhiE(hJet_pt1,hJet_eta1,hJet_phi1,hJet_e1)
298     HNoReg.HiggsFlag = 1
299     HNoReg.mass = (hJ0+hJ1).M()
300     HNoReg.pt = (hJ0+hJ1).Pt()
301     HNoReg.eta = (hJ0+hJ1).Eta()
302     HNoReg.phi = (hJ0+hJ1).Phi()
303     HNoReg.dR = hJ0.DeltaR(hJ1)
304     HNoReg.dPhi = hJ0.DeltaPhi(hJ1)
305     HNoReg.dEta = abs(hJ0.Eta()-hJ1.Eta())
306 nmohr 1.21 hJet_MtArray[0][0] = hJ0.Mt()
307     hJet_MtArray[1][0] = hJ1.Mt()
308 peller 1.15 rPt0 = max(0.0001,readerJet0.EvaluateRegression( "jet0Regression" )[0])
309     rPt1 = max(0.0001,readerJet1.EvaluateRegression( "jet1Regression" )[0])
310 nmohr 1.1 hJet_regWeight[0] = rPt0/hJet_pt0
311     hJet_regWeight[1] = rPt1/hJet_pt1
312     rE0 = hJet_e0*hJet_regWeight[0]
313     rE1 = hJet_e1*hJet_regWeight[1]
314     hJ0.SetPtEtaPhiE(rPt0,hJet_eta0,hJet_phi0,rE0)
315     hJ1.SetPtEtaPhiE(rPt1,hJet_eta1,hJet_phi1,rE1)
316     tree.hJet_pt[0] = rPt0
317     tree.hJet_pt[1] = rPt1
318     tree.hJet_e[0] = rE0
319     tree.hJet_e[1] = rE1
320     H.HiggsFlag = 1
321     H.mass = (hJ0+hJ1).M()
322     H.pt = (hJ0+hJ1).Pt()
323     H.eta = (hJ0+hJ1).Eta()
324     H.phi = (hJ0+hJ1).Phi()
325     H.dR = hJ0.DeltaR(hJ1)
326     H.dPhi = hJ0.DeltaPhi(hJ1)
327     H.dEta = abs(hJ0.Eta()-hJ1.Eta())
328     if hJet_regWeight[0] > 5. or hJet_regWeight[1] > 5.:
329     print 'MET %.2f' %(METet[0])
330     print 'rho25 %.2f' %(rho25[0])
331     for key, value in regDict.items():
332     print '%s 0: %.2f'%(key, theVars0[key][0])
333     print '%s 0: %.2f'%(key, theVars1[key][0])
334     for i in range(2):
335     print 'dPhi %.0f %.2f' %(i,hJet_MET_dPhiArray[i][0])
336     print 'corr 0 %.2f' %(hJet_regWeight[0])
337     print 'corr 1 %.2f' %(hJet_regWeight[1])
338     print 'Event %.0f' %(Event[0])
339     print 'rPt0 %.2f' %(rPt0)
340     print 'rPt1 %.2f' %(rPt1)
341     print 'rE0 %.2f' %(rE0)
342     print 'rE1 %.2f' %(rE1)
343     print 'Mass %.2f' %(H.mass)
344    
345     if job.type == 'DATA':
346     newtree.Fill()
347     continue
348    
349     for i in range(2):
350 peller 1.15 flavour = int(tree.hJet_flavour[i])
351     pt = float(tree.hJet_pt[i])
352     eta = float(tree.hJet_eta[i])
353     csv = float(tree.hJet_csv[i])
354     hJet_csvOld[i] = csv
355     if anaTag == '7TeV':
356     tree.hJet_csv[i] = corrCSV(btagNom,csv,flavour)
357     hJet_csvDown[i] = corrCSV(btagDown,csv,flavour)
358     hJet_csvUp[i] = corrCSV(btagUp,csv,flavour)
359     hJet_csvFDown[i] = corrCSV(btagFDown,csv,flavour)
360     hJet_csvFUp[i] = corrCSV(btagFUp,csv,flavour)
361     elif anaTag == '8TeV':
362     tree.hJet_csv[i] = btagNom.reshape(eta,pt,csv,flavour)
363     hJet_csvDown[i] = btagDown.reshape(eta,pt,csv,flavour)
364     hJet_csvUp[i] = btagUp.reshape(eta,pt,csv,flavour)
365     hJet_csvFDown[i] = btagFDown.reshape(eta,pt,csv,flavour)
366     hJet_csvFUp[i] = btagFUp.reshape(eta,pt,csv,flavour)
367 nmohr 1.1
368     for updown in ['up','down']:
369     #JER
370     if updown == 'up':
371     inner = 0.06
372     outer = 0.1
373     if updown == 'down':
374     inner = -0.06
375     outer = -0.1
376     #Calculate
377     if abs(hJet_eta0)<1.1: res0 = inner
378     else: res0 = outer
379     if abs(hJet_eta1)<1.1: res1 = inner
380     else: res1 = outer
381     rPt0 = hJet_pt0 + (hJet_pt0-hJet_genPt0)*res0
382     rPt1 = hJet_pt1 + (hJet_pt1-hJet_genPt1)*res1
383     rE0 = hJet_e0*rPt0/hJet_pt0
384     rE1 = hJet_e1*rPt1/hJet_pt1
385     if applyRegression:
386     theVars0['Jet_pt'][0] = rPt0
387     theVars1['Jet_pt'][0] = rPt1
388     theVars0['Jet_e'][0] = rE0
389     theVars1['Jet_e'][0] = rE1
390 peller 1.15 rPt0 = max(0.0001,readerJet0.EvaluateRegression( "jet0Regression" )[0])
391     rPt1 = max(0.0001,readerJet1.EvaluateRegression( "jet1Regression" )[0])
392 nmohr 1.1 rE0 = hJet_e0*rPt0/hJet_pt0
393     rE1 = hJet_e1*rPt1/hJet_pt1
394     hJ0.SetPtEtaPhiE(rPt0,hJet_eta0,hJet_phi0,rE0)
395     hJ1.SetPtEtaPhiE(rPt1,hJet_eta1,hJet_phi1,rE1)
396     #Set
397     if updown == 'up':
398     hJet_pt_JER_up[0]=rPt0
399     hJet_pt_JER_up[1]=rPt1
400     hJet_e_JER_up[0]=rE0
401     hJet_e_JER_up[1]=rE1
402     H_JER[0]=(hJ0+hJ1).M()
403     H_JER[2]=(hJ0+hJ1).Pt()
404     if updown == 'down':
405     hJet_pt_JER_down[0]=rPt0
406     hJet_pt_JER_down[1]=rPt1
407     hJet_e_JER_down[0]=rE0
408     hJet_e_JER_down[1]=rE1
409     H_JER[1]=(hJ0+hJ1).M()
410     H_JER[3]=(hJ0+hJ1).Pt()
411    
412     #JES
413     if updown == 'up':
414     variation=1
415     if updown == 'down':
416     variation=-1
417     #calculate
418     rPt0 = hJet_pt0*(1+variation*hJet_JECUnc0)
419     rPt1 = hJet_pt1*(1+variation*hJet_JECUnc1)
420     rE0 = hJet_e0*(1+variation*hJet_JECUnc0)
421     rE1 = hJet_e1*(1+variation*hJet_JECUnc1)
422     if applyRegression:
423     theVars0['Jet_pt'][0] = rPt0
424     theVars1['Jet_pt'][0] = rPt1
425     theVars0['Jet_e'][0] = rE0
426     theVars1['Jet_e'][0] = rE1
427 peller 1.15 rPt0 = max(0.0001,readerJet0.EvaluateRegression( "jet0Regression" )[0])
428     rPt1 = max(0.0001,readerJet1.EvaluateRegression( "jet1Regression" )[0])
429 nmohr 1.1 rE0 = hJet_e0*rPt0/hJet_pt0
430     rE1 = hJet_e1*rPt1/hJet_pt1
431     hJ0.SetPtEtaPhiE(rPt0,hJet_eta0,hJet_phi0,rE0)
432     hJ1.SetPtEtaPhiE(rPt1,hJet_eta1,hJet_phi1,rE1)
433     #Fill
434     if updown == 'up':
435     hJet_pt_JES_up[0]=rPt0
436     hJet_pt_JES_up[1]=rPt1
437     hJet_e_JES_up[0]=rE0
438     hJet_e_JES_up[1]=rE1
439     H_JES[0]=(hJ0+hJ1).M()
440     H_JES[2]=(hJ0+hJ1).Pt()
441     if updown == 'down':
442     hJet_pt_JES_down[0]=rPt0
443     hJet_pt_JES_down[1]=rPt1
444     hJet_e_JES_down[0]=rE0
445     hJet_e_JES_down[1]=rE1
446     H_JES[1]=(hJ0+hJ1).M()
447     H_JES[3]=(hJ0+hJ1).Pt()
448    
449     newtree.Fill()
450    
451     newtree.AutoSave()
452     output.Close()
453    
454     #dump info
455 peller 1.15 #infofile = open(path+'/sys'+'/samples.info','w')
456     #pickle.dump(info,infofile)
457     #infofile.close()