ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbb/python/write_regression_systematics.py
Revision: 1.10
Committed: Tue Jun 19 14:57:00 2012 UTC (12 years, 10 months ago) by nmohr
Content type: text/x-python
Branch: MAIN
Changes since 1.9: +68 -32 lines
Log Message:
New regression, reshaping

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     warnings.filterwarnings( action='ignore', category=RuntimeWarning, message='creating converter.*' )
15    
16    
17     #usage: ./write_regression_systematic.py path
18    
19     path=sys.argv[1]
20 nmohr 1.10 namelistIN=sys.argv[2]
21     namelist=namelistIN.split(',')
22 nmohr 1.1
23     #load info
24     infofile = open(path+'/samples.info','r')
25     info = pickle.load(infofile)
26     infofile.close()
27     #os.mkdir(path+'/sys')
28    
29     def deltaPhi(phi1, phi2):
30     result = phi1 - phi2
31     while (result > math.pi): result -= 2*math.pi
32     while (result <= -math.pi): result += 2*math.pi
33     return result
34    
35 nmohr 1.10 def resolutionBias(eta):
36     if(eta< 1.1): return 0.05
37     if(eta< 2.5): return 0.10
38     if(eta< 5): return 0.30
39     return 0
40    
41     def corrPt(pt,eta,mcPt):
42     return (pt+resolutionBias(math.fabs(eta))*(pt-mcPt))/pt
43    
44 nmohr 1.1 def corrCSV(btag, csv, flav):
45     if(csv < 0.): return csv
46     if(csv > 1.): return csv;
47     if(flav == 0): return csv;
48     if(math.fabs(flav) == 5): return btag.ib.Eval(csv)
49     if(math.fabs(flav) == 4): return btag.ic.Eval(csv)
50     if(math.fabs(flav) != 4 and math.fabs(flav) != 5): return btag.il.Eval(csv)
51     return -10000
52    
53    
54 nmohr 1.10 def csvReshape(sh, pt, eta, csv, flav):
55     return sh.reshape(float(eta), float(pt), float(csv), int(flav))
56    
57    
58 nmohr 1.1 for job in info:
59 nmohr 1.10 if not job.name in namelist: continue
60 nmohr 1.1 #print job.name
61 nmohr 1.10 #if job.name != 'ZH120': continue
62 nmohr 1.1 ROOT.gROOT.ProcessLine(
63     "struct H {\
64     int HiggsFlag;\
65     float mass;\
66     float pt;\
67     float eta;\
68     float phi;\
69     float dR;\
70     float dPhi;\
71     float dEta;\
72     } ;"
73     )
74 nmohr 1.10 #ROOT.gROOT.LoadMacro('../interface/btagshape.h+')
75     #from ROOT import BTagShape
76     #btagNom = BTagShape("../data/csvdiscr.root")
77     #btagNom.computeFunctions()
78     #btagUp = BTagShape("../data/csvdiscr.root")
79     #btagUp.computeFunctions(+1.,0.)
80     #btagDown = BTagShape("../data/csvdiscr.root")
81     #btagDown.computeFunctions(-1.,0.)
82     #btagFUp = BTagShape("../data/csvdiscr.root")
83     #btagFUp.computeFunctions(0.,+1.)
84     #btagFDown = BTagShape("../data/csvdiscr.root")
85     #btagFDown.computeFunctions(0.,-1.)
86     ROOT.gROOT.LoadMacro('../interface/BTagReshaping.h++')
87     from ROOT import BTagShapeInterface
88     btagNom = BTagShapeInterface("../data/csvdiscr.root",0,0)
89     btagUp = BTagShapeInterface("../data/csvdiscr.root",+1,0)
90     btagDown = BTagShapeInterface("../data/csvdiscr.root",-1,0)
91     btagFUp = BTagShapeInterface("../data/csvdiscr.root",0,+1.)
92     btagFDown = BTagShapeInterface("../data/csvdiscr.root",0,-1.)
93 nmohr 1.1
94     print '\t - %s' %(job.name)
95     input = TFile.Open(job.getpath(),'read')
96     output = TFile.Open(job.path+'/sys/'+job.prefix+job.identifier+'.root','recreate')
97    
98     input.cd()
99     obj = ROOT.TObject
100     for key in ROOT.gDirectory.GetListOfKeys():
101     input.cd()
102     obj = key.ReadObj()
103     #print obj.GetName()
104     if obj.GetName() == job.tree:
105     continue
106     output.cd()
107     #print key.GetName()
108     obj.Write(key.GetName())
109    
110 nmohr 1.3 input.cd()
111 nmohr 1.1 tree = input.Get(job.tree)
112     nEntries = tree.GetEntries()
113    
114     job.addpath('/sys')
115     if job.type != 'DATA':
116     job.SYS = ['Nominal','JER_up','JER_down','JES_up','JES_down','beff_up','beff_down','bmis_up','bmis_down']
117    
118     H = ROOT.H()
119     HNoReg = ROOT.H()
120     tree.SetBranchStatus('H',0)
121     output.cd()
122     newtree = tree.CloneTree(0)
123    
124     hJ0 = ROOT.TLorentzVector()
125     hJ1 = ROOT.TLorentzVector()
126    
127 nmohr 1.10 regWeight = "../data/MVA_BDT_REG_Jun16.weights.xml"
128 nmohr 1.1 regDict = {"Jet_pt": "hJet_pt", "Jet_eta": "hJet_eta", "Jet_e": "hJet_e", "Jet_JECUnc": "hJet_JECUnc", "Jet_chf": "hJet_chf","Jet_nconstituents": "hJet_nconstituents", "Jet_vtxPt": "hJet_vtxPt", "Jet_vtx3dL": "hJet_vtx3dL", "Jet_vtx3deL": "hJet_vtx3deL"}
129     regVars = ["Jet_pt","Jet_eta","Jet_e","Jet_JECUnc", "Jet_chf","Jet_nconstituents", "Jet_vtxPt", "Jet_vtx3dL", "Jet_vtx3deL"]
130 nmohr 1.10 regDict = {"Jet_pt": "hJet_pt", "Jet_eta": "hJet_eta", "Jet_e": "hJet_e", "Jet_ptRaw": "hJet_ptRaw", "Jet_chf": "hJet_chf","Jet_nconstituents": "hJet_nconstituents", "Jet_vtxPt": "hJet_vtxPt", "Jet_vtx3dL": "hJet_vtx3dL", "Jet_vtx3deL": "hJet_vtx3deL"}
131     regVars = ["Jet_pt","Jet_eta","Jet_e","Jet_ptRaw", "Jet_chf","Jet_nconstituents", "Jet_vtxPt", "Jet_vtx3dL", "Jet_vtx3deL"]
132 nmohr 1.1
133    
134     #Regression branches
135     applyRegression = True
136     hJet_pt = array('f',[0]*2)
137     hJet_e = array('f',[0]*2)
138     newtree.Branch( 'H', H , 'HiggsFlag/I:mass/F:pt/F:eta:phi/F:dR/F:dPhi/F:dEta/F' )
139     newtree.Branch( 'HNoReg', HNoReg , 'HiggsFlag/I:mass/F:pt/F:eta:phi/F:dR/F:dPhi/F:dEta/F' )
140     Event = array('f',[0])
141     METet = array('f',[0])
142     rho25 = array('f',[0])
143     METphi = array('f',[0])
144     fRho25 = ROOT.TTreeFormula("rho25",'rho25',tree)
145     fEvent = ROOT.TTreeFormula("Event",'EVENT.event',tree)
146     fMETet = ROOT.TTreeFormula("METet",'METnoPU.et',tree)
147     fMETphi = ROOT.TTreeFormula("METphi",'METnoPU.phi',tree)
148     hJet_MET_dPhi = array('f',[0]*2)
149     hJet_regWeight = array('f',[0]*2)
150     hJet_MET_dPhiArray = [array('f',[0]),array('f',[0])]
151     newtree.Branch('hJet_MET_dPhi',hJet_MET_dPhi,'hJet_MET_dPhi[2]/F')
152     newtree.Branch('hJet_regWeight',hJet_regWeight,'hJet_regWeight[2]/F')
153     readerJet0 = ROOT.TMVA.Reader("!Color:!Silent" )
154     readerJet1 = ROOT.TMVA.Reader("!Color:!Silent" )
155    
156     theForms = {}
157     theVars0 = {}
158     for var in regVars:
159     theVars0[var] = array( 'f', [ 0 ] )
160     readerJet0.AddVariable(var,theVars0[var])
161     theForms['form_reg_%s_0'%(regDict[var])] = ROOT.TTreeFormula("form_reg_%s_0"%(regDict[var]),'%s[0]' %(regDict[var]),tree)
162     readerJet0.AddVariable( "Jet_MET_dPhi", hJet_MET_dPhiArray[0] )
163     readerJet0.AddVariable( "METet", METet )
164 nmohr 1.10 #readerJet0.AddVariable( "rho25", rho25 )
165 nmohr 1.1
166     theVars1 = {}
167     for var in regVars:
168     theVars1[var] = array( 'f', [ 0 ] )
169     readerJet1.AddVariable(var,theVars1[var])
170     theForms['form_reg_%s_1'%(regDict[var])] = ROOT.TTreeFormula("form_reg_%s_1"%(regDict[var]),'%s[1]' %(regDict[var]),tree)
171     readerJet1.AddVariable( "Jet_MET_dPhi", hJet_MET_dPhiArray[1] )
172     readerJet1.AddVariable( "METet", METet )
173 nmohr 1.10 #readerJet1.AddVariable( "rho25", rho25 )
174 nmohr 1.1 readerJet0.BookMVA( "jet0Regression", regWeight );
175     readerJet1.BookMVA( "jet1Regression", regWeight );
176    
177 bortigno 1.4 #Add training Flag
178     EventForTraining = array('f',[0])
179     newtree.Branch('EventForTraining',EventForTraining,'EventForTraining/F')
180     EventForTraining[0]=0
181 bortigno 1.6
182     lheWeight = array('f',[0])
183     newtree.Branch('lheWeight',lheWeight,'lheWeight/F')
184 bortigno 1.8 lheWeight[0]=0.
185     if job.type != "DY":
186     lheWeight[0] = 1.
187 bortigno 1.6
188 bortigno 1.5 TFlag=ROOT.TTreeFormula("EventForTraining","EVENT.event%2",tree)
189 nmohr 1.1
190     if job.type != 'DATA':
191     #CSV branches
192     hJet_flavour = array('f',[0]*2)
193     hJet_csv = array('f',[0]*2)
194     hJet_csvOld = array('f',[0]*2)
195     hJet_csvUp = array('f',[0]*2)
196     hJet_csvDown = array('f',[0]*2)
197     hJet_csvFUp = array('f',[0]*2)
198     hJet_csvFDown = array('f',[0]*2)
199     newtree.Branch('hJet_csvOld',hJet_csvOld,'hJet_csvOld[2]/F')
200     newtree.Branch('hJet_csvUp',hJet_csvUp,'hJet_csvUp[2]/F')
201     newtree.Branch('hJet_csvDown',hJet_csvDown,'hJet_csvDown[2]/F')
202     newtree.Branch('hJet_csvFUp',hJet_csvFUp,'hJet_csvFUp[2]/F')
203     newtree.Branch('hJet_csvFDown',hJet_csvFDown,'hJet_csvFDown[2]/F')
204    
205     #JER branches
206     hJet_pt_JER_up = array('f',[0]*2)
207     newtree.Branch('hJet_pt_JER_up',hJet_pt_JER_up,'hJet_pt_JER_up[2]/F')
208     hJet_pt_JER_down = array('f',[0]*2)
209     newtree.Branch('hJet_pt_JER_down',hJet_pt_JER_down,'hJet_pt_JER_down[2]/F')
210     hJet_e_JER_up = array('f',[0]*2)
211     newtree.Branch('hJet_e_JER_up',hJet_e_JER_up,'hJet_e_JER_up[2]/F')
212     hJet_e_JER_down = array('f',[0]*2)
213     newtree.Branch('hJet_e_JER_down',hJet_e_JER_down,'hJet_e_JER_down[2]/F')
214     H_JER = array('f',[0]*4)
215     newtree.Branch('H_JER',H_JER,'mass_up:mass_down:pt_up:pt_down/F')
216    
217     #JES branches
218     hJet_pt_JES_up = array('f',[0]*2)
219     newtree.Branch('hJet_pt_JES_up',hJet_pt_JES_up,'hJet_pt_JES_up[2]/F')
220     hJet_pt_JES_down = array('f',[0]*2)
221     newtree.Branch('hJet_pt_JES_down',hJet_pt_JES_down,'hJet_pt_JES_down[2]/F')
222     hJet_e_JES_up = array('f',[0]*2)
223     newtree.Branch('hJet_e_JES_up',hJet_e_JES_up,'hJet_e_JES_up[2]/F')
224     hJet_e_JES_down = array('f',[0]*2)
225     newtree.Branch('hJet_e_JES_down',hJet_e_JES_down,'hJet_e_JES_down[2]/F')
226     H_JES = array('f',[0]*4)
227     newtree.Branch('H_JES',H_JES,'mass_up:mass_down:pt_up:pt_down/F')
228    
229    
230     #iter=0
231    
232    
233     for entry in range(0,nEntries):
234     tree.GetEntry(entry)
235    
236     #fill training flag
237     #iter+=1
238     #if (iter%2==0):
239     # EventForTraining[0]=1
240     #else:
241     # EventForTraining[0]=0
242     #iter+=1
243    
244 bortigno 1.4 # if job.type != 'DATA':
245     # EventForTraining=int(not TFlag.EvalInstance())
246 nmohr 1.10 #EventForTraining[0]=int(not TFlag.EvalInstance())
247 bortigno 1.9
248     inFilelheWeihgt = TFile.Open("lheWeightHisto.root","READ")
249     input_lheWeight = inFilelheWeight.Get('h_lheWeight')
250    
251 bortigno 1.8 if job.type == 'DY':
252     if tree.lheV_pt < 50.:
253     lheWeight = input_lheWeight.GetBinContent(1)
254     if tree.lheV_pt >= 50. and tree.lheV_pt < 70.:
255     lheWeight = input_lheWeight.GetBinContent(2)
256     if tree.lheV_pt >= 70. and tree.lheV_pt < 100.:
257     lheWeight = input_lheWeight.GetBinContent(3)
258     if tree.lheV_pt >= 100.:
259     lheWeight = input_lheWeight.GetBinContent(4)
260 nmohr 1.1
261     #get
262     hJet_pt = tree.hJet_pt
263     hJet_e = tree.hJet_e
264     hJet_pt0 = tree.hJet_pt[0]
265     hJet_pt1 = tree.hJet_pt[1]
266     hJet_eta0 = tree.hJet_eta[0]
267     hJet_eta1 = tree.hJet_eta[1]
268     hJet_genPt0 = tree.hJet_genPt[0]
269     hJet_genPt1 = tree.hJet_genPt[1]
270     hJet_e0 = tree.hJet_e[0]
271     hJet_e1 = tree.hJet_e[1]
272     hJet_phi0 = tree.hJet_phi[0]
273     hJet_phi1 = tree.hJet_phi[1]
274     hJet_JECUnc0 = tree.hJet_JECUnc[0]
275     hJet_JECUnc1 = tree.hJet_JECUnc[1]
276    
277     Event[0]=fEvent.EvalInstance()
278     METet[0]=fMETet.EvalInstance()
279     rho25[0]=fRho25.EvalInstance()
280     METphi[0]=fMETphi.EvalInstance()
281     for key, value in regDict.items():
282     theVars0[key][0] = theForms["form_reg_%s_0" %(value)].EvalInstance()
283     theVars1[key][0] = theForms["form_reg_%s_1" %(value)].EvalInstance()
284     for i in range(2):
285     hJet_MET_dPhi[i] = deltaPhi(METphi[0],tree.hJet_phi[i])
286     hJet_MET_dPhiArray[i][0] = deltaPhi(METphi[0],tree.hJet_phi[i])
287    
288 nmohr 1.10 if not job.type == 'DATA':
289     theVars0['Jet_ptRaw'][0] = theForms["form_reg_hJet_ptRaw_0"].EvalInstance()*corrPt(tree.hJet_pt[0],tree.hJet_eta[0],tree.hJet_genPt[0])
290     theVars1['Jet_ptRaw'][0] = theForms["form_reg_hJet_ptRaw_1"].EvalInstance()*corrPt(tree.hJet_pt[1],tree.hJet_eta[1],tree.hJet_genPt[1])
291    
292 nmohr 1.1 if applyRegression:
293     hJ0.SetPtEtaPhiE(hJet_pt0,hJet_eta0,hJet_phi0,hJet_e0)
294     hJ1.SetPtEtaPhiE(hJet_pt1,hJet_eta1,hJet_phi1,hJet_e1)
295     HNoReg.HiggsFlag = 1
296     HNoReg.mass = (hJ0+hJ1).M()
297     HNoReg.pt = (hJ0+hJ1).Pt()
298     HNoReg.eta = (hJ0+hJ1).Eta()
299     HNoReg.phi = (hJ0+hJ1).Phi()
300     HNoReg.dR = hJ0.DeltaR(hJ1)
301     HNoReg.dPhi = hJ0.DeltaPhi(hJ1)
302     HNoReg.dEta = abs(hJ0.Eta()-hJ1.Eta())
303 nmohr 1.10 rPt0 = max(0.0001,readerJet0.EvaluateRegression( "jet0Regression" )[0])
304     rPt1 = max(0.0001,readerJet1.EvaluateRegression( "jet1Regression" )[0])
305 nmohr 1.1 hJet_regWeight[0] = rPt0/hJet_pt0
306     hJet_regWeight[1] = rPt1/hJet_pt1
307     rE0 = hJet_e0*hJet_regWeight[0]
308     rE1 = hJet_e1*hJet_regWeight[1]
309     hJ0.SetPtEtaPhiE(rPt0,hJet_eta0,hJet_phi0,rE0)
310     hJ1.SetPtEtaPhiE(rPt1,hJet_eta1,hJet_phi1,rE1)
311     tree.hJet_pt[0] = rPt0
312     tree.hJet_pt[1] = rPt1
313     tree.hJet_e[0] = rE0
314     tree.hJet_e[1] = rE1
315     H.HiggsFlag = 1
316     H.mass = (hJ0+hJ1).M()
317     H.pt = (hJ0+hJ1).Pt()
318     H.eta = (hJ0+hJ1).Eta()
319     H.phi = (hJ0+hJ1).Phi()
320     H.dR = hJ0.DeltaR(hJ1)
321     H.dPhi = hJ0.DeltaPhi(hJ1)
322     H.dEta = abs(hJ0.Eta()-hJ1.Eta())
323     if hJet_regWeight[0] > 5. or hJet_regWeight[1] > 5.:
324     print 'MET %.2f' %(METet[0])
325     print 'rho25 %.2f' %(rho25[0])
326     for key, value in regDict.items():
327     print '%s 0: %.2f'%(key, theVars0[key][0])
328     print '%s 0: %.2f'%(key, theVars1[key][0])
329     for i in range(2):
330     print 'dPhi %.0f %.2f' %(i,hJet_MET_dPhiArray[i][0])
331     print 'corr 0 %.2f' %(hJet_regWeight[0])
332     print 'corr 1 %.2f' %(hJet_regWeight[1])
333     print 'Event %.0f' %(Event[0])
334     print 'rPt0 %.2f' %(rPt0)
335     print 'rPt1 %.2f' %(rPt1)
336     print 'rE0 %.2f' %(rE0)
337     print 'rE1 %.2f' %(rE1)
338     print 'Mass %.2f' %(H.mass)
339    
340     if job.type == 'DATA':
341     newtree.Fill()
342     continue
343    
344     for i in range(2):
345 nmohr 1.10 flavour = int(tree.hJet_flavour[i])
346     pt = float(tree.hJet_pt[i])
347     eta = float(tree.hJet_eta[i])
348     csv = float(tree.hJet_csv[i])
349     hJet_csvOld[i] = csv
350     tree.hJet_csv[i] = btagNom.reshape(eta,pt,csv,flavour)
351     hJet_csvDown[i] = btagDown.reshape(eta,pt,csv,flavour)
352     hJet_csvUp[i] = btagUp.reshape(eta,pt,csv,flavour)
353     hJet_csvFDown[i] = btagFDown.reshape(eta,pt,csv,flavour)
354     hJet_csvFUp[i] = btagFUp.reshape(eta,pt,csv,flavour)
355     #print pt, eta, flavour, csv
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 nmohr 1.1
362     for updown in ['up','down']:
363     #JER
364     if updown == 'up':
365     inner = 0.06
366     outer = 0.1
367     if updown == 'down':
368     inner = -0.06
369     outer = -0.1
370     #Calculate
371     if abs(hJet_eta0)<1.1: res0 = inner
372     else: res0 = outer
373     if abs(hJet_eta1)<1.1: res1 = inner
374     else: res1 = outer
375     rPt0 = hJet_pt0 + (hJet_pt0-hJet_genPt0)*res0
376     rPt1 = hJet_pt1 + (hJet_pt1-hJet_genPt1)*res1
377     rE0 = hJet_e0*rPt0/hJet_pt0
378     rE1 = hJet_e1*rPt1/hJet_pt1
379     if applyRegression:
380     theVars0['Jet_pt'][0] = rPt0
381     theVars1['Jet_pt'][0] = rPt1
382     theVars0['Jet_e'][0] = rE0
383     theVars1['Jet_e'][0] = rE1
384 nmohr 1.10 rPt0 = max(0.0001,readerJet0.EvaluateRegression( "jet0Regression" )[0])
385     rPt1 = max(0.0001,readerJet1.EvaluateRegression( "jet1Regression" )[0])
386 nmohr 1.1 rE0 = hJet_e0*rPt0/hJet_pt0
387     rE1 = hJet_e1*rPt1/hJet_pt1
388     hJ0.SetPtEtaPhiE(rPt0,hJet_eta0,hJet_phi0,rE0)
389     hJ1.SetPtEtaPhiE(rPt1,hJet_eta1,hJet_phi1,rE1)
390     #Set
391     if updown == 'up':
392     hJet_pt_JER_up[0]=rPt0
393     hJet_pt_JER_up[1]=rPt1
394     hJet_e_JER_up[0]=rE0
395     hJet_e_JER_up[1]=rE1
396     H_JER[0]=(hJ0+hJ1).M()
397     H_JER[2]=(hJ0+hJ1).Pt()
398     if updown == 'down':
399     hJet_pt_JER_down[0]=rPt0
400     hJet_pt_JER_down[1]=rPt1
401     hJet_e_JER_down[0]=rE0
402     hJet_e_JER_down[1]=rE1
403     H_JER[1]=(hJ0+hJ1).M()
404     H_JER[3]=(hJ0+hJ1).Pt()
405    
406     #JES
407     if updown == 'up':
408     variation=1
409     if updown == 'down':
410     variation=-1
411     #calculate
412     rPt0 = hJet_pt0*(1+variation*hJet_JECUnc0)
413     rPt1 = hJet_pt1*(1+variation*hJet_JECUnc1)
414     rE0 = hJet_e0*(1+variation*hJet_JECUnc0)
415     rE1 = hJet_e1*(1+variation*hJet_JECUnc1)
416     if applyRegression:
417     theVars0['Jet_pt'][0] = rPt0
418     theVars1['Jet_pt'][0] = rPt1
419     theVars0['Jet_e'][0] = rE0
420     theVars1['Jet_e'][0] = rE1
421 nmohr 1.10 rPt0 = max(0.0001,readerJet0.EvaluateRegression( "jet0Regression" )[0])
422     rPt1 = max(0.0001,readerJet1.EvaluateRegression( "jet1Regression" )[0])
423 nmohr 1.1 rE0 = hJet_e0*rPt0/hJet_pt0
424     rE1 = hJet_e1*rPt1/hJet_pt1
425     hJ0.SetPtEtaPhiE(rPt0,hJet_eta0,hJet_phi0,rE0)
426     hJ1.SetPtEtaPhiE(rPt1,hJet_eta1,hJet_phi1,rE1)
427     #Fill
428     if updown == 'up':
429     hJet_pt_JES_up[0]=rPt0
430     hJet_pt_JES_up[1]=rPt1
431     hJet_e_JES_up[0]=rE0
432     hJet_e_JES_up[1]=rE1
433     H_JES[0]=(hJ0+hJ1).M()
434     H_JES[2]=(hJ0+hJ1).Pt()
435     if updown == 'down':
436     hJet_pt_JES_down[0]=rPt0
437     hJet_pt_JES_down[1]=rPt1
438     hJet_e_JES_down[0]=rE0
439     hJet_e_JES_down[1]=rE1
440     H_JES[1]=(hJ0+hJ1).M()
441     H_JES[3]=(hJ0+hJ1).Pt()
442    
443     newtree.Fill()
444    
445     newtree.AutoSave()
446     output.Close()
447    
448     #dump info
449     infofile = open(path+'/sys'+'/samples.info','w')
450     pickle.dump(info,infofile)
451     infofile.close()