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()
|