1 import FWCore.ParameterSet.Config
as cms
5 from Configuration.Eras.Modifier_run2_jme_2016_cff
import run2_jme_2016
6 from Configuration.Eras.Modifier_run2_jme_2017_cff
import run2_jme_2017
11 from RecoJets.JetProducers.ak4GenJets_cfi
import ak4GenJets
21 from CommonTools.PileupAlgos.softKiller_cfi
import softKiller
32 Class to hold information of a genjet collection 43 jetRegex = re.compile(
44 r'(?P<{algo}>({algoList}))(?P<{size}>[0-9]+)gen'.
format(
46 algoList =
'|'.
join(supportedJetAlgos.keys()),
50 jetMatch = jetRegex.match(jet.lower())
52 raise RuntimeError(
'Invalid jet collection: %s' % jet)
64 Tool to schedule modules for building a genjet collection with input MiniAODs 74 resultSequence = cms.Sequence()
75 for idx, task
in enumerate(tasks):
77 resultSequence = cms.Sequence(getattr(proc, task))
79 resultSequence.insert(idx, getattr(proc, task))
89 print(
"jetCollectionTools::GenJetAdder::addGenJetCollection: Adding Gen Jet Collection: {}".
format(jet))
95 jetLower = jet.lower()
96 jetUpper = jet.upper()
106 if not inputCollection:
107 print(
"jetCollectionTools::GenJetAdder::addGenJetCollection: inputCollection not specified. Building genjet collection now")
111 packedGenPartNoNu =
"packedGenParticlesForJetsNoNu" 113 setattr(proc, packedGenPartNoNu, cms.EDFilter(
"CandPtrSelector",
114 src = cms.InputTag(
"packedGenParticles"),
115 cut = cms.string(
"abs(pdgId) != 12 && abs(pdgId) != 14 && abs(pdgId) != 16"),
118 self.prerequisites.append(packedGenPartNoNu)
122 genJetsCollection =
"{}{}{}".
format(genJetInfo.jetAlgo.upper(), genJetInfo.jetSize,
'GenJetsNoNu')
123 setattr(proc, genJetsCollection, ak4GenJets.clone(
124 src = packedGenPartNoNu,
125 jetAlgorithm = cms.string(supportedJetAlgos[genJetInfo.jetAlgo]),
126 rParam = cms.double(genJetInfo.jetSizeNr),
129 self.prerequisites.append(genJetsCollection)
133 genFlavour =
"{}Flavour".
format(genJetInfo.jetTagName)
134 setattr(proc, genFlavour, patJetFlavourAssociation.clone(
135 jets = cms.InputTag(genJetsCollection),
136 jetAlgorithm = cms.string(supportedJetAlgos[genJetInfo.jetAlgo]),
137 rParam = cms.double(genJetInfo.jetSizeNr),
141 currentTasks.append(genFlavour)
142 self.main.extend(currentTasks)
153 Class to hold information of a recojet collection 164 puMethodKey =
'puMethod' 165 jetRegex = re.compile(
166 r'(?P<{algo}>({algoList}))(?P<{size}>[0-9]+)(?P<{reco}>(pf|calo))(?P<{puMethod}>(chs|puppi|sk|cs|))'.
format(
168 algoList =
'|'.
join(supportedJetAlgos.keys()),
171 puMethod = puMethodKey,
174 jetMatch = jetRegex.match(jet.lower())
176 raise RuntimeError(
'Invalid jet collection: %s' % jet)
190 self.jetAlgo.upper(), self.
jetSize,
"Calo" if self.
doCalo else self.jetReco.upper()
206 Tool to schedule modules for building a recojet collection with input MiniAODs 214 self.
pvLabel =
"offlineSlimmedPrimaryVertices" 224 resultSequence = cms.Sequence()
225 for idx, task
in enumerate(tasks):
227 resultSequence = cms.Sequence(getattr(proc, task))
229 resultSequence.insert(idx, getattr(proc, task))
230 return resultSequence
235 inputCollection =
"",
236 genJetsCollection =
"",
238 bTagDiscriminators =
None,
239 JETCorrLevels =
None,
241 print(
"jetCollectionTools::RecoJetAdder::addRecoJetCollection: Adding Reco Jet Collection: {}".
format(jet))
245 if inputCollection
and inputCollection
not in [
246 "slimmedJets",
"slimmedJetsAK8",
"slimmedJetsPuppi",
"slimmedCaloJets",
248 raise RuntimeError(
"Invalid input collection: %s" % inputCollection)
250 if bTagDiscriminators
is None:
253 if JETCorrLevels
is None:
260 jetLower = recoJetInfo.jetLower
261 jetUpper = recoJetInfo.jetUpper
262 tagName = recoJetInfo.jetTagName
264 if inputCollection ==
"slimmedJets":
265 assert(jetLower ==
"ak4pfchs")
266 elif inputCollection ==
"slimmedJetsAK8":
267 assert(jetLower ==
"ak8pfpuppi")
268 elif inputCollection ==
"slimmedJetsPuppi":
269 assert(jetLower ==
"ak4pfpuppi")
270 elif inputCollection ==
"slimmedCaloJets":
271 assert(jetLower ==
"ak4calo")
279 if not inputCollection
or recoJetInfo.doCalo:
280 print(
"jetCollectionTools::RecoJetAdder::addRecoJetCollection: inputCollection not specified. Building recojet collection now")
294 if recoJetInfo.jetPUMethod
not in [
"",
"cs" ]:
295 pfCand += recoJetInfo.jetPUMethod
303 if recoJetInfo.jetPUMethod
in [
"",
"cs" ]:
308 elif recoJetInfo.jetPUMethod ==
"chs":
309 setattr(proc, pfCand,
310 cms.EDFilter(
"CandPtrSelector",
311 src = cms.InputTag(self.
pfLabel),
312 cut = cms.string(
"fromPV"),
315 self.prerequisites.append(pfCand)
319 elif recoJetInfo.jetPUMethod ==
"puppi":
320 setattr(proc, pfCand,
326 self.prerequisites.append(pfCand)
330 elif recoJetInfo.jetPUMethod ==
"sk":
331 setattr(proc, pfCand,
334 rParam = recoJetInfo.jetSizeNr,
337 self.prerequisites.append(pfCand)
339 raise RuntimeError(
"Currently unsupported PU method: '%s'" % recoJetInfo.jetPUMethod)
346 if not recoJetInfo.doCalo:
347 jetCollection =
'{}Collection'.
format(tagName)
349 if jetCollection
in self.
main:
350 raise ValueError(
"Step '%s' already implemented" % jetCollection)
352 setattr(proc, jetCollection, ak4PFJetsCS.clone(
354 doAreaFastjet =
True,
356 jetAlgorithm = supportedJetAlgos[recoJetInfo.jetAlgo],
357 rParam = recoJetInfo.jetSizeNr,
358 useConstituentSubtraction = recoJetInfo.doCS,
359 csRParam = 0.4
if recoJetInfo.doCS
else -1.,
360 csRho_EtaMax = PFJetParameters.Rho_EtaMax
if recoJetInfo.doCS
else -1.,
361 useExplicitGhosts = recoJetInfo.doCS
or recoJetInfo.jetPUMethod ==
"sk",
364 currentTasks.append(jetCollection)
366 jetCollection = inputCollection
371 if recoJetInfo.jetPUMethod ==
"puppi":
372 jetCorrLabel =
"Puppi" 373 elif recoJetInfo.jetPUMethod
in [
"cs",
"sk" ]:
376 jetCorrLabel = recoJetInfo.jetPUMethod
383 recoJetInfo.jetAlgo.upper(),
385 "Calo" if recoJetInfo.doCalo
else recoJetInfo.jetReco.upper(),
395 jetSource = cms.InputTag(jetCollection),
396 algo = recoJetInfo.jetAlgo,
397 rParam = recoJetInfo.jetSizeNr,
398 pvSource = cms.InputTag(self.
pvLabel),
399 pfCandidates = cms.InputTag(self.
pfLabel),
400 svSource = cms.InputTag(self.
svLabel),
401 muSource = cms.InputTag(self.
muLabel),
402 elSource = cms.InputTag(self.
elLabel),
403 btagDiscriminators = bTagDiscriminators
if not recoJetInfo.doCalo
else [
"None" ],
404 jetCorrections = jetCorrections,
405 genJetCollection = cms.InputTag(genJetsCollection),
406 genParticles = cms.InputTag(self.
gpLabel),
409 getJetMCFlavour =
not recoJetInfo.doCalo
and recoJetInfo.jetPUMethod !=
"cs" 412 delattr(proc,
'patJetGenJetMatch{}'.
format(tagName))
413 delattr(proc,
'patJetPartonMatch{}'.
format(tagName))
414 getJetMCFlavour =
False 416 setattr(getattr(proc,
"patJets{}".
format(tagName)),
"getJetMCFlavour", cms.bool(getJetMCFlavour))
417 setattr(getattr(proc,
"patJetCorrFactors{}".
format(tagName)),
"payload", cms.string(recoJetInfo.jetCorrPayload))
418 selJet =
"selectedPatJets{}".
format(tagName)
420 selJet = inputCollection
422 if not recoJetInfo.skipUserData:
426 jercVar =
"jercVars{}".
format(tagName)
427 if jercVar
in self.
main:
428 raise ValueError(
"Step '%s' already implemented" % jercVar)
429 setattr(proc, jercVar, proc.jercVars.clone(srcJet = selJet))
430 currentTasks.append(jercVar)
434 looseJetId =
"looseJetId{}".
format(tagName)
435 if looseJetId
in self.
main:
436 raise ValueError(
"Step '%s' already implemented" % looseJetId)
437 setattr(proc, looseJetId, proc.looseJetId.clone(
439 filterParams=proc.looseJetId.filterParams.clone(
444 currentTasks.append(looseJetId)
448 tightJetId =
"tightJetId{}".
format(tagName)
449 if tightJetId
in self.
main:
450 raise ValueError(
"Step '%s' already implemented" % tightJetId)
451 setattr(proc, tightJetId, proc.tightJetId.clone(
453 filterParams=proc.tightJetId.filterParams.clone(
454 version =
"SUMMER18{}".
format(
"PUPPI" if recoJetInfo.jetPUMethod ==
"puppi" else "")
458 tightJetIdObj = getattr(proc, tightJetId)
459 run2_jme_2016.toModify(
460 tightJetIdObj.filterParams,
463 run2_jme_2017.toModify(
464 tightJetIdObj.filterParams,
465 version =
'WINTER17{}'.
format(
"PUPPI" if recoJetInfo.jetPUMethod ==
"puppi" else "")
467 currentTasks.append(tightJetId)
471 tightJetIdLepVeto =
"tightJetIdLepVeto{}".
format(tagName)
472 if tightJetIdLepVeto
in self.
main:
473 raise ValueError(
"Step '%s' already implemented" % tightJetIdLepVeto)
474 setattr(proc, tightJetIdLepVeto, proc.tightJetIdLepVeto.clone(
476 filterParams=proc.tightJetIdLepVeto.filterParams.clone(
477 version =
"SUMMER18{}".
format(
"PUPPI" if recoJetInfo.jetPUMethod ==
"puppi" else "")
481 tightJetIdLepVetoObj = getattr(proc, tightJetIdLepVeto)
482 run2_jme_2016.toModify(
483 tightJetIdLepVetoObj.filterParams,
486 run2_jme_2017.toModify(
487 tightJetIdLepVetoObj.filterParams,
488 version =
'WINTER17{}'.
format(
"PUPPI" if recoJetInfo.jetPUMethod ==
"puppi" else ""),
490 currentTasks.append(tightJetIdLepVeto)
494 selectedPatJetsWithUserData =
"{}WithUserData".
format(selJet)
495 if selectedPatJetsWithUserData
in self.
main:
496 raise ValueError(
"Step '%s' already implemented" % selectedPatJetsWithUserData)
497 setattr(proc, selectedPatJetsWithUserData,
498 cms.EDProducer(
"PATJetUserDataEmbedder",
499 src = cms.InputTag(selJet),
500 userFloats = cms.PSet(
501 jercCHPUF = cms.InputTag(
"{}:chargedHadronPUEnergyFraction".
format(jercVar)),
502 jercCHF = cms.InputTag(
"{}:chargedHadronCHSEnergyFraction".
format(jercVar)),
505 tightId = cms.InputTag(tightJetId),
506 tightIdLepVeto = cms.InputTag(tightJetIdLepVeto),
510 selectedPatJetsWithUserDataObj = getattr(proc, selectedPatJetsWithUserData)
511 run2_jme_2016.toModify(selectedPatJetsWithUserDataObj.userInts,
512 looseId = cms.InputTag(looseJetId),
514 currentTasks.append(selectedPatJetsWithUserData)
516 selectedPatJetsWithUserData =
"selectedPatJets{}".
format(tagName)
522 jetCorrFactors =
"jetCorrFactors{}".
format(tagName)
523 if jetCorrFactors
in self.
main:
524 raise ValueError(
"Step '%s' already implemented" % jetCorrFactors)
526 setattr(proc, jetCorrFactors, patJetCorrFactors.clone(
527 src = selectedPatJetsWithUserData,
528 levels = JETCorrLevels,
529 primaryVertices = self.
pvLabel,
530 payload = recoJetInfo.jetCorrPayload,
531 rho =
"fixedGridRhoFastjetAll{}".
format(
"Calo" if recoJetInfo.doCalo
else ""),
534 currentTasks.append(jetCorrFactors)
536 updatedJets =
"updatedJets{}".
format(tagName)
537 if updatedJets
in self.
main:
538 raise ValueError(
"Step '%s' already implemented" % updatedJets)
540 setattr(proc, updatedJets, updatedPatJets.clone(
542 jetSource = selectedPatJetsWithUserData,
543 jetCorrFactorsSource = [jetCorrFactors],
546 currentTasks.append(updatedJets)
548 self.main.extend(currentTasks)
S & print(S &os, JobReport::InputFile const &f)
static std::string join(char **cmd)