1 import FWCore.ParameterSet.Config
as cms
4 from PhysicsTools.NanoAOD.simpleCandidateFlatTableProducer_cfi
import simpleCandidateFlatTableProducer
8 from RecoJets.JetProducers.hfJetShowerShape_cfi
import hfJetShowerShape
17 from PhysicsTools.PatAlgos.tools.jetCollectionTools
import GenJetAdder, RecoJetAdder
21 bTagCSVV2 = [
'pfCombinedInclusiveSecondaryVertexV2BJetTags']
22 bTagDeepCSV = [
'pfDeepCSVJetTags:probb',
'pfDeepCSVJetTags:probbb',
'pfDeepCSVJetTags:probc',
'pfDeepCSVJetTags:probudsg']
24 'pfDeepFlavourJetTags:probb',
'pfDeepFlavourJetTags:probbb',
'pfDeepFlavourJetTags:problepb',
25 'pfDeepFlavourJetTags:probc',
'pfDeepFlavourJetTags:probuds',
'pfDeepFlavourJetTags:probg' 28 bTagDiscriminatorsForAK4 = cms.PSet(foo = cms.vstring(bTagDeepCSV+bTagDeepJet+_pfParticleNetAK4JetTagsAll))
29 run2_nanoAOD_ANY.toModify(
30 bTagDiscriminatorsForAK4,
31 foo = bTagCSVV2+bTagDeepCSV+bTagDeepJet+_pfParticleNetAK4JetTagsAll
33 bTagDiscriminatorsForAK4 = bTagDiscriminatorsForAK4.foo.value()
38 btagHbb = [
'pfBoostedDoubleSecondaryVertexAK8BJetTags']
40 'pfDeepDoubleBvLJetTags:probHbb',
41 'pfDeepDoubleCvLJetTags:probHcc',
42 'pfDeepDoubleCvBJetTags:probHcc',
43 'pfMassIndependentDeepDoubleBvLJetTags:probHbb',
44 'pfMassIndependentDeepDoubleCvLJetTags:probHcc',
45 'pfMassIndependentDeepDoubleCvBJetTags:probHcc' 48 'pfMassIndependentDeepDoubleBvLV2JetTags:probHbb',
49 'pfMassIndependentDeepDoubleCvLV2JetTags:probHcc',
50 'pfMassIndependentDeepDoubleCvBV2JetTags:probHcc' 65 config_genjets = list(
filter(
lambda k: k[
'enabled'], config_genjets))
72 "doc" :
"AK6 Gen jets (made with visible genparticles) with pt > 3 GeV",
86 "inputCollection" :
"slimmedCaloJets",
87 "genJetsCollection":
"AK4GenJetsNoNu",
92 "inputCollection" :
"",
93 "genJetsCollection":
"AK4GenJetsNoNu",
99 "inputCollection" :
"",
100 "genJetsCollection":
"AK8GenJetsNoNu",
104 config_recojets = list(
filter(
lambda k: k[
'enabled'], config_recojets))
108 nanoInfo_recojets = {
111 "doc" :
"AK4 Calo jets (slimmedCaloJets)",
115 "doc" :
"AK4 PF jets",
120 "doc" :
"AK8 PF jets",
125 GENJETVARS = cms.PSet(P4Vars,
126 nConstituents = jetTable.variables.nConstituents,
128 PFJETVARS = cms.PSet(P4Vars,
129 rawFactor =
Var(
"1.-jecFactor('Uncorrected')",float,doc=
"1 - Factor to get back to raw pT",precision=6),
130 area = jetTable.variables.area,
131 chHEF = jetTable.variables.chHEF,
132 neHEF = jetTable.variables.neHEF,
133 chEmEF = jetTable.variables.chEmEF,
134 neEmEF = jetTable.variables.neEmEF,
135 muEF = jetTable.variables.muEF,
136 hfHEF =
Var(
"HFHadronEnergyFraction()",float,doc =
"hadronic energy fraction in HF",precision = 6),
137 hfEmEF =
Var(
"HFEMEnergyFraction()",float,doc =
"electromagnetic energy fraction in HF",precision = 6),
138 nMuons = jetTable.variables.nMuons,
139 nElectrons = jetTable.variables.nElectrons,
140 nConstituents = jetTable.variables.nConstituents,
141 nConstChHads =
Var(
"chargedHadronMultiplicity()",int,doc=
"number of charged hadrons in the jet"),
142 nConstNeuHads =
Var(
"neutralHadronMultiplicity()",int,doc=
"number of neutral hadrons in the jet"),
143 nConstHFHads =
Var(
"HFHadronMultiplicity()", int,doc=
"number of HF hadrons in the jet"),
144 nConstHFEMs =
Var(
"HFEMMultiplicity()",int,doc=
"number of HF EMs in the jet"),
145 nConstMuons =
Var(
"muonMultiplicity()",int,doc=
"number of muons in the jet"),
146 nConstElecs =
Var(
"electronMultiplicity()",int,doc=
"number of electrons in the jet"),
147 nConstPhotons =
Var(
"photonMultiplicity()",int,doc=
"number of photons in the jet"),
150 puId_dR2Mean =
Var(
"?(pt>=10)?userFloat('puId_dR2Mean'):-1",float,doc=
"pT^2-weighted average square distance of jet constituents from the jet axis (PileUp ID BDT input variable)", precision=14),
151 puId_majW =
Var(
"?(pt>=10)?userFloat('puId_majW'):-1",float,doc=
"major axis of jet ellipsoid in eta-phi plane (PileUp ID BDT input variable)", precision=14),
152 puId_minW =
Var(
"?(pt>=10)?userFloat('puId_minW'):-1",float,doc=
"minor axis of jet ellipsoid in eta-phi plane (PileUp ID BDT input variable)", precision=14),
153 puId_frac01 =
Var(
"?(pt>=10)?userFloat('puId_frac01'):-1",float,doc=
"fraction of constituents' pT contained within dR <0.1 (PileUp ID BDT input variable)", precision=14),
154 puId_frac02 =
Var(
"?(pt>=10)?userFloat('puId_frac02'):-1",float,doc=
"fraction of constituents' pT contained within 0.1< dR <0.2 (PileUp ID BDT input variable)", precision=14),
155 puId_frac03 =
Var(
"?(pt>=10)?userFloat('puId_frac03'):-1",float,doc=
"fraction of constituents' pT contained within 0.2< dR <0.3 (PileUp ID BDT input variable)", precision=14),
156 puId_frac04 =
Var(
"?(pt>=10)?userFloat('puId_frac04'):-1",float,doc=
"fraction of constituents' pT contained within 0.3< dR <0.4 (PileUp ID BDT input variable)", precision=14),
157 puId_ptD =
Var(
"?(pt>=10)?userFloat('puId_ptD'):-1",float,doc=
"pT-weighted average pT of constituents (PileUp ID BDT input variable)", precision=14),
158 puId_beta =
Var(
"?(pt>=10)?userFloat('puId_beta'):-1",float,doc=
"fraction of pT of charged constituents associated to PV (PileUp ID BDT input variable)", precision=14),
159 puId_pull =
Var(
"?(pt>=10)?userFloat('puId_pull'):-1",float,doc=
"magnitude of pull vector (PileUp ID BDT input variable)", precision=14),
160 puId_jetR =
Var(
"?(pt>=10)?userFloat('puId_jetR'):-1",float,doc=
"fraction of jet pT carried by the leading constituent (PileUp ID BDT input variable)", precision=14),
161 puId_jetRchg =
Var(
"?(pt>=10)?userFloat('puId_jetRchg'):-1",float,doc=
"fraction of jet pT carried by the leading charged constituent (PileUp ID BDT input variable)", precision=14),
162 puId_nCharged =
Var(
"?(pt>=10)?userInt('puId_nCharged'):-1",int,doc=
"number of charged constituents (PileUp ID BDT input variable)"),
165 qgl_axis2 =
Var(
"?(pt>=10)?userFloat('qgl_axis2'):-1",float,doc=
"ellipse minor jet axis (Quark vs Gluon likelihood input variable)", precision=14),
166 qgl_ptD =
Var(
"?(pt>=10)?userFloat('qgl_ptD'):-1",float,doc=
"pT-weighted average pT of constituents (Quark vs Gluon likelihood input variable)", precision=14),
167 qgl_mult =
Var(
"?(pt>=10)?userInt('qgl_mult'):-1", int,doc=
"PF candidates multiplicity (Quark vs Gluon likelihood input variable)"),
170 btagDeepB =
Var(
"?(pt>=15)&&((bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb'))>=0)?bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb'):-1",float,doc=
"DeepCSV b+bb tag discriminator",precision=10),
171 btagDeepCvL =
Var(
"?(pt>=15)&&(bDiscriminator('pfDeepCSVJetTags:probc')>=0)?bDiscriminator('pfDeepCSVJetTags:probc')/(bDiscriminator('pfDeepCSVJetTags:probc')+bDiscriminator('pfDeepCSVJetTags:probudsg')):-1", float,doc=
"DeepCSV c vs udsg discriminator",precision=10),
172 btagDeepCvB =
Var(
"?(pt>=15)&&bDiscriminator('pfDeepCSVJetTags:probc')>=0?bDiscriminator('pfDeepCSVJetTags:probc')/(bDiscriminator('pfDeepCSVJetTags:probc')+bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')):-1",float,doc=
"DeepCSV c vs b+bb discriminator",precision=10),
174 DEEPJETVARS = cms.PSet(
175 btagDeepFlavB =
Var(
"?(pt>=15)?bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb'):-1",float,doc=
"DeepJet b+bb+lepb tag discriminator",precision=10),
176 btagDeepFlavC =
Var(
"?(pt>=15)?bDiscriminator('pfDeepFlavourJetTags:probc'):-1",float,doc=
"DeepFlavour charm tag raw score",precision=10),
177 btagDeepFlavG =
Var(
"?(pt>=15)?bDiscriminator('pfDeepFlavourJetTags:probg'):-1",float,doc=
"DeepFlavour gluon tag raw score",precision=10),
178 btagDeepFlavUDS =
Var(
"?(pt>=15)?bDiscriminator('pfDeepFlavourJetTags:probuds'):-1",float,doc=
"DeepFlavour uds tag raw score",precision=10),
179 btagDeepFlavCvL =
Var(
"?(pt>=15)&&(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probuds')+bDiscriminator('pfDeepFlavourJetTags:probg'))>0?bDiscriminator('pfDeepFlavourJetTags:probc')/(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probuds')+bDiscriminator('pfDeepFlavourJetTags:probg')):-1",float,doc=
"DeepJet c vs uds+g discriminator",precision=10),
180 btagDeepFlavCvB =
Var(
"?(pt>=15)&&(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb'))>0?bDiscriminator('pfDeepFlavourJetTags:probc')/(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb')):-1",float,doc=
"DeepJet c vs b+bb+lepb discriminator",precision=10),
181 btagDeepFlavQG =
Var(
"?(pt>=15)&&(bDiscriminator('pfDeepFlavourJetTags:probg')+bDiscriminator('pfDeepFlavourJetTags:probuds'))>0?bDiscriminator('pfDeepFlavourJetTags:probg')/(bDiscriminator('pfDeepFlavourJetTags:probg')+bDiscriminator('pfDeepFlavourJetTags:probuds')):-1",float,doc=
"DeepJet g vs uds discriminator",precision=10),
183 PARTICLENETAK4VARS = cms.PSet(
184 particleNetAK4_B =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:BvsAll'):-1",float,doc=
"ParticleNetAK4 tagger b vs all (udsg, c) discriminator",precision=10),
185 particleNetAK4_CvsL =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:CvsL'):-1",float,doc=
"ParticleNetAK4 tagger c vs udsg discriminator",precision=10),
186 particleNetAK4_CvsB =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:CvsB'):-1",float,doc=
"ParticleNetAK4 tagger c vs b discriminator",precision=10),
187 particleNetAK4_QvsG =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:QvsG'):-1",float,doc=
"ParticleNetAK4 tagger uds vs g discriminator",precision=10),
188 particleNetAK4_G =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4JetTags:probg'):-1",float,doc=
"ParticleNetAK4 tagger g raw score",precision=10),
189 particleNetAK4_puIdDisc =
Var(
"?(pt>=15)?1-bDiscriminator('pfParticleNetAK4JetTags:probpu'):-1",float,doc=
"ParticleNetAK4 tagger pileup jet discriminator",precision=10),
192 CALOJETVARS = cms.PSet(P4Vars,
193 area = jetTable.variables.area,
194 rawFactor = jetTable.variables.rawFactor,
195 emf =
Var(
"emEnergyFraction()", float, doc =
"electromagnetic energy fraction", precision = 10),
206 def AddJetID(proc, jetName="", jetSrc="", jetTableName="", jetTaskName=""):
208 Setup modules to calculate PF jet ID 211 isPUPPIJet =
True if "PUPPI" in jetName.upper()
else False 213 looseJetId =
"looseJetId{}".
format(jetName)
214 setattr(proc, looseJetId, proc.looseJetId.clone(
216 filterParams = proc.looseJetId.filterParams.clone(
222 tightJetId =
"tightJetId{}".
format(jetName)
223 setattr(proc, tightJetId, proc.tightJetId.clone(
225 filterParams = proc.tightJetId.filterParams.clone(
226 version =
"RUN2UL{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
231 tightJetIdLepVeto =
"tightJetIdLepVeto{}".
format(jetName)
232 setattr(proc, tightJetIdLepVeto, proc.tightJetIdLepVeto.clone(
234 filterParams = proc.tightJetIdLepVeto.filterParams.clone(
235 version =
"RUN2UL{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
240 run2_jme_2016.toModify(
241 getattr(proc, tightJetId).filterParams, version =
"RUN2UL16{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
243 getattr(proc, tightJetIdLepVeto).filterParams, version =
"RUN2UL16{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
249 patJetWithUserData =
"{}WithUserData".
format(jetSrc)
250 getattr(proc, patJetWithUserData).userInts.tightId = cms.InputTag(tightJetId)
251 getattr(proc, patJetWithUserData).userInts.tightIdLepVeto = cms.InputTag(tightJetIdLepVeto)
256 getattr(proc, jetTableName).variables.jetId =
Var(
"userInt('tightId')*2+4*userInt('tightIdLepVeto')",int,doc=
"Jet ID flags bit1 is loose (always false in 2017 since it does not exist), bit2 is tight, bit3 is tightLepVeto")
258 getattr(proc,jetTaskName).
add(getattr(proc, tightJetId))
259 getattr(proc,jetTaskName).
add(getattr(proc, tightJetIdLepVeto))
265 Setup modules to calculate pileup jet ID input variables for PF jet 271 puJetIdVarsCalculator =
"puJetIdCalculator{}".
format(jetName)
272 setattr(proc, puJetIdVarsCalculator, pileupJetIdCalculator.clone(
274 vertexes =
"offlineSlimmedPrimaryVertices",
275 inputIsCorrected =
True,
277 srcConstituentWeights =
"packedPFCandidatespuppi" if "PUPPI" in jetName.upper()
else "" 280 getattr(proc,jetTaskName).
add(getattr(proc, puJetIdVarsCalculator))
285 puJetIDVar =
"puJetIDVar{}".
format(jetName)
286 setattr(proc, puJetIDVar, cms.EDProducer(
"PileupJetIDVarProducer",
287 srcJet = cms.InputTag(jetSrc),
288 srcPileupJetId = cms.InputTag(puJetIdVarsCalculator)
291 getattr(proc,jetTaskName).
add(getattr(proc, puJetIDVar))
296 patJetWithUserData =
"{}WithUserData".
format(jetSrc)
297 getattr(proc,patJetWithUserData).userFloats.puId_dR2Mean = cms.InputTag(
"{}:dR2Mean".
format(puJetIDVar))
298 getattr(proc,patJetWithUserData).userFloats.puId_majW = cms.InputTag(
"{}:majW".
format(puJetIDVar))
299 getattr(proc,patJetWithUserData).userFloats.puId_minW = cms.InputTag(
"{}:minW".
format(puJetIDVar))
300 getattr(proc,patJetWithUserData).userFloats.puId_frac01 = cms.InputTag(
"{}:frac01".
format(puJetIDVar))
301 getattr(proc,patJetWithUserData).userFloats.puId_frac02 = cms.InputTag(
"{}:frac02".
format(puJetIDVar))
302 getattr(proc,patJetWithUserData).userFloats.puId_frac03 = cms.InputTag(
"{}:frac03".
format(puJetIDVar))
303 getattr(proc,patJetWithUserData).userFloats.puId_frac04 = cms.InputTag(
"{}:frac04".
format(puJetIDVar))
304 getattr(proc,patJetWithUserData).userFloats.puId_ptD = cms.InputTag(
"{}:ptD".
format(puJetIDVar))
305 getattr(proc,patJetWithUserData).userFloats.puId_beta = cms.InputTag(
"{}:beta".
format(puJetIDVar))
306 getattr(proc,patJetWithUserData).userFloats.puId_pull = cms.InputTag(
"{}:pull".
format(puJetIDVar))
307 getattr(proc,patJetWithUserData).userFloats.puId_jetR = cms.InputTag(
"{}:jetR".
format(puJetIDVar))
308 getattr(proc,patJetWithUserData).userFloats.puId_jetRchg = cms.InputTag(
"{}:jetRchg".
format(puJetIDVar))
309 getattr(proc,patJetWithUserData).userInts.puId_nCharged = cms.InputTag(
"{}:nCharged".
format(puJetIDVar))
314 getattr(proc,jetTableName).variables.puId_dR2Mean = PUIDVARS.puId_dR2Mean
315 getattr(proc,jetTableName).variables.puId_majW = PUIDVARS.puId_majW
316 getattr(proc,jetTableName).variables.puId_minW = PUIDVARS.puId_minW
317 getattr(proc,jetTableName).variables.puId_frac01 = PUIDVARS.puId_frac01
318 getattr(proc,jetTableName).variables.puId_frac02 = PUIDVARS.puId_frac02
319 getattr(proc,jetTableName).variables.puId_frac03 = PUIDVARS.puId_frac03
320 getattr(proc,jetTableName).variables.puId_frac04 = PUIDVARS.puId_frac04
321 getattr(proc,jetTableName).variables.puId_ptD = PUIDVARS.puId_ptD
322 getattr(proc,jetTableName).variables.puId_beta = PUIDVARS.puId_beta
323 getattr(proc,jetTableName).variables.puId_pull = PUIDVARS.puId_pull
324 getattr(proc,jetTableName).variables.puId_jetR = PUIDVARS.puId_jetR
325 getattr(proc,jetTableName).variables.puId_jetRchg = PUIDVARS.puId_jetRchg
326 getattr(proc,jetTableName).variables.puId_nCharged = PUIDVARS.puId_nCharged
330 def AddQGLTaggerVars(proc, jetName="", jetSrc="", jetTableName="", jetTaskName="", calculateQGLVars=False):
332 Schedule the QGTagger module to calculate input variables to the QG likelihood 335 isPUPPIJet =
True if "PUPPI" in jetName.upper()
else False 337 QGLTagger=
"qgtagger{}".
format(jetName)
338 patJetWithUserData=
"{}WithUserData".
format(jetSrc)
341 setattr(proc, QGLTagger, qgtagger.clone(
343 computeLikelihood =
False,
347 getattr(proc,QGLTagger).srcConstituentWeights = cms.InputTag(
"packedPFCandidatespuppi")
352 getattr(proc,patJetWithUserData).userFloats.qgl_axis2 = cms.InputTag(QGLTagger+
":axis2")
353 getattr(proc,patJetWithUserData).userFloats.qgl_ptD = cms.InputTag(QGLTagger+
":ptD")
354 getattr(proc,patJetWithUserData).userInts.qgl_mult = cms.InputTag(QGLTagger+
":mult")
359 getattr(proc,jetTableName).variables.qgl_axis2 = QGLVARS.qgl_axis2
360 getattr(proc,jetTableName).variables.qgl_ptD = QGLVARS.qgl_ptD
361 getattr(proc,jetTableName).variables.qgl_mult = QGLVARS.qgl_mult
364 getattr(proc,jetTaskName).
add(getattr(proc, QGLTagger))
370 Store b-tagging scores from various algortihm 373 getattr(proc, jetTableName).variables.btagDeepB = BTAGVARS.btagDeepB
374 getattr(proc, jetTableName).variables.btagDeepCvL = BTAGVARS.btagDeepCvL
375 getattr(proc, jetTableName).variables.btagDeepCvB = BTAGVARS.btagDeepCvB
376 getattr(proc, jetTableName).variables.btagDeepFlavB = DEEPJETVARS.btagDeepFlavB
377 getattr(proc, jetTableName).variables.btagDeepFlavCvL = DEEPJETVARS.btagDeepFlavCvL
378 getattr(proc, jetTableName).variables.btagDeepFlavCvB = DEEPJETVARS.btagDeepFlavCvB
380 run2_nanoAOD_ANY.toModify(
381 getattr(proc, jetTableName).variables,
382 btagCSVV2 =
Var(
"bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')",float,doc=
" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",precision=10)
389 Store DeepJet raw score in jetTable for gluon and light quark 392 getattr(proc, jetTableName).variables.btagDeepFlavG = DEEPJETVARS.btagDeepFlavG
393 getattr(proc, jetTableName).variables.btagDeepFlavUDS = DEEPJETVARS.btagDeepFlavUDS
394 getattr(proc, jetTableName).variables.btagDeepFlavQG = DEEPJETVARS.btagDeepFlavQG
400 Store ParticleNetAK4 scores in jetTable 403 getattr(proc, jetTableName).variables.particleNetAK4_B = PARTICLENETAK4VARS.particleNetAK4_B
404 getattr(proc, jetTableName).variables.particleNetAK4_CvsL = PARTICLENETAK4VARS.particleNetAK4_CvsL
405 getattr(proc, jetTableName).variables.particleNetAK4_CvsB = PARTICLENETAK4VARS.particleNetAK4_CvsB
406 getattr(proc, jetTableName).variables.particleNetAK4_QvsG = PARTICLENETAK4VARS.particleNetAK4_QvsG
407 getattr(proc, jetTableName).variables.particleNetAK4_G = PARTICLENETAK4VARS.particleNetAK4_G
408 getattr(proc, jetTableName).variables.particleNetAK4_puIdDisc = PARTICLENETAK4VARS.particleNetAK4_puIdDisc
414 Add patJet into custom nanoAOD 417 jetName = recoJetInfo.jetUpper
418 payload = recoJetInfo.jetCorrPayload
419 doPF = recoJetInfo.doPF
420 doCalo = recoJetInfo.doCalo
421 patJetFinalColl = recoJetInfo.patJetFinalCollection
423 nanoInfoForJet = nanoInfo_recojets[recoJetInfo.jet]
424 jetTablePrefix = nanoInfoForJet[
"name"]
425 jetTableDoc = nanoInfoForJet[
"doc"]
426 ptcut = nanoInfoForJet[
"ptcut"]
if "ptcut" in nanoInfoForJet
else 8
427 doPUIDVar = nanoInfoForJet[
"doPUIDVar"]
if "doPUIDVar" in nanoInfoForJet
else False 428 doQGL = nanoInfoForJet[
"doQGL"]
if "doQGL" in nanoInfoForJet
else False 429 doBTag = nanoInfoForJet[
"doBTag"]
if "doBTag" in nanoInfoForJet
else False 432 jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF, doCalo,
433 ptcut=ptcut, doPUIDVar=doPUIDVar, doQGL=doQGL, doBTag=doBTag, runOnMC=runOnMC
438 def SavePatJets(proc, jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc,
439 doPF, doCalo, ptcut, doPUIDVar=False, doQGL=False, doBTag=False, runOnMC=False):
441 Schedule modules for a given patJet collection and save its variables into custom NanoAOD 447 jetCorrFactors =
"jetCorrFactorsNano{}".
format(jetName)
448 setattr(proc, jetCorrFactors, jetCorrFactorsNano.clone(
449 src = patJetFinalColl,
457 srcJets =
"updatedJets{}".
format(jetName)
458 setattr(proc, srcJets, updatedJets.clone(
459 jetSource = patJetFinalColl,
460 jetCorrFactorsSource = [jetCorrFactors],
467 srcJetsWithUserData =
"updatedJets{}WithUserData".
format(jetName)
468 setattr(proc, srcJetsWithUserData, cms.EDProducer(
"PATJetUserDataEmbedder",
469 src = cms.InputTag(srcJets),
470 userFloats = cms.PSet(),
471 userInts = cms.PSet(),
478 finalJetsCut =
"(pt >= {ptcut:.0f})".
format(ptcut=ptcut)
480 finalJetsCut =
"(pt >= {ptcut:.0f}) || ((pt < {ptcut:.0f}) && (genJetFwdRef().backRef().isNonnull()))".
format(ptcut=ptcut)
482 finalJetsForTable =
"finalJets{}".
format(jetName)
483 setattr(proc, finalJetsForTable, finalJets.clone(
484 src = srcJetsWithUserData,
492 tableContent = PFJETVARS
494 tableContent = CALOJETVARS
496 jetTableCutDefault =
"" 498 jetTableDocDefault = jetTableDoc +
" with JECs applied. Jets with pt >= {ptcut:.0f} GeV are stored.".
format(ptcut=ptcut)
500 jetTableDocDefault +=
"For jets with pt < {ptcut:.0f} GeV, only those matched to gen jets are stored.".
format(ptcut=ptcut)
503 jetTableDocDefault = jetTableDoc
505 jetTableName =
"jet{}Table".
format(jetName)
506 setattr(proc,jetTableName, simpleCandidateFlatTableProducer.clone(
507 src = cms.InputTag(finalJetsForTable),
508 cut = cms.string(jetTableCutDefault),
509 name = cms.string(jetTablePrefix),
510 doc = cms.string(jetTableDocDefault),
511 variables = cms.PSet(tableContent)
514 getattr(proc,jetTableName).variables.pt.precision=10
515 getattr(proc,jetTableName).variables.rawFactor.precision=10
520 jetMCTableName =
"jet{}MCTable".
format(jetName)
521 setattr(proc, jetMCTableName, simpleCandidateFlatTableProducer.clone(
522 src = cms.InputTag(finalJetsForTable),
523 cut = getattr(proc,jetTableName).cut,
524 name = cms.string(jetTablePrefix),
525 extension = cms.bool(
True),
526 variables = cms.PSet(
527 partonFlavour =
Var(
"partonFlavour()", int, doc=
"flavour from parton matching"),
528 hadronFlavour =
Var(
"hadronFlavour()", int, doc=
"flavour from hadron ghost clustering"),
529 genJetIdx =
Var(
"?genJetFwdRef().backRef().isNonnull()?genJetFwdRef().backRef().key():-1", int, doc=
"index of matched gen jet"),
537 jetTaskName =
"jet{}Task".
format(jetName)
538 setattr(proc, jetTaskName, cms.Task(
539 getattr(proc,jetCorrFactors),
540 getattr(proc,srcJets),
541 getattr(proc,srcJetsWithUserData),
542 getattr(proc,finalJetsForTable)
545 proc.nanoTableTaskCommon.add(getattr(proc,jetTaskName))
550 jetTableTaskName =
"jet{}TablesTask".
format(jetName)
551 setattr(proc, jetTableTaskName, cms.Task(getattr(proc,jetTableName)))
552 proc.nanoTableTaskCommon.add(getattr(proc,jetTableTaskName))
554 jetMCTableTaskName =
"jet{}MCTablesTask".
format(jetName)
555 setattr(proc, jetMCTableTaskName, cms.Task(getattr(proc,jetMCTableName)))
557 proc.nanoTableTaskFS.add(getattr(proc,jetMCTableTaskName))
563 proc =
AddJetID(proc, jetName=jetName, jetSrc=srcJets, jetTableName=jetTableName, jetTaskName=jetTaskName)
565 proc =
AddPileUpJetIDVars(proc, jetName=jetName, jetSrc=srcJets, jetTableName=jetTableName, jetTaskName=jetTaskName)
567 proc =
AddQGLTaggerVars(proc,jetName=jetName, jetSrc=srcJets, jetTableName=jetTableName, jetTaskName=jetTaskName, calculateQGLVars=
True)
583 Recluster AK4 Puppi jets and replace slimmedJetsPuppi 584 that is used as default to save AK4 Puppi jets in NanoAODs. 586 print(
"custom_jme_cff::ReclusterAK4PuppiJets: Recluster AK4 PF Puppi jets")
592 "jet" :
"ak4pfpuppi",
593 "inputCollection" :
"",
594 "genJetsCollection":
"AK4GenJetsNoNu",
595 "bTagDiscriminators": bTagDiscriminatorsForAK4,
598 recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
600 jetName = recoJetInfo.jetUpper
601 patJetFinalColl = recoJetInfo.patJetFinalCollection
606 run2_jme_2016.toModify(
607 proc.tightJetPuppiId.filterParams, version =
"RUN2UL16PUPPI" 609 proc.tightJetIdLepVeto.filterParams, version =
"RUN2UL16PUPPI" 616 proc.jetPuppiCorrFactorsNano.src=patJetFinalColl
617 proc.updatedJetsPuppi.jetSource=patJetFinalColl
622 finalJetsPuppiCut =
"" 624 finalJetsPuppiCut =
"(pt >= 8) || ((pt < 8) && (genJetFwdRef().backRef().isNonnull()))" 626 finalJetsPuppiCut =
"(pt >= 8)" 628 proc.finalJetsPuppi.cut = finalJetsPuppiCut
632 proc.corrT1METJetPuppiTable.cut =
"pt>=8 && pt<15 && abs(eta)<9.9" 638 run2_nanoAOD_ANY.toModify(
639 proc.jetTable, name =
"Jet" 644 src = cms.InputTag(
"finalJetsPuppi")
650 jetPuppiTableDoc =
"AK4 PF Puppi jets with JECs applied. Jets with pt >= 8 GeV are stored." 652 jetPuppiTableDoc +=
"For jets with pt < 8 GeV, only those matched to AK4 Gen jets are stored." 653 proc.jetPuppiTable.doc = jetPuppiTableDoc
655 proc.jetPuppiTable.variables.rawFactor.precision = 10
660 proc.jetPuppiTable.variables.hfHEF = PFJETVARS.hfHEF
661 proc.jetPuppiTable.variables.hfEmEF = PFJETVARS.hfEmEF
662 proc.jetPuppiTable.variables.nConstChHads = PFJETVARS.nConstChHads
663 proc.jetPuppiTable.variables.nConstNeuHads = PFJETVARS.nConstNeuHads
664 proc.jetPuppiTable.variables.nConstHFHads = PFJETVARS.nConstHFHads
665 proc.jetPuppiTable.variables.nConstHFEMs = PFJETVARS.nConstHFEMs
666 proc.jetPuppiTable.variables.nConstMuons = PFJETVARS.nConstMuons
667 proc.jetPuppiTable.variables.nConstElecs = PFJETVARS.nConstElecs
668 proc.jetPuppiTable.variables.nConstPhotons = PFJETVARS.nConstPhotons
676 jetSrc =
"updatedJetsPuppi",
677 jetTableName =
"jetPuppiTable",
678 jetTaskName =
"jetPuppiTask" 686 jetSrc =
"updatedJetsPuppi",
687 jetTableName =
"jetPuppiTable",
688 jetTaskName =
"jetPuppiTask",
689 calculateQGLVars=
True 694 proc.jetPuppiTable.variables.btagDeepB = BTAGVARS.btagDeepB
695 proc.jetPuppiTable.variables.btagDeepCvL = BTAGVARS.btagDeepCvL
696 proc.jetPuppiTable.variables.btagDeepCvB = BTAGVARS.btagDeepCvB
700 proc.jetPuppiTable.variables.btagDeepFlavB = DEEPJETVARS.btagDeepFlavB
701 proc.jetPuppiTable.variables.btagDeepFlavCvL = DEEPJETVARS.btagDeepFlavCvL
702 proc.jetPuppiTable.variables.btagDeepFlavCvB = DEEPJETVARS.btagDeepFlavCvB
706 proc.jetPuppiTable.variables.btagDeepFlavG = DEEPJETVARS.btagDeepFlavG
707 proc.jetPuppiTable.variables.btagDeepFlavUDS = DEEPJETVARS.btagDeepFlavUDS
708 proc.jetPuppiTable.variables.btagDeepFlavQG = DEEPJETVARS.btagDeepFlavQG
712 proc.jetPuppiTable.variables.particleNetAK4_B = PARTICLENETAK4VARS.particleNetAK4_B
713 proc.jetPuppiTable.variables.particleNetAK4_CvsL = PARTICLENETAK4VARS.particleNetAK4_CvsL
714 proc.jetPuppiTable.variables.particleNetAK4_CvsB = PARTICLENETAK4VARS.particleNetAK4_CvsB
715 proc.jetPuppiTable.variables.particleNetAK4_QvsG = PARTICLENETAK4VARS.particleNetAK4_QvsG
716 proc.jetPuppiTable.variables.particleNetAK4_G = PARTICLENETAK4VARS.particleNetAK4_G
717 proc.jetPuppiTable.variables.particleNetAK4_puIdDisc = PARTICLENETAK4VARS.particleNetAK4_puIdDisc
722 run2_nanoAOD_ANY.toReplaceWith(
723 proc.jetPuppiForMETTask,
724 proc.jetPuppiForMETTask.copyAndExclude([proc.corrT1METJetPuppiTable])
732 jetMCTableName =
"jet{}MCTable".
format(jetName)
733 setattr(proc, jetMCTableName, proc.jetMCTable.clone(
734 src = proc.jetPuppiTable.src,
735 name = proc.jetPuppiTable.name
738 jetMCTableTaskName =
"jet{}MCTablesTask".
format(jetName)
739 setattr(proc, jetMCTableTaskName, cms.Task(getattr(proc,jetMCTableName)))
741 run2_nanoAOD_ANY.toReplaceWith(
742 proc.nanoTableTaskFS,
743 proc.nanoTableTaskFS.copyAndAdd( getattr(proc,jetMCTableTaskName))
750 Recluster AK4 CHS jets and replace slimmedJets that is used as default to 751 save AK4 CHS jets in NanoAODs (for Run-2). 753 print(
"custom_jme_cff::ReclusterAK4CHSJets: Recluster AK4 PF CHS jets")
760 "inputCollection" :
"",
761 "genJetsCollection":
"AK4GenJetsNoNu",
762 "bTagDiscriminators": bTagDiscriminatorsForAK4,
765 recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
767 jetName = recoJetInfo.jetUpper
768 patJetFinalColl = recoJetInfo.patJetFinalCollection
774 proc.jetCorrFactorsNano.src=patJetFinalColl
775 proc.updatedJets.jetSource=patJetFinalColl
782 finalJetsCut =
"(pt >= 8) || ((pt < 8) && (genJetFwdRef().backRef().isNonnull()))" 784 finalJetsCut =
"(pt >= 8)" 786 proc.finalJets.cut = finalJetsCut
790 proc.corrT1METJetTable.cut =
"pt>=8 && pt<15 && abs(eta)<9.9" 796 proc.jetTable.src = cms.InputTag(
"finalJets")
797 proc.jetTable.cut = jetTableCut
798 proc.jetMCTable.cut = jetTableCut
799 proc.jetTable.name =
"JetCHS" 804 run2_nanoAOD_ANY.toModify(
806 src = cms.InputTag(
"linkedObjects",
"jets"),
813 jetTableDoc =
"AK4 PF CHS jets with JECs applied. Jets with pt >= 8 GeV are stored." 815 jetTableDoc +=
"For jets with pt < 8 GeV, only those matched to AK4 Gen jets are stored." 816 proc.jetTable.doc = jetTableDoc
818 proc.jetTable.variables.rawFactor.precision = 10
823 proc.jetTable.variables.hfHEF = PFJETVARS.hfHEF
824 proc.jetTable.variables.hfEmEF = PFJETVARS.hfEmEF
825 proc.jetTable.variables.nConstChHads = PFJETVARS.nConstChHads
826 proc.jetTable.variables.nConstNeuHads = PFJETVARS.nConstNeuHads
827 proc.jetTable.variables.nConstHFHads = PFJETVARS.nConstHFHads
828 proc.jetTable.variables.nConstHFEMs = PFJETVARS.nConstHFEMs
829 proc.jetTable.variables.nConstMuons = PFJETVARS.nConstMuons
830 proc.jetTable.variables.nConstElecs = PFJETVARS.nConstElecs
831 proc.jetTable.variables.nConstPhotons = PFJETVARS.nConstPhotons
836 proc.updatedJetsWithUserData.userFloats.chFPV1EF = cms.InputTag(
"jercVars:chargedFromPV1EnergyFraction")
837 proc.updatedJetsWithUserData.userFloats.chFPV2EF = cms.InputTag(
"jercVars:chargedFromPV2EnergyFraction")
838 proc.updatedJetsWithUserData.userFloats.chFPV3EF = cms.InputTag(
"jercVars:chargedFromPV3EnergyFraction")
839 proc.jetTable.variables.chFPV1EF =
Var(
"userFloat('chFPV1EF')", float, doc=
"charged fromPV==1 Energy Fraction (component of the total charged Energy Fraction).", precision= 6)
840 proc.jetTable.variables.chFPV2EF =
Var(
"userFloat('chFPV2EF')", float, doc=
"charged fromPV==2 Energy Fraction (component of the total charged Energy Fraction).", precision= 6)
841 proc.jetTable.variables.chFPV3EF =
Var(
"userFloat('chFPV3EF')", float, doc=
"charged fromPV==3 Energy Fraction (component of the total charged Energy Fraction).", precision= 6)
848 jetSrc =
"updatedJets",
849 jetTableName =
"jetTable",
850 jetTaskName =
"jetTask" 856 proc.updatedJetsWithUserData.userFloats.qgl_axis2 = cms.InputTag(
"qgtagger:axis2")
857 proc.updatedJetsWithUserData.userFloats.qgl_ptD = cms.InputTag(
"qgtagger:ptD")
858 proc.updatedJetsWithUserData.userInts.qgl_mult = cms.InputTag(
"qgtagger:mult")
862 proc.jetTable.variables.qgl_axis2 = QGLVARS.qgl_axis2
863 proc.jetTable.variables.qgl_ptD = QGLVARS.qgl_ptD
864 proc.jetTable.variables.qgl_mult = QGLVARS.qgl_mult
868 proc.jetTable.variables.btagDeepB = BTAGVARS.btagDeepB
869 proc.jetTable.variables.btagDeepCvL = BTAGVARS.btagDeepCvL
870 proc.jetTable.variables.btagDeepCvB = BTAGVARS.btagDeepCvB
874 proc.jetTable.variables.btagDeepFlavB = DEEPJETVARS.btagDeepFlavB
875 proc.jetTable.variables.btagDeepFlavCvL = DEEPJETVARS.btagDeepFlavCvL
876 proc.jetTable.variables.btagDeepFlavCvB = DEEPJETVARS.btagDeepFlavCvB
880 proc.jetTable.variables.btagDeepFlavG = DEEPJETVARS.btagDeepFlavG
881 proc.jetTable.variables.btagDeepFlavUDS = DEEPJETVARS.btagDeepFlavUDS
882 proc.jetTable.variables.btagDeepFlavQG = DEEPJETVARS.btagDeepFlavQG
886 proc.jetTable.variables.particleNetAK4_B = PARTICLENETAK4VARS.particleNetAK4_B
887 proc.jetTable.variables.particleNetAK4_CvsL = PARTICLENETAK4VARS.particleNetAK4_CvsL
888 proc.jetTable.variables.particleNetAK4_CvsB = PARTICLENETAK4VARS.particleNetAK4_CvsB
889 proc.jetTable.variables.particleNetAK4_QvsG = PARTICLENETAK4VARS.particleNetAK4_QvsG
890 proc.jetTable.variables.particleNetAK4_G = PARTICLENETAK4VARS.particleNetAK4_G
891 proc.jetTable.variables.particleNetAK4_puIdDisc = PARTICLENETAK4VARS.particleNetAK4_puIdDisc
895 hfJetShowerShapeforCustomNanoAOD =
"hfJetShowerShapeforCustomNanoAOD" 896 setattr(proc, hfJetShowerShapeforCustomNanoAOD, hfJetShowerShape.clone(jets=
"updatedJets", vertices=
"offlineSlimmedPrimaryVertices") )
897 proc.jetUserDataTask.add(getattr(proc, hfJetShowerShapeforCustomNanoAOD))
898 proc.updatedJetsWithUserData.userFloats.hfsigmaEtaEta = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:sigmaEtaEta')
899 proc.updatedJetsWithUserData.userFloats.hfsigmaPhiPhi = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:sigmaPhiPhi')
900 proc.updatedJetsWithUserData.userInts.hfcentralEtaStripSize = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:centralEtaStripSize')
901 proc.updatedJetsWithUserData.userInts.hfadjacentEtaStripsSize = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:adjacentEtaStripsSize')
902 proc.jetTable.variables.hfsigmaEtaEta =
Var(
"userFloat('hfsigmaEtaEta')",float,doc=
"sigmaEtaEta for HF jets (noise discriminating variable)",precision=10)
903 proc.jetTable.variables.hfsigmaPhiPhi =
Var(
"userFloat('hfsigmaPhiPhi')",float,doc=
"sigmaPhiPhi for HF jets (noise discriminating variable)",precision=10)
904 proc.jetTable.variables.hfcentralEtaStripSize =
Var(
"userInt('hfcentralEtaStripSize')", int, doc=
"eta size of the central tower strip in HF (noise discriminating variable) ")
905 proc.jetTable.variables.hfadjacentEtaStripsSize =
Var(
"userInt('hfadjacentEtaStripsSize')", int, doc=
"eta size of the strips next to the central tower strip in HF (noise discriminating variable) ")
911 (~run2_nanoAOD_ANY).toReplaceWith(
912 proc.jetUserDataTask,
913 proc.jetUserDataTask.copyAndExclude([proc.bJetVars])
916 proc.jetTablesTask.copyAndExclude([proc.bjetNN, proc.cjetNN])
917 ).toModify(proc.updatedJetsWithUserData.userFloats,
919 leptonPtRelv0 =
None,
920 leptonPtRelInvv0 =
None,
928 proc.updatedJetsWithUserData.userInts,
932 proc.jetTable, externalVariables = cms.PSet()
938 proc.jetForMETTask.copyAndExclude([proc.corrT1METJetTable])
945 jetMCTableName =
"jet{}MCTable".
format(jetName)
946 setattr(proc, jetMCTableName, proc.jetMCTable.clone(
947 src = proc.jetTable.src,
948 name = proc.jetTable.name
951 jetMCTableTaskName =
"jet{}MCTablesTask".
format(jetName)
952 setattr(proc, jetMCTableTaskName, cms.Task(getattr(proc,jetMCTableName)))
954 (~run2_nanoAOD_ANY).toReplaceWith(
955 proc.nanoTableTaskFS,
956 proc.nanoTableTaskFS.copyAndAdd(getattr(proc,jetMCTableTaskName))
963 Store a separate AK8 Puppi jet collection for JEC studies. 964 Only minimal info are stored 966 print(
"custom_jme_cff::AddNewAK8PuppiJetsForJEC: Make a new AK8 PF Puppi jet collection for JEC studies")
972 "jet" :
"ak8pfpuppi",
973 "inputCollection" :
"",
974 "genJetsCollection":
"AK8GenJetsNoNu",
977 recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
979 jetName = recoJetInfo.jetUpper
980 payload = recoJetInfo.jetCorrPayload
982 patJetFinalColl = recoJetInfo.patJetFinalCollection
983 jetTablePrefix =
"FatJetForJEC" 984 jetTableDoc =
"AK8 PF Puppi jets with JECs applied. Reclustered for JEC studies so only minimal info stored." 988 jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF=
True,
989 doCalo=
False, ptcut=ptcut, doPUIDVar=
False, doQGL=
False, doBTag=
False, runOnMC=runOnMC
996 Store an AK8 CHS jet collection for JEC studies. 998 print(
"custom_jme_cff::AddNewAK8CHSJets: Make a new AK8 PF CHS jet collection for JEC studies")
1005 "inputCollection" :
"",
1006 "genJetsCollection":
"AK8GenJetsNoNu",
1007 "minPtFastjet" : 0.,
1009 recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
1011 jetName = recoJetInfo.jetUpper
1012 payload = recoJetInfo.jetCorrPayload
1014 patJetFinalColl = recoJetInfo.patJetFinalCollection
1015 jetTablePrefix =
"FatJetCHS" 1016 jetTableDoc =
"AK8 PF CHS jets with JECs applied. Reclustered for JEC studies so only minimal info stored." 1020 jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF=
True,
1021 doCalo=
False, ptcut=ptcut, doPUIDVar=
False, doQGL=
False, doBTag=
False, runOnMC=runOnMC
1028 Add more variables for AK8 PFPUPPI jets 1031 proc.fatJetTable.variables.rawFactor.precision = 10
1037 proc.fatJetTable.variables.chHEF =
Var(
"?isPFJet()?chargedHadronEnergyFraction():-1", float, doc=
"charged Hadron Energy Fraction", precision = 6)
1038 proc.fatJetTable.variables.neHEF =
Var(
"?isPFJet()?neutralHadronEnergyFraction():-1", float, doc=
"neutral Hadron Energy Fraction", precision = 6)
1039 proc.fatJetTable.variables.chEmEF =
Var(
"?isPFJet()?chargedEmEnergyFraction():-1", float, doc=
"charged Electromagnetic Energy Fraction", precision = 6)
1040 proc.fatJetTable.variables.neEmEF =
Var(
"?isPFJet()?neutralEmEnergyFraction():-1", float, doc=
"neutral Electromagnetic Energy Fraction", precision = 6)
1041 proc.fatJetTable.variables.muEF =
Var(
"?isPFJet()?muonEnergyFraction():-1", float, doc=
"muon Energy Fraction", precision = 6)
1042 proc.fatJetTable.variables.hfHEF =
Var(
"?isPFJet()?HFHadronEnergyFraction():-1", float, doc=
"energy fraction in forward hadronic calorimeter", precision = 6)
1043 proc.fatJetTable.variables.hfEmEF =
Var(
"?isPFJet()?HFEMEnergyFraction():-1", float, doc=
"energy fraction in forward EM calorimeter", precision = 6)
1044 proc.fatJetTable.variables.nConstChHads =
Var(
"?isPFJet()?chargedHadronMultiplicity():-1",int, doc=
"number of charged hadrons in the jet")
1045 proc.fatJetTable.variables.nConstNeuHads =
Var(
"?isPFJet()?neutralHadronMultiplicity():-1",int, doc=
"number of neutral hadrons in the jet")
1046 proc.fatJetTable.variables.nConstHFHads =
Var(
"?isPFJet()?HFHadronMultiplicity():-1", int, doc=
"number of HF Hadrons in the jet")
1047 proc.fatJetTable.variables.nConstHFEMs =
Var(
"?isPFJet()?HFEMMultiplicity():-1", int, doc=
"number of HF EMs in the jet")
1048 proc.fatJetTable.variables.nConstMuons =
Var(
"?isPFJet()?muonMultiplicity():-1", int, doc=
"number of muons in the jet")
1049 proc.fatJetTable.variables.nConstElecs =
Var(
"?isPFJet()?electronMultiplicity():-1", int, doc=
"number of electrons in the jet")
1050 proc.fatJetTable.variables.nConstPhotons =
Var(
"?isPFJet()?photonMultiplicity():-1", int, doc=
"number of photons in the jet")
1062 Add genJet into custom nanoAOD 1065 genJetName = genJetInfo.jetUpper
1066 genJetAlgo = genJetInfo.jetAlgo
1067 genJetSize = genJetInfo.jetSize
1068 genJetSizeNr = genJetInfo.jetSizeNr
1069 genJetFinalColl =
"{}{}{}".
format(genJetAlgo.upper(), genJetSize,
"GenJetsNoNu")
1070 genJetTablePrefix = nanoInfo_genjets[genJetInfo.jet][
"name"]
1071 genJetTableDoc = nanoInfo_genjets[genJetInfo.jet][
"doc"]
1073 SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=
False)
1077 def SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=False):
1079 Schedule modules for a given genJet collection and save its variables into custom NanoAOD 1082 genJetTableName =
"jet{}Table".
format(genJetName)
1083 setattr(proc, genJetTableName, genJetTable.clone(
1084 src = genJetFinalColl,
1086 name = genJetTablePrefix,
1087 doc = genJetTableDoc,
1088 variables = GENJETVARS
1092 genJetFlavourAssociationName =
"genJet{}FlavourAssociation".
format(genJetName)
1093 setattr(proc, genJetFlavourAssociationName, genJetFlavourAssociation.clone(
1094 jets = getattr(proc,genJetTableName).src,
1095 jetAlgorithm = supportedJetAlgos[genJetAlgo],
1096 rParam = genJetSizeNr,
1100 genJetFlavourTableName =
"genJet{}FlavourTable".
format(genJetName)
1101 setattr(proc, genJetFlavourTableName, genJetFlavourTable.clone(
1102 name = getattr(proc,genJetTableName).name,
1103 src = getattr(proc,genJetTableName).src,
1104 cut = getattr(proc,genJetTableName).cut,
1105 jetFlavourInfos = genJetFlavourAssociationName,
1109 genJetTaskName =
"genJet{}Task".
format(genJetName)
1110 setattr(proc, genJetTaskName, cms.Task(
1111 getattr(proc,genJetTableName),
1112 getattr(proc,genJetFlavourAssociationName),
1113 getattr(proc,genJetFlavourTableName)
1116 proc.jetMCTask.add(getattr(proc,genJetTaskName))
1122 Recluster AK4 Gen jets and replace 1123 slimmedGenJets that is used as default 1124 to save AK4 Gen jets in NanoAODs. 1126 print(
"custom_jme_cff::ReclusterAK4GenJets: Recluster AK4 Gen jets")
1134 genJetInfo = genJA.addGenJetCollection(proc, **cfg)
1136 genJetName = genJetInfo.jetUpper
1137 genJetAlgo = genJetInfo.jetAlgo
1138 genJetSize = genJetInfo.jetSize
1139 genJetSizeNr = genJetInfo.jetSizeNr
1140 selectedGenJets =
"{}{}{}".
format(genJetAlgo.upper(), genJetSize,
"GenJetsNoNu")
1146 proc.genJetTable.src = selectedGenJets
1147 proc.genJetTable.cut =
"" 1148 proc.genJetTable.doc =
"AK4 Gen jets (made with visible genparticles) with pt > 3 GeV" 1150 genJetFlavourAssociationName =
"genJet{}FlavourAssociation".
format(genJetName)
1151 setattr(proc, genJetFlavourAssociationName, genJetFlavourAssociation.clone(
1152 jets = proc.genJetTable.src,
1153 jetAlgorithm = supportedJetAlgos[genJetAlgo],
1154 rParam = genJetSizeNr,
1157 proc.jetMCTask.add(getattr(proc, genJetFlavourAssociationName))
1162 Make a separate AK8 Gen jet collection for JEC studies. 1164 print(
"custom_jme_cff::AddNewAK8GenJetsForJEC: Add new AK8 Gen jets for JEC studies")
1172 genJetInfo = genJA.addGenJetCollection(proc, **cfg)
1174 genJetName = genJetInfo.jetUpper
1175 genJetAlgo = genJetInfo.jetAlgo
1176 genJetSize = genJetInfo.jetSize
1177 genJetSizeNr = genJetInfo.jetSizeNr
1178 genJetFinalColl =
"{}{}{}".
format(genJetAlgo.upper(), genJetSize,
"GenJetsNoNu")
1179 genJetTablePrefix =
"GenJetAK8ForJEC" 1180 genJetTableDoc =
"AK8 Gen jets (made with visible genparticles) with pt > 3 GeV. Reclustered for JEC studies." 1182 SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=
False)
1187 proc.genJetTable.variables.nConstituents = GENJETVARS.nConstituents
1191 proc.genJetAK8Table.variables.nConstituents = GENJETVARS.nConstituents
1201 Remove default pt cuts for all jets set in jets_cff.py 1204 proc.finalJets.cut =
"" 1205 proc.finalJetsPuppi.cut =
"" 1206 proc.finalJetsAK8.cut =
"" 1207 proc.genJetTable.cut =
"" 1208 proc.genJetFlavourTable.cut =
"" 1209 proc.genJetAK8Table.cut =
"" 1210 proc.genJetAK8FlavourTable.cut =
"" 1231 genJA = GenJetAdder()
1249 for jetConfig
in config_genjets:
1250 cfg = { k : v
for k, v
in jetConfig.items()
if k !=
"enabled"}
1251 genJetInfo = genJA.addGenJetCollection(process, **cfg)
1259 recoJA = RecoJetAdder(runOnMC=runOnMC)
1283 for jetConfig
in config_recojets:
1284 cfg = { k : v
for k, v
in jetConfig.items()
if k !=
"enabled"}
1285 recoJetInfo = recoJA.addRecoJetCollection(process, **cfg)
1293 def addAK4JetTasks(proc, addAK4CHSJetTasks, addAK4PuppiJetTasks):
1294 if addAK4CHSJetTasks:
1295 proc.nanoTableTaskCommon.add(proc.jetTask)
1296 proc.nanoTableTaskCommon.add(proc.jetTablesTask)
1297 proc.nanoTableTaskCommon.add(proc.jetForMETTask)
1298 if addAK4PuppiJetTasks:
1299 proc.nanoTableTaskCommon.add(proc.jetPuppiTask)
1300 proc.nanoTableTaskCommon.add(proc.jetPuppiTablesTask)
1301 proc.nanoTableTaskCommon.add(proc.jetPuppiForMETTask)
1304 jmeNano_addAK4JetTasks_switch = cms.PSet(
1305 jmeNano_addAK4CHS_switch = cms.untracked.bool(
True),
1306 jmeNano_addAK4Puppi_switch = cms.untracked.bool(
False)
1308 run2_nanoAOD_ANY.toModify(jmeNano_addAK4JetTasks_switch,
1309 jmeNano_addAK4CHS_switch =
False,
1310 jmeNano_addAK4Puppi_switch =
True 1312 process = addAK4JetTasks(process,
1313 addAK4CHSJetTasks = jmeNano_addAK4JetTasks_switch.jmeNano_addAK4CHS_switch,
1314 addAK4PuppiJetTasks = jmeNano_addAK4JetTasks_switch.jmeNano_addAK4Puppi_switch,
1321 process.puTable.savePtHatMax =
True 1327 process.genWeightsTable.keepAllPSWeights =
True def AddBTaggingScores(proc, jetTableName="")
def ReclusterAK4CHSJets(proc, recoJA, runOnMC)
def AddQGLTaggerVars(proc, jetName="", jetSrc="", jetTableName="", jetTaskName="", calculateQGLVars=False)
def RemoveAllJetPtCuts(proc)
def Var(expr, valtype, doc=None, precision=-1)
def PrepJMECustomNanoAOD(process, runOnMC)
def AddNewPatJets(proc, recoJetInfo, runOnMC)
def ReclusterAK4GenJets(proc, genJA)
def AddNewAK8CHSJets(proc, recoJA, runOnMC)
def AddNewAK8GenJetsForJEC(proc, genJA)
def SavePatJets(proc, jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF, doCalo, ptcut, doPUIDVar=False, doQGL=False, doBTag=False, runOnMC=False)
def ReclusterAK4PuppiJets(proc, recoJA, runOnMC)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
def AddDeepJetGluonLQuarkScores(proc, jetTableName="")
def AddJetID(proc, jetName="", jetSrc="", jetTableName="", jetTaskName="")
def AddNewAK8PuppiJetsForJEC(proc, recoJA, runOnMC)
def AddNewGenJets(proc, genJetInfo)
def SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=False)
def AddVariablesForAK4GenJets(proc)
def AddVariablesForAK8PuppiJets(proc)
def AddParticleNetAK4Scores(proc, jetTableName="")
void add(std::map< std::string, TH1 *> &h, TH1 *hist)
def AddVariablesForAK8GenJets(proc)
def PrepJMECustomNanoAOD_MC(process)
def AddPileUpJetIDVars(proc, jetName="", jetSrc="", jetTableName="", jetTaskName="")
def PrepJMECustomNanoAOD_Data(process)