From b5d8e5f3ddc53194fc7f5ce7b5d51a419688d095 Mon Sep 17 00:00:00 2001 From: Nurfikri Norjoharuddeen Date: Wed, 2 Oct 2024 09:01:47 +0200 Subject: [PATCH 1/6] Remove old b-taggers for AK8 subjets. Add DeepJet and UParT. --- .../python/slimming/applySubstructure_cff.py | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cff.py b/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cff.py index b2fdf8a0eae63..51f8f1cd6f6ee 100644 --- a/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cff.py +++ b/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cff.py @@ -63,7 +63,19 @@ def applySubstructure( process, postfix="" ) : jetCorrections = ('AK8PFPuppi', ['L2Relative', 'L3Absolute'], 'None'), getJetMCFlavour = False # jet flavor disabled ) + ## PATify soft drop subjets + from RecoBTag.ONNXRuntime.pfUnifiedParticleTransformerAK4_cff import _pfUnifiedParticleTransformerAK4JetTagsAll as pfUnifiedParticleTransformerAK4JetTagsAll + _btagDiscriminatorsSubjets = cms.PSet( + names=cms.vstring( + 'pfDeepFlavourJetTags:probb', + 'pfDeepFlavourJetTags:probbb', + 'pfDeepFlavourJetTags:problepb', + 'pfUnifiedParticleTransformerAK4DiscriminatorsJetTags:BvsAll' + ) + # + pfUnifiedParticleTransformerAK4JetTagsAll + ) + addJetCollection( process, postfix=postfix, @@ -71,7 +83,7 @@ def applySubstructure( process, postfix="" ) : jetSource = cms.InputTag('ak8PFJetsPuppiSoftDrop'+postfix,'SubJets'), algo = 'ak', # needed for subjet flavor clustering rParam = 0.8, # needed for subjet flavor clustering - btagDiscriminators = ['pfDeepCSVJetTags:probb', 'pfDeepCSVJetTags:probbb', 'pfCombinedInclusiveSecondaryVertexV2BJetTags','pfCombinedMVAV2BJetTags'], + btagDiscriminators = _btagDiscriminatorsSubjets.names.value(), jetCorrections = ('AK4PFPuppi', ['L2Relative', 'L3Absolute'], 'None'), explicitJTA = True, # needed for subjet b tagging svClustering = True, # needed for subjet b tagging @@ -80,14 +92,6 @@ def applySubstructure( process, postfix="" ) : groomedFatJets=cms.InputTag('ak8PFJetsPuppiSoftDrop') # needed for subjet flavor clustering ) - from Configuration.Eras.Modifier_run3_common_cff import run3_common - run3_common.toModify(process.patJetsAK8PFPuppiSoftDropSubjets, - discriminatorSources = cms.VInputTag( - cms.InputTag("pfDeepCSVJetTagsAK8PFPuppiSoftDropSubjets","probb"), - cms.InputTag("pfDeepCSVJetTagsAK8PFPuppiSoftDropSubjets","probbb") - ) - ) - # add groomed ECFs and N-subjettiness to soft dropped pat::Jets for fat jets and subjets process.load('RecoJets.JetProducers.ECF_cff') addToProcessAndTask('nb1AK8PuppiSoftDrop'+postfix, process.ecfNbeta1.clone(src = cms.InputTag("ak8PFJetsPuppiSoftDrop"+postfix), cuts = cms.vstring('', '', 'pt > 250')), process, task) From 63ee5e9b7e6026c4fbe8716a75e1d09df6d0b26a Mon Sep 17 00:00:00 2001 From: Nurfikri Norjoharuddeen Date: Wed, 2 Oct 2024 09:04:05 +0200 Subject: [PATCH 2/6] Remove DeepCSV for AK8 subjets and add DeepJet and UParT --- PhysicsTools/NanoAOD/python/jetsAK8_cff.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/PhysicsTools/NanoAOD/python/jetsAK8_cff.py b/PhysicsTools/NanoAOD/python/jetsAK8_cff.py index c676d2eee1f58..6249dba8fa838 100644 --- a/PhysicsTools/NanoAOD/python/jetsAK8_cff.py +++ b/PhysicsTools/NanoAOD/python/jetsAK8_cff.py @@ -246,7 +246,8 @@ def nanoAOD_addDeepInfoAK8(process, addDeepBTag, addDeepBoostedJet, addDeepDoubl name = cms.string("SubJet"), doc = cms.string("slimmedJetsAK8PFPuppiSoftDropPacked::SubJets, i.e. soft-drop subjets for ak8 fat jets for boosted analysis"), variables = cms.PSet(P4Vars, - btagDeepB = Var("bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')",float,doc="DeepCSV b+bb tag discriminator",precision=10), + btagDeepFlavB = Var("bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb')",float,doc="DeepJet b+bb+lepb tag discriminator",precision=10), + btagUParTAK4B = Var("?bDiscriminator('pfUnifiedParticleTransformerAK4DiscriminatorsJetTags:BvsAll')>0?bDiscriminator('pfUnifiedParticleTransformerAK4DiscriminatorsJetTags:BvsAll'):-1",float,precision=10,doc="UnifiedParT b vs. udscg"), rawFactor = Var("1.-jecFactor('Uncorrected')",float,doc="1 - Factor to get back to raw pT",precision=6), area = Var("jetArea()", float, doc="jet catchment area, for JECs",precision=10), tau1 = Var("userFloat('NjettinessAK8Subjets:tau1')",float, doc="Nsubjettiness (1 axis)",precision=10), @@ -268,6 +269,14 @@ def nanoAOD_addDeepInfoAK8(process, addDeepBTag, addDeepBoostedJet, addDeepDoubl area = None, ) +run3_nanoAOD_pre142X.toModify( + subJetTable.variables, + btagDeepFlavB = None, + btagUParTAK4B = None, + btagDeepB = Var("bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')",float,doc="DeepCSV b+bb tag discriminator",precision=10), +) + + #jets are not as precise as muons fatJetTable.variables.pt.precision=10 subJetTable.variables.pt.precision=10 From 9af26c389aa77c1c9e9b14cbec183a0fedab5b65 Mon Sep 17 00:00:00 2001 From: Nurfikri Norjoharuddeen Date: Wed, 2 Oct 2024 09:07:09 +0200 Subject: [PATCH 3/6] Add Pileup Jet ID discriminant for AK4 Puppi jets --- PhysicsTools/NanoAOD/python/jetsAK4_Puppi_cff.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/PhysicsTools/NanoAOD/python/jetsAK4_Puppi_cff.py b/PhysicsTools/NanoAOD/python/jetsAK4_Puppi_cff.py index 2ba53a460a626..491695a47eb34 100644 --- a/PhysicsTools/NanoAOD/python/jetsAK4_Puppi_cff.py +++ b/PhysicsTools/NanoAOD/python/jetsAK4_Puppi_cff.py @@ -90,6 +90,7 @@ UParTAK4RegPtRawCorr = Var("?bDiscriminator('pfUnifiedParticleTransformerAK4JetTags:ptcorr')>0?bDiscriminator('pfUnifiedParticleTransformerAK4JetTags:ptcorr'):-1",float,precision=10,doc="UnifiedParT universal flavor-aware visible pT regression (no neutrinos), correction relative to raw jet pT"), UParTAK4RegPtRawCorrNeutrino = Var("?bDiscriminator('pfUnifiedParticleTransformerAK4JetTags:ptnu')>0?bDiscriminator('pfUnifiedParticleTransformerAK4JetTags:ptnu'):-1",float,precision=10,doc="UnifiedParT universal flavor-aware pT regression neutrino correction, relative to visible. To apply full regression, multiply raw jet pT by both UParTAK4RegPtRawCorr and UParTAK4RegPtRawCorrNeutrino."), UParTAK4RegPtRawRes = Var("?(bDiscriminator('pfUnifiedParticleTransformerAK4JetTags:ptreshigh')+bDiscriminator('pfUnifiedParticleTransformerAK4JetTags:ptreslow'))>0?0.5*(bDiscriminator('pfUnifiedParticleTransformerAK4JetTags:ptreshigh')-bDiscriminator('pfUnifiedParticleTransformerAK4JetTags:ptreslow')):-1",float,precision=10,doc="UnifiedParT universal flavor-aware jet pT resolution estimator, (q84 - q16)/2"), + puIdDisc = Var("userFloat('pileupJetIdPuppi:fullDiscriminant')", float,doc="Pileup ID BDT discriminant with 133X Winter24 PuppiV18 training",precision=10), hfsigmaEtaEta = Var("userFloat('hfsigmaEtaEta')",float,doc="sigmaEtaEta for HF jets (noise discriminating variable)",precision=10), hfsigmaPhiPhi = Var("userFloat('hfsigmaPhiPhi')",float,doc="sigmaPhiPhi for HF jets (noise discriminating variable)",precision=10), hfcentralEtaStripSize = Var("userInt('hfcentralEtaStripSize')", int, doc="eta size of the central tower strip in HF (noise discriminating variable)"), @@ -134,6 +135,12 @@ hfEmEF = None ) +run3_nanoAOD_pre142X.toModify( + jetPuppiTable.variables, + puIdDisc = None, +) + + #jets are not as precise as muons jetPuppiTable.variables.pt.precision=10 From 3fcd3cc9dcb2bd200ea8f994d32f2e785b4a5802 Mon Sep 17 00:00:00 2001 From: Nurfikri Norjoharuddeen Date: Wed, 2 Oct 2024 09:09:13 +0200 Subject: [PATCH 4/6] Update nanoDQM for subjet b-taggers and Pileup Jet ID for AK4 Puppi jets --- PhysicsTools/NanoAOD/python/nanoDQM_cff.py | 20 ++++++++++++++++++++ PhysicsTools/NanoAOD/python/nanoDQM_cfi.py | 3 +++ 2 files changed, 23 insertions(+) diff --git a/PhysicsTools/NanoAOD/python/nanoDQM_cff.py b/PhysicsTools/NanoAOD/python/nanoDQM_cff.py index 00a1e6b8808f5..0595a5e518f7b 100644 --- a/PhysicsTools/NanoAOD/python/nanoDQM_cff.py +++ b/PhysicsTools/NanoAOD/python/nanoDQM_cff.py @@ -222,6 +222,10 @@ def _match(name): and 'hfHEF' not in plot.name.value() and 'hfEmEF' not in plot.name.value(): _Jet_EarlyRun3_plots.append(plot) +_Jet_pre142X_plots = cms.VPSet() +for plot in nanoDQM.vplots.Jet.plots: + if 'puIdDisc' not in plot.name.value(): + _Jet_pre142X_plots.append(plot) _SubJet_Run2_plots = cms.VPSet() for plot in nanoDQM.vplots.SubJet.plots: @@ -234,6 +238,15 @@ def _match(name): if 'area' not in plot.name.value(): _SubJet_EarlyRun3_plots.append(plot) +_SubJet_pre142X_plots = cms.VPSet() +for plot in nanoDQM.vplots.SubJet.plots: + if 'btagDeepFlavB' not in plot.name.value() and 'btagUParTAK4B' not in plot.name.value(): + _SubJet_pre142X_plots.append(plot) +_SubJet_pre142X_plots.extend([ + Plot1D('btagCMVA', 'btagCMVA', 20, -1, 1, 'CMVA V2 btag discriminator'), + Plot1D('btagDeepB', 'btagDeepB', 20, -1, 1, 'Deep B+BB btag discriminator'), +]) + run2_nanoAOD_ANY.toModify( nanoDQM.vplots.FatJet, plots = _FatJet_Run2_plots @@ -256,6 +269,13 @@ def _match(name): plots = _SubJet_EarlyRun3_plots ) +run3_nanoAOD_pre142X.toModify( + nanoDQM.vplots.Jet, + plots = _Jet_pre142X_plots +).toModify( + nanoDQM.vplots.SubJet, + plots = _SubJet_pre142X_plots +) _Pileup_pre13X_plots = cms.VPSet() for plot in nanoDQM.vplots.Pileup.plots: diff --git a/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py b/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py index bc63e6ae679ac..bdf2d14104876 100644 --- a/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py +++ b/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py @@ -448,6 +448,7 @@ Plot1D('PNetRegPtRawCorr', 'PNetRegPtRawCorr', 20, 0, 2, 'ParticleNet visible pT regression, correction relative to raw pT'), Plot1D('PNetRegPtRawCorrNeutrino', 'PNetRegPtRawCorrNeutrino', 20, 0, 2, 'ParticleNet neutrino pT correction, relative to regressed visible pT'), Plot1D('PNetRegPtRawRes', 'PNetRegPtRawRes', 20, 0, 0.5, 'ParticleNet per-jet resolution estimator: (q84 - q16)/2'), + Plot1D('puIdDisc', 'puIdDisc', 20, -1., 1., 'Pileup ID BDT discriminant with 133X Winter24 PuppiV18 training'), Plot1D('chEmEF', 'chEmEF', 20, 0, 1, 'charged Electromagnetic Energy Fraction'), Plot1D('chFPV0EF', 'chFPV0EF', 20, 0, 2, 'charged fromPV==0 Energy Fraction (energy excluded from CHS jets). Previously called betastar.'), Plot1D('chHEF', 'chHEF', 20, 0, 2, 'charged Hadron Energy Fraction'), @@ -817,6 +818,8 @@ Count1D('_size', 9, -0.5, 8.5, 'slimmedJetsAK8PFPuppiSoftDropPacked::SubJets, i.e. soft-drop subjets for ak8 fat jets for boosted'), Plot1D('btagCMVA', 'btagCMVA', 20, -1, 1, 'CMVA V2 btag discriminator'), Plot1D('btagDeepB', 'btagDeepB', 20, -1, 1, 'Deep B+BB btag discriminator'), + Plot1D('btagDeepFlavB', 'btagDeepFlavB', 20, -1, 1, 'DeepJet b+bb+lepb tag discriminator'), + Plot1D('btagUParTAK4B', 'btagUParTAK4B', 20, -1, 1, 'UnifiedParT b vs. udscg'), Plot1D('eta', 'eta', 20, -4, 4, 'eta'), Plot1D('hadronFlavour', 'hadronFlavour', 6, -0.5, 5.5, 'flavour from hadron ghost clustering'), Plot1D('mass', 'mass', 20, -200, 200, 'mass'), From 1f30bcc6d1f0a60a258d58789bb8583e3dac8654 Mon Sep 17 00:00:00 2001 From: Nurfikri Norjoharuddeen Date: Wed, 2 Oct 2024 09:21:18 +0200 Subject: [PATCH 5/6] Delete commented line --- PhysicsTools/PatAlgos/python/slimming/applySubstructure_cff.py | 1 - 1 file changed, 1 deletion(-) diff --git a/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cff.py b/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cff.py index 51f8f1cd6f6ee..da4f42a99df8c 100644 --- a/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cff.py +++ b/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cff.py @@ -73,7 +73,6 @@ def applySubstructure( process, postfix="" ) : 'pfDeepFlavourJetTags:problepb', 'pfUnifiedParticleTransformerAK4DiscriminatorsJetTags:BvsAll' ) - # + pfUnifiedParticleTransformerAK4JetTagsAll ) addJetCollection( From c6611871870881fcd39524210d3acaed55eca4ad Mon Sep 17 00:00:00 2001 From: Nurfikri Norjoharuddeen Date: Wed, 2 Oct 2024 15:34:24 +0200 Subject: [PATCH 6/6] Remove more SubJet DQM plots --- PhysicsTools/NanoAOD/python/nanoDQM_cff.py | 1 - PhysicsTools/NanoAOD/python/nanoDQM_cfi.py | 2 -- 2 files changed, 3 deletions(-) diff --git a/PhysicsTools/NanoAOD/python/nanoDQM_cff.py b/PhysicsTools/NanoAOD/python/nanoDQM_cff.py index 0595a5e518f7b..83133f9c88104 100644 --- a/PhysicsTools/NanoAOD/python/nanoDQM_cff.py +++ b/PhysicsTools/NanoAOD/python/nanoDQM_cff.py @@ -243,7 +243,6 @@ def _match(name): if 'btagDeepFlavB' not in plot.name.value() and 'btagUParTAK4B' not in plot.name.value(): _SubJet_pre142X_plots.append(plot) _SubJet_pre142X_plots.extend([ - Plot1D('btagCMVA', 'btagCMVA', 20, -1, 1, 'CMVA V2 btag discriminator'), Plot1D('btagDeepB', 'btagDeepB', 20, -1, 1, 'Deep B+BB btag discriminator'), ]) diff --git a/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py b/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py index bdf2d14104876..4184faf87f947 100644 --- a/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py +++ b/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py @@ -816,8 +816,6 @@ sels = cms.PSet(), plots = cms.VPSet( Count1D('_size', 9, -0.5, 8.5, 'slimmedJetsAK8PFPuppiSoftDropPacked::SubJets, i.e. soft-drop subjets for ak8 fat jets for boosted'), - Plot1D('btagCMVA', 'btagCMVA', 20, -1, 1, 'CMVA V2 btag discriminator'), - Plot1D('btagDeepB', 'btagDeepB', 20, -1, 1, 'Deep B+BB btag discriminator'), Plot1D('btagDeepFlavB', 'btagDeepFlavB', 20, -1, 1, 'DeepJet b+bb+lepb tag discriminator'), Plot1D('btagUParTAK4B', 'btagUParTAK4B', 20, -1, 1, 'UnifiedParT b vs. udscg'), Plot1D('eta', 'eta', 20, -4, 4, 'eta'),