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