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