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
9 from PhysicsTools.PatAlgos.tools.jetCollectionTools
import GenJetAdder, RecoJetAdder
41 config_genjets =
list(
filter(
lambda k: k[
'enabled'], config_genjets))
63 "name" :
"GenJetAK10",
80 "inputCollection" :
"slimmedJetsPuppi",
81 "genJetsCollection":
"slimmedGenJets",
86 "inputCollection" :
"slimmedCaloJets",
87 "genJetsCollection":
"slimmedGenJets",
92 "inputCollection" :
"",
93 "genJetsCollection":
"slimmedGenJets",
98 "inputCollection" :
"",
99 "genJetsCollection":
"slimmedGenJetsAK8",
104 "inputCollection" :
"",
105 "genJetsCollection":
"slimmedGenJetsAK8",
110 "inputCollection" :
"",
111 "genJetsCollection":
"AK6GenJetsNoNu",
116 "inputCollection" :
"",
117 "genJetsCollection":
"AK10GenJetsNoNu",
120 config_recojets =
list(
filter(
lambda k: k[
'enabled'], config_recojets))
124 nanoInfo_recojets = {
127 "doc" :
"AK4PFPUPPI jets",
131 "doc" :
"AK4Calo jets",
135 "doc" :
"AK4PF jets",
139 "doc" :
"AK8PF jets",
142 "name" :
"FatJetCHS",
143 "doc" :
"AK8PFCHS jets",
147 "doc" :
"AK6PF jets",
150 "name" :
"FatJetAK10PF",
151 "doc" :
"AK10PF jets",
159 recojetNameInNano = [
"Jet",
"FatJet" ]
164 genjetNameInNano = [
"GenJet",
"GenJetAK8" ]
166 JETVARS = cms.PSet(P4Vars,
167 HFHEF =
Var(
"HFHadronEnergyFraction()", float, doc =
"energy fraction in forward hadronic calorimeter", precision = 6),
168 HFEMEF =
Var(
"HFEMEnergyFraction()", float, doc =
"energy fraction in forward EM calorimeter", precision = 6),
169 area = jetTable.variables.area,
170 chHEF = jetTable.variables.chHEF,
171 neHEF = jetTable.variables.neHEF,
172 chEmEF = jetTable.variables.chEmEF,
173 neEmEF = jetTable.variables.neEmEF,
174 muEF = jetTable.variables.muEF,
175 rawFactor = jetTable.variables.rawFactor,
176 jetId = jetTable.variables.jetId,
177 chFPV0EF = jetTable.variables.chFPV0EF,
178 chFPV1EF = jetTable.variables.chFPV1EF,
179 chFPV2EF = jetTable.variables.chFPV2EF,
180 chFPV3EF = jetTable.variables.chFPV3EF,
190 Tool to store gen jet variables in NanoAOD for customized
202 resultSequence = cms.Sequence()
203 for idx, task
in enumerate(tasks):
205 resultSequence = cms.Sequence(getattr(proc, task))
207 resultSequence.insert(idx, getattr(proc, task))
208 return resultSequence
213 print(
"custom_jme_cff::TableGenJetAdder::addTable: Adding Table for GenJet Collection: {}".
format(genJetInfo.jet))
215 name = nanoInfo_genjets[genJetInfo.jet][
"name"]
216 doc = nanoInfo_genjets[genJetInfo.jet][
"doc"]
218 if name
in genjetNameInNano:
219 raise RuntimeError(
'GenJet collection name (%s) taken in NanoAOD for %s' %(name, genJetInfo.jet))
224 table =
"{}Table".
format(genJetInfo.jetTagName)
225 genJetsCollection =
"{}{}{}".
format(genJetInfo.jetAlgo.upper(), genJetInfo.jetSize,
'GenJetsNoNu')
226 setattr(proc, table, cms.EDProducer(
"SimpleCandidateFlatTableProducer",
227 src = cms.InputTag(genJetsCollection),
228 cut = cms.string(
""),
229 name = cms.string(name),
230 doc = cms.string(
'{} (generator level)'.
format(doc)),
231 singleton = cms.bool(
False),
232 extension = cms.bool(
False),
233 variables = cms.PSet(P4Vars,
234 area = jetTable.variables.area,
238 currentTasks.append(table)
243 genFlavour =
"{}Flavour".
format(genJetInfo.jetTagName)
244 genFlavourTable =
"{}Table".
format(genFlavour)
245 if genFlavourTable
in self.
main:
246 raise ValueError(
"Step '%s' already implemented" % genFlavourTable)
247 setattr(proc, genFlavourTable, cms.EDProducer(
"GenJetFlavourTableProducer",
248 name = cms.string(name),
249 src = cms.InputTag(genJetsCollection),
250 cut = cms.string(
""),
251 deltaR = cms.double(0.1),
252 jetFlavourInfos = cms.InputTag(genFlavour),
255 currentTasks.append(genFlavourTable)
256 self.
main.extend(currentTasks)
265 Tool to store reco jet variables in NanoAOD for customized
266 reco jet collections.
274 resultSequence = cms.Sequence()
275 for idx, task
in enumerate(tasks):
277 resultSequence = cms.Sequence(getattr(proc, task))
279 resultSequence.insert(idx, getattr(proc, task))
280 return resultSequence
286 print(
"custom_jme_cff::TableRecoJetAdder::addTable: Adding Table for Reco Jet Collection: {}".
format(recoJetInfo.jet))
288 name = nanoInfo_recojets[recoJetInfo.jet][
"name"]
289 doc = nanoInfo_recojets[recoJetInfo.jet][
"doc"]
291 if name
in recojetNameInNano:
292 raise RuntimeError(
'RecoJet collection name (%s) taken in NanoAOD for %s' %(name, recoJetInfo.jet))
294 table =
"{}Table".
format(recoJetInfo.jetTagName)
295 if recoJetInfo.skipUserData:
296 if recoJetInfo.doCalo:
297 tableContents = cms.PSet(
299 area = jetTable.variables.area,
300 rawFactor = jetTable.variables.rawFactor,
301 emf =
Var(
"emEnergyFraction()", float, doc =
"electromagnetic energy fraction", precision = 10),
304 tableContents = cms.PSet(
306 area = jetTable.variables.area,
307 rawFactor = jetTable.variables.rawFactor,
310 tableContents = JETVARS.clone()
312 updatedJets =
"updatedJets{}".
format(recoJetInfo.jetTagName)
313 setattr(proc, table, cms.EDProducer(
"SimpleCandidateFlatTableProducer",
314 src = cms.InputTag(updatedJets),
315 cut = cms.string(
""),
316 name = cms.string(name),
317 doc = cms.string(doc),
318 singleton = cms.bool(
False),
319 extension = cms.bool(
False),
320 variables = tableContents,
323 currentTasks.append(table)
325 self.
main.extend(currentTasks)
329 print(
"custom_jme_cff::AddPileUpJetIDVars: Recalculate pile-up jet ID variables and save them")
335 proc.pileupJetIdCalculatorAK4PFCHS = pileupJetIdCalculator.clone(
336 jets =
"updatedJets",
337 vertexes =
"offlineSlimmedPrimaryVertices",
338 inputIsCorrected =
True,
341 proc.jetSequence.insert(proc.jetSequence.index(proc.updatedJets)+1, proc.pileupJetIdCalculatorAK4PFCHS)
346 proc.puJetVarAK4PFCHS = cms.EDProducer(
"PileupJetIDVarProducer",
347 srcJet = cms.InputTag(
"updatedJets"),
348 srcPileupJetId = cms.InputTag(
"pileupJetIdCalculatorAK4PFCHS")
350 proc.jetSequence.insert(proc.jetSequence.index(proc.jercVars)+1, proc.puJetVarAK4PFCHS)
355 proc.updatedJetsWithUserData.userFloats.dR2Mean = cms.InputTag(
"puJetVarAK4PFCHS:dR2Mean")
356 proc.updatedJetsWithUserData.userFloats.majW = cms.InputTag(
"puJetVarAK4PFCHS:majW")
357 proc.updatedJetsWithUserData.userFloats.minW = cms.InputTag(
"puJetVarAK4PFCHS:minW")
358 proc.updatedJetsWithUserData.userFloats.frac01 = cms.InputTag(
"puJetVarAK4PFCHS:frac01")
359 proc.updatedJetsWithUserData.userFloats.frac02 = cms.InputTag(
"puJetVarAK4PFCHS:frac02")
360 proc.updatedJetsWithUserData.userFloats.frac03 = cms.InputTag(
"puJetVarAK4PFCHS:frac03")
361 proc.updatedJetsWithUserData.userFloats.frac04 = cms.InputTag(
"puJetVarAK4PFCHS:frac04")
362 proc.updatedJetsWithUserData.userFloats.ptD = cms.InputTag(
"puJetVarAK4PFCHS:ptD")
363 proc.updatedJetsWithUserData.userFloats.beta = cms.InputTag(
"puJetVarAK4PFCHS:beta")
364 proc.updatedJetsWithUserData.userFloats.pull = cms.InputTag(
"puJetVarAK4PFCHS:pull")
365 proc.updatedJetsWithUserData.userFloats.jetR = cms.InputTag(
"puJetVarAK4PFCHS:jetR")
366 proc.updatedJetsWithUserData.userFloats.jetRchg = cms.InputTag(
"puJetVarAK4PFCHS:jetRchg")
367 proc.updatedJetsWithUserData.userInts.nCharged = cms.InputTag(
"puJetVarAK4PFCHS:nCharged")
372 proc.jetTable.variables.dR2Mean =
Var(
"userFloat('dR2Mean')", float, doc=
"pT^2-weighted average square distance of jet constituents from the jet axis", precision= 6)
373 proc.jetTable.variables.majW =
Var(
"userFloat('majW')", float, doc=
"major axis of jet ellipsoid in eta-phi plane", precision= 6)
374 proc.jetTable.variables.minW =
Var(
"userFloat('minW')", float, doc=
"minor axis of jet ellipsoid in eta-phi plane", precision= 6)
375 proc.jetTable.variables.frac01 =
Var(
"userFloat('frac01')", float, doc=
"frac of constituents' pT contained within dR<0.1", precision= 6)
376 proc.jetTable.variables.frac02 =
Var(
"userFloat('frac02')", float, doc=
"frac of constituents' pT contained within 0.1<dR<0.2", precision= 6)
377 proc.jetTable.variables.frac03 =
Var(
"userFloat('frac03')", float, doc=
"frac of constituents' pT contained within 0.2<dR<0.3", precision= 6)
378 proc.jetTable.variables.frac04 =
Var(
"userFloat('frac04')", float, doc=
"frac of constituents' pT contained within 0.3<dR<0.4", precision= 6)
379 proc.jetTable.variables.ptD =
Var(
"userFloat('ptD')", float, doc=
"pT-weighted average pT of constituents", precision= 6)
380 proc.jetTable.variables.beta =
Var(
"userFloat('beta')", float, doc=
"fraction of pT of charged constituents associated to PV", precision= 6)
381 proc.jetTable.variables.pull =
Var(
"userFloat('pull')", float, doc=
"magnitude of pull vector", precision= 6)
382 proc.jetTable.variables.jetR =
Var(
"userFloat('jetR')", float, doc=
"fraction of jet pT carried by the leading constituent", precision= 6)
383 proc.jetTable.variables.jetRchg =
Var(
"userFloat('jetRchg')", float, doc=
"fraction of jet pT carried by the leading charged constituent", precision= 6)
384 proc.jetTable.variables.nCharged =
Var(
"userInt('nCharged')", int, doc=
"number of charged constituents")
390 proc.updatedJetsWithUserData.userFloats.qgl_axis2 = cms.InputTag(
"qgtagger:axis2")
391 proc.updatedJetsWithUserData.userFloats.qgl_ptD = cms.InputTag(
"qgtagger:ptD")
392 proc.updatedJetsWithUserData.userInts.qgl_mult = cms.InputTag(
"qgtagger:mult")
396 proc.jetTable.variables.qgl_axis2 =
Var(
"userFloat('qgl_axis2')", float, doc=
"ellipse minor jet axis (Quark vs Gluon likelihood input variable)", precision= 6)
397 proc.jetTable.variables.qgl_ptD =
Var(
"userFloat('qgl_ptD')", float, doc=
"pT-weighted average pT of constituents (Quark vs Gluon likelihood input variable)", precision= 6)
398 proc.jetTable.variables.qgl_mult =
Var(
"userInt('qgl_mult')", int, doc=
"PF candidates multiplicity (Quark vs Gluon likelihood input variable)")
404 proc.jetTable.variables.btagDeepFlavG =
Var(
"bDiscriminator('pfDeepFlavourJetTags:probg')",float,doc=
"DeepFlavour gluon tag raw score",precision=10)
405 proc.jetTable.variables.btagDeepFlavUDS =
Var(
"bDiscriminator('pfDeepFlavourJetTags:probuds')",float,doc=
"DeepFlavour uds tag raw score",precision=10)
411 process.genJetTable.variables.area = JETVARS.area
415 process.genJetAK8Table.variables.area = JETVARS.area
419 process.jetTable.variables.HFHEF = JETVARS.HFHEF
420 process.jetTable.variables.HFEMEF = JETVARS.HFEMEF
427 process.fatJetTable.variables.chHEF =
Var(
"?isPFJet()?chargedHadronEnergyFraction():-1", float, doc=
"charged Hadron Energy Fraction", precision = 6)
428 process.fatJetTable.variables.neHEF =
Var(
"?isPFJet()?neutralHadronEnergyFraction():-1", float, doc=
"neutral Hadron Energy Fraction", precision = 6)
429 process.fatJetTable.variables.chEmEF =
Var(
"?isPFJet()?chargedEmEnergyFraction():-1", float, doc=
"charged Electromagnetic Energy Fraction", precision = 6)
430 process.fatJetTable.variables.neEmEF =
Var(
"?isPFJet()?neutralEmEnergyFraction():-1", float, doc=
"neutral Electromagnetic Energy Fraction", precision = 6)
431 process.fatJetTable.variables.muEF =
Var(
"?isPFJet()?muonEnergyFraction():-1", float, doc=
"muon Energy Fraction", precision = 6)
432 process.fatJetTable.variables.HFHEF =
Var(
"?isPFJet()?HFHadronEnergyFraction():-1", float, doc=
"energy fraction in forward hadronic calorimeter", precision = 6)
433 process.fatJetTable.variables.HFEMEF =
Var(
"?isPFJet()?HFEMEnergyFraction():-1", float, doc=
"energy fraction in forward EM calorimeter", precision = 6)
437 process.jercVarsFatJet = process.jercVars.clone(
438 srcJet =
"updatedJetsAK8",
441 process.jetSequence.insert(process.jetSequence.index(process.updatedJetsAK8WithUserData), process.jercVarsFatJet)
443 process.updatedJetsAK8WithUserData.userFloats = cms.PSet(
444 chFPV0EF = cms.InputTag(
"%s:chargedFromPV0EnergyFraction" %process.jercVarsFatJet.label()),
445 chFPV1EF = cms.InputTag(
"%s:chargedFromPV1EnergyFraction" %process.jercVarsFatJet.label()),
446 chFPV2EF = cms.InputTag(
"%s:chargedFromPV2EnergyFraction" %process.jercVarsFatJet.label()),
447 chFPV3EF = cms.InputTag(
"%s:chargedFromPV3EnergyFraction" %process.jercVarsFatJet.label()),
450 process.fatJetTable.variables.chFPV0EF = JETVARS.chFPV0EF
451 process.fatJetTable.variables.chFPV1EF = JETVARS.chFPV1EF
452 process.fatJetTable.variables.chFPV2EF = JETVARS.chFPV2EF
453 process.fatJetTable.variables.chFPV3EF = JETVARS.chFPV3EF
458 process.finalJets.cut =
""
459 process.finalJetsAK8.cut =
""
460 process.genJetTable.cut =
""
461 process.genJetFlavourTable.cut =
""
462 process.genJetAK8Table.cut =
""
463 process.genJetAK8FlavourTable.cut =
""
482 genJA = GenJetAdder()
485 for jetConfig
in config_genjets:
486 cfg = { k : v
for k, v
in jetConfig.items()
if k !=
"enabled" }
487 genJetInfo = genJA.addGenJetCollection(process, **cfg)
488 tableGenJA.addTable(process, genJetInfo)
493 recoJA = RecoJetAdder(runOnMC=runOnMC)
496 for jetConfig
in config_recojets:
497 cfg = { k : v
for k, v
in jetConfig.items()
if k !=
"enabled" }
498 recoJetInfo = recoJA.addRecoJetCollection(process, **cfg)
499 tableRecoJA.addTable(process, recoJetInfo)
502 process.nanoSequenceMC += genJA.getSequence(process)
503 process.nanoSequenceMC += recoJA.getSequence(process)
504 process.nanoSequenceMC += tableGenJA.getSequence(process)
505 process.nanoSequenceMC += tableRecoJA.getSequence(process)
507 process.nanoSequence += recoJA.getSequence(process)
508 process.nanoSequence += tableRecoJA.getSequence(process)