ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbb/python/write_regression_systematics.py
Revision: 1.28
Committed: Thu Oct 11 16:53:25 2012 UTC (12 years, 7 months ago) by nmohr
Content type: text/x-python
Branch: MAIN
CVS Tags: hcpApproval, HCP_unblinding
Changes since 1.27: +3 -2 lines
Log Message:
Only one place for samples info

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