From 52be07c036de597e5008a27bfe43a4bf5d98fbb9 Mon Sep 17 00:00:00 2001 From: Jussi Viinikainen Date: Fri, 7 Feb 2025 00:02:37 +0100 Subject: [PATCH 1/2] Remove neutrinos from reclustered jet collections --- .../test/forest_miniAOD_run3_MC.py | 4 +++- .../test/forest_miniAOD_run3_ppref_MC.py | 6 +++-- .../python/ak4PFJetSequence_ppref_mc_cff.py | 2 +- .../JetAnalysis/python/setupJets_PbPb_cff.py | 19 +++++++-------- .../JetAnalysis/python/setupJets_ppRef_cff.py | 23 +++++++++---------- 5 files changed, 27 insertions(+), 27 deletions(-) diff --git a/HeavyIonsAnalysis/Configuration/test/forest_miniAOD_run3_MC.py b/HeavyIonsAnalysis/Configuration/test/forest_miniAOD_run3_MC.py index 689675c9f0e36..ad27786459ab8 100644 --- a/HeavyIonsAnalysis/Configuration/test/forest_miniAOD_run3_MC.py +++ b/HeavyIonsAnalysis/Configuration/test/forest_miniAOD_run3_MC.py @@ -145,6 +145,8 @@ doBtagging = False # Note that setting to True increases computing time a lot # 0 means use original mini-AOD jets, otherwise use R value, e.g., 3,4,8 +# Generator level jets in original miniAOD jets contain neutrinos +# You will need to do reclustering with R-value to get generator level jets without neutrinos # Add all the values you want to process to the list # These will create collections of CS subtracted jets (only eta dependent background) jetLabelsCS = ["4"] @@ -175,7 +177,7 @@ getattr(process,"akCs"+jetLabel+"PFJetAnalyzer").jetAbsEtaMax = cms.untracked.double(jetAbsEtaMax) getattr(process,"akCs"+jetLabel+"PFJetAnalyzer").rParam = 0.4 if jetLabel=="0" else float(jetLabel.replace("Flow",""))*0.1 getattr(process,"akCs"+jetLabel+"PFJetAnalyzer").jetFlavourInfos = "ak"+jetLabel+"PFUnsubJetFlavourInfos" - if jetLabel!="0": getattr(process,"akCs"+jetLabel+"PFJetAnalyzer").genjetTag = "ak"+jetLabel+"GenJetsWithNu" + if jetLabel != "0": getattr(process,"akCs"+jetLabel+"PFJetAnalyzer").genjetTag = "ak"+jetLabel+"GenJetsReclusterNoNu" if doBtagging: getattr(process,"akCs"+jetLabel+"PFJetAnalyzer").pfJetProbabilityBJetTag = cms.untracked.string("pfJetProbabilityBJetTagsAK"+jetLabel+"PFBtag") getattr(process,"akCs"+jetLabel+"PFJetAnalyzer").pfUnifiedParticleTransformerAK4JetTags = cms.untracked.string("pfUnifiedParticleTransformerAK4JetTagsAK"+jetLabel+"PFBtag") diff --git a/HeavyIonsAnalysis/Configuration/test/forest_miniAOD_run3_ppref_MC.py b/HeavyIonsAnalysis/Configuration/test/forest_miniAOD_run3_ppref_MC.py index 396b379d18481..a3a0f164620e8 100644 --- a/HeavyIonsAnalysis/Configuration/test/forest_miniAOD_run3_ppref_MC.py +++ b/HeavyIonsAnalysis/Configuration/test/forest_miniAOD_run3_ppref_MC.py @@ -143,8 +143,10 @@ doBtagging = False # Note that setting to True increases computing time a lot # 0 means use original mini-AOD jets, otherwise use R value, e.g., 3,4,8 +# Generator level jets in original miniAOD jets contain neutrinos +# You will need to do reclustering with R-value to get generator level jets without neutrinos # Add all the values you want to process to the list -jetLabels = ["0"] +jetLabels = ["4"] # add candidate tagging for all selected jet radii from HeavyIonsAnalysis.JetAnalysis.setupJets_ppRef_cff import candidateBtaggingMiniAOD @@ -165,7 +167,7 @@ getattr(process,"ak"+jetLabel+"PFJetAnalyzer").jetAbsEtaMax = cms.untracked.double(jetAbsEtaMax) getattr(process,"ak"+jetLabel+"PFJetAnalyzer").rParam = 0.4 if jetLabel=="0" else float(jetLabel)*0.1 getattr(process,"ak"+jetLabel+"PFJetAnalyzer").jetFlavourInfos = "ak"+jetLabel+"PFFlavourInfos" - if jetLabel!="0": getattr(process,"ak"+jetLabel+"PFJetAnalyzer").genjetTag = "ak"+jetLabel+"GenJetsWithNu" + if jetLabel != "0": getattr(process,"ak"+jetLabel+"PFJetAnalyzer").genjetTag = "ak"+jetLabel+"GenJetsReclusterNoNu" if doBtagging: getattr(process,"ak"+jetLabel+"PFJetAnalyzer").pfJetProbabilityBJetTag = cms.untracked.string("pfJetProbabilityBJetTagsAK"+jetLabel+"PFCHSBtag") getattr(process,"ak"+jetLabel+"PFJetAnalyzer").pfUnifiedParticleTransformerAK4JetTags = cms.untracked.string("pfUnifiedParticleTransformerAK4JetTagsAK"+jetLabel+"PFCHSBtag") diff --git a/HeavyIonsAnalysis/JetAnalysis/python/ak4PFJetSequence_ppref_mc_cff.py b/HeavyIonsAnalysis/JetAnalysis/python/ak4PFJetSequence_ppref_mc_cff.py index a4d86d15456be..c7573b3f995b7 100644 --- a/HeavyIonsAnalysis/JetAnalysis/python/ak4PFJetSequence_ppref_mc_cff.py +++ b/HeavyIonsAnalysis/JetAnalysis/python/ak4PFJetSequence_ppref_mc_cff.py @@ -4,7 +4,7 @@ ak4PFJetAnalyzer = inclusiveJetAnalyzer.clone( jetTag = cms.InputTag("slimmedJets"), - genjetTag = 'ak4GenJetsNoNu', + genjetTag = 'slimmedGenJets', rParam = 0.4, fillGenJets = True, isMC = True, diff --git a/HeavyIonsAnalysis/JetAnalysis/python/setupJets_PbPb_cff.py b/HeavyIonsAnalysis/JetAnalysis/python/setupJets_PbPb_cff.py index eefbc7900bbac..485a7283f09d6 100644 --- a/HeavyIonsAnalysis/JetAnalysis/python/setupJets_PbPb_cff.py +++ b/HeavyIonsAnalysis/JetAnalysis/python/setupJets_PbPb_cff.py @@ -62,18 +62,15 @@ def candidateBtaggingMiniAOD(process, isMC = True, jetPtMin = 15, jetCorrLevels process.allPartons = allPartons.clone( src = 'hiSignalGenParticles' ) + + # Reclusted generator level jets without neutrinos from RecoJets.JetProducers.ak4GenJets_cfi import ak4GenJets - setattr(process,"ak"+labelR+"GenJetsWithNu", - ak4GenJets.clone( - src = 'packedGenParticlesSignal', - rParam = jetR - ) - ) process.packedGenParticlesForJetsNoNu = cms.EDFilter("CandPtrSelector", src = cms.InputTag("packedGenParticlesSignal"), cut = cms.string("abs(pdgId) != 12 && abs(pdgId) != 14 && abs(pdgId) != 16") ) - setattr(process,"ak"+labelR+"GenJetsRecluster", + + setattr(process,"ak"+labelR+"GenJetsReclusterNoNu", ak4GenJets.clone( src = 'packedGenParticlesForJetsNoNu' ) @@ -81,9 +78,9 @@ def candidateBtaggingMiniAOD(process, isMC = True, jetPtMin = 15, jetCorrLevels # We need to be careful not to override the previous genTask in case several different jet radii are defined in the forest configuration file if hasattr(process, "genTask"): - process.genTask.add(getattr(process,"ak"+labelR+"GenJetsWithNu"), getattr(process,"ak"+labelR+"GenJetsRecluster")) + process.genTask.add(getattr(process,"ak"+labelR+"GenJetsReclusterNoNu")) else: - process.genTask = cms.Task(process.hiSignalGenParticles, process.allPartons, getattr(process,"ak"+labelR+"GenJetsWithNu"), process.packedGenParticlesForJetsNoNu, getattr(process,"ak"+labelR+"GenJetsRecluster")) + process.genTask = cms.Task(process.hiSignalGenParticles, process.allPartons, process.packedGenParticlesForJetsNoNu, getattr(process,"ak"+labelR+"GenJetsReclusterNoNu")) # Remake secondary vertices from RecoVertex.AdaptiveVertexFinder.inclusiveVertexing_cff import inclusiveCandidateVertexFinder, candidateVertexMerger, candidateVertexArbitrator, inclusiveCandidateSecondaryVertices @@ -131,8 +128,8 @@ def candidateBtaggingMiniAOD(process, isMC = True, jetPtMin = 15, jetCorrLevels matchedGenJets = "" if isMC: - if labelR == "0": matchedGenJets = "slimmedGenJets" - else: matchedGenJets = "ak"+labelR+"GenJetsWithNu" + # Use reclustered jets without neutrinos for matching. slimmedGenJets can be used after the fix in miniAOD step is propagated here for labelR = 0. + matchedGenJets = "ak"+labelR+"GenJetsReclusterNoNu" from PhysicsTools.PatAlgos.tools.jetTools import addJetCollection diff --git a/HeavyIonsAnalysis/JetAnalysis/python/setupJets_ppRef_cff.py b/HeavyIonsAnalysis/JetAnalysis/python/setupJets_ppRef_cff.py index ce745bf508d27..974021ea68485 100644 --- a/HeavyIonsAnalysis/JetAnalysis/python/setupJets_ppRef_cff.py +++ b/HeavyIonsAnalysis/JetAnalysis/python/setupJets_ppRef_cff.py @@ -56,27 +56,26 @@ def candidateBtaggingMiniAOD(process, isMC = True, jetPtMin = 15, jetCorrLevels process.allPartons = allPartons.clone( src = 'hiSignalGenParticles' ) + + # Define generator level jets without neutrinos from RecoJets.JetProducers.ak4GenJets_cfi import ak4GenJets - setattr(process,"ak"+labelR+"GenJetsWithNu", - ak4GenJets.clone( - src = 'packedGenParticles', - rParam = jetR - ) - ) + process.packedGenParticlesForJetsNoNu = cms.EDFilter("CandPtrSelector", src = cms.InputTag("packedGenParticles"), cut = cms.string("abs(pdgId) != 12 && abs(pdgId) != 14 && abs(pdgId) != 16") ) - setattr(process,"ak"+labelR+"GenJetsRecluster", + + setattr(process,"ak"+labelR+"GenJetsReclusterNoNu", ak4GenJets.clone( - src = 'packedGenParticlesForJetsNoNu' + src = 'packedGenParticlesForJetsNoNu', + rParam = jetR ) ) # We need to be careful not to override the previous genTask in case several different jet radii are defined in the forest configuration file if hasattr(process, "genTask"): - process.genTask.add(getattr(process,"ak"+labelR+"GenJetsWithNu"), getattr(process,"ak"+labelR+"GenJetsRecluster")) + process.genTask.add( getattr(process,"ak"+labelR+"GenJetsReclusterNoNu")) else: - process.genTask = cms.Task(process.hiSignalGenParticles, process.allPartons, getattr(process,"ak"+labelR+"GenJetsWithNu"), process.packedGenParticlesForJetsNoNu, getattr(process,"ak"+labelR+"GenJetsRecluster")) + process.genTask = cms.Task(process.hiSignalGenParticles, process.allPartons, process.packedGenParticlesForJetsNoNu, getattr(process,"ak"+labelR+"GenJetsReclusterNoNu")) # Create unsubtracted reco jets @@ -108,8 +107,8 @@ def candidateBtaggingMiniAOD(process, isMC = True, jetPtMin = 15, jetCorrLevels matchedGenJets = "" if isMC: - if labelR == "0": matchedGenJets = "slimmedGenJets" - else: matchedGenJets = "ak"+labelR+"GenJetsWithNu" + # Use reclustered jets without neutrinos for matching. slimmedGenJets can be used after the fix in miniAOD step is propagated here for labelR = 0.ZZ + matchedGenJets = "ak"+labelR+"GenJetsReclusterNoNu" svSource = cms.InputTag("slimmedSecondaryVertices") From f0b2fb071e21e7d91801f4af482af449cc94c294 Mon Sep 17 00:00:00 2001 From: Jussi Viinikainen Date: Fri, 7 Feb 2025 01:43:14 +0100 Subject: [PATCH 2/2] Do not recluster jets for matching for miniAOD jets --- HeavyIonsAnalysis/JetAnalysis/python/setupJets_PbPb_cff.py | 4 ++-- HeavyIonsAnalysis/JetAnalysis/python/setupJets_ppRef_cff.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/HeavyIonsAnalysis/JetAnalysis/python/setupJets_PbPb_cff.py b/HeavyIonsAnalysis/JetAnalysis/python/setupJets_PbPb_cff.py index 485a7283f09d6..4c8d43ee3794f 100644 --- a/HeavyIonsAnalysis/JetAnalysis/python/setupJets_PbPb_cff.py +++ b/HeavyIonsAnalysis/JetAnalysis/python/setupJets_PbPb_cff.py @@ -128,8 +128,8 @@ def candidateBtaggingMiniAOD(process, isMC = True, jetPtMin = 15, jetCorrLevels matchedGenJets = "" if isMC: - # Use reclustered jets without neutrinos for matching. slimmedGenJets can be used after the fix in miniAOD step is propagated here for labelR = 0. - matchedGenJets = "ak"+labelR+"GenJetsReclusterNoNu" + if labelR == "0": matchedGenJets = "slimmedGenJets" + else: matchedGenJets = "ak"+labelR+"GenJetsReclusterNoNu" from PhysicsTools.PatAlgos.tools.jetTools import addJetCollection diff --git a/HeavyIonsAnalysis/JetAnalysis/python/setupJets_ppRef_cff.py b/HeavyIonsAnalysis/JetAnalysis/python/setupJets_ppRef_cff.py index 974021ea68485..3265e1485f250 100644 --- a/HeavyIonsAnalysis/JetAnalysis/python/setupJets_ppRef_cff.py +++ b/HeavyIonsAnalysis/JetAnalysis/python/setupJets_ppRef_cff.py @@ -107,8 +107,8 @@ def candidateBtaggingMiniAOD(process, isMC = True, jetPtMin = 15, jetCorrLevels matchedGenJets = "" if isMC: - # Use reclustered jets without neutrinos for matching. slimmedGenJets can be used after the fix in miniAOD step is propagated here for labelR = 0.ZZ - matchedGenJets = "ak"+labelR+"GenJetsReclusterNoNu" + if labelR == "0": matchedGenJets = "slimmedGenJets" + else: matchedGenJets = "ak"+labelR+"GenJetsReclusterNoNu" svSource = cms.InputTag("slimmedSecondaryVertices")