diff --git a/Configuration/ProcessModifiers/python/nanoAOD_rePuppi_cff.py b/Configuration/ProcessModifiers/python/nanoAOD_rePuppi_cff.py
new file mode 100644
index 0000000000000..8b16565338cab
--- /dev/null
+++ b/Configuration/ProcessModifiers/python/nanoAOD_rePuppi_cff.py
@@ -0,0 +1,3 @@
+import FWCore.ParameterSet.Config as cms
+
+nanoAOD_rePuppi = cms.Modifier()
diff --git a/PhysicsTools/NanoAOD/python/boostedTaus_cff.py b/PhysicsTools/NanoAOD/python/boostedTaus_cff.py
index 1fb58bb74becd..13492fa549f2b 100644
--- a/PhysicsTools/NanoAOD/python/boostedTaus_cff.py
+++ b/PhysicsTools/NanoAOD/python/boostedTaus_cff.py
@@ -12,10 +12,6 @@
src = cms.InputTag("slimmedTausBoosted"),
cut = cms.string("pt > 25 && tauID('decayModeFindingNewDMs') && (tauID('byVVLooseIsolationMVArun2DBoldDMwLT') || tauID('byVVLooseIsolationMVArun2DBnewDMwLT') || tauID('byBoostedDeepTau20161718v2p0VSjetraw') > {})".format(0.82))
)
-run2_nanoAOD_106Xv2.toModify(
- finalBoostedTaus,
- cut = "pt > 25 && tauID('decayModeFindingNewDMs') && (tauID('byVVLooseIsolationMVArun2DBoldDMwLT') || tauID('byVVLooseIsolationMVArun2DBoldDMdR0p3wLT') || tauID('byVVLooseIsolationMVArun2DBnewDMwLT') || tauID('byBoostedDeepTau20161718v2p0VSjetraw') > {})".format(0.82)
-)
boostedTauTable = simplePATTauFlatTableProducer.clone(
src = cms.InputTag("linkedObjects", "boostedTaus"),
@@ -71,17 +67,6 @@
_boostedTauVarsAntiEleMVA,
_boostedDeepTauRunIIv2p0Vars
)
-_boostedTauVarsWithDr03 = cms.PSet(
- _boostedTauVarsBase,
- _boostedTauVarsMVAIso,
- _boostedTauVarsMVAIsoDr03,
- _boostedTauVarsAntiEleMVA,
- _boostedDeepTauRunIIv2p0Vars
-)
-run2_nanoAOD_106Xv2.toModify(
- boostedTauTable,
- variables = _boostedTauVarsWithDr03
-)
boostedTausMCMatchLepTauForTable = tausMCMatchLepTauForTable.clone(
src = boostedTauTable.src
diff --git a/PhysicsTools/NanoAOD/python/custom_btv_cff.py b/PhysicsTools/NanoAOD/python/custom_btv_cff.py
index 6099c5ec73b4f..53d49d57b1178 100644
--- a/PhysicsTools/NanoAOD/python/custom_btv_cff.py
+++ b/PhysicsTools/NanoAOD/python/custom_btv_cff.py
@@ -65,8 +65,10 @@ def update_jets_AK4(process):
process.updatedPatJetsTransientCorrectedPuppiWithDeepInfo.tagInfoSources.append(cms.InputTag("pfUnifiedParticleTransformerAK4TagInfosPuppiWithDeepInfo"))
process.updatedPatJetsTransientCorrectedPuppiWithDeepInfo.addTagInfos = cms.bool(True)
-
-
+ # Fix ParticleNetFromMiniAOD input when slimmedTaus is updated
+ from PhysicsTools.NanoAOD.nano_cff import _fixPNetInputCollection
+ _fixPNetInputCollection(process)
+
return process
def update_jets_AK8(process):
diff --git a/PhysicsTools/NanoAOD/python/custom_jme_cff.py b/PhysicsTools/NanoAOD/python/custom_jme_cff.py
index 7a36f1b6aec1d..3120fb08289d3 100644
--- a/PhysicsTools/NanoAOD/python/custom_jme_cff.py
+++ b/PhysicsTools/NanoAOD/python/custom_jme_cff.py
@@ -1392,10 +1392,6 @@ def RecomputePuppiWeightsMETAK8(proc):
)
)
- run3_nanoAOD_pre142X.toModify(btagDiscriminatorsAK8Subjets,
- names = cms.vstring('pfDeepCSVJetTags:probb','pfDeepCSVJetTags:probbb')
- )
-
from PhysicsTools.PatAlgos.tools.puppiJetMETReclusteringFromMiniAOD_cff import setupPuppiAK4AK8METReclustering
proc = setupPuppiAK4AK8METReclustering(proc, runOnMC=runOnMC, useExistingWeights=False,
reclusterAK4MET=False, # Already setup to recluster AK4 Puppi jets and PuppiMET
@@ -1513,6 +1509,12 @@ def addAK4JetTasks(proc, addAK4CHSJetTasks, addAK4PuppiJetTasks):
addAK4PuppiJetTasks = jmeNano_addAK4JetTasks_switch.addAK4Puppi_switch,
)
+ ###########################################################################
+ # Fix ParticleNetFromMiniAOD input when slimmedTaus is updated
+ ###########################################################################
+ from PhysicsTools.NanoAOD.nano_cff import _fixPNetInputCollection
+ _fixPNetInputCollection(process)
+
###########################################################################
# Save Maximum of Pt Hat Max
###########################################################################
diff --git a/PhysicsTools/NanoAOD/python/electrons_cff.py b/PhysicsTools/NanoAOD/python/electrons_cff.py
index b2ff9fda3eac9..1b37ca8b07809 100644
--- a/PhysicsTools/NanoAOD/python/electrons_cff.py
+++ b/PhysicsTools/NanoAOD/python/electrons_cff.py
@@ -540,5 +540,5 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints):
run2_egamma.toReplaceWith(electronTask, _electronTask_Run2)
# Revert back to AK4 CHS jets for Run2 inputs
-run2_nanoAOD_ANY.toModify(
+run2_egamma.toModify(
ptRatioRelForEle,srcJet="updatedJets")
diff --git a/PhysicsTools/NanoAOD/python/jetsAK4_CHS_cff.py b/PhysicsTools/NanoAOD/python/jetsAK4_CHS_cff.py
index 7808d99e8098d..09ab1b8b427d0 100644
--- a/PhysicsTools/NanoAOD/python/jetsAK4_CHS_cff.py
+++ b/PhysicsTools/NanoAOD/python/jetsAK4_CHS_cff.py
@@ -366,14 +366,18 @@ def nanoAOD_addDeepInfoAK4CHS(process,addDeepBTag,addDeepFlavour,addParticleNet,
print("Will recalculate the following discriminators: "+", ".join(_btagDiscriminators))
updateJetCollection(
process,
- jetSource = cms.InputTag('slimmedJets'),
+ jetSource = cms.InputTag('slimmedJets', processName=cms.InputTag.skipCurrentProcess()),
jetCorrections = ('AK4PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute','L2L3Residual']), 'None'),
btagDiscriminators = _btagDiscriminators,
postfix = 'WithDeepInfo',
)
process.load("Configuration.StandardSequences.MagneticField_cff")
- process.jetCorrFactorsNano.src="selectedUpdatedPatJetsWithDeepInfo"
- process.updatedJets.jetSource="selectedUpdatedPatJetsWithDeepInfo"
+
+ from PhysicsTools.PatAlgos.tools.helpers import getPatAlgosToolsTask, addToProcessAndTask
+ task = getPatAlgosToolsTask(process)
+ addToProcessAndTask("slimmedJets", process.selectedUpdatedPatJetsWithDeepInfo.clone(), process, task)
+ del process.selectedUpdatedPatJetsWithDeepInfo
+
return process
nanoAOD_addDeepInfoAK4CHS_switch = cms.PSet(
@@ -494,6 +498,7 @@ def nanoAOD_refineFastSim_bTagDeepFlav(process):
jetUserDataTask = cms.Task(bJetVars,qgtagger,jercVars,pileupJetIdNano)
#before cross linking
+chsJetUpdateTask = cms.Task(jetCorrFactorsNano,updatedJets)
jetTask = cms.Task(jetCorrFactorsNano,updatedJets,jetUserDataTask,updatedJetsWithUserData,finalJets)
#after cross linkining
diff --git a/PhysicsTools/NanoAOD/python/jetsAK4_Puppi_cff.py b/PhysicsTools/NanoAOD/python/jetsAK4_Puppi_cff.py
index 092f28684e5bb..6230816ed62e3 100644
--- a/PhysicsTools/NanoAOD/python/jetsAK4_Puppi_cff.py
+++ b/PhysicsTools/NanoAOD/python/jetsAK4_Puppi_cff.py
@@ -26,7 +26,6 @@
jetCorrFactorsSource=cms.VInputTag(cms.InputTag("jetPuppiCorrFactorsNano") ),
)
-
#HF shower shape recomputation
from RecoJets.JetProducers.hfJetShowerShape_cfi import hfJetShowerShape
hfJetPuppiShowerShapeforNanoAOD = hfJetShowerShape.clone(jets="updatedJetsPuppi",vertices="offlineSlimmedPrimaryVertices")
@@ -116,20 +115,6 @@
)
)
-run2_nanoAOD_ANY.toModify(
- jetPuppiTable.variables,
- btagCSVV2 = Var("bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')",float,doc=" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",precision=10),
- btagDeepB = Var("?(bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb'))>=0?bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb'):-1",float,doc="DeepCSV b+bb tag discriminator",precision=10),
- btagDeepCvL = Var("?bDiscriminator('pfDeepCSVJetTags:probc')>=0?bDiscriminator('pfDeepCSVJetTags:probc')/(bDiscriminator('pfDeepCSVJetTags:probc')+bDiscriminator('pfDeepCSVJetTags:probudsg')):-1", float,doc="DeepCSV c vs udsg discriminator",precision=10),
- btagDeepCvB = Var("?bDiscriminator('pfDeepCSVJetTags:probc')>=0?bDiscriminator('pfDeepCSVJetTags:probc')/(bDiscriminator('pfDeepCSVJetTags:probc')+bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')):-1",float,doc="DeepCSV c vs b+bb discriminator",precision=10)
-)
-
-run3_nanoAOD_pre142X.toModify(
- jetPuppiTable.variables,
- puIdDisc = None,
-)
-
-
#jets are not as precise as muons
jetPuppiTable.variables.pt.precision=10
@@ -161,14 +146,18 @@ def nanoAOD_addDeepInfoAK4(process,addParticleNet,addRobustParTAK4=False,addUnif
print("Will recalculate the following discriminators: "+", ".join(_btagDiscriminators))
updateJetCollection(
process,
- jetSource = cms.InputTag('slimmedJetsPuppi'),
+ jetSource = cms.InputTag('slimmedJetsPuppi', processName=cms.InputTag.skipCurrentProcess()),
jetCorrections = ('AK4PFPuppi', cms.vstring(['L2Relative', 'L3Absolute']), 'None'),
btagDiscriminators = _btagDiscriminators,
postfix = 'PuppiWithDeepInfo',
)
process.load("Configuration.StandardSequences.MagneticField_cff")
- process.jetPuppiCorrFactorsNano.src = "selectedUpdatedPatJetsPuppiWithDeepInfo"
- process.updatedJetsPuppi.jetSource = "selectedUpdatedPatJetsPuppiWithDeepInfo"
+
+ from PhysicsTools.PatAlgos.tools.helpers import getPatAlgosToolsTask, addToProcessAndTask
+ task = getPatAlgosToolsTask(process)
+ addToProcessAndTask("slimmedJetsPuppi", process.selectedUpdatedPatJetsPuppiWithDeepInfo.clone(), process, task)
+ del process.selectedUpdatedPatJetsPuppiWithDeepInfo
+
return process
nanoAOD_addDeepInfoAK4_switch = cms.PSet(
diff --git a/PhysicsTools/NanoAOD/python/jetsAK8_cff.py b/PhysicsTools/NanoAOD/python/jetsAK8_cff.py
index ab3dc0c161876..b57b806b8aa6e 100644
--- a/PhysicsTools/NanoAOD/python/jetsAK8_cff.py
+++ b/PhysicsTools/NanoAOD/python/jetsAK8_cff.py
@@ -127,51 +127,12 @@
)
)
-run2_nanoAOD_ANY.toModify(
- fatJetTable.variables,
- btagCSVV2 = Var("bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')",float,doc=" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",precision=10),
- # Remove for V9
- chMultiplicity = None,
- neMultiplicity = None,
- chHEF = None,
- neHEF = None,
- chEmEF = None,
- neEmEF = None,
- muEF = None
-)
-
-(run2_nanoAOD_106Xv2).toModify(
- fatJetTable.variables,
- # Restore taggers that were decommisionned for Run-3
- btagDeepB = Var("?(bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb'))>=0?bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb'):-1",float,doc="DeepCSV b+bb tag discriminator",precision=10),
- btagHbb = Var("bDiscriminator('pfBoostedDoubleSecondaryVertexAK8BJetTags')",float,doc="Higgs to BB tagger discriminator",precision=10),
- btagDDBvLV2 = Var("bDiscriminator('pfMassIndependentDeepDoubleBvLV2JetTags:probHbb')",float,doc="DeepDoubleX V2(mass-decorrelated) discriminator for H(Z)->bb vs QCD",precision=10),
- btagDDCvLV2 = Var("bDiscriminator('pfMassIndependentDeepDoubleCvLV2JetTags:probHcc')",float,doc="DeepDoubleX V2 (mass-decorrelated) discriminator for H(Z)->cc vs QCD",precision=10),
- btagDDCvBV2 = Var("bDiscriminator('pfMassIndependentDeepDoubleCvBV2JetTags:probHcc')",float,doc="DeepDoubleX V2 (mass-decorrelated) discriminator for H(Z)->cc vs H(Z)->bb",precision=10),
- deepTag_TvsQCD = Var("bDiscriminator('pfDeepBoostedDiscriminatorsJetTags:TvsQCD')",float,doc="DeepBoostedJet tagger top vs QCD discriminator",precision=10),
- deepTag_WvsQCD = Var("bDiscriminator('pfDeepBoostedDiscriminatorsJetTags:WvsQCD')",float,doc="DeepBoostedJet tagger W vs QCD discriminator",precision=10),
- deepTag_ZvsQCD = Var("bDiscriminator('pfDeepBoostedDiscriminatorsJetTags:ZvsQCD')",float,doc="DeepBoostedJet tagger Z vs QCD discriminator",precision=10),
- deepTag_H = Var("bDiscriminator('pfDeepBoostedJetTags:probHbb')+bDiscriminator('pfDeepBoostedJetTags:probHcc')+bDiscriminator('pfDeepBoostedJetTags:probHqqqq')",float,doc="DeepBoostedJet tagger H(bb,cc,4q) sum",precision=10),
- deepTag_QCD = Var("bDiscriminator('pfDeepBoostedJetTags:probQCDbb')+bDiscriminator('pfDeepBoostedJetTags:probQCDcc')+bDiscriminator('pfDeepBoostedJetTags:probQCDb')+bDiscriminator('pfDeepBoostedJetTags:probQCDc')+bDiscriminator('pfDeepBoostedJetTags:probQCDothers')",float,doc="DeepBoostedJet tagger QCD(bb,cc,b,c,others) sum",precision=10),
- deepTag_QCDothers = Var("bDiscriminator('pfDeepBoostedJetTags:probQCDothers')",float,doc="DeepBoostedJet tagger QCDothers value",precision=10),
- deepTagMD_TvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:TvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger top vs QCD discriminator",precision=10),
- deepTagMD_WvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:WvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger W vs QCD discriminator",precision=10),
- deepTagMD_ZvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z vs QCD discriminator",precision=10),
- deepTagMD_ZHbbvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZHbbvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z/H->bb vs QCD discriminator",precision=10),
- deepTagMD_ZbbvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZbbvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z->bb vs QCD discriminator",precision=10),
- deepTagMD_HbbvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:HbbvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger H->bb vs QCD discriminator",precision=10),
- deepTagMD_ZHccvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZHccvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z/H->cc vs QCD discriminator",precision=10),
- deepTagMD_H4qvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:H4qvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger H->4q vs QCD discriminator",precision=10),
- deepTagMD_bbvsLight = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:bbvsLight')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z/H/gluon->bb vs light flavour discriminator",precision=10),
- deepTagMD_ccvsLight = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ccvsLight')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z/H/gluon->cc vs light flavour discriminator",precision=10),
-)
-
##############################################################
## DeepInfoAK8:Start
## - To be used in nanoAOD_customizeCommon() in nano_cff.py
###############################################################
from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection
-def nanoAOD_addDeepInfoAK8(process, addDeepBTag, addDeepBoostedJet, addDeepDoubleX, addDeepDoubleXV2, addParticleNetMassLegacy, addParticleNet, addGlobalParT, jecPayload):
+def nanoAOD_addDeepInfoAK8(process, addDeepBTag, addDeepBoostedJet, addDeepDoubleX, addDeepDoubleXV2, addParticleNetMassLegacy, addParticleNetLegacy, addParticleNet, addGlobalParT, jecPayload):
_btagDiscriminators=[]
if addDeepBTag:
print("Updating process to run DeepCSV btag to AK8 jets")
@@ -188,6 +149,9 @@ def nanoAOD_addDeepInfoAK8(process, addDeepBTag, addDeepBoostedJet, addDeepDoubl
print("Updating process to run ParticleNet joint classification and mass regression")
from RecoBTag.ONNXRuntime.pfParticleNetFromMiniAODAK8_cff import _pfParticleNetFromMiniAODAK8JetTagsAll as pfParticleNetFromMiniAODAK8JetTagsAll
_btagDiscriminators += pfParticleNetFromMiniAODAK8JetTagsAll
+ if addParticleNetLegacy:
+ from RecoBTag.ONNXRuntime.pfParticleNet_cff import _pfParticleNetJetTagsAll
+ _btagDiscriminators += _pfParticleNetJetTagsAll
if addParticleNetMassLegacy:
from RecoBTag.ONNXRuntime.pfParticleNet_cff import _pfParticleNetMassRegressionOutputs
_btagDiscriminators += _pfParticleNetMassRegressionOutputs
@@ -208,7 +172,7 @@ def nanoAOD_addDeepInfoAK8(process, addDeepBTag, addDeepBoostedJet, addDeepDoubl
print("Will recalculate the following discriminators on AK8 jets: "+", ".join(_btagDiscriminators))
updateJetCollection(
process,
- jetSource = cms.InputTag('slimmedJetsAK8'),
+ jetSource=cms.InputTag('slimmedJetsAK8', processName=cms.InputTag.skipCurrentProcess()),
pvSource = cms.InputTag('offlineSlimmedPrimaryVertices'),
svSource = cms.InputTag('slimmedSecondaryVertices'),
rParam = 0.8,
@@ -217,8 +181,12 @@ def nanoAOD_addDeepInfoAK8(process, addDeepBTag, addDeepBoostedJet, addDeepDoubl
postfix='AK8WithDeepInfo',
printWarning = False
)
- process.jetCorrFactorsAK8.src="selectedUpdatedPatJetsAK8WithDeepInfo"
- process.updatedJetsAK8.jetSource="selectedUpdatedPatJetsAK8WithDeepInfo"
+
+ from PhysicsTools.PatAlgos.tools.helpers import getPatAlgosToolsTask, addToProcessAndTask
+ task = getPatAlgosToolsTask(process)
+ addToProcessAndTask("slimmedJetsAK8", process.selectedUpdatedPatJetsAK8WithDeepInfo.clone(), process, task)
+ del process.selectedUpdatedPatJetsAK8WithDeepInfo
+
return process
nanoAOD_addDeepInfoAK8_switch = cms.PSet(
@@ -227,21 +195,12 @@ def nanoAOD_addDeepInfoAK8(process, addDeepBTag, addDeepBoostedJet, addDeepDoubl
nanoAOD_addDeepDoubleX_switch = cms.untracked.bool(False),
nanoAOD_addDeepDoubleXV2_switch = cms.untracked.bool(False),
nanoAOD_addParticleNetMassLegacy_switch = cms.untracked.bool(False),
+ nanoAOD_addParticleNetLegacy_switch = cms.untracked.bool(False),
nanoAOD_addParticleNet_switch = cms.untracked.bool(False),
nanoAOD_addGlobalParT_switch = cms.untracked.bool(False),
jecPayload = cms.untracked.string('AK8PFPuppi')
)
-
-# ParticleNet legacy jet tagger is already in 106Xv2 MINIAOD,
-# add ParticleNet legacy mass regression, new combined tagger + mass regression, and GlobalParT
-run2_nanoAOD_106Xv2.toModify(
- nanoAOD_addDeepInfoAK8_switch,
- nanoAOD_addParticleNetMassLegacy_switch = True,
- nanoAOD_addParticleNet_switch = True,
- nanoAOD_addGlobalParT_switch = True,
-)
-
################################################
## DeepInfoAK8:End
#################################################
@@ -270,35 +229,6 @@ def nanoAOD_addDeepInfoAK8(process, addDeepBTag, addDeepBoostedJet, addDeepDoubl
)
)
-run2_nanoAOD_ANY.toModify(
- subJetTable.variables,
- btagCSVV2 = Var("bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')",float,doc=" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",precision=10)
-)
-
-(run2_nanoAOD_106Xv2).toModify(
- subJetTable.variables,
- area = None,
- UParTAK4RegPtRawCorr = None,
- UParTAK4RegPtRawCorrNeutrino = None,
- UParTAK4RegPtRawRes = None,
- UParTAK4V1RegPtRawCorr = None,
- UParTAK4V1RegPtRawCorrNeutrino = None,
- UParTAK4V1RegPtRawRes = None,
-)
-
-run3_nanoAOD_pre142X.toModify(
- subJetTable.variables,
- btagDeepFlavB = None,
- btagUParTAK4B = None,
- UParTAK4RegPtRawCorr = None,
- UParTAK4RegPtRawCorrNeutrino = None,
- UParTAK4RegPtRawRes = None,
- UParTAK4V1RegPtRawCorr = None,
- UParTAK4V1RegPtRawCorrNeutrino = None,
- UParTAK4V1RegPtRawRes = 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
diff --git a/PhysicsTools/NanoAOD/python/muons_cff.py b/PhysicsTools/NanoAOD/python/muons_cff.py
index 6d9a240e7ff1f..43933bd671964 100644
--- a/PhysicsTools/NanoAOD/python/muons_cff.py
+++ b/PhysicsTools/NanoAOD/python/muons_cff.py
@@ -15,6 +15,12 @@
pfCandsForMiniIso = cms.InputTag("packedPFCandidates"),
miniIsoParams = PhysicsTools.PatAlgos.producersLayer1.muonProducer_cfi.patMuons.miniIsoParams, # so they're in sync
recomputeMuonBasicSelectors = cms.bool(False),
+ recomputeSoftMuonMvaRun3 = cms.bool(False),
+ softMvaRun3Model = PhysicsTools.PatAlgos.producersLayer1.muonProducer_cfi.patMuons.softMvaRun3Model,
+)
+
+(run2_nanoAOD_106Xv2 | run3_nanoAOD_pre142X).toModify(
+ slimmedMuonsUpdated, recomputeMuonBasicSelectors=True, recomputeSoftMuonMvaRun3=True,
)
isoForMu = cms.EDProducer("MuonIsoValueMapProducer",
@@ -305,7 +311,7 @@
# Revert back to AK4 CHS jets for Run 2
-run2_nanoAOD_ANY.toModify(
+run2_muon.toModify(
ptRatioRelForMu,srcJet="updatedJets"
)
diff --git a/PhysicsTools/NanoAOD/python/nanoDQM_cff.py b/PhysicsTools/NanoAOD/python/nanoDQM_cff.py
index c1aa5c6d89b7a..b888a23a81702 100644
--- a/PhysicsTools/NanoAOD/python/nanoDQM_cff.py
+++ b/PhysicsTools/NanoAOD/python/nanoDQM_cff.py
@@ -5,19 +5,6 @@
from PhysicsTools.NanoAOD.nanoDQM_tools_cff import *
from PhysicsTools.NanoAOD.nano_eras_cff import *
-_boostedTauPlotsV10 = cms.VPSet()
-for plot in nanoDQM.vplots.boostedTau.plots:
- _boostedTauPlotsV10.append(plot)
-_boostedTauPlotsV10.extend([
- Plot1D('idMVAoldDMdR032017v2', 'idMVAoldDMdR032017v2', 11, -0.5, 10.5, 'IsolationMVArun2017v2DBoldDMdR0p3wLT ID working point (2017v2): int 1 = VVLoose, 2 = VLoose, 3 = Loose, 4 = Medium, 5 = Tight, 6 = VTight, 7 = VVTight'),
- Plot1D('rawMVAoldDMdR032017v2', 'rawMVAoldDMdR032017v2', 20, -1, 1, 'byIsolationMVArun2017v2DBoldDMdR0p3wLT raw output discriminator (2017v2)')
-])
-
-(run2_nanoAOD_106Xv2).toModify(
- nanoDQM.vplots.boostedTau,
- plots = _boostedTauPlotsV10
-)
-
## EGamma custom nano
_Electron_extra_plots = nanoDQM.vplots.Electron.plots.copy()
_Electron_extra_plots.extend([
@@ -201,43 +188,6 @@ def _match(name):
Plot1D('btagDeepCvB', 'btagDeepCvB', 20, -1, 1, 'DeepCSV c vs b+bb discriminator'),
Plot1D('btagDeepCvL', 'btagDeepCvL', 20, -1, 1, 'DeepCSV c vs udsg discriminator')
])
-_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:
- _SubJet_Run2_plots.append(plot)
-_SubJet_Run2_plots.extend([
- Plot1D('btagCSVV2', 'btagCSVV2', 20, -1, 1, ' pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)'),
-])
-
-_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()) and ('UParTAK4Reg' not in plot.name.value()):
- _SubJet_pre142X_plots.append(plot)
-_SubJet_pre142X_plots.extend([
- Plot1D('btagDeepB', 'btagDeepB', 20, -1, 1, 'Deep B+BB btag discriminator'),
-])
-
-run2_nanoAOD_ANY.toModify(
- nanoDQM.vplots.FatJet,
- plots = _FatJet_Run2_plots
-).toModify(
- nanoDQM.vplots.Jet,
- plots = _Jet_Run2_plots
-).toModify(
- nanoDQM.vplots.SubJet,
- plots = _SubJet_Run2_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/nano_cff.py b/PhysicsTools/NanoAOD/python/nano_cff.py
index 37fe0c9648f5f..556f857f897aa 100644
--- a/PhysicsTools/NanoAOD/python/nano_cff.py
+++ b/PhysicsTools/NanoAOD/python/nano_cff.py
@@ -46,11 +46,6 @@
vertices=cms.InputTag("slimmedSecondaryVertices")
)
-# Switch to AK4 CHS jets for Run-2
-run2_nanoAOD_ANY.toModify(
- linkedObjects, jets="finalJets"
-)
-
from PhysicsTools.NanoAOD.lhcInfoProducer_cfi import lhcInfoProducer
lhcInfoTable = lhcInfoProducer.clone()
(~run3_common).toModify(
@@ -72,13 +67,9 @@
isoTrackTablesTask,softActivityTablesTask
)
-# Replace AK4 Puppi with AK4 CHS for Run-2
-_nanoTableTaskCommonRun2 = nanoTableTaskCommon.copy()
-_nanoTableTaskCommonRun2.replace(jetPuppiTask, jetTask)
-_nanoTableTaskCommonRun2.replace(jetPuppiForMETTask, jetForMETTask)
-_nanoTableTaskCommonRun2.replace(jetPuppiTablesTask, jetTablesTask)
-run2_nanoAOD_ANY.toReplaceWith(
- nanoTableTaskCommon, _nanoTableTaskCommonRun2
+(run2_muon | run2_egamma).toReplaceWith(
+ nanoTableTaskCommon,
+ nanoTableTaskCommon.copyAndAdd(chsJetUpdateTask)
)
nanoSequenceCommon = cms.Sequence(nanoTableTaskCommon)
@@ -101,190 +92,219 @@
nanoSequenceMC = nanoSequenceFS.copy()
nanoSequenceMC.insert(nanoSequenceFS.index(nanoSequenceCommon)+1,nanoSequenceOnlyFullSim)
+
+def _fixPNetInputCollection(process):
+ # fix circular module dependency in ParticleNetFromMiniAOD TagInfos when slimmedTaus is updated
+ if hasattr(process, 'slimmedTaus'):
+ for mod in process.producers.keys():
+ if 'ParticleNetFromMiniAOD' in mod and 'TagInfos' in mod:
+ getattr(process, mod).taus = 'slimmedTaus::@skipCurrentProcess'
+
+
# modifier which adds new tauIDs
import RecoTauTag.RecoTau.tools.runTauIdMVA as tauIdConfig
-def nanoAOD_addTauIds(process, idsToRun=[]):
- if idsToRun: #no-empty list of tauIDs to run
- updatedTauName = "slimmedTausUpdated"
- tauIdEmbedder = tauIdConfig.TauIDEmbedder(process, debug = False,
- updatedTauName = updatedTauName,
- postfix = "ForNano",
- toKeep = idsToRun)
+def nanoAOD_addTauIds(process, idsToRun=[], addPNetCHS=False, addUParTPuppi=False):
+ originalTauName = 'slimmedTaus::@skipCurrentProcess'
+ updatedTauName = None
+
+ if idsToRun: # no-empty list of tauIDs to run
+ updatedTauName = 'slimmedTausUpdated'
+ tauIdEmbedder = tauIdConfig.TauIDEmbedder(process, debug=False,
+ originalTauName=originalTauName,
+ updatedTauName=updatedTauName,
+ postfix="ForNano",
+ toKeep=idsToRun)
tauIdEmbedder.runTauID()
- process.finalTaus.src = updatedTauName
- #remember to adjust the selection and tables with added IDs
-
- process.tauTask.add( process.rerunMvaIsolationTaskForNano, getattr(process, updatedTauName) )
+ process.tauTask.add(process.rerunMvaIsolationTaskForNano, getattr(process, updatedTauName))
+ originalTauName = updatedTauName
+
+ from PhysicsTools.PatAlgos.patTauHybridProducer_cfi import patTauHybridProducer
+ if addPNetCHS:
+ jetCollection = "updatedJets"
+ TagName = "pfParticleNetFromMiniAODAK4CHSCentralJetTags"
+ tag_prefix = "byUTagCHS"
+ updatedTauName = originalTauName.split(':')[0] + 'WithPNetCHS'
+ # PNet tagger used for CHS jets
+ from RecoBTag.ONNXRuntime.pfParticleNetFromMiniAODAK4_cff import pfParticleNetFromMiniAODAK4CHSCentralJetTags
+ Discriminators = [TagName + ":" + tag for tag in pfParticleNetFromMiniAODAK4CHSCentralJetTags.flav_names.value()]
- return process
+ # Define "hybridTau" producer
+ setattr(process, updatedTauName, patTauHybridProducer.clone(
+ src=originalTauName,
+ jetSource=jetCollection,
+ dRMax=0.4,
+ jetPtMin=15,
+ jetEtaMax=2.5,
+ UTagLabel=TagName,
+ UTagScoreNames=Discriminators,
+ tagPrefix=tag_prefix,
+ tauScoreMin=-1,
+ vsJetMin=0.05,
+ checkTauScoreIsBest=False,
+ chargeAssignmentProbMin=0.2,
+ addGenJetMatch=False,
+ genJetMatch=""
+ ))
+ process.tauTask.add(process.chsJetUpdateTask, getattr(process, updatedTauName))
+ originalTauName = updatedTauName
+
+ if addUParTPuppi:
+ jetCollection = "updatedJetsPuppi"
+ TagName = "pfUnifiedParticleTransformerAK4JetTags"
+ tag_prefix = "byUTagPUPPI"
+ updatedTauName = originalTauName.split(':')[0] + 'WithUParTPuppi'
+ # Unified ParT Tagger used for PUPPI jets
+ from RecoBTag.ONNXRuntime.pfUnifiedParticleTransformerAK4JetTags_cfi import pfUnifiedParticleTransformerAK4JetTags
+ Discriminators = [TagName + ":" + tag for tag in pfUnifiedParticleTransformerAK4JetTags.flav_names.value()]
-def nanoAOD_addBoostedTauIds(process, idsToRun=[]):
- if idsToRun: #no-empty list of tauIDs to run
- updatedBoostedTauName = "slimmedTausBoostedNewID"
- boostedTauIdEmbedder = tauIdConfig.TauIDEmbedder(process, debug = False,
- originalTauName = "slimmedTausBoosted",
- updatedTauName = updatedBoostedTauName,
- postfix = "BoostedForNano",
- toKeep = idsToRun)
- boostedTauIdEmbedder.runTauID()
- process.finalBoostedTaus.src = updatedBoostedTauName
- #remember to adjust the selection and tables with added IDs
+ # Define "hybridTau" producer
+ setattr(process, updatedTauName, patTauHybridProducer.clone(
+ src=originalTauName,
+ jetSource=jetCollection,
+ dRMax=0.4,
+ jetPtMin=15,
+ jetEtaMax=2.5,
+ UTagLabel=TagName,
+ UTagScoreNames=Discriminators,
+ tagPrefix=tag_prefix,
+ tauScoreMin=-1,
+ vsJetMin=0.05,
+ checkTauScoreIsBest=False,
+ chargeAssignmentProbMin=0.2,
+ addGenJetMatch=False,
+ genJetMatch=""
+ ))
+ process.tauTask.add(getattr(process, updatedTauName))
+ originalTauName = updatedTauName
- process.boostedTauTask.add( process.rerunMvaIsolationTaskBoostedForNano, getattr(process, updatedBoostedTauName))
+ if updatedTauName is not None:
+ process.slimmedTaus = getattr(process, updatedTauName).clone()
+ process.tauTask.replace(getattr(process, updatedTauName), process.slimmedTaus)
+ delattr(process, updatedTauName)
+ _fixPNetInputCollection(process)
return process
-def nanoAOD_addUTagToTaus(process, addUTagInfo=False, usePUPPIjets=False):
-
- if addUTagInfo:
- originalTauName = process.finalTaus.src.value()
-
- if usePUPPIjets: # option to use PUPPI jets
- jetCollection = "updatedJetsPuppi"
- TagName = "pfUnifiedParticleTransformerAK4JetTags"
- tag_prefix = "byUTagPUPPI"
- updatedTauName = originalTauName+'WithUTagPUPPI'
- # Unified ParT Tagger used for PUPPI jets
- from RecoBTag.ONNXRuntime.pfUnifiedParticleTransformerAK4JetTags_cfi import pfUnifiedParticleTransformerAK4JetTags
- Discriminators = [TagName+":"+tag for tag in pfUnifiedParticleTransformerAK4JetTags.flav_names.value()]
- else: # use CHS jets by default
- jetCollection = "updatedJets"
- TagName = "pfParticleNetFromMiniAODAK4CHSCentralJetTags"
- tag_prefix = "byUTagCHS"
- updatedTauName = originalTauName+'WithUTagCHS'
- # PNet tagger used for CHS jets
- from RecoBTag.ONNXRuntime.pfParticleNetFromMiniAODAK4_cff import pfParticleNetFromMiniAODAK4CHSCentralJetTags
- Discriminators = [TagName+":"+tag for tag in pfParticleNetFromMiniAODAK4CHSCentralJetTags.flav_names.value()]
-
- # Define "hybridTau" producer
- from PhysicsTools.PatAlgos.patTauHybridProducer_cfi import patTauHybridProducer
- setattr(process, updatedTauName, patTauHybridProducer.clone(
- src = originalTauName,
- jetSource = jetCollection,
- dRMax = 0.4,
- jetPtMin = 15,
- jetEtaMax = 2.5,
- UTagLabel = TagName,
- UTagScoreNames = Discriminators,
- tagPrefix = tag_prefix,
- tauScoreMin = -1,
- vsJetMin = 0.05,
- checkTauScoreIsBest = False,
- chargeAssignmentProbMin = 0.2,
- addGenJetMatch = False,
- genJetMatch = ""
- ))
- process.finalTaus.src = updatedTauName
- #remember to adjust the selection and tables with added IDs
+def nanoAOD_addBoostedTauIds(process, idsToRun=[]):
+ if idsToRun: # no-empty list of tauIDs to run
+ boostedTauIdEmbedder = tauIdConfig.TauIDEmbedder(process, debug=False,
+ originalTauName="slimmedTausBoosted::@skipCurrentProcess",
+ updatedTauName="slimmedTausBoostedNewID",
+ postfix="BoostedForNano",
+ toKeep=idsToRun)
+ boostedTauIdEmbedder.runTauID()
- process.tauTask.add(process.jetTask, getattr(process, updatedTauName))
+ process.slimmedTausBoosted = process.slimmedTausBoostedNewID.clone()
+ del process.slimmedTausBoostedNewID
+ process.boostedTauTask.add(process.rerunMvaIsolationTaskBoostedForNano, process.slimmedTausBoosted)
return process
+
from PhysicsTools.SelectorUtils.tools.vid_id_tools import *
def nanoAOD_activateVID(process):
- switchOnVIDElectronIdProducer(process,DataFormat.MiniAOD,electronTask)
+ switchOnVIDElectronIdProducer(process, DataFormat.MiniAOD, electronTask)
for modname in electron_id_modules_WorkingPoints_nanoAOD.modules:
- setupAllVIDIdsInModule(process,modname,setupVIDElectronSelection)
+ setupAllVIDIdsInModule(process, modname, setupVIDElectronSelection)
- process.electronTask.add( process.egmGsfElectronIDTask )
+ process.electronTask.add(process.egmGsfElectronIDTask)
- switchOnVIDPhotonIdProducer(process,DataFormat.MiniAOD,photonTask) # do not call this to avoid resetting photon IDs in VID, if called before inside makePuppiesFromMiniAOD
+ # do not call this to avoid resetting photon IDs in VID, if called before inside makePuppiesFromMiniAOD
+ switchOnVIDPhotonIdProducer(process, DataFormat.MiniAOD, photonTask)
for modname in photon_id_modules_WorkingPoints_nanoAOD.modules:
- setupAllVIDIdsInModule(process,modname,setupVIDPhotonSelection)
+ setupAllVIDIdsInModule(process, modname, setupVIDPhotonSelection)
- process.photonTask.add( process.egmPhotonIDTask )
+ process.photonTask.add(process.egmPhotonIDTask)
return process
+
def nanoAOD_customizeCommon(process):
process = nanoAOD_activateVID(process)
- run2_nanoAOD_106Xv2.toModify(
- nanoAOD_addDeepInfoAK4CHS_switch, nanoAOD_addParticleNet_switch=True,
- nanoAOD_addRobustParTAK4Tag_switch=False,
- nanoAOD_addUnifiedParTAK4Tag_switch=True,
+ nanoAOD_rePuppi_switch = cms.PSet(
+ useExistingWeights=cms.bool(False),
+ reclusterAK4MET=cms.bool(False),
+ reclusterAK8=cms.bool(False),
+ )
+
+ # recompute Puppi weights, and remake AK4, AK8 Puppi jets and PuppiMET
+ (run2_nanoAOD_106Xv2 | run3_nanoAOD_pre142X | nanoAOD_rePuppi).toModify(
+ nanoAOD_rePuppi_switch, useExistingWeights=False, reclusterAK4MET=True, reclusterAK8=True
)
-
+
+ runOnMC = True
+ if hasattr(process, "NANOEDMAODoutput") or hasattr(process, "NANOAODoutput"):
+ runOnMC = False
+ from PhysicsTools.PatAlgos.tools.puppiJetMETReclusteringFromMiniAOD_cff import puppiJetMETReclusterFromMiniAOD
+ puppiJetMETReclusterFromMiniAOD(process,
+ runOnMC=runOnMC,
+ useExistingWeights=nanoAOD_rePuppi_switch.useExistingWeights.value(),
+ reclusterAK4MET=nanoAOD_rePuppi_switch.reclusterAK4MET.value(),
+ reclusterAK8=nanoAOD_rePuppi_switch.reclusterAK8.value(),
+ )
+
# This function is defined in jetsAK4_Puppi_cff.py
process = nanoAOD_addDeepInfoAK4(process,
- addParticleNet=nanoAOD_addDeepInfoAK4_switch.nanoAOD_addParticleNet_switch,
- addRobustParTAK4=nanoAOD_addDeepInfoAK4_switch.nanoAOD_addRobustParTAK4Tag_switch,
- addUnifiedParTAK4=nanoAOD_addDeepInfoAK4_switch.nanoAOD_addUnifiedParTAK4Tag_switch
- )
+ addParticleNet=nanoAOD_addDeepInfoAK4_switch.nanoAOD_addParticleNet_switch,
+ addRobustParTAK4=nanoAOD_addDeepInfoAK4_switch.nanoAOD_addRobustParTAK4Tag_switch,
+ addUnifiedParTAK4=nanoAOD_addDeepInfoAK4_switch.nanoAOD_addUnifiedParTAK4Tag_switch
+ )
+ # Needs to run PNet on CHS jets to update the tau collections
+ run2_nanoAOD_106Xv2.toModify(
+ nanoAOD_addDeepInfoAK4CHS_switch, nanoAOD_addParticleNet_switch=True,
+ )
# This function is defined in jetsAK4_CHS_cff.py
- process = nanoAOD_addDeepInfoAK4CHS(process,
- addDeepBTag=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addDeepBTag_switch,
+ process = nanoAOD_addDeepInfoAK4CHS(
+ process, addDeepBTag=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addDeepBTag_switch,
addDeepFlavour=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addDeepFlavourTag_switch,
addParticleNet=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addParticleNet_switch,
addRobustParTAK4=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addRobustParTAK4Tag_switch,
- addUnifiedParTAK4=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addUnifiedParTAK4Tag_switch
- )
+ addUnifiedParTAK4=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addUnifiedParTAK4Tag_switch)
# This function is defined in jetsAK8_cff.py
- process = nanoAOD_addDeepInfoAK8(process,
- addDeepBTag=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepBTag_switch,
+ process = nanoAOD_addDeepInfoAK8(
+ process, addDeepBTag=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepBTag_switch,
addDeepBoostedJet=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepBoostedJet_switch,
addDeepDoubleX=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepDoubleX_switch,
addDeepDoubleXV2=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepDoubleXV2_switch,
addParticleNetMassLegacy=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addParticleNetMassLegacy_switch,
+ addParticleNetLegacy=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addParticleNetLegacy_switch,
addParticleNet=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addParticleNet_switch,
addGlobalParT=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addGlobalParT_switch,
- jecPayload=nanoAOD_addDeepInfoAK8_switch.jecPayload
- )
+ jecPayload=nanoAOD_addDeepInfoAK8_switch.jecPayload)
nanoAOD_tau_switch = cms.PSet(
- idsToAdd = cms.vstring(),
- addUParTInfo = cms.bool(False),
- addPNet = cms.bool(False)
- )
- (run2_nanoAOD_106Xv2).toModify(
- nanoAOD_tau_switch, idsToAdd = ["deepTau2018v2p5"]
- ).toModify(
- process, lambda p : nanoAOD_addTauIds(p, nanoAOD_tau_switch.idsToAdd.value())
+ idsToAdd=cms.vstring(),
+ addPNetCHS=cms.bool(False),
+ addUParTPuppi=cms.bool(False)
)
-
- # Add Unified Tagger for CHS jets (PNet) for Run 2 era,
- # but don't add Unified Tagger for PUPPI jets (as different PUPPI tune
- # and base jet algorithm)
(run2_nanoAOD_106Xv2).toModify(
- nanoAOD_tau_switch, addPNet = True
- )
- # Add Unified Taggers for Run 3 pre 142X (pre v15) era (Unified taggers
- # are already added to slimmedTaus in miniAOD for newer eras)
- run3_nanoAOD_pre142X.toModify(
- nanoAOD_tau_switch, addPNet = True, addUParTInfo = True
+ nanoAOD_tau_switch, idsToAdd=["deepTau2018v2p5"]
)
-
- # Add Unified Tagger For CHS Jets (PNet 2023)
- nanoAOD_addUTagToTaus(process,
- addUTagInfo = nanoAOD_tau_switch.addPNet.value(),
- usePUPPIjets = False
+ (run2_nanoAOD_106Xv2 | run3_nanoAOD_pre142X).toModify(
+ nanoAOD_tau_switch, addPNetCHS=True, addUParTPuppi=True,
)
+ nanoAOD_addTauIds(process,
+ idsToRun=nanoAOD_tau_switch.idsToAdd.value(),
+ addPNetCHS=nanoAOD_tau_switch.addPNetCHS.value(),
+ addUParTPuppi=nanoAOD_tau_switch.addUParTPuppi.value(),
+ )
- # Add Unified Tagger For PUPPI Jets (UParT 2024)
- nanoAOD_addUTagToTaus(process,
- addUTagInfo = nanoAOD_tau_switch.addUParTInfo.value(),
- usePUPPIjets = True
- )
-
nanoAOD_boostedTau_switch = cms.PSet(
- idsToAdd = cms.vstring()
+ idsToAdd=cms.vstring()
)
run2_nanoAOD_106Xv2.toModify(
- nanoAOD_boostedTau_switch, idsToAdd = ["mvaIso", "mvaIsoNewDM", "mvaIsoDR0p3", "againstEle", "boostedDeepTauRunIIv2p0"]
- ).toModify(
- process, lambda p : nanoAOD_addBoostedTauIds(p, nanoAOD_boostedTau_switch.idsToAdd.value())
- )
+ nanoAOD_boostedTau_switch,
+ idsToAdd=["mvaIso", "mvaIsoNewDM", "mvaIsoDR0p3", "againstEle", "boostedDeepTauRunIIv2p0"])
run3_nanoAOD_pre142X.toModify(
- nanoAOD_boostedTau_switch, idsToAdd = ["boostedDeepTauRunIIv2p0"]
- ).toModify(
- process, lambda p : nanoAOD_addBoostedTauIds(p, nanoAOD_boostedTau_switch.idsToAdd.value())
+ nanoAOD_boostedTau_switch, idsToAdd=["boostedDeepTauRunIIv2p0"]
)
+ nanoAOD_addBoostedTauIds(process, nanoAOD_boostedTau_switch.idsToAdd.value())
# Add lepton time-life info
from PhysicsTools.NanoAOD.leptonTimeLifeInfo_common_cff import addTimeLifeInfoBase
diff --git a/PhysicsTools/NanoAOD/python/nano_eras_cff.py b/PhysicsTools/NanoAOD/python/nano_eras_cff.py
index 4f10bad245bfd..11419dd23bf68 100644
--- a/PhysicsTools/NanoAOD/python/nano_eras_cff.py
+++ b/PhysicsTools/NanoAOD/python/nano_eras_cff.py
@@ -22,8 +22,15 @@
from Configuration.Eras.Modifier_run3_nanoAOD_2025_cff import run3_nanoAOD_2025 # for 2025 data-taking (and possibly also 2026)
from Configuration.Eras.Modifier_run3_nanoAOD_devel_cff import run3_nanoAOD_devel # for development beyond v15
+from Configuration.ProcessModifiers.nanoAOD_rePuppi_cff import nanoAOD_rePuppi
+
+# [General Note]
+# use `runX_nanoAOD_YYY` only for input-dataset-specific changes
+# (e.g., run2_nanoAOD_106Xv2 for 106X MiniAODv2, run3_nanoAOD_pre142X for pre-142X Run3 MiniAODs)
run2_nanoAOD_ANY = (
run2_nanoAOD_106Xv2
)
+# use other modifiers for intrinsic era-dependent changes
run2_egamma = (run2_egamma_2016 | run2_egamma_2017 | run2_egamma_2018)
+run2_muon = (run2_muon_2016 | run2_muon_2017 | run2_muon_2018)
diff --git a/PhysicsTools/PatAlgos/plugins/BuildFile.xml b/PhysicsTools/PatAlgos/plugins/BuildFile.xml
index 1eb494d19fbd3..f6b957843fe26 100644
--- a/PhysicsTools/PatAlgos/plugins/BuildFile.xml
+++ b/PhysicsTools/PatAlgos/plugins/BuildFile.xml
@@ -18,6 +18,7 @@
+
diff --git a/PhysicsTools/PatAlgos/plugins/LeptonUpdater.cc b/PhysicsTools/PatAlgos/plugins/LeptonUpdater.cc
index b50c8a098e40a..cf262c018a86e 100644
--- a/PhysicsTools/PatAlgos/plugins/LeptonUpdater.cc
+++ b/PhysicsTools/PatAlgos/plugins/LeptonUpdater.cc
@@ -1,4 +1,4 @@
-#include "FWCore/Framework/interface/global/EDProducer.h"
+#include "FWCore/Framework/interface/stream/EDProducer.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
@@ -6,6 +6,8 @@
#include "FWCore/Utilities/interface/InputTag.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "PhysicsTools/PatUtils/interface/MiniIsolation.h"
+#include "PhysicsTools/PatAlgos/interface/SoftMuonMvaRun3Estimator.h"
+#include "PhysicsTools/XGBoost/interface/XGBooster.h"
#include "DataFormats/Common/interface/View.h"
#include "DataFormats/PatCandidates/interface/Muon.h"
@@ -18,7 +20,7 @@
namespace pat {
template
- class LeptonUpdater : public edm::global::EDProducer<> {
+ class LeptonUpdater : public edm::stream::EDProducer<> {
public:
explicit LeptonUpdater(const edm::ParameterSet &iConfig)
: src_(consumes>(iConfig.getParameter("src"))),
@@ -32,14 +34,23 @@ namespace pat {
pcToken_ = consumes(iConfig.getParameter("pfCandsForMiniIso"));
}
recomputeMuonBasicSelectors_ = false;
- if (typeid(T) == typeid(pat::Muon))
+ recomputeSoftMuonMvaRun3_ = false;
+ if (typeid(T) == typeid(pat::Muon)) {
recomputeMuonBasicSelectors_ = iConfig.getParameter("recomputeMuonBasicSelectors");
+ recomputeSoftMuonMvaRun3_ = iConfig.getParameter("recomputeSoftMuonMvaRun3");
+ if (recomputeSoftMuonMvaRun3_) {
+ std::string softMvaRun3Model = iConfig.getParameter("softMvaRun3Model");
+ softMuonMvaRun3Booster_ =
+ std::make_unique(edm::FileInPath(softMvaRun3Model + ".model").fullPath(),
+ edm::FileInPath(softMvaRun3Model + ".features").fullPath());
+ }
+ }
produces>();
}
~LeptonUpdater() override {}
- void produce(edm::StreamID, edm::Event &, edm::EventSetup const &) const override;
+ void produce(edm::Event &, const edm::EventSetup &) override;
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions) {
edm::ParameterSetDescription desc;
@@ -53,6 +64,9 @@ namespace pat {
if (typeid(T) == typeid(pat::Muon)) {
desc.add("recomputeMuonBasicSelectors", false)
->setComment("Recompute basic cut-based muon selector flags");
+ desc.add("recomputeSoftMuonMvaRun3", false)->setComment("Recompute Run3 soft muon MVA value");
+ desc.add("softMvaRun3Model", "RecoMuon/MuonIdentification/data/Run2022-20231030-1731-Event0")
+ ->setComment("Run3 soft muon MVA model path");
desc.addOptional>("miniIsoParams")
->setComment("Parameters used for miniIso (as in PATMuonProducer)");
descriptions.add("muonsUpdated", desc);
@@ -76,6 +90,8 @@ namespace pat {
void recomputeMuonBasicSelectors(T &, const reco::Vertex &, const bool) const;
+ void recomputeSoftMuonMvaRun3(T &);
+
private:
// configurables
edm::EDGetTokenT> src_;
@@ -84,8 +100,10 @@ namespace pat {
bool computeMiniIso_;
bool fixDxySign_;
bool recomputeMuonBasicSelectors_;
+ bool recomputeSoftMuonMvaRun3_;
std::vector miniIsoParams_[2];
edm::EDGetTokenT pcToken_;
+ std::unique_ptr softMuonMvaRun3Booster_;
};
// must do the specialization within the namespace otherwise gcc complains
@@ -128,10 +146,18 @@ namespace pat {
lep.setSelectors(muon::makeSelectorBitset(lep, &pv, do_hip_mitigation_2016));
}
+ template
+ void LeptonUpdater::recomputeSoftMuonMvaRun3(T &lep) {}
+
+ template <>
+ void LeptonUpdater::recomputeSoftMuonMvaRun3(pat::Muon &muon) {
+ muon.setSoftMvaRun3Value(computeSoftMvaRun3(*softMuonMvaRun3Booster_, muon));
+ }
+
} // namespace pat
template
-void pat::LeptonUpdater::produce(edm::StreamID, edm::Event &iEvent, edm::EventSetup const &) const {
+void pat::LeptonUpdater::produce(edm::Event &iEvent, edm::EventSetup const &) {
edm::Handle> src;
iEvent.getByToken(src_, src);
@@ -179,6 +205,9 @@ void pat::LeptonUpdater::produce(edm::StreamID, edm::Event &iEvent, edm::Even
}
if (recomputeMuonBasicSelectors_)
recomputeMuonBasicSelectors(lep, pv, do_hip_mitigation_2016);
+ if (recomputeSoftMuonMvaRun3_) {
+ recomputeSoftMuonMvaRun3(lep);
+ }
//Fixing the sign of impact parameters
if (fixDxySign_) {
float signPV = 1.;