Skip to content

Commit

Permalink
store muon mvaID as userFloat, evaluate WPs manually for Run2
Browse files Browse the repository at this point in the history
  • Loading branch information
swertz authored and cramonal committed Oct 28, 2022
1 parent f180c90 commit bdfca86
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 39 deletions.
64 changes: 35 additions & 29 deletions PhysicsTools/NanoAOD/python/muons_cff.py
Expand Up @@ -31,32 +31,8 @@
srcVtx = cms.InputTag("offlineSlimmedPrimaryVertices"),
)

slimmedMuonsWithUserData = cms.EDProducer("PATMuonUserDataEmbedder",
src = cms.InputTag("slimmedMuonsUpdated"),
userFloats = cms.PSet(
miniIsoChg = cms.InputTag("isoForMu:miniIsoChg"),
miniIsoAll = cms.InputTag("isoForMu:miniIsoAll"),
ptRatio = cms.InputTag("ptRatioRelForMu:ptRatio"),
ptRel = cms.InputTag("ptRatioRelForMu:ptRel"),
jetNDauChargedMVASel = cms.InputTag("ptRatioRelForMu:jetNDauChargedMVASel"),
),
userCands = cms.PSet(
jetForLepJetVar = cms.InputTag("ptRatioRelForMu:jetForLepJetVar") # warning: Ptr is null if no match is found
),
)

finalMuons = cms.EDFilter("PATMuonRefSelector",
src = cms.InputTag("slimmedMuonsWithUserData"),
cut = cms.string("pt > 15 || (pt > 3 && (passed('CutBasedIdLoose') || passed('SoftCutBasedId') || passed('SoftMvaId') || passed('CutBasedIdGlobalHighPt') || passed('CutBasedIdTrkHighPt')))")
)

finalLooseMuons = cms.EDFilter("PATMuonRefSelector", # for isotrack cleaning
src = cms.InputTag("slimmedMuonsWithUserData"),
cut = cms.string("pt > 3 && track.isNonnull && isLooseMuon")
)

muonMVAID= cms.EDProducer("EvaluateMuonMVAID",
src = cms.InputTag("linkedObjects","muons"),
muonMVAID = cms.EDProducer("EvaluateMuonMVAID",
src = cms.InputTag("slimmedMuonsUpdated"),
weightFile = cms.FileInPath("RecoMuon/MuonIdentification/data/mvaID.onnx"),
isClassifier = cms.bool(False),
backend = cms.string('ONNX'),
Expand All @@ -81,6 +57,34 @@
)
)

slimmedMuonsWithUserData = cms.EDProducer("PATMuonUserDataEmbedder",
src = cms.InputTag("slimmedMuonsUpdated"),
userFloats = cms.PSet(
miniIsoChg = cms.InputTag("isoForMu:miniIsoChg"),
miniIsoAll = cms.InputTag("isoForMu:miniIsoAll"),
ptRatio = cms.InputTag("ptRatioRelForMu:ptRatio"),
ptRel = cms.InputTag("ptRatioRelForMu:ptRel"),
jetNDauChargedMVASel = cms.InputTag("ptRatioRelForMu:jetNDauChargedMVASel"),
),
userCands = cms.PSet(
jetForLepJetVar = cms.InputTag("ptRatioRelForMu:jetForLepJetVar") # warning: Ptr is null if no match is found
),
)

(run2_miniAOD_80XLegacy | run2_nanoAOD_92X | run2_nanoAOD_94X2016 | run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94XMiniAODv2\
| run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1 | run2_nanoAOD_106Xv2 | run3_nanoAOD_122 ).toModify(slimmedMuonsWithUserData.userFloats,
mvaIDMuon = cms.InputTag("muonMVAID:probGood"))

finalMuons = cms.EDFilter("PATMuonRefSelector",
src = cms.InputTag("slimmedMuonsWithUserData"),
cut = cms.string("pt > 15 || (pt > 3 && (passed('CutBasedIdLoose') || passed('SoftCutBasedId') || passed('SoftMvaId') || passed('CutBasedIdGlobalHighPt') || passed('CutBasedIdTrkHighPt')))")
)

finalLooseMuons = cms.EDFilter("PATMuonRefSelector", # for isotrack cleaning
src = cms.InputTag("slimmedMuonsWithUserData"),
cut = cms.string("pt > 3 && track.isNonnull && isLooseMuon")
)

muonMVATTH= cms.EDProducer("MuonBaseMVAValueMapProducer",
src = cms.InputTag("linkedObjects","muons"),
weightFile = cms.FileInPath("PhysicsTools/NanoAOD/data/mu_BDTG_2017.weights.xml"),
Expand Down Expand Up @@ -176,14 +180,16 @@
),
)

