1 import FWCore.ParameterSet.Config
as cms
3 from Configuration.Eras.Modifier_run2_jme_2016_cff
import run2_jme_2016
4 from Configuration.Eras.Modifier_run2_jme_2017_cff
import run2_jme_2017
15 from PhysicsTools.PatAlgos.tools.jetCollectionTools
import GenJetAdder, RecoJetAdder
21 bTagCSVV2 = [
'pfDeepCSVJetTags:probb',
'pfDeepCSVJetTags:probbb',
'pfDeepCSVJetTags:probc']
22 bTagDeepCSV = [
'pfCombinedInclusiveSecondaryVertexV2BJetTags']
24 'pfDeepFlavourJetTags:probb',
'pfDeepFlavourJetTags:probbb',
'pfDeepFlavourJetTags:problepb',
25 'pfDeepFlavourJetTags:probc',
'pfDeepFlavourJetTags:probuds',
'pfDeepFlavourJetTags:probg'
28 bTagDiscriminatorsForAK4 = bTagCSVV2+bTagDeepCSV+bTagDeepJet+_pfParticleNetAK4JetTagsAll
42 config_genjets = list(
filter(
lambda k: k[
'enabled'], config_genjets))
49 "doc" :
"AK8 Gen jets",
63 "inputCollection" :
"slimmedCaloJets",
64 "genJetsCollection":
"AK4GenJetsNoNu",
69 "inputCollection" :
"",
70 "genJetsCollection":
"AK4GenJetsNoNu",
75 "inputCollection" :
"",
76 "genJetsCollection":
"AK4GenJetsNoNu",
77 "bTagDiscriminators": bTagDiscriminatorsForAK4
82 "inputCollection" :
"",
83 "genJetsCollection":
"slimmedGenJetsAK8",
88 "inputCollection" :
"",
89 "genJetsCollection":
"slimmedGenJetsAK8",
92 config_recojets = list(
filter(
lambda k: k[
'enabled'], config_recojets))
99 "doc" :
"AK4 PF Puppi jets with JECs applied, after basic selection (pt > 2)",
107 "doc" :
"AK4 PF jets with JECs applied, after basic selection (pt > 2)",
112 "doc" :
"AK4 Calo jets with JECs applied",
115 "name" :
"FatJetCHS",
116 "doc" :
"AK8 PF CHS jets with JECs applied, after basic selection (pt > 100)",
121 "doc" :
"AK8 PF jets with JECs applied, after basic selection (pt > 100)",
122 "ptcut" :
"pt > 100",
128 GENJETVARS = cms.PSet(P4Vars,
129 nConstituents = jetTable.variables.nConstituents,
131 PFJETVARS = cms.PSet(P4Vars,
132 rawFactor = jetTable.variables.rawFactor,
133 area = jetTable.variables.area,
134 chHEF = jetTable.variables.chHEF,
135 neHEF = jetTable.variables.neHEF,
136 chEmEF = jetTable.variables.chEmEF,
137 neEmEF = jetTable.variables.neEmEF,
138 muEF = jetTable.variables.muEF,
139 hfHEF =
Var(
"HFHadronEnergyFraction()",float,doc =
"hadronic energy fraction in HF",precision = 6),
140 hfEmEF =
Var(
"HFEMEnergyFraction()",float,doc =
"electromagnetic energy fraction in HF",precision = 6),
141 nMuons = jetTable.variables.nMuons,
142 nElectrons = jetTable.variables.nElectrons,
143 nConstituents = jetTable.variables.nConstituents,
144 nConstChHads =
Var(
"chargedHadronMultiplicity()",int,doc=
"number of charged hadrons in the jet"),
145 nConstNeuHads =
Var(
"neutralHadronMultiplicity()",int,doc=
"number of neutral hadrons in the jet"),
146 nConstHFHads =
Var(
"HFHadronMultiplicity()", int,doc=
"number of HF hadrons in the jet"),
147 nConstHFEMs =
Var(
"HFEMMultiplicity()",int,doc=
"number of HF EMs in the jet"),
148 nConstMuons =
Var(
"muonMultiplicity()",int,doc=
"number of muons in the jet"),
149 nConstElecs =
Var(
"electronMultiplicity()",int,doc=
"number of electrons in the jet"),
150 nConstPhotons =
Var(
"photonMultiplicity()",int,doc=
"number of photons in the jet"),
153 puId_dR2Mean =
Var(
"userFloat('puId_dR2Mean')",float,doc=
"pT^2-weighted average square distance of jet constituents from the jet axis (PileUp ID BDT input variable)", precision= 6),
154 puId_majW =
Var(
"userFloat('puId_majW')",float,doc=
"major axis of jet ellipsoid in eta-phi plane (PileUp ID BDT input variable)", precision= 6) ,
155 puId_minW =
Var(
"userFloat('puId_minW')",float,doc=
"minor axis of jet ellipsoid in eta-phi plane (PileUp ID BDT input variable)", precision= 6) ,
156 puId_frac01 =
Var(
"userFloat('puId_frac01')",float,doc=
"fraction of constituents' pT contained within dR <0.1 (PileUp ID BDT input variable)", precision= 6) ,
157 puId_frac02 =
Var(
"userFloat('puId_frac02')",float,doc=
"fraction of constituents' pT contained within 0.1< dR <0.2 (PileUp ID BDT input variable)", precision= 6) ,
158 puId_frac03 =
Var(
"userFloat('puId_frac03')",float,doc=
"fraction of constituents' pT contained within 0.2< dR <0.3 (PileUp ID BDT input variable)", precision= 6) ,
159 puId_frac04 =
Var(
"userFloat('puId_frac04')",float,doc=
"fraction of constituents' pT contained within 0.3< dR <0.4 (PileUp ID BDT input variable)", precision= 6) ,
160 puId_ptD =
Var(
"userFloat('puId_ptD')",float,doc=
"pT-weighted average pT of constituents (PileUp ID BDT input variable)", precision= 6) ,
161 puId_beta =
Var(
"userFloat('puId_beta')",float,doc=
"fraction of pT of charged constituents associated to PV (PileUp ID BDT input variable)", precision= 6) ,
162 puId_pull =
Var(
"userFloat('puId_pull')",float,doc=
"magnitude of pull vector (PileUp ID BDT input variable)", precision= 6) ,
163 puId_jetR =
Var(
"userFloat('puId_jetR')",float,doc=
"fraction of jet pT carried by the leading constituent (PileUp ID BDT input variable)", precision= 6) ,
164 puId_jetRchg =
Var(
"userFloat('puId_jetRchg')",float,doc=
"fraction of jet pT carried by the leading charged constituent (PileUp ID BDT input variable)", precision= 6) ,
165 puId_nCharged =
Var(
"userInt('puId_nCharged')",int,doc=
"number of charged constituents (PileUp ID BDT input variable)"),
168 qgl_axis2 =
Var(
"userFloat('qgl_axis2')",float,doc=
"ellipse minor jet axis (Quark vs Gluon likelihood input variable)", precision= 6),
169 qgl_ptD =
Var(
"userFloat('qgl_ptD')",float,doc=
"pT-weighted average pT of constituents (Quark vs Gluon likelihood input variable)", precision= 6),
170 qgl_mult =
Var(
"userInt('qgl_mult')", int,doc=
"PF candidates multiplicity (Quark vs Gluon likelihood input variable)"),
173 btagDeepB = jetTable.variables.btagDeepB,
174 btagCSVV2 = jetTable.variables.btagCSVV2,
175 btagDeepCvL = jetTable.variables.btagDeepCvL,
177 DEEPJETVARS = cms.PSet(
178 btagDeepFlavB = jetTable.variables.btagDeepFlavB,
179 btagDeepFlavC =
Var(
"bDiscriminator('pfDeepFlavourJetTags:probc')",float,doc=
"DeepFlavour charm tag raw score",precision=10),
180 btagDeepFlavG =
Var(
"bDiscriminator('pfDeepFlavourJetTags:probg')",float,doc=
"DeepFlavour gluon tag raw score",precision=10),
181 btagDeepFlavUDS =
Var(
"bDiscriminator('pfDeepFlavourJetTags:probuds')",float,doc=
"DeepFlavour uds tag raw score",precision=10)
183 PARTICLENETAK4VARS = cms.PSet(
184 particleNetAK4_B =
Var(
"bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:BvsAll')",float,doc=
"ParticleNetAK4 tagger b vs all (udsg, c) discriminator",precision=10),
185 particleNetAK4_CvsL =
Var(
"bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:CvsL')",float,doc=
"ParticleNetAK4 tagger c vs udsg discriminator",precision=10),
186 particleNetAK4_CvsB =
Var(
"bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:CvsB')",float,doc=
"ParticleNetAK4 tagger c vs b discriminator",precision=10),
187 particleNetAK4_QvsG =
Var(
"bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:QvsG')",float,doc=
"ParticleNetAK4 tagger uds vs g discriminator",precision=10),
188 particleNetAK4_puIdDisc =
Var(
"1-bDiscriminator('pfParticleNetAK4JetTags:probpu')",float,doc=
"ParticleNetAK4 tagger pileup jet discriminator",precision=10),
191 CALOJETVARS = cms.PSet(P4Vars,
192 area = jetTable.variables.area,
193 rawFactor = jetTable.variables.rawFactor,
194 emf =
Var(
"emEnergyFraction()", float, doc =
"electromagnetic energy fraction", precision = 10),
205 def AddJetID(proc, jetName="", jetSrc="", jetTableName="", jetSequenceName=""):
207 Setup modules to calculate PF jet ID
210 isPUPPIJet =
True if "Puppi" in jetName
else False
212 looseJetId =
"looseJetId{}".
format(jetName)
213 setattr(proc, looseJetId, proc.looseJetId.clone(
215 filterParams=proc.looseJetId.filterParams.clone(
221 tightJetId =
"tightJetId{}".
format(jetName)
222 setattr(proc, tightJetId, proc.tightJetId.clone(
224 filterParams=proc.tightJetId.filterParams.clone(
225 version =
"SUMMER18{}".
format(
"PUPPI" if isPUPPIJet
else "")
230 tightJetIdLepVeto =
"tightJetIdLepVeto{}".
format(jetName)
231 setattr(proc, tightJetIdLepVeto, proc.tightJetIdLepVeto.clone(
233 filterParams=proc.tightJetIdLepVeto.filterParams.clone(
234 version =
"SUMMER18{}".
format(
"PUPPI" if isPUPPIJet
else "")
238 run2_jme_2016.toModify(getattr(proc, tightJetId) .filterParams, version =
"WINTER16" )
239 run2_jme_2016.toModify(getattr(proc, tightJetIdLepVeto) .filterParams, version =
"WINTER16" )
240 run2_jme_2017.toModify(getattr(proc, tightJetId) .filterParams, version =
"WINTER17{}".
format(
"PUPPI" if isPUPPIJet
else ""))
241 run2_jme_2017.toModify(getattr(proc, tightJetIdLepVeto) .filterParams, version =
"WINTER17{}".
format(
"PUPPI" if isPUPPIJet
else ""))
246 patJetWithUserData =
"{}WithUserData".
format(jetSrc)
247 getattr(proc, patJetWithUserData).userInts.tightId = cms.InputTag(tightJetId)
248 getattr(proc, patJetWithUserData).userInts.tightIdLepVeto = cms.InputTag(tightJetIdLepVeto)
249 run2_jme_2016.toModify(getattr(proc, patJetWithUserData).userInts, looseId = cms.InputTag(looseJetId))
254 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")
255 run2_jme_2016.toModify(getattr(proc, jetTableName).variables, jetId =
Var(
"userInt('tightIdLepVeto')*4+userInt('tightId')*2+userInt('looseId')",int, doc=
"Jet ID flags bit1 is loose, bit2 is tight, bit3 is tightLepVeto"))
257 getattr(proc,jetSequenceName).
insert(getattr(proc,jetSequenceName).
index(getattr(proc, jetSrc))+1, getattr(proc, tightJetId))
258 getattr(proc,jetSequenceName).
insert(getattr(proc,jetSequenceName).
index(getattr(proc, tightJetId))+1, getattr(proc, tightJetIdLepVeto))
260 setattr(proc,
"_"+jetSequenceName+
"_2016", getattr(proc,jetSequenceName).
copy())
261 getattr(proc,
"_"+jetSequenceName+
"_2016").
insert(getattr(proc,
"_"+jetSequenceName+
"_2016").
index(getattr(proc, tightJetId)), getattr(proc, looseJetId))
262 run2_jme_2016.toReplaceWith(getattr(proc,jetSequenceName), getattr(proc,
"_"+jetSequenceName+
"_2016"))
268 Setup modules to calculate pileup jet ID input variables for PF jet
274 puJetIdVarsCalculator =
"puJetIdCalculator{}".
format(jetName)
275 setattr(proc, puJetIdVarsCalculator, pileupJetIdCalculator.clone(
277 vertexes =
"offlineSlimmedPrimaryVertices",
278 inputIsCorrected =
True,
280 usePuppi =
True if "Puppi" in jetName
else False
283 getattr(proc,jetSequenceName).
insert(getattr(proc,jetSequenceName).
index(getattr(proc, jetSrc))+1, getattr(proc, puJetIdVarsCalculator))
288 puJetIDVar =
"puJetIDVar{}".
format(jetName)
289 setattr(proc, puJetIDVar, cms.EDProducer(
"PileupJetIDVarProducer",
290 srcJet = cms.InputTag(jetSrc),
291 srcPileupJetId = cms.InputTag(puJetIdVarsCalculator)
294 getattr(proc,jetSequenceName).
insert(getattr(proc,jetSequenceName).
index(getattr(proc, puJetIdVarsCalculator))+1, getattr(proc, puJetIDVar))
299 patJetWithUserData =
"{}WithUserData".
format(jetSrc)
300 getattr(proc,patJetWithUserData).userFloats.puId_dR2Mean = cms.InputTag(
"{}:dR2Mean".
format(puJetIDVar))
301 getattr(proc,patJetWithUserData).userFloats.puId_majW = cms.InputTag(
"{}:majW".
format(puJetIDVar))
302 getattr(proc,patJetWithUserData).userFloats.puId_minW = cms.InputTag(
"{}:minW".
format(puJetIDVar))
303 getattr(proc,patJetWithUserData).userFloats.puId_frac01 = cms.InputTag(
"{}:frac01".
format(puJetIDVar))
304 getattr(proc,patJetWithUserData).userFloats.puId_frac02 = cms.InputTag(
"{}:frac02".
format(puJetIDVar))
305 getattr(proc,patJetWithUserData).userFloats.puId_frac03 = cms.InputTag(
"{}:frac03".
format(puJetIDVar))
306 getattr(proc,patJetWithUserData).userFloats.puId_frac04 = cms.InputTag(
"{}:frac04".
format(puJetIDVar))
307 getattr(proc,patJetWithUserData).userFloats.puId_ptD = cms.InputTag(
"{}:ptD".
format(puJetIDVar))
308 getattr(proc,patJetWithUserData).userFloats.puId_beta = cms.InputTag(
"{}:beta".
format(puJetIDVar))
309 getattr(proc,patJetWithUserData).userFloats.puId_pull = cms.InputTag(
"{}:pull".
format(puJetIDVar))
310 getattr(proc,patJetWithUserData).userFloats.puId_jetR = cms.InputTag(
"{}:jetR".
format(puJetIDVar))
311 getattr(proc,patJetWithUserData).userFloats.puId_jetRchg = cms.InputTag(
"{}:jetRchg".
format(puJetIDVar))
312 getattr(proc,patJetWithUserData).userInts.puId_nCharged = cms.InputTag(
"{}:nCharged".
format(puJetIDVar))
317 getattr(proc,jetTableName).variables.puId_dR2Mean = PUIDVARS.puId_dR2Mean
318 getattr(proc,jetTableName).variables.puId_majW = PUIDVARS.puId_majW
319 getattr(proc,jetTableName).variables.puId_minW = PUIDVARS.puId_minW
320 getattr(proc,jetTableName).variables.puId_frac01 = PUIDVARS.puId_frac01
321 getattr(proc,jetTableName).variables.puId_frac02 = PUIDVARS.puId_frac02
322 getattr(proc,jetTableName).variables.puId_frac03 = PUIDVARS.puId_frac03
323 getattr(proc,jetTableName).variables.puId_frac04 = PUIDVARS.puId_frac04
324 getattr(proc,jetTableName).variables.puId_ptD = PUIDVARS.puId_ptD
325 getattr(proc,jetTableName).variables.puId_beta = PUIDVARS.puId_beta
326 getattr(proc,jetTableName).variables.puId_pull = PUIDVARS.puId_pull
327 getattr(proc,jetTableName).variables.puId_jetR = PUIDVARS.puId_jetR
328 getattr(proc,jetTableName).variables.puId_jetRchg = PUIDVARS.puId_jetRchg
329 getattr(proc,jetTableName).variables.puId_nCharged = PUIDVARS.puId_nCharged
333 def AddQGLTaggerVars(proc, jetName="", jetSrc="", jetTableName="", jetSequenceName="", calculateQGLVars=False):
335 Schedule the QGTagger module to calculate input variables to the QG likelihood
338 QGLTagger=
"qgtagger{}".
format(jetName)
339 patJetWithUserData=
"{}WithUserData".
format(jetSrc)
342 setattr(proc, QGLTagger, qgtagger.clone(
350 getattr(proc,patJetWithUserData).userFloats.qgl_axis2 = cms.InputTag(QGLTagger+
":axis2")
351 getattr(proc,patJetWithUserData).userFloats.qgl_ptD = cms.InputTag(QGLTagger+
":ptD")
352 getattr(proc,patJetWithUserData).userInts.qgl_mult = cms.InputTag(QGLTagger+
":mult")
357 getattr(proc,jetTableName).variables.qgl_axis2 = QGLVARS.qgl_axis2
358 getattr(proc,jetTableName).variables.qgl_ptD = QGLVARS.qgl_ptD
359 getattr(proc,jetTableName).variables.qgl_mult = QGLVARS.qgl_mult
362 getattr(proc,jetSequenceName).
insert(getattr(proc,jetSequenceName).
index(getattr(proc, jetSrc))+1, getattr(proc, QGLTagger))
368 Store b-tagging scores from various algortihm
371 getattr(proc, jetTableName).variables.btagDeepB = jetTable.variables.btagDeepB
372 getattr(proc, jetTableName).variables.btagCSVV2 = jetTable.variables.btagCSVV2
373 getattr(proc, jetTableName).variables.btagDeepCvL = jetTable.variables.btagDeepCvL
374 getattr(proc, jetTableName).variables.btagDeepFlavB = jetTable.variables.btagDeepFlavB
375 getattr(proc, jetTableName).variables.btagDeepFlavCvL = jetTable.variables.btagDeepFlavCvL
381 Store DeepJet raw score in jetTable for gluon and light quark
384 getattr(proc, jetTableName).variables.btagDeepFlavG = DEEPJETVARS.btagDeepFlavG
385 getattr(proc, jetTableName).variables.btagDeepFlavUDS = DEEPJETVARS.btagDeepFlavUDS
391 Store ParticleNetAK4 scores in jetTable
394 getattr(proc, jetTableName).variables.particleNetAK4_B = PARTICLENETAK4VARS.particleNetAK4_B
395 getattr(proc, jetTableName).variables.particleNetAK4_CvsL = PARTICLENETAK4VARS.particleNetAK4_CvsL
396 getattr(proc, jetTableName).variables.particleNetAK4_CvsB = PARTICLENETAK4VARS.particleNetAK4_CvsB
397 getattr(proc, jetTableName).variables.particleNetAK4_QvsG = PARTICLENETAK4VARS.particleNetAK4_QvsG
398 getattr(proc, jetTableName).variables.particleNetAK4_puIdDisc = PARTICLENETAK4VARS.particleNetAK4_puIdDisc
404 Add patJet into custom nanoAOD
407 jetName = recoJetInfo.jetUpper
408 payload = recoJetInfo.jetCorrPayload
409 doPF = recoJetInfo.doPF
410 doCalo = recoJetInfo.doCalo
412 if recoJetInfo.inputCollection !=
"":
413 patJetFinalColl = recoJetInfo.inputCollection
415 patJetFinalColl =
"selectedUpdatedPatJets{}Final".
format(jetName)
418 patJetFinalColl =
"selectedPatJets{}".
format(jetName)
420 nanoInfoForJet = nanoInfo_recojets[recoJetInfo.jet]
421 jetTablePrefix = nanoInfoForJet[
"name"]
422 jetTableDoc = nanoInfoForJet[
"doc"]
423 ptcut = nanoInfoForJet[
"ptcut"]
if "ptcut" in nanoInfoForJet
else ""
424 doPUIDVar = nanoInfoForJet[
"doPUIDVar"]
if "doPUIDVar" in nanoInfoForJet
else False
425 doQGL = nanoInfoForJet[
"doQGL"]
if "doQGL" in nanoInfoForJet
else False
426 doBTag = nanoInfoForJet[
"doBTag"]
if "doBTag" in nanoInfoForJet
else False
429 jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF, doCalo,
430 ptcut=ptcut, doPUIDVar=doPUIDVar, doQGL=doQGL, doBTag=doBTag, runOnMC=runOnMC
435 def SavePatJets(proc, jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc,
436 doPF, doCalo, ptcut="", doPUIDVar=False, doQGL=False, doBTag=False, runOnMC=False):
438 Schedule modules for a given patJet collection and save its variables into custom NanoAOD
444 jetCorrFactors =
"jetCorrFactorsNano{}".
format(jetName)
445 setattr(proc, jetCorrFactors, jetCorrFactorsNano.clone(
446 src = patJetFinalColl,
454 srcJets =
"updatedJets{}".
format(jetName)
455 setattr(proc, srcJets, updatedJets.clone(
456 jetSource = patJetFinalColl,
457 jetCorrFactorsSource=[jetCorrFactors],
464 srcJetsWithUserData =
"updatedJets{}WithUserData".
format(jetName)
465 setattr(proc, srcJetsWithUserData, cms.EDProducer(
"PATJetUserDataEmbedder",
466 src = cms.InputTag(srcJets),
467 userFloats = cms.PSet(),
468 userInts = cms.PSet(),
475 finalJetsForTable =
"finalJets{}".
format(jetName)
476 setattr(proc, finalJetsForTable, finalJets.clone(
477 src = srcJetsWithUserData,
485 tableContent = PFJETVARS
487 tableContent = CALOJETVARS
489 jetTable =
"jet{}Table".
format(jetName)
490 setattr(proc,jetTable, cms.EDProducer(
"SimpleCandidateFlatTableProducer",
491 src = cms.InputTag(finalJetsForTable),
492 cut = cms.string(
""),
493 name = cms.string(jetTablePrefix),
494 doc = cms.string(jetTableDoc),
495 singleton = cms.bool(
False),
496 extension = cms.bool(
False),
497 variables = cms.PSet(tableContent)
500 getattr(proc,jetTable).variables.pt.precision=10
505 jetMCTable =
"jet{}MCTable".
format(jetName)
506 setattr(proc, jetMCTable, cms.EDProducer(
"SimpleCandidateFlatTableProducer",
507 src = cms.InputTag(finalJetsForTable),
508 cut = getattr(proc,jetTable).cut,
509 name = cms.string(jetTablePrefix),
510 singleton = cms.bool(
False),
511 extension = cms.bool(
True),
512 variables = cms.PSet(
513 partonFlavour =
Var(
"partonFlavour()", int, doc=
"flavour from parton matching"),
514 hadronFlavour =
Var(
"hadronFlavour()", int, doc=
"flavour from hadron ghost clustering"),
515 genJetIdx =
Var(
"?genJetFwdRef().backRef().isNonnull()?genJetFwdRef().backRef().key():-1", int, doc=
"index of matched gen jet"),
523 jetSequenceName =
"jet{}Sequence".
format(jetName)
524 setattr(proc, jetSequenceName, cms.Sequence(
525 getattr(proc,jetCorrFactors)+
526 getattr(proc,srcJets)+
527 getattr(proc,srcJetsWithUserData)+
528 getattr(proc,finalJetsForTable)
535 jetTableSequenceName =
"jet{}TablesSequence".
format(jetName)
536 setattr(proc, jetTableSequenceName, cms.Sequence(getattr(proc,jetTable)))
538 jetTableSequenceMCName =
"jet{}MCTablesSequence".
format(jetName)
539 setattr(proc, jetTableSequenceMCName, cms.Sequence(getattr(proc,jetMCTable)))
542 proc.nanoSequenceMC += getattr(proc,jetSequenceName)
543 proc.nanoSequenceMC += getattr(proc,jetTableSequenceName)
544 proc.nanoSequenceMC += getattr(proc,jetTableSequenceMCName)
546 proc.nanoSequence += getattr(proc,jetSequenceName)
547 proc.nanoSequence += getattr(proc,jetTableSequenceName)
553 proc =
AddJetID(proc, jetName=jetName, jetSrc=srcJets, jetTableName=jetTable, jetSequenceName=jetSequenceName)
555 proc =
AddPileUpJetIDVars(proc, jetName=jetName, jetSrc=srcJets, jetTableName=jetTable, jetSequenceName=jetSequenceName)
557 proc =
AddQGLTaggerVars(proc,jetName=jetName, jetSrc=srcJets, jetTableName=jetTable, jetSequenceName=jetSequenceName, calculateQGLVars=
True)
572 Recluster AK4 CHS jets and replace slimmedJets
573 that is used as default to save AK4 CHS jets
576 print(
"custom_jme_cff::ReclusterAK4CHSJets: Recluster AK4 PF CHS jets")
583 "inputCollection" :
"",
584 "genJetsCollection":
"AK4GenJetsNoNu",
585 "bTagDiscriminators": bTagDiscriminatorsForAK4
587 recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
589 jetName = recoJetInfo.jetUpper
590 patJetFinalColl =
"selectedUpdatedPatJets{}Final".
format(jetName)
596 proc.jetCorrFactorsNano.src=patJetFinalColl
597 proc.updatedJets.jetSource=patJetFinalColl
602 proc.finalJets.cut =
"pt > 2"
603 proc.simpleCleanerTable.jetSel =
"pt > 10"
608 proc.jetTable.variables.hfHEF = PFJETVARS.hfHEF
609 proc.jetTable.variables.hfEmEF = PFJETVARS.hfEmEF
610 proc.jetTable.variables.nConstChHads = PFJETVARS.nConstChHads
611 proc.jetTable.variables.nConstNeuHads = PFJETVARS.nConstNeuHads
612 proc.jetTable.variables.nConstHFHads = PFJETVARS.nConstHFHads
613 proc.jetTable.variables.nConstHFEMs = PFJETVARS.nConstHFEMs
614 proc.jetTable.variables.nConstMuons = PFJETVARS.nConstMuons
615 proc.jetTable.variables.nConstElecs = PFJETVARS.nConstElecs
616 proc.jetTable.variables.nConstPhotons = PFJETVARS.nConstPhotons
618 proc.jetTable.doc = cms.string(
"AK4 PF CHS Jets with JECs applied, after basic selection (pt > 2)")
623 pileupJetId80X =
"pileupJetId80X"
624 setattr(proc, pileupJetId80X, pileupJetId.clone(
626 algos=cms.VPSet(_chsalgos_81x),
627 inputIsCorrected=
True,
629 vertexes=
"offlineSlimmedPrimaryVertices"
632 proc.jetSequence.insert(proc.jetSequence.index(proc.pileupJetId94X), getattr(proc, pileupJetId80X))
634 proc.updatedJetsWithUserData.userInts.puId80XfullId = cms.InputTag(
'pileupJetId80X:fullId')
635 run2_jme_2016.toModify(proc.updatedJetsWithUserData.userFloats, puId80XDisc = cms.InputTag(
"pileupJetId80X:fullDiscriminant"))
637 proc.jetTable.variables.puId =
Var(
"userInt('puId80XfullId')", int, doc=
"Pilup ID flags with 80X (2016) training")
638 run2_jme_2016.toModify(proc.jetTable.variables, puIdDisc =
Var(
"userFloat('puId80XDisc')",float,doc=
"Pilup ID discriminant with 80X (2016) training",precision=10))
645 jetSrc=
"updatedJets",
646 jetTableName=
"jetTable",
647 jetSequenceName=
"jetSequence"
653 proc.updatedJetsWithUserData.userFloats.qgl_axis2 = cms.InputTag(
"qgtagger:axis2")
654 proc.updatedJetsWithUserData.userFloats.qgl_ptD = cms.InputTag(
"qgtagger:ptD")
655 proc.updatedJetsWithUserData.userInts.qgl_mult = cms.InputTag(
"qgtagger:mult")
659 proc.jetTable.variables.qgl_axis2 = QGLVARS.qgl_axis2
660 proc.jetTable.variables.qgl_ptD = QGLVARS.qgl_ptD
661 proc.jetTable.variables.qgl_mult = QGLVARS.qgl_mult
665 proc.jetTable.variables.btagDeepFlavG = DEEPJETVARS.btagDeepFlavG
666 proc.jetTable.variables.btagDeepFlavUDS = DEEPJETVARS.btagDeepFlavUDS
670 proc.jetTable.variables.particleNetAK4_B = PARTICLENETAK4VARS.particleNetAK4_B
671 proc.jetTable.variables.particleNetAK4_CvsL = PARTICLENETAK4VARS.particleNetAK4_CvsL
672 proc.jetTable.variables.particleNetAK4_CvsB = PARTICLENETAK4VARS.particleNetAK4_CvsB
673 proc.jetTable.variables.particleNetAK4_QvsG = PARTICLENETAK4VARS.particleNetAK4_QvsG
674 proc.jetTable.variables.particleNetAK4_puIdDisc = PARTICLENETAK4VARS.particleNetAK4_puIdDisc
678 hfJetShowerShapeforCustomNanoAOD =
"hfJetShowerShapeforCustomNanoAOD"
679 setattr(proc, hfJetShowerShapeforCustomNanoAOD, hfJetShowerShapeforNanoAOD.clone(jets=
"updatedJets",vertices=
"offlineSlimmedPrimaryVertices") )
680 proc.jetSequence.insert(proc.jetSequence.index(proc.updatedJetsWithUserData), getattr(proc, hfJetShowerShapeforCustomNanoAOD))
681 proc.updatedJetsWithUserData.userFloats.hfsigmaEtaEta = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:sigmaEtaEta')
682 proc.updatedJetsWithUserData.userFloats.hfsigmaPhiPhi = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:sigmaPhiPhi')
683 proc.updatedJetsWithUserData.userInts.hfcentralEtaStripSize = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:centralEtaStripSize')
684 proc.updatedJetsWithUserData.userInts.hfadjacentEtaStripsSize = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:adjacentEtaStripsSize')
685 proc.jetTable.variables.hfsigmaEtaEta =
Var(
"userFloat('hfsigmaEtaEta')",float,doc=
"sigmaEtaEta for HF jets (noise discriminating variable)",precision=10)
686 proc.jetTable.variables.hfsigmaPhiPhi =
Var(
"userFloat('hfsigmaPhiPhi')",float,doc=
"sigmaPhiPhi for HF jets (noise discriminating variable)",precision=10)
687 proc.jetTable.variables.hfcentralEtaStripSize =
Var(
"userInt('hfcentralEtaStripSize')", int, doc=
"eta size of the central tower strip in HF (noise discriminating variable) ")
688 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) ")
694 Add more variables for AK8 PFPUPPI jets
701 proc.fatJetTable.variables.chHEF =
Var(
"?isPFJet()?chargedHadronEnergyFraction():-1", float, doc=
"charged Hadron Energy Fraction", precision = 6)
702 proc.fatJetTable.variables.neHEF =
Var(
"?isPFJet()?neutralHadronEnergyFraction():-1", float, doc=
"neutral Hadron Energy Fraction", precision = 6)
703 proc.fatJetTable.variables.chEmEF =
Var(
"?isPFJet()?chargedEmEnergyFraction():-1", float, doc=
"charged Electromagnetic Energy Fraction", precision = 6)
704 proc.fatJetTable.variables.neEmEF =
Var(
"?isPFJet()?neutralEmEnergyFraction():-1", float, doc=
"neutral Electromagnetic Energy Fraction", precision = 6)
705 proc.fatJetTable.variables.muEF =
Var(
"?isPFJet()?muonEnergyFraction():-1", float, doc=
"muon Energy Fraction", precision = 6)
706 proc.fatJetTable.variables.hfHEF =
Var(
"?isPFJet()?HFHadronEnergyFraction():-1", float, doc=
"energy fraction in forward hadronic calorimeter", precision = 6)
707 proc.fatJetTable.variables.hfEmEF =
Var(
"?isPFJet()?HFEMEnergyFraction():-1", float, doc=
"energy fraction in forward EM calorimeter", precision = 6)
708 proc.fatJetTable.variables.nConstChHads =
Var(
"?isPFJet()?chargedHadronMultiplicity():-1",int, doc=
"number of charged hadrons in the jet")
709 proc.fatJetTable.variables.nConstNeuHads =
Var(
"?isPFJet()?neutralHadronMultiplicity():-1",int, doc=
"number of neutral hadrons in the jet")
710 proc.fatJetTable.variables.nConstHFHads =
Var(
"?isPFJet()?HFHadronMultiplicity():-1", int, doc=
"number of HF Hadrons in the jet")
711 proc.fatJetTable.variables.nConstHFEMs =
Var(
"?isPFJet()?HFEMMultiplicity():-1", int, doc=
"number of HF EMs in the jet")
712 proc.fatJetTable.variables.nConstMuons =
Var(
"?isPFJet()?muonMultiplicity():-1", int, doc=
"number of muons in the jet")
713 proc.fatJetTable.variables.nConstElecs =
Var(
"?isPFJet()?electronMultiplicity():-1", int, doc=
"number of electrons in the jet")
714 proc.fatJetTable.variables.nConstPhotons =
Var(
"?isPFJet()?photonMultiplicity():-1", int, doc=
"number of photons in the jet")
726 Add genJet into custom nanoAOD
729 genJetName = genJetInfo.jetUpper
730 genJetAlgo = genJetInfo.jetAlgo
731 genJetSize = genJetInfo.jetSize
732 genJetSizeNr = genJetInfo.jetSizeNr
733 genJetFinalColl =
"{}{}{}".
format(genJetAlgo.upper(), genJetSize,
"GenJetsNoNu")
734 genJetTablePrefix = nanoInfo_genjets[genJetInfo.jet][
"name"]
735 genJetTableDoc = nanoInfo_genjets[genJetInfo.jet][
"doc"]
737 SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=
False)
741 def SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=False):
743 Schedule modules for a given genJet collection and save its variables into custom NanoAOD
746 genJetTableThisJet =
"jet{}Table".
format(genJetName)
747 setattr(proc, genJetTableThisJet, genJetTable.clone(
748 src = genJetFinalColl,
750 name = genJetTablePrefix,
751 doc = genJetTableDoc,
752 variables = GENJETVARS
756 genJetFlavourAssociationThisJet =
"genJet{}FlavourAssociation".
format(genJetName)
757 setattr(proc, genJetFlavourAssociationThisJet, genJetFlavourAssociation.clone(
758 jets = getattr(proc,genJetTableThisJet).src,
759 jetAlgorithm = supportedJetAlgos[genJetAlgo],
760 rParam = genJetSizeNr,
764 genJetFlavourTableThisJet =
"genJet{}FlavourTable".
format(genJetName)
765 setattr(proc, genJetFlavourTableThisJet, genJetFlavourTable.clone(
766 name = getattr(proc,genJetTableThisJet).name,
767 src = getattr(proc,genJetTableThisJet).src,
768 cut = getattr(proc,genJetTableThisJet).cut,
769 jetFlavourInfos = genJetFlavourAssociationThisJet,
773 genJetSequenceName =
"genJet{}Sequence".
format(genJetName)
774 setattr(proc, genJetSequenceName, cms.Sequence(
775 getattr(proc,genJetTableThisJet)+
776 getattr(proc,genJetFlavourAssociationThisJet)+
777 getattr(proc,genJetFlavourTableThisJet)
780 proc.nanoSequenceMC.insert(proc.nanoSequenceMC.index(proc.jetMC)+1, getattr(proc,genJetSequenceName))
786 Recluster AK4 Gen jets and replace
787 slimmedGenJets that is used as default
788 to save AK4 Gen jets in NanoAODs.
790 print(
"custom_jme_cff::ReclusterAK4GenJets: Recluster AK4 Gen jets")
798 genJetInfo = genJA.addGenJetCollection(proc, **cfg)
800 genJetName = genJetInfo.jetUpper
801 genJetAlgo = genJetInfo.jetAlgo
802 genJetSize = genJetInfo.jetSize
803 genJetSizeNr = genJetInfo.jetSizeNr
804 selectedPatGenJets =
"{}{}{}".
format(genJetAlgo.upper(), genJetSize,
"GenJetsNoNu")
810 proc.genJetTable.src = selectedPatGenJets
811 proc.genJetTable.cut =
"pt > 1"
812 proc.genJetTable.doc =
"AK4 Gen jets (made with visible genparticles)"
814 genJetFlavourAssociationThisJet =
"genJet{}FlavourAssociation".
format(genJetName)
815 setattr(proc, genJetFlavourAssociationThisJet, genJetFlavourAssociation.clone(
816 jets = proc.genJetTable.src,
817 jetAlgorithm = supportedJetAlgos[genJetAlgo],
818 rParam = genJetSizeNr,
821 proc.jetMC.insert(proc.jetMC.index(proc.genJetFlavourTable), getattr(proc, genJetFlavourAssociationThisJet))
825 proc.genJetTable.variables.nConstituents = GENJETVARS.nConstituents
829 proc.genJetAK8Table.variables.nConstituents = GENJETVARS.nConstituents
839 Remove default pt cuts for all jets set in jets_cff.py
842 proc.finalJets.cut =
""
843 proc.finalJetsAK8.cut =
""
844 proc.genJetTable.cut =
""
845 proc.genJetFlavourTable.cut =
""
846 proc.genJetAK8Table.cut =
""
847 proc.genJetAK8FlavourTable.cut =
""
868 genJA = GenJetAdder()
882 for jetConfig
in config_genjets:
883 cfg = { k : v
for k, v
in jetConfig.items()
if k !=
"enabled"}
884 genJetInfo = genJA.addGenJetCollection(process, **cfg)
892 recoJA = RecoJetAdder(runOnMC=runOnMC)
904 for jetConfig
in config_recojets:
905 cfg = { k : v
for k, v
in jetConfig.items()
if k !=
"enabled"}
906 recoJetInfo = recoJA.addRecoJetCollection(process, **cfg)
913 process.puTable.savePtHatMax =
True