File indexing completed on 2025-03-14 23:36:35
0001 import FWCore.ParameterSet.Config as cms
0002 from PhysicsTools.PatAlgos.tools.coreTools import runOnData
0003 from PhysicsTools.PatAlgos.tools.jetTools import supportedJetAlgos, addJetCollection, updateJetCollection
0004 from PhysicsTools.PatAlgos.tools.jetTools import setupPuppiForPackedPF
0005 from PhysicsTools.PatAlgos.tools.helpers import getPatAlgosToolsTask, addToProcessAndTask
0006
0007 def puppiAK4METReclusterFromMiniAOD(process, runOnMC, useExistingWeights, btagDiscriminatorsAK4=None):
0008
0009 task = getPatAlgosToolsTask(process)
0010
0011 pfLabel = "packedPFCandidates"
0012 pvLabel = "offlineSlimmedPrimaryVertices"
0013 svLabel = "slimmedSecondaryVertices"
0014 muLabel = "slimmedMuons"
0015 elLabel = "slimmedElectrons"
0016 gpLabel = "prunedGenParticles"
0017
0018 genJetsCollection = "slimmedGenJets"
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 puppiLabel, puppiNoLepLabel = setupPuppiForPackedPF(process, useExistingWeights)
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038 process.load("RecoJets.JetProducers.ak4PFJets_cfi")
0039 task.add(process.ak4PFJetsPuppi)
0040 process.ak4PFJetsPuppi.src = pfLabel
0041 process.ak4PFJetsPuppi.srcWeights = puppiLabel
0042
0043 from RecoJets.JetAssociationProducers.j2tParametersVX_cfi import j2tParametersVX
0044 process.ak4PFJetsPuppiTracksAssociatorAtVertex = cms.EDProducer("JetTracksAssociatorAtVertex",
0045 j2tParametersVX,
0046 jets = cms.InputTag("ak4PFJetsPuppi")
0047 )
0048 task.add(process.ak4PFJetsPuppiTracksAssociatorAtVertex)
0049 process.patJetPuppiCharge = cms.EDProducer("JetChargeProducer",
0050 src = cms.InputTag("ak4PFJetsPuppiTracksAssociatorAtVertex"),
0051 var = cms.string("Pt"),
0052 exp = cms.double(1.0)
0053 )
0054
0055
0056
0057
0058 addJetCollection(
0059 process,
0060 postfix = "",
0061 labelName = "Puppi",
0062 jetSource = cms.InputTag("ak4PFJetsPuppi"),
0063 algo = "ak",
0064 rParam = 0.4,
0065 pfCandidates = cms.InputTag(pfLabel),
0066 pvSource = cms.InputTag(pvLabel),
0067 svSource = cms.InputTag(svLabel),
0068 muSource = cms.InputTag(muLabel),
0069 elSource = cms.InputTag(elLabel),
0070 genJetCollection = cms.InputTag(genJetsCollection),
0071 genParticles = cms.InputTag(gpLabel),
0072 jetCorrections = ('AK4PFPuppi', cms.vstring(["L2Relative", "L3Absolute"]), ''),
0073 getJetMCFlavour = runOnMC
0074 )
0075 process.patJetsPuppi.jetChargeSource = cms.InputTag("patJetPuppiCharge")
0076 process.selectedPatJetsPuppi.cut = cms.string("pt > 10")
0077 if hasattr(process,"patJetFlavourAssociationPuppi"):
0078 process.patJetFlavourAssociationPuppi.weights = cms.InputTag(puppiLabel)
0079
0080 process.load("RecoJets.JetProducers.PileupJetID_cfi")
0081 task.add(process.pileUpJetIDPuppiTask)
0082 process.pileupJetIdPuppi.srcConstituentWeights = puppiLabel
0083 process.pileupJetIdPuppi.vertexes = pvLabel
0084 process.patJetsPuppi.userData.userFloats.src += [cms.InputTag("pileupJetIdPuppi:fullDiscriminant")]
0085 process.patJetsPuppi.userData.userInts.src += [cms.InputTag("pileupJetIdPuppi:fullId")]
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096 from PhysicsTools.PatAlgos.slimming.slimmedJets_cfi import slimmedJets
0097 addToProcessAndTask('slimmedJetsPuppiNoDeepTags', slimmedJets.clone(
0098 src = "selectedPatJetsPuppi",
0099 packedPFCandidates = pfLabel,
0100 dropDaughters = "0",
0101 rekeyDaughters = "0",
0102 ),
0103 process, task
0104 )
0105
0106 updateJetCollection(
0107 process,
0108 jetSource = cms.InputTag("slimmedJetsPuppiNoDeepTags"),
0109
0110
0111 pfCandidates = cms.InputTag(pfLabel),
0112 pvSource = cms.InputTag(pvLabel),
0113 svSource = cms.InputTag(svLabel),
0114 muSource = cms.InputTag(muLabel),
0115 elSource = cms.InputTag(elLabel),
0116 jetCorrections = ("AK4PFPuppi", cms.vstring(["L2Relative", "L3Absolute"]), "None"),
0117 btagDiscriminators = btagDiscriminatorsAK4.names.value() if btagDiscriminatorsAK4 is not None else ['None'],
0118 postfix = 'SlimmedDeepFlavour',
0119 printWarning = False
0120 )
0121
0122 addToProcessAndTask("slimmedJetsPuppi", process.selectedUpdatedPatJetsSlimmedDeepFlavour.clone(), process, task)
0123 del process.selectedUpdatedPatJetsSlimmedDeepFlavour
0124
0125
0126
0127
0128
0129
0130 from PhysicsTools.PatUtils.tools.runMETCorrectionsAndUncertainties import runMetCorAndUncFromMiniAOD
0131 runMetCorAndUncFromMiniAOD(process,
0132 isData=not(runOnMC),
0133 jetCollUnskimmed="slimmedJetsPuppi",
0134 metType="Puppi",
0135 postfix="Puppi",
0136 jetFlavor="AK4PFPuppi",
0137 puppiProducerLabel=puppiLabel,
0138 puppiProducerForMETLabel=puppiNoLepLabel,
0139 recoMetFromPFCs=True
0140 )
0141
0142
0143
0144
0145
0146
0147
0148 if not(runOnMC):
0149 runOnData(process, names=["Jets","METs"], outputModules = [])
0150
0151 return process
0152
0153
0154 def puppiAK8ReclusterFromMiniAOD(process, runOnMC, useExistingWeights, btagDiscriminatorsAK8=None, btagDiscriminatorsAK8Subjets=None):
0155
0156 task = getPatAlgosToolsTask(process)
0157
0158 pfLabel = "packedPFCandidates"
0159 pvLabel = "offlineSlimmedPrimaryVertices"
0160 svLabel = "slimmedSecondaryVertices"
0161 muLabel = "slimmedMuons"
0162 elLabel = "slimmedElectrons"
0163 gpLabel = "prunedGenParticles"
0164
0165 genJetsAK8Collection = "slimmedGenJetsAK8"
0166 genSubJetsForAK8Collection = "slimmedGenJetsAK8SoftDropSubJets"
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176 puppiLabel, puppiNoLepLabel = setupPuppiForPackedPF(process, useExistingWeights)
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186 process.load("RecoJets.JetProducers.ak8PFJets_cfi")
0187 task.add(process.ak8PFJetsPuppi)
0188 task.add(process.ak8PFJetsPuppiSoftDrop)
0189
0190
0191 process.ak8PFJetsPuppi.src = pfLabel
0192 process.ak8PFJetsPuppi.srcWeights = puppiLabel
0193
0194
0195 from CommonTools.RecoAlgos.miniAODJetConstituentSelector_cfi import miniAODJetConstituentSelector
0196 addToProcessAndTask("ak8PFJetsPuppiConstituents", miniAODJetConstituentSelector.clone(
0197 src = cms.InputTag("ak8PFJetsPuppi"),
0198 cut = cms.string("pt > 100.0 && abs(rapidity()) < 2.4")
0199 ),
0200 process, task
0201 )
0202
0203
0204 process.ak8PFJetsPuppiSoftDrop.src = "ak8PFJetsPuppiConstituents:constituents"
0205 process.ak8PFJetsPuppiSoftDrop.srcWeights = puppiLabel
0206
0207
0208 process.load("RecoJets.JetProducers.ak8PFJetsPuppi_groomingValueMaps_cfi")
0209 task.add(process.ak8PFJetsPuppiSoftDropMass)
0210 process.ak8PFJetsPuppiSoftDropMass.src = "ak8PFJetsPuppi"
0211 process.ak8PFJetsPuppiSoftDropMass.matched = "ak8PFJetsPuppiSoftDrop"
0212
0213
0214
0215
0216
0217
0218
0219
0220 addJetCollection(
0221 process,
0222 labelName = "AK8Puppi",
0223 jetSource = cms.InputTag("ak8PFJetsPuppi"),
0224 algo = "ak",
0225 rParam = 0.8,
0226 pfCandidates = cms.InputTag(pfLabel),
0227 pvSource = cms.InputTag(pvLabel),
0228 svSource = cms.InputTag(svLabel),
0229 muSource = cms.InputTag(muLabel),
0230 elSource = cms.InputTag(elLabel),
0231 genJetCollection = cms.InputTag(genJetsAK8Collection),
0232 genParticles = cms.InputTag(gpLabel),
0233 jetCorrections = ("AK8PFPuppi", cms.vstring(["L2Relative", "L3Absolute"]), "None"),
0234 getJetMCFlavour = runOnMC,
0235 )
0236 if hasattr(process,"patJetFlavourAssociationAK8Puppi"):
0237 process.patJetFlavourAssociationAK8Puppi.weights = cms.InputTag(puppiLabel)
0238
0239 process.patJetsAK8Puppi.userData.userFloats.src = []
0240 process.patJetsAK8Puppi.userData.userFloats.src += ["ak8PFJetsPuppiSoftDropMass"]
0241 process.patJetsAK8Puppi.addTagInfos = cms.bool(False)
0242
0243 process.selectedPatJetsAK8Puppi.cut = cms.string("pt > 100")
0244 process.selectedPatJetsAK8Puppi.cutLoose = cms.string("pt > 30")
0245 process.selectedPatJetsAK8Puppi.nLoose = cms.uint32(3)
0246
0247
0248
0249
0250 from RecoJets.JetProducers.nJettinessAdder_cfi import Njettiness
0251 addToProcessAndTask("NjettinessAK8Puppi", Njettiness.clone(
0252 src = "ak8PFJetsPuppi",
0253 srcWeights = puppiLabel
0254 ),
0255 process, task
0256 )
0257 process.patJetsAK8Puppi.userData.userFloats.src += [
0258 "NjettinessAK8Puppi:tau1",
0259 "NjettinessAK8Puppi:tau2",
0260 "NjettinessAK8Puppi:tau3",
0261 "NjettinessAK8Puppi:tau4"
0262 ]
0263
0264
0265
0266
0267 addJetCollection(
0268 process,
0269 labelName = "AK8PFPuppiSoftDrop",
0270 jetSource = cms.InputTag("ak8PFJetsPuppiSoftDrop"),
0271 btagDiscriminators = ["None"],
0272 pfCandidates = cms.InputTag(pfLabel),
0273 pvSource = cms.InputTag(pvLabel),
0274 svSource = cms.InputTag(svLabel),
0275 muSource = cms.InputTag(muLabel),
0276 elSource = cms.InputTag(elLabel),
0277 genJetCollection = cms.InputTag(genJetsAK8Collection),
0278 genParticles = cms.InputTag(gpLabel),
0279 jetCorrections = ("AK8PFPuppi", cms.vstring(["L2Relative", "L3Absolute"]), "None"),
0280 getJetMCFlavour = False
0281 )
0282
0283
0284
0285
0286 addJetCollection(
0287 process,
0288 labelName = "AK8PFPuppiSoftDropSubjets",
0289 jetSource = cms.InputTag("ak8PFJetsPuppiSoftDrop", "SubJets"),
0290 algo = "ak",
0291 rParam = 0.8,
0292 explicitJTA = True,
0293 svClustering = True,
0294 pfCandidates = cms.InputTag(pfLabel),
0295 pvSource = cms.InputTag(pvLabel),
0296 svSource = cms.InputTag(svLabel),
0297 muSource = cms.InputTag(muLabel),
0298 elSource = cms.InputTag(elLabel),
0299 genJetCollection = cms.InputTag(genSubJetsForAK8Collection),
0300 genParticles = cms.InputTag(gpLabel),
0301 fatJets = cms.InputTag("ak8PFJetsPuppi"),
0302 groomedFatJets = cms.InputTag("ak8PFJetsPuppiSoftDrop"),
0303 jetCorrections = ("AK4PFPuppi", cms.vstring(["L2Relative", "L3Absolute"]), "None"),
0304 )
0305 if hasattr(process,"patJetFlavourAssociationAK8PFPuppiSoftDropSubjets"):
0306 process.patJetFlavourAssociationAK8PFPuppiSoftDropSubjets.weights = cms.InputTag(puppiLabel)
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316 process.load('RecoJets.JetProducers.ECF_cff')
0317
0318 addToProcessAndTask('nb1AK8PuppiSoftDrop', process.ecfNbeta1.clone(
0319 src = cms.InputTag("ak8PFJetsPuppiSoftDrop"),
0320 srcWeights = puppiLabel,
0321 cuts = cms.vstring('', '', 'pt > 250')
0322 ),
0323 process, task
0324 )
0325 process.patJetsAK8PFPuppiSoftDrop.userData.userFloats.src += [
0326 'nb1AK8PuppiSoftDrop:ecfN2',
0327 'nb1AK8PuppiSoftDrop:ecfN3',
0328 ]
0329
0330 addToProcessAndTask('nb2AK8PuppiSoftDrop', process.ecfNbeta2.clone(
0331 src = cms.InputTag("ak8PFJetsPuppiSoftDrop"),
0332 srcWeights = puppiLabel,
0333 cuts = cms.vstring('', '', 'pt > 250')
0334 ),
0335 process, task
0336 )
0337 process.patJetsAK8PFPuppiSoftDrop.userData.userFloats.src += [
0338 'nb2AK8PuppiSoftDrop:ecfN2',
0339 'nb2AK8PuppiSoftDrop:ecfN3',
0340 ]
0341
0342
0343
0344
0345 addToProcessAndTask("nb1AK8PuppiSoftDropSubjets", process.ecfNbeta1.clone(
0346 src = cms.InputTag("ak8PFJetsPuppiSoftDrop", "SubJets"),
0347 srcWeights = puppiLabel,
0348 ),
0349 process, task
0350 )
0351
0352 process.patJetsAK8PFPuppiSoftDropSubjets.userData.userFloats.src += [
0353 'nb1AK8PuppiSoftDropSubjets:ecfN2',
0354 'nb1AK8PuppiSoftDropSubjets:ecfN3'
0355 ]
0356
0357 addToProcessAndTask("nb2AK8PuppiSoftDropSubjets", process.ecfNbeta2.clone(
0358 src = cms.InputTag("ak8PFJetsPuppiSoftDrop", "SubJets"),
0359 srcWeights = puppiLabel,
0360 ),
0361 process, task
0362 )
0363
0364 process.patJetsAK8PFPuppiSoftDropSubjets.userData.userFloats.src += [
0365 'nb2AK8PuppiSoftDropSubjets:ecfN2',
0366 'nb2AK8PuppiSoftDropSubjets:ecfN3'
0367 ]
0368
0369 addToProcessAndTask("NjettinessAK8Subjets", Njettiness.clone(
0370 src = cms.InputTag("ak8PFJetsPuppiSoftDrop", "SubJets"),
0371 srcWeights = puppiLabel
0372 ),
0373 process, task
0374 )
0375 process.patJetsAK8PFPuppiSoftDropSubjets.userData.userFloats.src += [
0376 "NjettinessAK8Subjets:tau1",
0377 "NjettinessAK8Subjets:tau2",
0378 "NjettinessAK8Subjets:tau3",
0379 "NjettinessAK8Subjets:tau4",
0380 ]
0381
0382 addToProcessAndTask("slimmedJetsAK8PFPuppiSoftDropSubjetsNoDeepTags", cms.EDProducer("PATJetSlimmer",
0383 src = cms.InputTag("selectedPatJetsAK8PFPuppiSoftDropSubjets"),
0384 packedPFCandidates = cms.InputTag(pfLabel),
0385 dropJetVars = cms.string("1"),
0386 dropDaughters = cms.string("0"),
0387 rekeyDaughters = cms.string("0"),
0388 dropTrackRefs = cms.string("1"),
0389 dropSpecific = cms.string("1"),
0390 dropTagInfos = cms.string("1"),
0391 modifyJets = cms.bool(True),
0392 mixedDaughters = cms.bool(False),
0393 modifierConfig = cms.PSet( modifications = cms.VPSet() )
0394 ),
0395 process, task
0396 )
0397
0398 updateJetCollection(
0399 process,
0400 labelName = "AK8PFPuppiSoftDropSubjets",
0401 postfix = 'SlimmedDeepFlavour',
0402 jetSource = cms.InputTag("slimmedJetsAK8PFPuppiSoftDropSubjetsNoDeepTags"),
0403
0404
0405 pfCandidates = cms.InputTag(pfLabel),
0406 pvSource = cms.InputTag(pvLabel),
0407 svSource = cms.InputTag(svLabel),
0408 muSource = cms.InputTag(muLabel),
0409 elSource = cms.InputTag(elLabel),
0410 jetCorrections = ("AK4PFPuppi", cms.vstring(["L2Relative", "L3Absolute"]), "None"),
0411 printWarning = False,
0412 btagDiscriminators = btagDiscriminatorsAK8Subjets.names.value() if btagDiscriminatorsAK8Subjets is not None else ['None'],
0413 )
0414
0415
0416 addToProcessAndTask("slimmedJetsAK8PFPuppiSoftDropPacked", cms.EDProducer("BoostedJetMerger",
0417 jetSrc = cms.InputTag("selectedPatJetsAK8PFPuppiSoftDrop"),
0418 subjetSrc = cms.InputTag("selectedUpdatedPatJetsAK8PFPuppiSoftDropSubjetsSlimmedDeepFlavour")
0419 ),
0420 process, task
0421 )
0422
0423 addToProcessAndTask("packedPatJetsAK8", cms.EDProducer("JetSubstructurePacker",
0424 jetSrc = cms.InputTag("selectedPatJetsAK8Puppi"),
0425 distMax = cms.double(0.8),
0426 algoTags = cms.VInputTag(
0427 cms.InputTag("slimmedJetsAK8PFPuppiSoftDropPacked")
0428 ),
0429 algoLabels = cms.vstring(
0430 'SoftDropPuppi'
0431 ),
0432 fixDaughters = cms.bool(False),
0433 packedPFCandidates = cms.InputTag(pfLabel),
0434 ),
0435 process, task
0436 )
0437
0438
0439
0440
0441
0442
0443
0444
0445
0446 from PhysicsTools.PatAlgos.slimming.slimmedJets_cfi import slimmedJetsAK8
0447 addToProcessAndTask("slimmedJetsAK8NoDeepTags", slimmedJetsAK8.clone(rekeyDaughters = "0"), process, task)
0448
0449 process.slimmedJetsAK8NoDeepTags.dropDaughters = cms.string("pt < 170")
0450 process.slimmedJetsAK8NoDeepTags.dropSpecific = cms.string("pt < 170")
0451 process.slimmedJetsAK8NoDeepTags.dropTagInfos = cms.string("pt < 170")
0452
0453 updateJetCollection(
0454 process,
0455 jetSource = cms.InputTag("slimmedJetsAK8NoDeepTags"),
0456
0457
0458 pfCandidates = cms.InputTag(pfLabel),
0459 pvSource = cms.InputTag(pvLabel),
0460 svSource = cms.InputTag(svLabel),
0461 muSource = cms.InputTag(muLabel),
0462 elSource = cms.InputTag(elLabel),
0463 rParam = 0.8,
0464 jetCorrections = ('AK8PFPuppi', cms.vstring(["L2Relative", "L3Absolute"]), 'None'),
0465 btagDiscriminators = btagDiscriminatorsAK8.names.value() if btagDiscriminatorsAK8 is not None else ['None'],
0466 postfix = "SlimmedAK8DeepTags",
0467 printWarning = False
0468 )
0469
0470 addToProcessAndTask("slimmedJetsAK8", process.selectedUpdatedPatJetsSlimmedAK8DeepTags.clone(), process, task)
0471 del process.selectedUpdatedPatJetsSlimmedAK8DeepTags
0472
0473
0474
0475
0476
0477
0478
0479 if not(runOnMC):
0480 runOnData(process, names=["Jets"], outputModules = [])
0481
0482 return process
0483