ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbb/python/write_regression_systematics.py
Revision: 1.39
Committed: Fri Apr 5 13:20:05 2013 UTC (12 years, 1 month ago) by nmohr
Content type: text/x-python
Branch: MAIN
CVS Tags: lhcp_UnblindFix, hcp_Unblind, lhcp_11April, LHCP_PreAppFixAfterFreeze, HEAD
Changes since 1.38: +11 -3 lines
Log Message:
Write to scratch and copy to storage

File Contents

# Content
1 #!/usr/bin/env python
2 import sys
3 import os,subprocess
4 import ROOT
5 import math
6 import shutil
7 from array import array
8 import warnings
9 warnings.filterwarnings( action='ignore', category=RuntimeWarning, message='creating converter.*' )
10 ROOT.gROOT.SetBatch(True)
11 from optparse import OptionParser
12
13 #usage: ./write_regression_systematic.py path
14
15 #os.mkdir(path+'/sys')
16 argv = sys.argv
17 parser = OptionParser()
18 #parser.add_option("-P", "--path", dest="path", default="",
19 # help="path to samples")
20 parser.add_option("-S", "--samples", dest="names", default="",
21 help="samples you want to run on")
22 parser.add_option("-C", "--config", dest="config", default=[], action="append",
23 help="configuration defining the plots to make")
24 (opts, args) = parser.parse_args(argv)
25 if opts.config =="":
26 opts.config = "config"
27
28 from myutils import BetterConfigParser, ParseInfo
29
30 print opts.config
31 config = BetterConfigParser()
32 config.read(opts.config)
33 anaTag = config.get("Analysis","tag")
34 TrainFlag = eval(config.get('Analysis','TrainFlag'))
35 btagLibrary = config.get('BTagReshaping','library')
36 samplesinfo=config.get('Directories','samplesinfo')
37
38 VHbbNameSpace=config.get('VHbbNameSpace','library')
39 ROOT.gSystem.Load(VHbbNameSpace)
40 AngLikeBkgs=eval(config.get('AngularLike','backgrounds'))
41 ang_yield=eval(config.get('AngularLike','yields'))
42
43 #path=opts.path
44 pathIN = config.get('Directories','SYSin')
45 pathOUT = config.get('Directories','SYSout')
46 tmpDir = os.environ["TMPDIR"]
47
48 print 'INput samples:\t%s'%pathIN
49 print 'OUTput samples:\t%s'%pathOUT
50
51
52 #storagesamples = config.get('Directories','storagesamples')
53
54
55 namelist=opts.names.split(',')
56
57 #load info
58 info = ParseInfo(samplesinfo,pathIN)
59
60 def deltaPhi(phi1, phi2):
61 result = phi1 - phi2
62 while (result > math.pi): result -= 2*math.pi
63 while (result <= -math.pi): result += 2*math.pi
64 return result
65
66 def resolutionBias(eta):
67 if(eta< 0.5): return 0.052
68 if(eta< 1.1): return 0.057
69 if(eta< 1.7): return 0.096
70 if(eta< 2.3): return 0.134
71 if(eta< 5): return 0.28
72 return 0
73
74 def corrPt(pt,eta,mcPt):
75 return (pt+resolutionBias(math.fabs(eta))*(pt-mcPt))/pt
76
77 def corrCSV(btag, csv, flav):
78 if(csv < 0.): return csv
79 if(csv > 1.): return csv;
80 if(flav == 0): return csv;
81 if(math.fabs(flav) == 5): return btag.ib.Eval(csv)
82 if(math.fabs(flav) == 4): return btag.ic.Eval(csv)
83 if(math.fabs(flav) != 4 and math.fabs(flav) != 5): return btag.il.Eval(csv)
84 return -10000
85
86
87 def csvReshape(sh, pt, eta, csv, flav):
88 return sh.reshape(float(eta), float(pt), float(csv), int(flav))
89
90
91 for job in info:
92 if not job.name in namelist: continue
93 ROOT.gROOT.ProcessLine(
94 "struct H {\
95 int HiggsFlag;\
96 float mass;\
97 float pt;\
98 float eta;\
99 float phi;\
100 float dR;\
101 float dPhi;\
102 float dEta;\
103 } ;"
104 )
105 if anaTag == '7TeV':
106 ROOT.gSystem.Load(btagLibrary)
107 from ROOT import BTagShape
108 btagNom = BTagShape("../data/csvdiscr.root")
109 btagNom.computeFunctions()
110 btagUp = BTagShape("../data/csvdiscr.root")
111 btagUp.computeFunctions(+1.,0.)
112 btagDown = BTagShape("../data/csvdiscr.root")
113 btagDown.computeFunctions(-1.,0.)
114 btagFUp = BTagShape("../data/csvdiscr.root")
115 btagFUp.computeFunctions(0.,+1.)
116 btagFDown = BTagShape("../data/csvdiscr.root")
117 btagFDown.computeFunctions(0.,-1.)
118 else:
119 ROOT.gSystem.Load(btagLibrary)
120 from ROOT import BTagShapeInterface
121 btagNom = BTagShapeInterface("../data/csvdiscr.root",0,0)
122 btagUp = BTagShapeInterface("../data/csvdiscr.root",+1,0)
123 btagDown = BTagShapeInterface("../data/csvdiscr.root",-1,0)
124 btagFUp = BTagShapeInterface("../data/csvdiscr.root",0,+1.)
125 btagFDown = BTagShapeInterface("../data/csvdiscr.root",0,-1.)
126
127 lhe_weight_map = False if not config.has_option('LHEWeights', 'weights_per_bin') else eval(config.get('LHEWeights', 'weights_per_bin'))
128
129
130 print '\t - %s' %(job.name)
131 input = ROOT.TFile.Open(pathIN+'/'+job.prefix+job.identifier+'.root','read')
132 output = ROOT.TFile.Open(tmpDir+'/'+job.prefix+job.identifier+'.root','recreate')
133
134 input.cd()
135 if lhe_weight_map and 'DY' in job.name:
136 inclusiveJob = info.get_sample('DY')
137 print inclusiveJob.name
138 inclusive = ROOT.TFile.Open(pathIN+inclusiveJob.get_path,'read')
139 inclusive.cd()
140 obj = ROOT.TObject
141 for key in ROOT.gDirectory.GetListOfKeys():
142 input.cd()
143 obj = key.ReadObj()
144 if obj.GetName() == job.tree:
145 continue
146 output.cd()
147 obj.Write(key.GetName())
148 inclusive.Close()
149 else:
150 obj = ROOT.TObject
151 for key in ROOT.gDirectory.GetListOfKeys():
152 input.cd()
153 obj = key.ReadObj()
154 if obj.GetName() == job.tree:
155 continue
156 output.cd()
157 obj.Write(key.GetName())
158
159 input.cd()
160 tree = input.Get(job.tree)
161 nEntries = tree.GetEntries()
162
163 H = ROOT.H()
164 HNoReg = ROOT.H()
165 tree.SetBranchStatus('H',0)
166 output.cd()
167 newtree = tree.CloneTree(0)
168
169 hJ0 = ROOT.TLorentzVector()
170 hJ1 = ROOT.TLorentzVector()
171 vect = ROOT.TLorentzVector()
172 #hFJ0 = ROOT.TLorentzVector()
173 #hFJ1 = ROOT.TLorentzVector()
174
175 regWeight = config.get("Regression","regWeight")
176 regDict = eval(config.get("Regression","regDict"))
177 regVars = eval(config.get("Regression","regVars"))
178 #regWeightFilterJets = config.get("Regression","regWeightFilterJets")
179 #regDictFilterJets = eval(config.get("Regression","regDictFilterJets"))
180 #regVarsFilterJets = eval(config.get("Regression","regVarsFilterJets"))
181
182 #Regression branches
183 applyRegression = True
184 hJet_pt = array('f',[0]*2)
185 hJet_e = array('f',[0]*2)
186 newtree.Branch( 'H', H , 'HiggsFlag/I:mass/F:pt/F:eta/F:phi/F:dR/F:dPhi/F:dEta/F' )
187 newtree.Branch( 'HNoReg', HNoReg , 'HiggsFlag/I:mass/F:pt/F:eta/F:phi/F:dR/F:dPhi/F:dEta/F' )
188 #FatHReg = array('f',[0]*2)
189 #newtree.Branch('FatHReg',FatHReg,'filteredmass:filteredpt/F')
190 Event = array('f',[0])
191 METet = array('f',[0])
192 rho25 = array('f',[0])
193 METphi = array('f',[0])
194 fRho25 = ROOT.TTreeFormula("rho25",'rho25',tree)
195 fEvent = ROOT.TTreeFormula("Event",'EVENT.event',tree)
196 fFatHFlag = ROOT.TTreeFormula("FatHFlag",'FatH.FatHiggsFlag',tree)
197 fFatHnFilterJets = ROOT.TTreeFormula("FatHnFilterJets",'nfathFilterJets',tree)
198 fMETet = ROOT.TTreeFormula("METet",'METnoPU.et',tree)
199 fMETphi = ROOT.TTreeFormula("METphi",'METnoPU.phi',tree)
200 fHVMass = ROOT.TTreeFormula("HVMass",'HVMass',tree)
201 hJet_MtArray = [array('f',[0]),array('f',[0])]
202 hJet_EtArray = [array('f',[0]),array('f',[0])]
203 hJet_MET_dPhi = array('f',[0]*2)
204 hJet_regWeight = array('f',[0]*2)
205 fathFilterJets_regWeight = array('f',[0]*2)
206 hJet_MET_dPhiArray = [array('f',[0]),array('f',[0])]
207 hJet_ptRawArray = [array('f',[0]),array('f',[0])]
208 newtree.Branch('hJet_MET_dPhi',hJet_MET_dPhi,'hJet_MET_dPhi[2]/F')
209 newtree.Branch('hJet_regWeight',hJet_regWeight,'hJet_regWeight[2]/F')
210 readerJet0 = ROOT.TMVA.Reader("!Color:!Silent" )
211 readerJet1 = ROOT.TMVA.Reader("!Color:!Silent" )
212
213 theForms = {}
214 theVars0 = {}
215 theVars1 = {}
216 def addVarsToReader(reader,regDict,regVars,theVars,theForms,i,hJet_MET_dPhiArray,METet,rho25,hJet_MtArray,hJet_EtArray,hJet_ptRawArray):
217 for key in regVars:
218 var = regDict[key]
219 theVars[key] = array( 'f', [ 0 ] )
220 if var == 'Jet_MET_dPhi':
221 print 'Adding var: %s with %s to readerJet%.0f' %(key,var,i)
222 reader.AddVariable( key, hJet_MET_dPhiArray[i] )
223 elif var == 'METet':
224 print 'Adding var: %s with %s to readerJet%.0f' %(key,var,i)
225 reader.AddVariable( key, METet )
226 elif var == 'rho25':
227 print 'Adding var: %s with %s to readerJet%.0f' %(key,var,i)
228 reader.AddVariable( key, rho25 )
229 elif var == 'Jet_mt':
230 print 'Adding var: %s with %s to readerJet%.0f' %(key,var,i)
231 reader.AddVariable( key, hJet_MtArray[i] )
232 elif var == 'Jet_et':
233 print 'Adding var: %s with %s to readerJet%.0f' %(key,var,i)
234 reader.AddVariable( key, hJet_EtArray[i] )
235 elif var == 'Jet_ptRaw':
236 print 'Adding var: %s with %s to readerJet%.0f' %(key,var,i)
237 reader.AddVariable( key, hJet_ptRawArray[i] )
238 else:
239 reader.AddVariable(key,theVars[key])
240 formula = regDict[key].replace("[0]","[%.0f]" %i)
241 print 'Adding var: %s with %s to readerJet%.0f' %(key,formula,i)
242 theForms['form_reg_%s_%.0f'%(key,i)] = ROOT.TTreeFormula("form_reg_%s_%.0f"%(key,i),'%s' %(formula),tree)
243 return
244 addVarsToReader(readerJet0,regDict,regVars,theVars0,theForms,0,hJet_MET_dPhiArray,METet,rho25,hJet_MtArray,hJet_EtArray,hJet_ptRawArray)
245 addVarsToReader(readerJet1,regDict,regVars,theVars1,theForms,1,hJet_MET_dPhiArray,METet,rho25,hJet_MtArray,hJet_EtArray,hJet_ptRawArray)
246 readerJet0.BookMVA( "jet0Regression", regWeight )
247 readerJet1.BookMVA( "jet1Regression", regWeight )
248
249 #readerFJ0 = ROOT.TMVA.Reader("!Color:!Silent" )
250 #readerFJ1 = ROOT.TMVA.Reader("!Color:!Silent" )
251 #theFormsFJ = {}
252 #theVars0FJ = {}
253 #theVars1FJ = {}
254 #addVarsToReader(readerFJ0,regDictFilterJets,regVarsFilterJets,theVars0FJ,theFormsFJ,0,hJet_MET_dPhiArray,METet,rho25,hJet_MtArray,hJet_EtArray,hJet_ptRawArray)
255 #addVarsToReader(readerFJ1,regDictFilterJets,regVarsFilterJets,theVars1FJ,theFormsFJ,1,hJet_MET_dPhiArray,METet,rho25,hJet_MtArray,hJet_EtArray,hJet_ptRawArray)
256 #readerFJ0.BookMVA( "jet0RegressionFJ", regWeightFilterJets )
257 #readerFJ1.BookMVA( "jet1RegressionFJ", regWeightFilterJets )
258
259
260 #Add training Flag
261 EventForTraining = array('i',[0])
262 newtree.Branch('EventForTraining',EventForTraining,'EventForTraining/I')
263 EventForTraining[0]=0
264
265 TFlag=ROOT.TTreeFormula("EventForTraining","EVENT.event%2",tree)
266
267 #Angular Likelihood
268 angleHB = array('f',[0])
269 newtree.Branch('angleHB',angleHB,'angleHB/F')
270 angleLZ = array('f',[0])
271 newtree.Branch('angleLZ',angleLZ,'angleLZ/F')
272 angleZZS = array('f',[0])
273 newtree.Branch('angleZZS',angleZZS,'angleZZS/F')
274 kinLikeRatio = array('f',[0]*len(AngLikeBkgs))
275 newtree.Branch('kinLikeRatio',kinLikeRatio,'%s/F' %(':'.join(AngLikeBkgs)))
276 fAngleHB = ROOT.TTreeFormula("fAngleHB",'abs(VHbb::ANGLEHB(hJet_pt[0],hJet_eta[0],hJet_phi[0],hJet_e[0],hJet_pt[1],hJet_eta[1],hJet_phi[1],hJet_e[1]))',newtree)
277 fAngleLZ = ROOT.TTreeFormula("fAngleLZ",'abs(VHbb::ANGLELZ(vLepton_pt[0],vLepton_eta[0],vLepton_phi[0],vLepton_mass[0],vLepton_pt[1],vLepton_eta[1],vLepton_phi[1],vLepton_mass[1]))',newtree)
278 fAngleZZS = ROOT.TTreeFormula("fAngleZZS",'abs(VHbb::ANGLELZ(H.pt,H.eta,H.phi,H.pt,V.pt,V.eta,V.phi,V.mass))',newtree)
279 fVpt = ROOT.TTreeFormula("fVpt",'V.pt',tree)
280 fVeta = ROOT.TTreeFormula("fVeta",'V.eta',tree)
281 fVphi = ROOT.TTreeFormula("fVphi",'V.phi',tree)
282 fVmass = ROOT.TTreeFormula("fVmass",'V.mass',tree)
283 likeSBH = array('f',[0]*len(AngLikeBkgs))
284 likeBBH = array('f',[0]*len(AngLikeBkgs))
285 likeSLZ = array('f',[0]*len(AngLikeBkgs))
286 likeBLZ = array('f',[0]*len(AngLikeBkgs))
287 likeSZZS = array('f',[0]*len(AngLikeBkgs))
288 likeBZZS = array('f',[0]*len(AngLikeBkgs))
289 likeSMassZS = array('f',[0]*len(AngLikeBkgs))
290 likeBMassZS = array('f',[0]*len(AngLikeBkgs))
291 HVMass_Reg = array('f',[0])
292 newtree.Branch('HVMass_Reg',HVMass_Reg,'HVMass_Reg/F')
293
294 SigBH = []; BkgBH = []; SigLZ = []; BkgLZ = []; SigZZS = []; BkgZZS = []; SigMassZS = []; BkgMassZS = [];
295 for angLikeBkg in AngLikeBkgs:
296 f = ROOT.TFile("../data/angleFitFunctions-%s.root"%(angLikeBkg),"READ")
297 SigBH.append(f.Get("sigFuncBH"))
298 BkgBH.append(f.Get("bkgFuncBH"))
299 SigLZ.append(f.Get("sigFuncLZ"))
300 BkgLZ.append(f.Get("bkgFuncLZ"))
301 SigZZS.append(f.Get("sigFuncZZS"))
302 BkgZZS.append(f.Get("bkgFuncZZS"))
303 SigMassZS.append(f.Get("sigFuncMassZS"))
304 BkgMassZS.append(f.Get("bkgFuncMassZS"))
305 f.Close()
306
307
308 if job.type != 'DATA':
309 #CSV branches
310 hJet_flavour = array('f',[0]*2)
311 hJet_csv = array('f',[0]*2)
312 hJet_csvOld = array('f',[0]*2)
313 hJet_csvUp = array('f',[0]*2)
314 hJet_csvDown = array('f',[0]*2)
315 hJet_csvFUp = array('f',[0]*2)
316 hJet_csvFDown = array('f',[0]*2)
317 newtree.Branch('hJet_csvOld',hJet_csvOld,'hJet_csvOld[2]/F')
318 newtree.Branch('hJet_csvUp',hJet_csvUp,'hJet_csvUp[2]/F')
319 newtree.Branch('hJet_csvDown',hJet_csvDown,'hJet_csvDown[2]/F')
320 newtree.Branch('hJet_csvFUp',hJet_csvFUp,'hJet_csvFUp[2]/F')
321 newtree.Branch('hJet_csvFDown',hJet_csvFDown,'hJet_csvFDown[2]/F')
322
323 #JER branches
324 hJet_pt_JER_up = array('f',[0]*2)
325 newtree.Branch('hJet_pt_JER_up',hJet_pt_JER_up,'hJet_pt_JER_up[2]/F')
326 hJet_pt_JER_down = array('f',[0]*2)
327 newtree.Branch('hJet_pt_JER_down',hJet_pt_JER_down,'hJet_pt_JER_down[2]/F')
328 hJet_e_JER_up = array('f',[0]*2)
329 newtree.Branch('hJet_e_JER_up',hJet_e_JER_up,'hJet_e_JER_up[2]/F')
330 hJet_e_JER_down = array('f',[0]*2)
331 newtree.Branch('hJet_e_JER_down',hJet_e_JER_down,'hJet_e_JER_down[2]/F')
332 H_JER = array('f',[0]*4)
333 newtree.Branch('H_JER',H_JER,'mass_up:mass_down:pt_up:pt_down/F')
334 HVMass_JER_up = array('f',[0])
335 HVMass_JER_down = array('f',[0])
336 newtree.Branch('HVMass_JER_up',HVMass_JER_up,'HVMass_JER_up/F')
337 newtree.Branch('HVMass_JER_down',HVMass_JER_down,'HVMass_JER_down/F')
338 angleHB_JER_up = array('f',[0])
339 angleHB_JER_down = array('f',[0])
340 angleZZS_JER_up = array('f',[0])
341 angleZZS_JER_down = array('f',[0])
342 newtree.Branch('angleHB_JER_up',angleHB_JER_up,'angleHB_JER_up/F')
343 newtree.Branch('angleHB_JER_down',angleHB_JER_down,'angleHB_JER_down/F')
344 newtree.Branch('angleZZS_JER_up',angleZZS_JER_up,'angleZZS_JER_up/F')
345 newtree.Branch('angleZZS_JER_down',angleZZS_JER_down,'angleZZS_JER_down/F')
346
347 #JES branches
348 hJet_pt_JES_up = array('f',[0]*2)
349 newtree.Branch('hJet_pt_JES_up',hJet_pt_JES_up,'hJet_pt_JES_up[2]/F')
350 hJet_pt_JES_down = array('f',[0]*2)
351 newtree.Branch('hJet_pt_JES_down',hJet_pt_JES_down,'hJet_pt_JES_down[2]/F')
352 hJet_e_JES_up = array('f',[0]*2)
353 newtree.Branch('hJet_e_JES_up',hJet_e_JES_up,'hJet_e_JES_up[2]/F')
354 hJet_e_JES_down = array('f',[0]*2)
355 newtree.Branch('hJet_e_JES_down',hJet_e_JES_down,'hJet_e_JES_down[2]/F')
356 H_JES = array('f',[0]*4)
357 newtree.Branch('H_JES',H_JES,'mass_up:mass_down:pt_up:pt_down/F')
358 HVMass_JES_up = array('f',[0])
359 HVMass_JES_down = array('f',[0])
360 newtree.Branch('HVMass_JES_up',HVMass_JES_up,'HVMass_JES_up/F')
361 newtree.Branch('HVMass_JES_down',HVMass_JES_down,'HVMass_JES_down/F')
362 angleHB_JES_up = array('f',[0])
363 angleHB_JES_down = array('f',[0])
364 angleZZS_JES_up = array('f',[0])
365 angleZZS_JES_down = array('f',[0])
366 newtree.Branch('angleHB_JES_up',angleHB_JES_up,'angleHB_JES_up/F')
367 newtree.Branch('angleHB_JES_down',angleHB_JES_down,'angleHB_JES_down/F')
368 newtree.Branch('angleZZS_JES_up',angleZZS_JES_up,'angleZZS_JES_up/F')
369 newtree.Branch('angleZZS_JES_down',angleZZS_JES_down,'angleZZS_JES_down/F')
370
371 #Formulas for syst in angular
372 fAngleHB_JER_up = ROOT.TTreeFormula("fAngleHB_JER_up",'abs(VHbb::ANGLEHB(hJet_pt_JER_up[0],hJet_eta[0],hJet_phi[0],hJet_e_JER_up[0],hJet_pt_JER_up[1],hJet_eta[1],hJet_phi[1],hJet_e_JER_up[1]))',newtree)
373 fAngleHB_JER_down = ROOT.TTreeFormula("fAngleHB_JER_down",'abs(VHbb::ANGLEHB(hJet_pt_JER_down[0],hJet_eta[0],hJet_phi[0],hJet_e_JER_down[0],hJet_pt_JER_down[1],hJet_eta[1],hJet_phi[1],hJet_e_JER_down[1]))',newtree)
374 fAngleHB_JES_up = ROOT.TTreeFormula("fAngleHB_JES_up",'abs(VHbb::ANGLEHB(hJet_pt_JES_up[0],hJet_eta[0],hJet_phi[0],hJet_e_JES_up[0],hJet_pt_JES_up[1],hJet_eta[1],hJet_phi[1],hJet_e_JES_up[1]))',newtree)
375 fAngleHB_JES_down = ROOT.TTreeFormula("fAngleHB_JES_down",'abs(VHbb::ANGLEHB(hJet_pt_JES_down[0],hJet_eta[0],hJet_phi[0],hJet_e_JES_down[0],hJet_pt_JES_down[1],hJet_eta[1],hJet_phi[1],hJet_e_JES_down[1]))',newtree)
376 fAngleZZS_JER_up = ROOT.TTreeFormula("fAngleZZS_JER_Up",'abs(VHbb::ANGLELZ(H_JER.pt_up,H.eta,H.phi,H_JER.pt_up,V.pt,V.eta,V.phi,V.mass))',newtree)
377 fAngleZZS_JER_down = ROOT.TTreeFormula("fAngleZZS_JER_Down",'abs(VHbb::ANGLELZ(H_JER.pt_down,H.eta,H.phi,H_JER.pt_down,V.pt,V.eta,V.phi,V.mass))',newtree)
378 fAngleZZS_JES_up = ROOT.TTreeFormula("fAngleZZS_JES_Up",'abs(VHbb::ANGLELZ(H_JER.pt_up,H.eta,H.phi,H_JER.pt_up,V.pt,V.eta,V.phi,V.mass))',newtree)
379 fAngleZZS_JES_down = ROOT.TTreeFormula("fAngleZZS_JES_Down",'abs(VHbb::ANGLELZ(H_JER.pt_down,H.eta,H.phi,H_JER.pt_down,V.pt,V.eta,V.phi,V.mass))',newtree)
380 lheWeight = array('f',[0])
381 newtree.Branch('lheWeight',lheWeight,'lheWeight/F')
382 theBinForms = {}
383 if lhe_weight_map and 'DY' in job.name:
384 for bin in lhe_weight_map:
385 theBinForms[bin] = ROOT.TTreeFormula("Bin_formula_%s"%(bin),bin,tree)
386 else:
387 lheWeight[0] = 1.
388
389 #iter=0
390
391
392 for entry in range(0,nEntries):
393 tree.GetEntry(entry)
394
395 if job.type != 'DATA':
396 EventForTraining[0]=int(not TFlag.EvalInstance())
397 if lhe_weight_map and 'DY' in job.name:
398 match_bin = None
399 for bin in lhe_weight_map:
400 if theBinForms[bin].EvalInstance() > 0.:
401 match_bin = bin
402 if match_bin:
403 lheWeight[0] = lhe_weight_map[match_bin]
404 else:
405 lheWeight[0] = 1.
406
407 #Has fat higgs
408 #fatHiggsFlag=fFatHFlag.EvalInstance()*fFatHnFilterJets.EvalInstance()
409
410 #get
411 vect.SetPtEtaPhiM(fVpt.EvalInstance(),fVeta.EvalInstance(),fVphi.EvalInstance(),fVmass.EvalInstance())
412 hJet_pt = tree.hJet_pt
413 hJet_e = tree.hJet_e
414 hJet_pt0 = tree.hJet_pt[0]
415 hJet_pt1 = tree.hJet_pt[1]
416 hJet_eta0 = tree.hJet_eta[0]
417 hJet_eta1 = tree.hJet_eta[1]
418 hJet_genPt0 = tree.hJet_genPt[0]
419 hJet_genPt1 = tree.hJet_genPt[1]
420 hJet_ptRaw0 = tree.hJet_ptRaw[0]
421 hJet_ptRaw1 = tree.hJet_ptRaw[1]
422 hJet_e0 = tree.hJet_e[0]
423 hJet_e1 = tree.hJet_e[1]
424 hJet_phi0 = tree.hJet_phi[0]
425 hJet_phi1 = tree.hJet_phi[1]
426 hJet_JECUnc0 = tree.hJet_JECUnc[0]
427 hJet_JECUnc1 = tree.hJet_JECUnc[1]
428 #Filterjets
429 #if fatHiggsFlag:
430 # fathFilterJets_pt0 = tree.fathFilterJets_pt[0]
431 # fathFilterJets_pt1 = tree.fathFilterJets_pt[1]
432 # fathFilterJets_eta0 = tree.fathFilterJets_eta[0]
433 # fathFilterJets_eta1 = tree.fathFilterJets_eta[1]
434 # fathFilterJets_phi0 = tree.fathFilterJets_phi[0]
435 # fathFilterJets_phi1 = tree.fathFilterJets_phi[1]
436 # fathFilterJets_e0 = tree.fathFilterJets_e[0]
437 # fathFilterJets_e1 = tree.fathFilterJets_e[1]
438
439 Event[0]=fEvent.EvalInstance()
440 METet[0]=fMETet.EvalInstance()
441 rho25[0]=fRho25.EvalInstance()
442 METphi[0]=fMETphi.EvalInstance()
443 for key, value in regDict.items():
444 if not (value == 'Jet_MET_dPhi' or value == 'METet' or value == "rho25" or value == "Jet_et" or value == 'Jet_mt' or value == 'Jet_ptRaw'):
445 theVars0[key][0] = theForms["form_reg_%s_0" %(key)].EvalInstance()
446 theVars1[key][0] = theForms["form_reg_%s_1" %(key)].EvalInstance()
447 #for key, value in regDictFilterJets.items():
448 # if not (value == 'Jet_MET_dPhi' or value == 'METet' or value == "rho25" or value == "Jet_et" or value == 'Jet_mt' or value == 'Jet_ptRaw'):
449 # theVars0FJ[key][0] = theFormsFJ["form_reg_%s_0" %(key)].EvalInstance()
450 # theVars1FJ[key][0] = theFormsFJ["form_reg_%s_1" %(key)].EvalInstance()
451 hJet_MET_dPhi[0] = deltaPhi(METphi[0],hJet_phi0)
452 hJet_MET_dPhi[1] = deltaPhi(METphi[0],hJet_phi1)
453 hJet_MET_dPhiArray[0][0] = deltaPhi(METphi[0],hJet_phi0)
454 hJet_MET_dPhiArray[1][0] = deltaPhi(METphi[0],hJet_phi1)
455 if not job.type == 'DATA':
456 corrRes0 = corrPt(hJet_pt0,hJet_eta0,hJet_genPt0)
457 corrRes1 = corrPt(hJet_pt1,hJet_eta1,hJet_genPt1)
458 hJet_ptRaw0 *= corrRes0
459 hJet_ptRaw1 *= corrRes1
460 hJet_ptRawArray[0][0] = hJet_ptRaw0
461 hJet_ptRawArray[1][0] = hJet_ptRaw1
462 hJ0.SetPtEtaPhiE(hJet_pt0,hJet_eta0,hJet_phi0,hJet_e0)
463 hJ1.SetPtEtaPhiE(hJet_pt1,hJet_eta1,hJet_phi1,hJet_e1)
464 hJet_et0 = hJ0.Et()
465 hJet_et1 = hJ1.Et()
466 hJet_mt0 = hJ0.Mt()
467 hJet_mt1 = hJ1.Mt()
468
469
470 if applyRegression:
471 HNoReg.HiggsFlag = 1
472 HNoReg.mass = (hJ0+hJ1).M()
473 HNoReg.pt = (hJ0+hJ1).Pt()
474 HNoReg.eta = (hJ0+hJ1).Eta()
475 HNoReg.phi = (hJ0+hJ1).Phi()
476 HNoReg.dR = hJ0.DeltaR(hJ1)
477 HNoReg.dPhi = hJ0.DeltaPhi(hJ1)
478 HNoReg.dEta = abs(hJ0.Eta()-hJ1.Eta())
479 hJet_MtArray[0][0] = hJ0.Mt()
480 hJet_MtArray[1][0] = hJ1.Mt()
481 hJet_EtArray[0][0] = hJ0.Et()
482 hJet_EtArray[1][0] = hJ1.Et()
483 rPt0 = max(0.0001,readerJet0.EvaluateRegression( "jet0Regression" )[0])
484 rPt1 = max(0.0001,readerJet1.EvaluateRegression( "jet1Regression" )[0])
485 hJet_regWeight[0] = rPt0/hJet_pt0
486 hJet_regWeight[1] = rPt1/hJet_pt1
487 rE0 = hJet_e0*hJet_regWeight[0]
488 rE1 = hJet_e1*hJet_regWeight[1]
489 hJ0.SetPtEtaPhiE(rPt0,hJet_eta0,hJet_phi0,rE0)
490 hJ1.SetPtEtaPhiE(rPt1,hJet_eta1,hJet_phi1,rE1)
491 #print '###new####'
492 #print 'First regression %s' %rPt0
493 tree.hJet_pt[0] = rPt0
494 tree.hJet_pt[1] = rPt1
495 tree.hJet_e[0] = rE0
496 tree.hJet_e[1] = rE1
497 H.HiggsFlag = 1
498 H.mass = (hJ0+hJ1).M()
499 H.pt = (hJ0+hJ1).Pt()
500 H.eta = (hJ0+hJ1).Eta()
501 H.phi = (hJ0+hJ1).Phi()
502 H.dR = hJ0.DeltaR(hJ1)
503 H.dPhi = hJ0.DeltaPhi(hJ1)
504 H.dEta = abs(hJ0.Eta()-hJ1.Eta())
505 HVMass_Reg[0] = (hJ0+hJ1+vect).M()
506 if hJet_regWeight[0] > 5. or hJet_regWeight[1] > 5.:
507 print 'Event %.0f' %(Event[0])
508 print 'MET %.2f' %(METet[0])
509 print 'rho25 %.2f' %(rho25[0])
510 for key, value in regDict.items():
511 if not (value == 'Jet_MET_dPhi' or value == 'METet' or value == "rho25" or value == "Jet_et" or value == 'Jet_mt' or value == 'Jet_ptRaw'):
512 print '%s 0: %.2f'%(key, theVars0[key][0])
513 print '%s 1: %.2f'%(key, theVars1[key][0])
514 for i in range(2):
515 print 'dPhi %.0f %.2f' %(i,hJet_MET_dPhiArray[i][0])
516 for i in range(2):
517 print 'ptRaw %.0f %.2f' %(i,hJet_ptRawArray[i][0])
518 for i in range(2):
519 print 'Mt %.0f %.2f' %(i,hJet_MtArray[i][0])
520 for i in range(2):
521 print 'Et %.0f %.2f' %(i,hJet_EtArray[i][0])
522 print 'corr 0 %.2f' %(hJet_regWeight[0])
523 print 'corr 1 %.2f' %(hJet_regWeight[1])
524 print 'rPt0 %.2f' %(rPt0)
525 print 'rPt1 %.2f' %(rPt1)
526 print 'rE0 %.2f' %(rE0)
527 print 'rE1 %.2f' %(rE1)
528 print 'Mass %.2f' %(H.mass)
529 #if fatHiggsFlag:
530 #hFJ0.SetPtEtaPhiE(fathFilterJets_pt0,fathFilterJets_eta0,fathFilterJets_phi0,fathFilterJets_e0)
531 #hFJ1.SetPtEtaPhiE(fathFilterJets_pt1,fathFilterJets_eta1,fathFilterJets_phi1,fathFilterJets_e1)
532 #rFJPt0 = max(0.0001,readerFJ0.EvaluateRegression( "jet0RegressionFJ" )[0])
533 #rFJPt1 = max(0.0001,readerFJ1.EvaluateRegression( "jet1RegressionFJ" )[0])
534 #fathFilterJets_regWeight[0] = rPt0/fathFilterJets_pt0
535 #fathFilterJets_regWeight[1] = rPt1/fathFilterJets_pt1
536 #rFJE0 = fathFilterJets_e0*fathFilterJets_regWeight[0]
537 #rFJE1 = fathFilterJets_e1*fathFilterJets_regWeight[1]
538 #hFJ0.SetPtEtaPhiE(rFJPt0,fathFilterJets_eta0,fathFilterJets_phi0,rFJE0)
539 #hFJ1.SetPtEtaPhiE(rFJPt1,fathFilterJets_eta1,fathFilterJets_phi1,rFJE1)
540 #FatHReg[0] = (hFJ0+hFJ1).M()
541 #FatHReg[1] = (hFJ0+hFJ1).Pt()
542 #else:
543 #FatHReg[0] = 0.
544 #FatHReg[1] = 0.
545
546 #print rFJPt0
547 #print rFJPt1
548
549 angleHB[0]=fAngleHB.EvalInstance()
550 angleLZ[0]=fAngleLZ.EvalInstance()
551 angleZZS[0]=fAngleZZS.EvalInstance()
552
553 for i, angLikeBkg in enumerate(AngLikeBkgs):
554 likeSBH[i] = math.fabs(SigBH[i].Eval(angleHB[0]))
555 likeBBH[i] = math.fabs(BkgBH[i].Eval(angleHB[0]))
556
557 likeSZZS[i] = math.fabs(SigZZS[i].Eval(angleZZS[0]))
558 likeBZZS[i] = math.fabs(BkgZZS[i].Eval(angleZZS[0]))
559
560 likeSLZ[i] = math.fabs(SigLZ[i].Eval(angleLZ[0]))
561 likeBLZ[i] = math.fabs(BkgLZ[i].Eval(angleLZ[0]))
562
563 likeSMassZS[i] = math.fabs(SigMassZS[i].Eval(fHVMass.EvalInstance()))
564 likeBMassZS[i] = math.fabs(BkgMassZS[i].Eval(fHVMass.EvalInstance()))
565
566 scaleSig = float( ang_yield['Sig'] / (ang_yield['Sig'] + ang_yield[angLikeBkg]))
567 scaleBkg = float( ang_yield[angLikeBkg] / (ang_yield['Sig'] + ang_yield[angLikeBkg]) )
568
569 numerator = (likeSBH[i]*likeSZZS[i]*likeSLZ[i]*likeSMassZS[i]);
570 denominator = ((scaleBkg*likeBLZ[i]*likeBZZS[i]*likeBBH[i]*likeBMassZS[i])+(scaleSig*likeSBH[i]*likeSZZS[i]*likeSLZ[i]*likeSMassZS[i]))
571
572 if denominator > 0:
573 kinLikeRatio[i] = numerator/denominator;
574 else:
575 kinLikeRatio[i] = 0;
576
577 if job.type == 'DATA':
578 newtree.Fill()
579 continue
580
581 for i in range(2):
582 flavour = int(tree.hJet_flavour[i])
583 pt = float(tree.hJet_pt[i])
584 eta = float(tree.hJet_eta[i])
585 csv = float(tree.hJet_csv[i])
586 hJet_csvOld[i] = csv
587 if anaTag == '7TeV':
588 tree.hJet_csv[i] = corrCSV(btagNom,csv,flavour)
589 hJet_csvDown[i] = corrCSV(btagDown,csv,flavour)
590 hJet_csvUp[i] = corrCSV(btagUp,csv,flavour)
591 hJet_csvFDown[i] = corrCSV(btagFDown,csv,flavour)
592 hJet_csvFUp[i] = corrCSV(btagFUp,csv,flavour)
593 else:
594 #tree.hJet_csv[i] = btagNom.reshape(eta,pt,csv,flavour)
595 #hJet_csvDown[i] = btagDown.reshape(eta,pt,csv,flavour)
596 #hJet_csvUp[i] = btagUp.reshape(eta,pt,csv,flavour)
597 #hJet_csvFDown[i] = btagFDown.reshape(eta,pt,csv,flavour)
598 #hJet_csvFUp[i] = btagFUp.reshape(eta,pt,csv,flavour)
599 tree.hJet_csv[i] = tree.hJet_csv_nominal[i]
600 hJet_csvDown[i] = tree.hJet_csv_downBC[i]
601 hJet_csvUp[i] = tree.hJet_csv_upBC[i]
602 hJet_csvFDown[i] = tree.hJet_csv_downL[i]
603 hJet_csvFUp[i] = tree.hJet_csv_upL[i]
604
605 for updown in ['up','down']:
606 #JER
607 if updown == 'up':
608 inner = 0.06
609 outer = 0.1
610 if updown == 'down':
611 inner = -0.06
612 outer = -0.1
613 #Calculate
614 if abs(hJet_eta0)<1.1: res0 = inner
615 else: res0 = outer
616 if abs(hJet_eta1)<1.1: res1 = inner
617 else: res1 = outer
618 rPt0 = hJet_pt0 + (hJet_pt0-hJet_genPt0)*res0
619 rPt1 = hJet_pt1 + (hJet_pt1-hJet_genPt1)*res1
620 rE0 = hJet_e0*rPt0/hJet_pt0
621 rE1 = hJet_e1*rPt1/hJet_pt1
622 if applyRegression:
623 hJ0.SetPtEtaPhiE(rPt0,hJet_eta0,hJet_phi0,rE0)
624 hJ1.SetPtEtaPhiE(rPt1,hJet_eta1,hJet_phi1,rE1)
625 hJet_MtArray[0][0] = hJ0.Mt()
626 hJet_MtArray[1][0] = hJ1.Mt()
627 hJet_EtArray[0][0] = hJ0.Et()
628 hJet_EtArray[1][0] = hJ1.Et()
629 for key in regVars:
630 var = regDict[key]
631 if key == 'Jet_pt' or key == 'Jet_e' or key == 'hJet_pt' or key == 'hJet_e' or key == 'Jet_ptRaw' or key =='VHbb::evalEt(hJet_pt,hJet_eta,hJet_phi,hJet_e)' or key =='VHbb::evalMt(hJet_pt,hJet_eta,hJet_phi,hJet_e)' or key == 'VHbb::evalJERBias(hJet_ptRaw,hJet_genPt,hJet_eta)':
632 if key == 'Jet_ptRaw':
633 hJet_ptRawArray[0][0] = hJet_ptRaw0*corrRes0*rPt0/hJet_pt0
634 hJet_ptRawArray[1][0] = hJet_ptRaw1*rPt1/hJet_pt1
635 elif key == 'VHbb::evalJERBias(hJet_ptRaw,hJet_genPt,hJet_eta)':
636 theVars0[key][0] = hJet_ptRaw0*corrRes0*rPt0/hJet_pt0
637 theVars1[key][0] = hJet_ptRaw1*rPt1/hJet_pt1
638 elif key == 'Jet_pt' or key == 'hJet_pt':
639 theVars0[key][0] = rPt0
640 theVars1[key][0] = rPt1
641 elif key == 'Jet_e' or key == 'hJet_e':
642 theVars0[key][0] = rE0
643 theVars1[key][0] = rE1
644 elif key == 'VHbb::evalEt(hJet_pt,hJet_eta,hJet_phi,hJet_e)':
645 theVars0[key][0] = hJ0.Et()
646 theVars1[key][0] = hJ1.Et()
647 elif key == 'VHbb::evalMt(hJet_pt,hJet_eta,hJet_phi,hJet_e)':
648 theVars0[key][0] = hJ0.Mt()
649 theVars1[key][0] = hJ1.Mt()
650 rPt0 = max(0.0001,readerJet0.EvaluateRegression( "jet0Regression" )[0])
651 rPt1 = max(0.0001,readerJet1.EvaluateRegression( "jet1Regression" )[0])
652 rE0 = hJet_e0*rPt0/hJet_pt0
653 rE1 = hJet_e1*rPt1/hJet_pt1
654 hJ0.SetPtEtaPhiE(rPt0,hJet_eta0,hJet_phi0,rE0)
655 hJ1.SetPtEtaPhiE(rPt1,hJet_eta1,hJet_phi1,rE1)
656 #Set
657 if updown == 'up':
658 hJet_pt_JER_up[0]=rPt0
659 hJet_pt_JER_up[1]=rPt1
660 hJet_e_JER_up[0]=rE0
661 hJet_e_JER_up[1]=rE1
662 H_JER[0]=(hJ0+hJ1).M()
663 H_JER[2]=(hJ0+hJ1).Pt()
664 HVMass_JER_up[0] = (hJ0+hJ1+vect).M()
665 if updown == 'down':
666 hJet_pt_JER_down[0]=rPt0
667 hJet_pt_JER_down[1]=rPt1
668 hJet_e_JER_down[0]=rE0
669 hJet_e_JER_down[1]=rE1
670 H_JER[1]=(hJ0+hJ1).M()
671 H_JER[3]=(hJ0+hJ1).Pt()
672 HVMass_JER_down[0] = (hJ0+hJ1+vect).M()
673
674 #JES
675 if updown == 'up':
676 variation=1
677 if updown == 'down':
678 variation=-1
679 #calculate
680 rPt0 = hJet_pt0*(1+variation*hJet_JECUnc0)
681 rPt1 = hJet_pt1*(1+variation*hJet_JECUnc1)
682 rE0 = hJet_e0*(1+variation*hJet_JECUnc0)
683 rE1 = hJet_e1*(1+variation*hJet_JECUnc1)
684 #print 'res %s: %s' %(updown,rPt0)
685 if applyRegression:
686 hJ0.SetPtEtaPhiE(rPt0,hJet_eta0,hJet_phi0,rE0)
687 hJ1.SetPtEtaPhiE(rPt1,hJet_eta1,hJet_phi1,rE1)
688 hJet_MtArray[0][0] = hJ0.Mt()
689 hJet_MtArray[1][0] = hJ1.Mt()
690 hJet_EtArray[0][0] = hJ0.Et()
691 hJet_EtArray[1][0] = hJ1.Et()
692 for key in regVars:
693 var = regDict[key]
694 if key == 'Jet_pt' or key == 'Jet_e' or key == 'hJet_pt' or key == 'hJet_e' or key == 'Jet_ptRaw' or key =='VHbb::evalEt(hJet_pt,hJet_eta,hJet_phi,hJet_e)' or key =='VHbb::evalMt(hJet_pt,hJet_eta,hJet_phi,hJet_e)' or key == 'VHbb::evalJERBias(hJet_ptRaw,hJet_genPt,hJet_eta)':
695 if key == 'Jet_ptRaw':
696 hJet_ptRawArray[0][0] = hJet_ptRaw0*(1+variation*hJet_JECUnc0)
697 hJet_ptRawArray[1][0] = hJet_ptRaw1*(1+variation*hJet_JECUnc1)
698 elif key == 'VHbb::evalJERBias(hJet_ptRaw,hJet_genPt,hJet_eta)':
699 theVars0[key][0] = hJet_ptRaw0*(1+variation*hJet_JECUnc0)
700 theVars1[key][0] = hJet_ptRaw1*(1+variation*hJet_JECUnc1)
701 elif var == 'Jet_pt' or var == 'hJet_pt[0]' or var == 'hJet_pt[1]' :
702 theVars0[key][0] = rPt0
703 theVars1[key][0] = rPt1
704 elif var == 'Jet_e' or var == 'hJet_e':
705 theVars0[key][0] = rE0
706 theVars1[key][0] = rE1
707 elif var == 'hJet_e':
708 theVars0[key][0] = rE0
709 theVars1[key][0] = rE1
710 elif key == 'VHbb::evalEt(hJet_pt,hJet_eta,hJet_phi,hJet_e)':
711 theVars0[key][0] = hJ0.Et()
712 theVars1[key][0] = hJ1.Et()
713 elif key == 'VHbb::evalMt(hJet_pt,hJet_eta,hJet_phi,hJet_e)':
714 theVars0[key][0] = hJ0.Mt()
715 theVars1[key][0] = hJ1.Mt()
716 rPt0 = max(0.0001,readerJet0.EvaluateRegression( "jet0Regression" )[0])
717 rPt1 = max(0.0001,readerJet1.EvaluateRegression( "jet1Regression" )[0])
718 #print 'JES reg: %s' %rPt0
719 rE0 = hJet_e0*rPt0/hJet_pt0
720 rE1 = hJet_e1*rPt1/hJet_pt1
721 hJ0.SetPtEtaPhiE(rPt0,hJet_eta0,hJet_phi0,rE0)
722 hJ1.SetPtEtaPhiE(rPt1,hJet_eta1,hJet_phi1,rE1)
723 #Fill
724 if updown == 'up':
725 hJet_pt_JES_up[0]=rPt0
726 hJet_pt_JES_up[1]=rPt1
727 hJet_e_JES_up[0]=rE0
728 hJet_e_JES_up[1]=rE1
729 H_JES[0]=(hJ0+hJ1).M()
730 H_JES[2]=(hJ0+hJ1).Pt()
731 HVMass_JES_up[0] = (hJ0+hJ1+vect).M()
732 if updown == 'down':
733 hJet_pt_JES_down[0]=rPt0
734 hJet_pt_JES_down[1]=rPt1
735 hJet_e_JES_down[0]=rE0
736 hJet_e_JES_down[1]=rE1
737 H_JES[1]=(hJ0+hJ1).M()
738 H_JES[3]=(hJ0+hJ1).Pt()
739 HVMass_JES_down[0] = (hJ0+hJ1+vect).M()
740
741 angleHB_JER_up[0]=fAngleHB_JER_up.EvalInstance()
742 angleHB_JER_down[0]=fAngleHB_JER_down.EvalInstance()
743 angleHB_JES_up[0]=fAngleHB_JES_up.EvalInstance()
744 angleHB_JES_down[0]=fAngleHB_JES_down.EvalInstance()
745 angleZZS[0]=fAngleZZS.EvalInstance()
746 angleZZS_JER_up[0]=fAngleZZS_JER_up.EvalInstance()
747 angleZZS_JER_down[0]=fAngleZZS_JER_down.EvalInstance()
748 angleZZS_JES_up[0]=fAngleZZS_JES_up.EvalInstance()
749 angleZZS_JES_down[0]=fAngleZZS_JES_down.EvalInstance()
750
751 newtree.Fill()
752
753 print 'Exit loop'
754 newtree.AutoSave()
755 print 'Save'
756 output.Close()
757 print 'Close'
758 targetStorage = pathOUT.replace('gsidcap://t3se01.psi.ch:22128/','srm://t3se01.psi.ch:8443/srm/managerv2?SFN=')+'/'+job.prefix+job.identifier+'.root'
759 command = 'lcg-del -b -D srmv2 -l %s' %(targetStorage)
760 print(command)
761 subprocess.call([command], shell=True)
762 command = 'lcg-cp -b -D srmv2 file:///%s %s' %(tmpDir+'/'+job.prefix+job.identifier+'.root',targetStorage)
763 print(command)
764 subprocess.call([command], shell=True)