(run2_miniAOD_80XLegacy | run2_nanoAOD_92X | run2_nanoAOD_94X2016 | run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94XMiniAODv2\
| run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1 | run2_nanoAOD_106Xv2 | run3_nanoAOD_122 ).toModify(muonTable.variables,mvaIDMuon=None).toModify(
muonTable.variables, mvaIDMuon_WP = Var("? userFloat('mvaIDMuon') > 0.49 ? 2 : (? userFloat('mvaIDMuon') > 0.08 ? 1 : 0)", "uint8", doc="MVA-based ID selector WPs (1=MVAIDwpMedium,2=MVAIDwpTight)"),
mvaIDMuon = Var("usedFloat('mvaIDMuon')", float, doc="MVA-based ID score",precision=6))

for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016, run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2:
modifier.toModify(muonTable.variables, puppiIsoId = None, softMva = None)

run2_nanoAOD_102Xv1.toModify(muonTable.variables, puppiIsoId = None)

(run2_miniAOD_80XLegacy | run2_nanoAOD_92X | run2_nanoAOD_94X2016 | run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1 | run2_nanoAOD_106Xv2 | run3_nanoAOD_122 ).toModify(muonTable.variables,mvaIDMuon=None).toModify(muonTable.variables,mvaIDMuon_WP=None).toModify(muonTable.externalVariables, mvaIDMuon = ExtVar(cms.InputTag("muonMVAID:probGOOD"),float, doc="MVA-based ID score",precision=6))

# Revert back to AK4 CHS jets for Run 2
run2_nanoAOD_ANY.toModify(ptRatioRelForMu,srcJet="updatedJets")

Expand Down Expand Up @@ -213,5 +219,5 @@
muonMCTask = cms.Task(muonsMCMatchForTable,muonMCTable)
muonTablesTask = cms.Task(muonMVATTH,muonMVALowPt,muonTable)

(run2_miniAOD_80XLegacy | run2_nanoAOD_92X | run2_nanoAOD_94X2016 | run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1 | run2_nanoAOD_106Xv2 | run3_nanoAOD_122 ).toModify(muonTablesTask,muonTablesTask.add(muonMVAID))
(run2_miniAOD_80XLegacy | run2_nanoAOD_92X | run2_nanoAOD_94X2016 | run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1 | run2_nanoAOD_106Xv2 | run3_nanoAOD_122 ).toModify(muonTask,muonTask.add(muonMVAID))

9 changes: 0 additions & 9 deletions PhysicsTools/NanoAOD/python/nanoDQM_cff.py
Expand Up @@ -118,15 +118,6 @@

run2_miniAOD_80XLegacy.toModify(nanoDQM.vplots, IsoTrack = None)

_Muon_plots_preRun3 = copy.deepcopy(nanoDQM.vplots.Muon.plots)

for plot in _Muon_plots_preRun3:
if plot.name.value() == "mvaIDMuon_WP":
_Muon_plots_preRun3.remove(plot)

(run2_miniAOD_80XLegacy | run2_nanoAOD_92X | run2_nanoAOD_94X2016 | run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1 | run2_nanoAOD_106Xv2 |
run3_nanoAOD_122).toModify(nanoDQM.vplots.Muon.plots, plots = _Muon_plots_preRun3 )

## MC
nanoDQMMC = nanoDQM.clone()
nanoDQMMC.vplots.Electron.sels.Prompt = cms.string("genPartFlav == 1")
Expand Down
2 changes: 1 addition & 1 deletion PhysicsTools/NanoAOD/python/nanoDQM_cfi.py
Expand Up @@ -522,7 +522,7 @@
Plot1D('mvaLowPt', 'mvaLowPt', 20, -1, 1, 'Low pt muon ID score'),
Plot1D('mvaLowPtId', 'mvaLowPtId', 3, -0.5, 2.5, 'Low Pt Mva ID from miniAOD selector (1=LowPtMvaLoose, 2=LowPtMvaMedium)'),
Plot1D('mvaTTH', 'mvaTTH', 20, -1, 1, 'TTH MVA lepton ID score'),
Plot1D('mvaIDMuon', 'mvaIDMuon', 20, -1, 1, 'Score of MVA-based muon ID'),
Plot1D('mvaIDMuon', 'mvaIDMuon', 20, 0, 1, 'Score of MVA-based muon ID'),
Plot1D('mvaIDMuon_WP', 'mvaIDMuon_WP', 3, -0.5, 2.5, 'MVA-based ID selector WPs (1=MVAIDwpMedium,2=MVAIDwpTight)'),
Plot1D('nStations', 'nStations', 5, -0.5, 4.5, 'number of matched stations with default arbitration (segment & track)'),
Plot1D('nTrackerLayers', 'nTrackerLayers', 15, 2.5, 17.5, 'number of layers in the tracker'),
Expand Down

0 comments on commit bdfca86

Please sign in to comment.