From 12a99c21cb94a63cbba8e64d6186e28fc26ddb52 Mon Sep 17 00:00:00 2001 From: Oleg Filatov <20295221+ofivite@users.noreply.github.com> Date: Thu, 30 Jun 2022 16:51:00 +0200 Subject: [PATCH 01/20] add WP definitions to runTauIdMVA --- .../RecoTau/python/tools/runTauIdMVA.py | 37 ++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/RecoTauTag/RecoTau/python/tools/runTauIdMVA.py b/RecoTauTag/RecoTau/python/tools/runTauIdMVA.py index e61582fec7e01..47da3fd18cc6c 100644 --- a/RecoTauTag/RecoTau/python/tools/runTauIdMVA.py +++ b/RecoTauTag/RecoTau/python/tools/runTauIdMVA.py @@ -5,6 +5,36 @@ from RecoTauTag.RecoTau.DeepTau_cfi import DeepTau import os import re +from copy import deepcopy + +WORKING_POINTS_v2p5 = { + "e": { + "VVVLoose": 0.099, + "VVLoose": 0.2384, + "VLoose": 0.4136, + "Loose": 0.688, + "Medium": 0.8704, + "Tight": 0.9669, + "VTight": 0.9882, + "VVTight": 0.9951 + }, + "mu": { + "VLoose": 0.2949, + "Loose": 0.4746, + "Medium": 0.7454, + "Tight": 0.9172 + }, + "jet": { + "VVVLoose": 0.4083, + "VVLoose": 0.6285, + "VLoose": 0.8052, + "Loose": 0.9233, + "Medium": 0.9632, + "Tight": 0.9799, + "VTight": 0.9884, + "VVTight": 0.9931 + } +} class TauIDEmbedder(object): """class to rerun the tau seq and acces trainings from the database""" @@ -58,6 +88,7 @@ def __init__(self, process, debug = False, if discr not in TauIDEmbedder.availableDiscriminators: raise RuntimeError('TauIDEmbedder: discriminator "{}" is not supported'.format(discr)) self.toKeep = toKeep + self.working_points_v2p5 = deepcopy(WORKING_POINTS_v2p5) @staticmethod @@ -670,11 +701,7 @@ def runTauID(self): if self.debug: print ("Adding DeepTau IDs") _deepTauName = "deepTau2018v2p5" - workingPoints_ = { - "e": {}, - "mu": {}, - "jet": {}, - } + workingPoints_ = self.working_points_v2p5 file_names = [ 'core:RecoTauTag/TrainingFiles/data/DeepTauId/deepTau_2018v2p5_core.pb', From 776363f2ab5a4cb0aa0d14a2d9d586a45a640580 Mon Sep 17 00:00:00 2001 From: Oleg Filatov <20295221+ofivite@users.noreply.github.com> Date: Thu, 30 Jun 2022 16:58:30 +0200 Subject: [PATCH 02/20] vars for DeepTau v2p5 scores and WPs to nano --- PhysicsTools/NanoAOD/python/taus_cff.py | 45 ++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/PhysicsTools/NanoAOD/python/taus_cff.py b/PhysicsTools/NanoAOD/python/taus_cff.py index c8a869ef4f7fb..08668449452c1 100644 --- a/PhysicsTools/NanoAOD/python/taus_cff.py +++ b/PhysicsTools/NanoAOD/python/taus_cff.py @@ -9,6 +9,10 @@ ##################### User floats producers, selectors ########################## +# Original DeepTau v2p5 in 12_4_X doesn't include WPs in MINIAOD +# Import thresholds here to define WPs manually from raw scores +from RecoTauTag.RecoTau.tools.runTauIdMVA import WORKING_POINTS_v2p5 +from copy import deepcopy finalTaus = cms.EDFilter("PATTauRefSelector", src = cms.InputTag("slimmedTaus"), @@ -33,20 +37,42 @@ def _tauIdWPMask(pattern, choices, doc=""): return Var(" + ".join(["%d * tauID('%s')" % (pow(2,i), pattern % c) for (i,c) in enumerate(choices)]), "uint8", doc=doc+": bitmask "+", ".join(["%d = %s" % (pow(2,i),c) for (i,c) in enumerate(choices)])) +def _tauIdWPMask_from_raw(pattern, wp_thrs, choices, doc=""): + assert wp_thrs is not None, "wp_thrs argument in _tauIdWPMask_from_raw() is None, expect it to be dict-like" + vs_type = pattern.split('VS')[-1] + if vs_type not in ['e', 'mu', 'jet']: + raise ValueError("in WP from raw computation, vs_type should be in [e,mu,jet], got %s" % vs_type) + + var_definition = [] + for wp_name in choices: + if not isinstance(wp_thrs[vs_type][wp_name], float): + raise TypeError("Threshold for vs_type=%s and WP=%s is not a float number." % (vs_type, wp_name)) + wp_definition = "(tauID('%s')>%.4f)" % (pattern % wp_name, wp_thrs[vs_type][wp_name]) + var_definition.append(wp_definition) + var_definition = " + ".join(var_definition) + + return Var(var_definition, "uint8", doc=doc+": "+", ".join(["%d = %s" % (i,wp_name) for (i,wp_name) in enumerate(choices, start=1)])) + def _tauId2WPMask(pattern,doc): return _tauIdWPMask(pattern,choices=("Loose","Tight"),doc=doc) def _tauId3WPMask(pattern,doc): return _tauIdWPMask(pattern,choices=("Loose","Medium","Tight"),doc=doc) -def _tauId4WPMask(pattern,doc): - return _tauIdWPMask(pattern, choices=("VLoose", "Loose", "Medium", "Tight"), doc=doc) +def _tauId4WPMask(pattern,doc,from_raw=False,wp_thrs=None): + if from_raw: + return _tauIdWPMask_from_raw(pattern, wp_thrs, choices=("VLoose", "Loose", "Medium", "Tight"), doc=doc) + else: + return _tauIdWPMask(pattern,choices=("VLoose", "Loose", "Medium", "Tight"),doc=doc) def _tauId5WPMask(pattern,doc): return _tauIdWPMask(pattern,choices=("VLoose","Loose","Medium","Tight","VTight"),doc=doc) def _tauId6WPMask(pattern,doc): return _tauIdWPMask(pattern,choices=("VLoose","Loose","Medium","Tight","VTight","VVTight"),doc=doc) def _tauId7WPMask(pattern,doc): return _tauIdWPMask(pattern,choices=("VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"),doc=doc) -def _tauId8WPMask(pattern,doc): - return _tauIdWPMask(pattern,choices=("VVVLoose","VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"),doc=doc) +def _tauId8WPMask(pattern,doc,from_raw=False,wp_thrs=None): + if from_raw: + return _tauIdWPMask_from_raw(pattern,wp_thrs,choices=("VVVLoose","VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"),doc=doc) + else: + return _tauIdWPMask(pattern,choices=("VVVLoose","VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"),doc=doc) tauTable = cms.EDProducer("SimpleCandidateFlatTableProducer", src = cms.InputTag("linkedObjects","taus"), @@ -123,10 +149,19 @@ def _tauId8WPMask(pattern,doc): idDeepTau2017v2p1VSmu = _tauId4WPMask("by%sDeepTau2017v2p1VSmu", doc="byDeepTau2017v2p1VSmu ID working points (deepTau2017v2p1)"), idDeepTau2017v2p1VSjet = _tauId8WPMask("by%sDeepTau2017v2p1VSjet", doc="byDeepTau2017v2p1VSjet ID working points (deepTau2017v2p1)"), ) +_deepTauVars2018v2p5 = cms.PSet( + rawDeepTau2018v2p5VSe = Var("tauID('byDeepTau2018v2p5VSeraw')", float, doc="byDeepTau2018v2p5VSe raw output discriminator (deepTau2018v2p5)", precision=10), + rawDeepTau2018v2p5VSmu = Var("tauID('byDeepTau2018v2p5VSmuraw')", float, doc="byDeepTau2018v2p5VSmu raw output discriminator (deepTau2018v2p5)", precision=10), + rawDeepTau2018v2p5VSjet = Var("tauID('byDeepTau2018v2p5VSjetraw')", float, doc="byDeepTau2018v2p5VSjet raw output discriminator (deepTau2018v2p5)", precision=10), + idDeepTau2018v2p5VSe = _tauId8WPMask("by%sDeepTau2018v2p5VSe", doc="byDeepTau2018v2p5VSe ID working points (deepTau2018v2p5)", from_raw=True, wp_thrs=deepcopy(WORKING_POINTS_v2p5)), + idDeepTau2018v2p5VSmu = _tauId4WPMask("by%sDeepTau2018v2p5VSmu", doc="byDeepTau2018v2p5VSmu ID working points (deepTau2018v2p5)", from_raw=True, wp_thrs=deepcopy(WORKING_POINTS_v2p5)), + idDeepTau2018v2p5VSjet = _tauId8WPMask("by%sDeepTau2018v2p5VSjet", doc="byDeepTau2018v2p5VSjet ID working points (deepTau2018v2p5)", from_raw=True, wp_thrs=deepcopy(WORKING_POINTS_v2p5)), +) _variablesMiniV2 = cms.PSet( _tauVarsBase, - _deepTauVars2017v2p1 + _deepTauVars2017v2p1, + _deepTauVars2018v2p5 ) _variablesMiniV1 = cms.PSet( _variablesMiniV2, From be809d4be48f2e002e5cdd6a22f5436d79bdc1f4 Mon Sep 17 00:00:00 2001 From: Oleg Filatov <20295221+ofivite@users.noreply.github.com> Date: Thu, 30 Jun 2022 17:05:19 +0200 Subject: [PATCH 03/20] bitmask to int in previous WPMask --- PhysicsTools/NanoAOD/python/taus_cff.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PhysicsTools/NanoAOD/python/taus_cff.py b/PhysicsTools/NanoAOD/python/taus_cff.py index 08668449452c1..d0e150b2d58e6 100644 --- a/PhysicsTools/NanoAOD/python/taus_cff.py +++ b/PhysicsTools/NanoAOD/python/taus_cff.py @@ -35,8 +35,8 @@ ##################### Tables for final output and docs ########################## def _tauIdWPMask(pattern, choices, doc=""): - return Var(" + ".join(["%d * tauID('%s')" % (pow(2,i), pattern % c) for (i,c) in enumerate(choices)]), "uint8", - doc=doc+": bitmask "+", ".join(["%d = %s" % (pow(2,i),c) for (i,c) in enumerate(choices)])) + return Var(" + ".join(["tauID('%s')" % (pattern % c) for c in choices]), "uint8", + doc=doc+": "+", ".join(["%d = %s" % (i,c) for (i,c) in enumerate(choices, start=1)])) def _tauIdWPMask_from_raw(pattern, wp_thrs, choices, doc=""): assert wp_thrs is not None, "wp_thrs argument in _tauIdWPMask_from_raw() is None, expect it to be dict-like" vs_type = pattern.split('VS')[-1] From 4ecd8ffb248a2d987bc681a4ebf7a19df50e535b Mon Sep 17 00:00:00 2001 From: Oleg Filatov <20295221+ofivite@users.noreply.github.com> Date: Thu, 30 Jun 2022 19:08:10 +0200 Subject: [PATCH 04/20] unify into single _tauIdWPMask() --- PhysicsTools/NanoAOD/python/taus_cff.py | 122 +++++++++++++----------- 1 file changed, 64 insertions(+), 58 deletions(-) diff --git a/PhysicsTools/NanoAOD/python/taus_cff.py b/PhysicsTools/NanoAOD/python/taus_cff.py index d0e150b2d58e6..3a0ffb3266dfa 100644 --- a/PhysicsTools/NanoAOD/python/taus_cff.py +++ b/PhysicsTools/NanoAOD/python/taus_cff.py @@ -11,8 +11,9 @@ # Original DeepTau v2p5 in 12_4_X doesn't include WPs in MINIAOD # Import thresholds here to define WPs manually from raw scores -from RecoTauTag.RecoTau.tools.runTauIdMVA import WORKING_POINTS_v2p5 from copy import deepcopy +from RecoTauTag.RecoTau.tools.runTauIdMVA import WORKING_POINTS_v2p5 +working_points_v2p5 = deepcopy(WORKING_POINTS_v2p5) finalTaus = cms.EDFilter("PATTauRefSelector", src = cms.InputTag("slimmedTaus"), @@ -34,45 +35,25 @@ ) ##################### Tables for final output and docs ########################## -def _tauIdWPMask(pattern, choices, doc=""): - return Var(" + ".join(["tauID('%s')" % (pattern % c) for c in choices]), "uint8", - doc=doc+": "+", ".join(["%d = %s" % (i,c) for (i,c) in enumerate(choices, start=1)])) -def _tauIdWPMask_from_raw(pattern, wp_thrs, choices, doc=""): - assert wp_thrs is not None, "wp_thrs argument in _tauIdWPMask_from_raw() is None, expect it to be dict-like" - vs_type = pattern.split('VS')[-1] - if vs_type not in ['e', 'mu', 'jet']: - raise ValueError("in WP from raw computation, vs_type should be in [e,mu,jet], got %s" % vs_type) - - var_definition = [] - for wp_name in choices: - if not isinstance(wp_thrs[vs_type][wp_name], float): - raise TypeError("Threshold for vs_type=%s and WP=%s is not a float number." % (vs_type, wp_name)) - wp_definition = "(tauID('%s')>%.4f)" % (pattern % wp_name, wp_thrs[vs_type][wp_name]) - var_definition.append(wp_definition) - var_definition = " + ".join(var_definition) - - return Var(var_definition, "uint8", doc=doc+": "+", ".join(["%d = %s" % (i,wp_name) for (i,wp_name) in enumerate(choices, start=1)])) - -def _tauId2WPMask(pattern,doc): - return _tauIdWPMask(pattern,choices=("Loose","Tight"),doc=doc) -def _tauId3WPMask(pattern,doc): - return _tauIdWPMask(pattern,choices=("Loose","Medium","Tight"),doc=doc) -def _tauId4WPMask(pattern,doc,from_raw=False,wp_thrs=None): - if from_raw: - return _tauIdWPMask_from_raw(pattern, wp_thrs, choices=("VLoose", "Loose", "Medium", "Tight"), doc=doc) - else: - return _tauIdWPMask(pattern,choices=("VLoose", "Loose", "Medium", "Tight"),doc=doc) -def _tauId5WPMask(pattern,doc): - return _tauIdWPMask(pattern,choices=("VLoose","Loose","Medium","Tight","VTight"),doc=doc) -def _tauId6WPMask(pattern,doc): - return _tauIdWPMask(pattern,choices=("VLoose","Loose","Medium","Tight","VTight","VVTight"),doc=doc) -def _tauId7WPMask(pattern,doc): - return _tauIdWPMask(pattern,choices=("VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"),doc=doc) -def _tauId8WPMask(pattern,doc,from_raw=False,wp_thrs=None): +def _tauIdWPMask(pattern, choices, doc="", from_raw=False, wp_thrs=None): if from_raw: - return _tauIdWPMask_from_raw(pattern,wp_thrs,choices=("VVVLoose","VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"),doc=doc) + assert wp_thrs is not None, "wp_thrs argument in _tauIdWPMask() is None, expect it to be dict-like" + vs_type = pattern.split('VS')[-1] + if vs_type not in ['e', 'mu', 'jet']: + raise ValueError("in WP from raw computation, vs_type should be in [e,mu,jet], got %s" % vs_type) + + var_definition = [] + for wp_name in choices: + if not isinstance(wp_thrs[vs_type][wp_name], float): + raise TypeError("Threshold for vs_type=%s and WP=%s is not a float number." % (vs_type, wp_name)) + wp_definition = "(tauID('%s')>%.4f)" % (pattern % wp_name, wp_thrs[vs_type][wp_name]) + var_definition.append(wp_definition) + var_definition = " + ".join(var_definition) else: - return _tauIdWPMask(pattern,choices=("VVVLoose","VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"),doc=doc) + var_definition = " + ".join(["tauID('%s')" % (pattern % c) for c in choices]) + + doc = doc + ": "+", ".join(["%d = %s" % (i,c) for (i,c) in enumerate(choices, start=1)]) + return Var(var_definition, "uint8", doc=doc) tauTable = cms.EDProducer("SimpleCandidateFlatTableProducer", src = cms.InputTag("linkedObjects","taus"), @@ -104,7 +85,7 @@ def _tauId8WPMask(pattern,doc,from_raw=False,wp_thrs=None): puCorr = Var( "tauID('puCorrPtSum')", float, doc = "pileup correction", precision=10), photonsOutsideSignalCone = Var( "tauID('photonPtSumOutsideSignalCone')", float, doc = "sum of photons outside signal cone", precision=10), - idAntiMu = _tauId2WPMask("againstMuon%s3", doc= "Anti-muon discriminator V3: "), + idAntiMu = _tauIdWPMask("againstMuon%s3", choices=("Loose","Tight"), doc= "Anti-muon discriminator V3: "), idAntiEleDeadECal = Var("tauID('againstElectronDeadECAL')", bool, doc = "Anti-electron dead-ECal discriminator"), # isoCI3hit = Var( "tauID("byCombinedIsolationDeltaBetaCorrRaw3Hits")" doc="byCombinedIsolationDeltaBetaCorrRaw3Hits raw output discriminator"), @@ -116,46 +97,67 @@ def _tauId8WPMask(pattern,doc,from_raw=False,wp_thrs=None): rawMVAnewDM = Var( "tauID('byIsolationMVArun2v1DBnewDMwLTraw')",float, doc="byIsolationMVArun2v1DBoldDMwLT raw output discriminator (2015)",precision=10), rawMVAoldDM = Var( "tauID('byIsolationMVArun2v1DBoldDMwLTraw')",float, doc="byIsolationMVArun2v1DBoldDMwLT raw output discriminator (2015)",precision=10), rawMVAoldDMdR03 = Var( "tauID('byIsolationMVArun2v1DBdR03oldDMwLTraw')",float, doc="byIsolationMVArun2v1DBoldDMwLT raw output discriminator (2015)",precision=10), - idMVAnewDM = _tauId6WPMask( "by%sIsolationMVArun2v1DBnewDMwLT", doc="IsolationMVArun2v1DBnewDMwLT ID working point (2015)"), - idMVAoldDM = _tauId6WPMask( "by%sIsolationMVArun2v1DBoldDMwLT", doc="IsolationMVArun2v1DBoldDMwLT ID working point (2015)"), - idMVAoldDMdR03 = _tauId6WPMask( "by%sIsolationMVArun2v1DBdR03oldDMwLT", doc="IsolationMVArun2v1DBoldDMdR0p3wLT ID working point (2015)") + idMVAnewDM = _tauIdWPMask( "by%sIsolationMVArun2v1DBnewDMwLT", choices=("VLoose","Loose","Medium","Tight","VTight","VVTight"), doc="IsolationMVArun2v1DBnewDMwLT ID working point (2015)"), + idMVAoldDM = _tauIdWPMask( "by%sIsolationMVArun2v1DBoldDMwLT", choices=("VLoose","Loose","Medium","Tight","VTight","VVTight"), doc="IsolationMVArun2v1DBoldDMwLT ID working point (2015)"), + idMVAoldDMdR03 = _tauIdWPMask( "by%sIsolationMVArun2v1DBdR03oldDMwLT", choices=("VLoose","Loose","Medium","Tight","VTight","VVTight"), doc="IsolationMVArun2v1DBoldDMdR0p3wLT ID working point (2015)") ) _mvaIsoVars2015Reduced = cms.PSet( rawMVAoldDM = Var( "tauID('byIsolationMVArun2v1DBoldDMwLTraw2015')",float, doc="byIsolationMVArun2v1DBoldDMwLT raw output discriminator (2015)",precision=10), - idMVAoldDM = _tauId6WPMask( "by%sIsolationMVArun2v1DBoldDMwLT2015", doc="IsolationMVArun2v1DBoldDMwLT ID working point (2015)"), + idMVAoldDM = _tauIdWPMask( "by%sIsolationMVArun2v1DBoldDMwLT2015", choices=("VLoose","Loose","Medium","Tight","VTight","VVTight"), doc="IsolationMVArun2v1DBoldDMwLT ID working point (2015)"), ) _mvaIsoVars2017v1 = cms.PSet( rawMVAoldDM2017v1 = Var( "tauID('byIsolationMVArun2v1DBoldDMwLTraw')",float, doc="byIsolationMVArun2v1DBoldDMwLT raw output discriminator (2017v1)",precision=10), - idMVAoldDM2017v1 = _tauId7WPMask( "by%sIsolationMVArun2v1DBoldDMwLT", doc="IsolationMVArun2v1DBoldDMwLT ID working point (2017v1)") + idMVAoldDM2017v1 = _tauIdWPMask( "by%sIsolationMVArun2v1DBoldDMwLT", choices=("VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), doc="IsolationMVArun2v1DBoldDMwLT ID working point (2017v1)") ) _mvaIsoVars2017v2 = cms.PSet( rawMVAnewDM2017v2 = Var( "tauID('byIsolationMVArun2v1DBnewDMwLTraw2017v2')",float, doc="byIsolationMVArun2v1DBnewDMwLT raw output discriminator (2017v2)",precision=10), rawMVAoldDM2017v2 = Var( "tauID('byIsolationMVArun2v1DBoldDMwLTraw2017v2')",float, doc="byIsolationMVArun2v1DBoldDMwLT raw output discriminator (2017v2)",precision=10), rawMVAoldDMdR032017v2 = Var( "tauID('byIsolationMVArun2v1DBdR03oldDMwLTraw2017v2')",float, doc="byIsolationMVArun2v1DBdR03oldDMwLT raw output discriminator (2017v2)",precision=10), - idMVAnewDM2017v2 = _tauId7WPMask( "by%sIsolationMVArun2v1DBnewDMwLT2017v2", doc="IsolationMVArun2v1DBnewDMwLT ID working point (2017v2)"), - idMVAoldDM2017v2 = _tauId7WPMask( "by%sIsolationMVArun2v1DBoldDMwLT2017v2", doc="IsolationMVArun2v1DBoldDMwLT ID working point (2017v2)"), - idMVAoldDMdR032017v2 = _tauId7WPMask( "by%sIsolationMVArun2v1DBdR03oldDMwLT2017v2", doc="IsolationMVArun2v1DBoldDMdR0p3wLT ID working point (2017v2)") + idMVAnewDM2017v2 = _tauIdWPMask( "by%sIsolationMVArun2v1DBnewDMwLT2017v2", + choices=("VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), + doc="IsolationMVArun2v1DBnewDMwLT ID working point (2017v2)"), + idMVAoldDM2017v2 = _tauIdWPMask( "by%sIsolationMVArun2v1DBoldDMwLT2017v2", + choices=("VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), + doc="IsolationMVArun2v1DBoldDMwLT ID working point (2017v2)"), + idMVAoldDMdR032017v2 = _tauIdWPMask( "by%sIsolationMVArun2v1DBdR03oldDMwLT2017v2", + choices=("VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), + doc="IsolationMVArun2v1DBoldDMdR0p3wLT ID working point (2017v2)") ) _mvaAntiEVars2015 = cms.PSet( rawAntiEle = Var("tauID('againstElectronMVA6Raw')", float, doc= "Anti-electron MVA discriminator V6 raw output discriminator (2015)", precision=10), rawAntiEleCat = Var("tauID('againstElectronMVA6category')", int, doc="Anti-electron MVA discriminator V6 category (2015"), - idAntiEle = _tauId5WPMask("againstElectron%sMVA6", doc= "Anti-electron MVA discriminator V6 (2015)"), + idAntiEle = _tauIdWPMask("againstElectron%sMVA6", choices=("VLoose","Loose","Medium","Tight","VTight"), doc= "Anti-electron MVA discriminator V6 (2015)"), ) _deepTauVars2017v2p1 = cms.PSet( rawDeepTau2017v2p1VSe = Var("tauID('byDeepTau2017v2p1VSeraw')", float, doc="byDeepTau2017v2p1VSe raw output discriminator (deepTau2017v2p1)", precision=10), rawDeepTau2017v2p1VSmu = Var("tauID('byDeepTau2017v2p1VSmuraw')", float, doc="byDeepTau2017v2p1VSmu raw output discriminator (deepTau2017v2p1)", precision=10), rawDeepTau2017v2p1VSjet = Var("tauID('byDeepTau2017v2p1VSjetraw')", float, doc="byDeepTau2017v2p1VSjet raw output discriminator (deepTau2017v2p1)", precision=10), - idDeepTau2017v2p1VSe = _tauId8WPMask("by%sDeepTau2017v2p1VSe", doc="byDeepTau2017v2p1VSe ID working points (deepTau2017v2p1)"), - idDeepTau2017v2p1VSmu = _tauId4WPMask("by%sDeepTau2017v2p1VSmu", doc="byDeepTau2017v2p1VSmu ID working points (deepTau2017v2p1)"), - idDeepTau2017v2p1VSjet = _tauId8WPMask("by%sDeepTau2017v2p1VSjet", doc="byDeepTau2017v2p1VSjet ID working points (deepTau2017v2p1)"), + idDeepTau2017v2p1VSe = _tauIdWPMask("by%sDeepTau2017v2p1VSe", + choices=("VVVLoose","VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), + doc="byDeepTau2017v2p1VSe ID working points (deepTau2017v2p1)"), + idDeepTau2017v2p1VSmu = _tauIdWPMask("by%sDeepTau2017v2p1VSmu", + choices=("VLoose", "Loose", "Medium", "Tight"), + doc="byDeepTau2017v2p1VSmu ID working points (deepTau2017v2p1)"), + idDeepTau2017v2p1VSjet = _tauIdWPMask("by%sDeepTau2017v2p1VSjet", + choices=("VVVLoose","VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), + doc="byDeepTau2017v2p1VSjet ID working points (deepTau2017v2p1)"), ) _deepTauVars2018v2p5 = cms.PSet( rawDeepTau2018v2p5VSe = Var("tauID('byDeepTau2018v2p5VSeraw')", float, doc="byDeepTau2018v2p5VSe raw output discriminator (deepTau2018v2p5)", precision=10), rawDeepTau2018v2p5VSmu = Var("tauID('byDeepTau2018v2p5VSmuraw')", float, doc="byDeepTau2018v2p5VSmu raw output discriminator (deepTau2018v2p5)", precision=10), rawDeepTau2018v2p5VSjet = Var("tauID('byDeepTau2018v2p5VSjetraw')", float, doc="byDeepTau2018v2p5VSjet raw output discriminator (deepTau2018v2p5)", precision=10), - idDeepTau2018v2p5VSe = _tauId8WPMask("by%sDeepTau2018v2p5VSe", doc="byDeepTau2018v2p5VSe ID working points (deepTau2018v2p5)", from_raw=True, wp_thrs=deepcopy(WORKING_POINTS_v2p5)), - idDeepTau2018v2p5VSmu = _tauId4WPMask("by%sDeepTau2018v2p5VSmu", doc="byDeepTau2018v2p5VSmu ID working points (deepTau2018v2p5)", from_raw=True, wp_thrs=deepcopy(WORKING_POINTS_v2p5)), - idDeepTau2018v2p5VSjet = _tauId8WPMask("by%sDeepTau2018v2p5VSjet", doc="byDeepTau2018v2p5VSjet ID working points (deepTau2018v2p5)", from_raw=True, wp_thrs=deepcopy(WORKING_POINTS_v2p5)), + idDeepTau2018v2p5VSe = _tauIdWPMask("by%sDeepTau2018v2p5VSe", + choices=("VVVLoose","VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), + doc="byDeepTau2018v2p5VSe ID working points (deepTau2018v2p5)", + from_raw=True, wp_thrs=working_points_v2p5), + idDeepTau2018v2p5VSmu = _tauIdWPMask("by%sDeepTau2018v2p5VSmu", + choices=("VLoose", "Loose", "Medium", "Tight"), + doc="byDeepTau2018v2p5VSmu ID working points (deepTau2018v2p5)", + from_raw=True, wp_thrs=working_points_v2p5), + idDeepTau2018v2p5VSjet = _tauIdWPMask("by%sDeepTau2018v2p5VSjet", + choices=("VVVLoose","VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), + doc="byDeepTau2018v2p5VSjet ID working points (deepTau2018v2p5)", + from_raw=True, wp_thrs=working_points_v2p5), ) _variablesMiniV2 = cms.PSet( @@ -169,8 +171,12 @@ def _tauId8WPMask(pattern,doc,from_raw=False,wp_thrs=None): ) _variablesMiniV1.rawMVAoldDM = Var( "tauID('byIsolationMVArun2v1DBoldDMwLTraw')",float, doc="byIsolationMVArun2v1DBoldDMwLT raw output discriminator (2015)",precision=10) _variablesMiniV1.rawMVAoldDM2017v1 = Var( "tauID('byIsolationMVArun2v1DBoldDMwLTraw2017v1')",float, doc="byIsolationMVArun2v1DBoldDMwLT raw output discriminator (2017v1)",precision=10) -_variablesMiniV1.idMVAoldDM = _tauId6WPMask( "by%sIsolationMVArun2v1DBoldDMwLT", doc="IsolationMVArun2v1DBoldDMwLT ID working point (2015)") -_variablesMiniV1.idMVAoldDM2017v1 = _tauId7WPMask( "by%sIsolationMVArun2v1DBoldDMwLT2017v1", doc="IsolationMVArun2v1DBoldDMwLT ID working point (2017v1)") +_variablesMiniV1.idMVAoldDM = _tauIdWPMask( "by%sIsolationMVArun2v1DBoldDMwLT", + choices=("VLoose","Loose","Medium","Tight","VTight","VVTight"), + doc="IsolationMVArun2v1DBoldDMwLT ID working point (2015)") +_variablesMiniV1.idMVAoldDM2017v1 = _tauIdWPMask( "by%sIsolationMVArun2v1DBoldDMwLT2017v1", + choices=("VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), + doc="IsolationMVArun2v1DBoldDMwLT ID working point (2017v1)") _variables80X = cms.PSet( _tauVarsBase, _mvaAntiEVars2015, @@ -194,10 +200,10 @@ def _tauId8WPMask(pattern,doc,from_raw=False,wp_thrs=None): era.toModify(tauTable.variables, rawAntiEle2018 = Var("tauID('againstElectronMVA6Raw2018')", float, doc= "Anti-electron MVA discriminator V6 raw output discriminator (2018)", precision=10), rawAntiEleCat2018 = Var("tauID('againstElectronMVA6category2018')", int, doc="Anti-electron MVA discriminator V6 category (2018)"), - idAntiEle2018 = _tauId5WPMask("againstElectron%sMVA62018", doc= "Anti-electron MVA discriminator V6 (2018)"), + idAntiEle2018 = _tauIdWPMask("againstElectron%sMVA62018", choices=("VLoose","Loose","Medium","Tight","VTight"), doc= "Anti-electron MVA discriminator V6 (2018)"), rawAntiEle = Var("tauID('againstElectronMVA6Raw')", float, doc= "Anti-electron MVA discriminator V6 raw output discriminator (2015)", precision=10), rawAntiEleCat = Var("tauID('againstElectronMVA6category')", int, doc="Anti-electron MVA discriminator V6 category (2015"), - idAntiEle = _tauId5WPMask("againstElectron%sMVA6", doc= "Anti-electron MVA discriminator V6 (2015)") + idAntiEle = _tauIdWPMask("againstElectron%sMVA6", choices=("VLoose","Loose","Medium","Tight","VTight"), doc= "Anti-electron MVA discriminator V6 (2015)") ) for era in [run2_miniAOD_80XLegacy, run2_nanoAOD_92X, run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2, \ From 2f3c2e6a227285c382a1608c2dca54d351e71150 Mon Sep 17 00:00:00 2001 From: Oleg Filatov <20295221+ofivite@users.noreply.github.com> Date: Mon, 11 Jul 2022 18:00:01 +0200 Subject: [PATCH 05/20] update masking functions for boosted cfg --- PhysicsTools/NanoAOD/python/boostedTaus_cff.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/PhysicsTools/NanoAOD/python/boostedTaus_cff.py b/PhysicsTools/NanoAOD/python/boostedTaus_cff.py index 8b128eb76f85e..260ef130a9068 100644 --- a/PhysicsTools/NanoAOD/python/boostedTaus_cff.py +++ b/PhysicsTools/NanoAOD/python/boostedTaus_cff.py @@ -3,7 +3,7 @@ from PhysicsTools.NanoAOD.nano_eras_cff import * ##################### Import reusable funtions and objects from std taus ######## -from PhysicsTools.NanoAOD.taus_cff import _tauId2WPMask,_tauId5WPMask,_tauId7WPMask,tausMCMatchLepTauForTable,tausMCMatchHadTauForTable,tauMCTable +from PhysicsTools.NanoAOD.taus_cff import _tauIdWPMask, tausMCMatchLepTauForTable, tausMCMatchHadTauForTable,tauMCTable ##################### User floats producers, selectors ########################## @@ -39,25 +39,25 @@ neutralIso = Var( "tauID('neutralIsoPtSum')", float, doc = "neutral (photon) isolation", precision=10), puCorr = Var( "tauID('puCorrPtSum')", float, doc = "pileup correction", precision=10), photonsOutsideSignalCone = Var( "tauID('photonPtSumOutsideSignalCone')", float, doc = "sum of photons outside signal cone", precision=10), - idAntiMu = _tauId2WPMask("againstMuon%s3", doc= "Anti-muon discriminator V3: ") + idAntiMu = _tauIdWPMask("againstMuon%s3", choices=("Loose","Tight"), doc= "Anti-muon discriminator V3: ") ) #MVA 2017 v2 variables _boostedTauVarsMVAIso = cms.PSet( rawMVAoldDM2017v2 = Var("tauID('byIsolationMVArun2DBoldDMwLTraw')",float, doc="byIsolationMVArun2DBoldDMwLT raw output discriminator (2017v2)",precision=10), rawMVAnewDM2017v2 = Var("tauID('byIsolationMVArun2DBnewDMwLTraw')",float,doc='byIsolationMVArun2DBnewDMwLT raw output discriminator (2017v2)',precision=10), - idMVAnewDM2017v2 = _tauId7WPMask("by%sIsolationMVArun2DBnewDMwLT", doc="IsolationMVArun2DBnewDMwLT ID working point (2017v2)"), - idMVAoldDM2017v2 = _tauId7WPMask("by%sIsolationMVArun2DBoldDMwLT",doc="IsolationMVArun2DBoldDMwLT ID working point (2017v2)"), + idMVAnewDM2017v2 = _tauIdWPMask("by%sIsolationMVArun2DBnewDMwLT", choices=("VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), doc="IsolationMVArun2DBnewDMwLT ID working point (2017v2)"), + idMVAoldDM2017v2 = _tauIdWPMask("by%sIsolationMVArun2DBoldDMwLT",choices=("VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), doc="IsolationMVArun2DBoldDMwLT ID working point (2017v2)"), ) #MVA 2017 v2 dR<0.3 variables _boostedTauVarsMVAIsoDr03 = cms.PSet( rawMVAoldDMdR032017v2 = Var("tauID('byIsolationMVArun2017v2DBoldDMdR0p3wLTraw2017')",float,doc='byIsolationMVArun2DBoldDMdR0p3wLT raw output discriminator (2017v2)'), - idMVAoldDMdR032017v2 = _tauId7WPMask("by%sIsolationMVArun2017v2DBoldDMdR0p3wLT2017",doc="IsolationMVArun2DBoldDMdR0p3wLT ID working point (2017v2)") + idMVAoldDMdR032017v2 = _tauIdWPMask("by%sIsolationMVArun2017v2DBoldDMdR0p3wLT2017",choices=("VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"),doc="IsolationMVArun2DBoldDMdR0p3wLT ID working point (2017v2)") ) #AntiEle MVA 2018 variables _boostedTauVarsAntiEleMVA = cms.PSet( rawAntiEle2018 = Var("tauID('againstElectronMVA6Raw')", float, doc= "Anti-electron MVA discriminator V6 raw output discriminator (2018)", precision=10), rawAntiEleCat2018 = Var("tauID('againstElectronMVA6category')", int, doc="Anti-electron MVA discriminator V6 category (2018)"), - idAntiEle2018 = _tauId5WPMask("againstElectron%sMVA6", doc= "Anti-electron MVA discriminator V6 (2018)") + idAntiEle2018 = _tauIdWPMask("againstElectron%sMVA6", choices=("VLoose","Loose","Medium","Tight","VTight"), doc= "Anti-electron MVA discriminator V6 (2018)") ) boostedTauTable.variables = cms.PSet( @@ -77,11 +77,11 @@ run2_nanoAOD_106Xv2.toModify(boostedTauTable.variables, rawMVAoldDM2017v2 = Var("tauID('byIsolationMVArun2017v2DBoldDMwLTraw2017')",float, doc="byIsolationMVArun2DBoldDMwLT raw output discriminator (2017v2)",precision=10), rawMVAnewDM2017v2 = Var("tauID('byIsolationMVArun2017v2DBnewDMwLTraw2017')",float,doc='byIsolationMVArun2DBnewDMwLT raw output discriminator (2017v2)',precision=10), - idMVAnewDM2017v2 = _tauId7WPMask("by%sIsolationMVArun2017v2DBnewDMwLT2017", doc="IsolationMVArun2DBnewDMwLT ID working point (2017v2)"), - idMVAoldDM2017v2 = _tauId7WPMask("by%sIsolationMVArun2017v2DBoldDMwLT2017",doc="IsolationMVArun2DBoldDMwLT ID working point (2017v2)"), + idMVAnewDM2017v2 = _tauIdWPMask("by%sIsolationMVArun2017v2DBnewDMwLT2017", choices=("VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"),doc="IsolationMVArun2DBnewDMwLT ID working point (2017v2)"), + idMVAoldDM2017v2 = _tauIdWPMask("by%sIsolationMVArun2017v2DBoldDMwLT2017",choices=("VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"),doc="IsolationMVArun2DBoldDMwLT ID working point (2017v2)"), rawAntiEle2018 = Var("tauID('againstElectronMVA6Raw2018')", float, doc= "Anti-electron MVA discriminator V6 raw output discriminator (2018)", precision=10), rawAntiEleCat2018 = Var("tauID('againstElectronMVA6category2018')", int, doc="Anti-electron MVA discriminator V6 category (2018)"), - idAntiEle2018 = _tauId5WPMask("againstElectron%sMVA62018", doc= "Anti-electron MVA discriminator V6 (2018)") + idAntiEle2018 = _tauIdWPMask("againstElectron%sMVA62018", choices=("VLoose","Loose","Medium","Tight","VTight"), doc= "Anti-electron MVA discriminator V6 (2018)") ) boostedTausMCMatchLepTauForTable = tausMCMatchLepTauForTable.clone( From b6053382046b32780bc0e8dde6bbe96832f44e5b Mon Sep 17 00:00:00 2001 From: Oleg Filatov <20295221+ofivite@users.noreply.github.com> Date: Mon, 11 Jul 2022 18:16:10 +0200 Subject: [PATCH 06/20] move WPs to separate module and rm deepcopy --- PhysicsTools/NanoAOD/python/taus_cff.py | 9 +- RecoTauTag/RecoTau/python/tauIdWPsDefs.py | 59 ++++++++++++ .../RecoTau/python/tools/runTauIdMVA.py | 94 +------------------ 3 files changed, 68 insertions(+), 94 deletions(-) create mode 100644 RecoTauTag/RecoTau/python/tauIdWPsDefs.py diff --git a/PhysicsTools/NanoAOD/python/taus_cff.py b/PhysicsTools/NanoAOD/python/taus_cff.py index 3a0ffb3266dfa..506786d49ffcd 100644 --- a/PhysicsTools/NanoAOD/python/taus_cff.py +++ b/PhysicsTools/NanoAOD/python/taus_cff.py @@ -12,8 +12,7 @@ # Original DeepTau v2p5 in 12_4_X doesn't include WPs in MINIAOD # Import thresholds here to define WPs manually from raw scores from copy import deepcopy -from RecoTauTag.RecoTau.tools.runTauIdMVA import WORKING_POINTS_v2p5 -working_points_v2p5 = deepcopy(WORKING_POINTS_v2p5) +from RecoTauTag.RecoTau.tauIdWPsDefs import WORKING_POINTS_v2p5 finalTaus = cms.EDFilter("PATTauRefSelector", src = cms.InputTag("slimmedTaus"), @@ -149,15 +148,15 @@ def _tauIdWPMask(pattern, choices, doc="", from_raw=False, wp_thrs=None): idDeepTau2018v2p5VSe = _tauIdWPMask("by%sDeepTau2018v2p5VSe", choices=("VVVLoose","VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), doc="byDeepTau2018v2p5VSe ID working points (deepTau2018v2p5)", - from_raw=True, wp_thrs=working_points_v2p5), + from_raw=True, wp_thrs=WORKING_POINTS_v2p5), idDeepTau2018v2p5VSmu = _tauIdWPMask("by%sDeepTau2018v2p5VSmu", choices=("VLoose", "Loose", "Medium", "Tight"), doc="byDeepTau2018v2p5VSmu ID working points (deepTau2018v2p5)", - from_raw=True, wp_thrs=working_points_v2p5), + from_raw=True, wp_thrs=WORKING_POINTS_v2p5), idDeepTau2018v2p5VSjet = _tauIdWPMask("by%sDeepTau2018v2p5VSjet", choices=("VVVLoose","VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), doc="byDeepTau2018v2p5VSjet ID working points (deepTau2018v2p5)", - from_raw=True, wp_thrs=working_points_v2p5), + from_raw=True, wp_thrs=WORKING_POINTS_v2p5), ) _variablesMiniV2 = cms.PSet( diff --git a/RecoTauTag/RecoTau/python/tauIdWPsDefs.py b/RecoTauTag/RecoTau/python/tauIdWPsDefs.py new file mode 100644 index 0000000000000..733e1f4c78656 --- /dev/null +++ b/RecoTauTag/RecoTau/python/tauIdWPsDefs.py @@ -0,0 +1,59 @@ +import FWCore.ParameterSet.Config as cms + +WORKING_POINTS_v2p1 = { + "e": { + "VVVLoose": 0.0630386, + "VVLoose": 0.1686942, + "VLoose": 0.3628130, + "Loose": 0.6815435, + "Medium": 0.8847544, + "Tight": 0.9675541, + "VTight": 0.9859251, + "VVTight": 0.9928449, + }, + "mu": { + "VLoose": 0.1058354, + "Loose": 0.2158633, + "Medium": 0.5551894, + "Tight": 0.8754835, + }, + "jet": { + "VVVLoose": 0.2599605, + "VVLoose": 0.4249705, + "VLoose": 0.5983682, + "Loose": 0.7848675, + "Medium": 0.8834768, + "Tight": 0.9308689, + "VTight": 0.9573137, + "VVTight": 0.9733927, + }, +} + +WORKING_POINTS_v2p5 = { + "e": { + "VVVLoose": 0.099, + "VVLoose": 0.2384, + "VLoose": 0.4136, + "Loose": 0.688, + "Medium": 0.8704, + "Tight": 0.9669, + "VTight": 0.9882, + "VVTight": 0.9951 + }, + "mu": { + "VLoose": 0.2949, + "Loose": 0.4746, + "Medium": 0.7454, + "Tight": 0.9172 + }, + "jet": { + "VVVLoose": 0.4083, + "VVLoose": 0.6285, + "VLoose": 0.8052, + "Loose": 0.9233, + "Medium": 0.9632, + "Tight": 0.9799, + "VTight": 0.9884, + "VVTight": 0.9931 + } +} diff --git a/RecoTauTag/RecoTau/python/tools/runTauIdMVA.py b/RecoTauTag/RecoTau/python/tools/runTauIdMVA.py index 47da3fd18cc6c..66cb678779db3 100644 --- a/RecoTauTag/RecoTau/python/tools/runTauIdMVA.py +++ b/RecoTauTag/RecoTau/python/tools/runTauIdMVA.py @@ -3,38 +3,10 @@ from RecoTauTag.RecoTau.TauDiscriminatorTools import noPrediscriminants from RecoTauTag.RecoTau.PATTauDiscriminationByMVAIsolationRun2_cff import patDiscriminationByIsolationMVArun2v1raw, patDiscriminationByIsolationMVArun2v1 from RecoTauTag.RecoTau.DeepTau_cfi import DeepTau +from RecoTauTag.RecoTau.tauIdWPsDefs import WORKING_POINTS_v2p1, WORKING_POINTS_v2p5 + import os import re -from copy import deepcopy - -WORKING_POINTS_v2p5 = { - "e": { - "VVVLoose": 0.099, - "VVLoose": 0.2384, - "VLoose": 0.4136, - "Loose": 0.688, - "Medium": 0.8704, - "Tight": 0.9669, - "VTight": 0.9882, - "VVTight": 0.9951 - }, - "mu": { - "VLoose": 0.2949, - "Loose": 0.4746, - "Medium": 0.7454, - "Tight": 0.9172 - }, - "jet": { - "VVVLoose": 0.4083, - "VVLoose": 0.6285, - "VLoose": 0.8052, - "Loose": 0.9233, - "Medium": 0.9632, - "Tight": 0.9799, - "VTight": 0.9884, - "VVTight": 0.9931 - } -} class TauIDEmbedder(object): """class to rerun the tau seq and acces trainings from the database""" @@ -88,8 +60,6 @@ def __init__(self, process, debug = False, if discr not in TauIDEmbedder.availableDiscriminators: raise RuntimeError('TauIDEmbedder: discriminator "{}" is not supported'.format(discr)) self.toKeep = toKeep - self.working_points_v2p5 = deepcopy(WORKING_POINTS_v2p5) - @staticmethod def get_cmssw_version(debug = False): @@ -593,34 +563,7 @@ def runTauID(self): if self.debug: print ("Adding DeepTau IDs") _deepTauName = "deepTau2017v2" - workingPoints_ = { - "e": { - "VVVLoose": 0.0630386, - "VVLoose": 0.1686942, - "VLoose": 0.3628130, - "Loose": 0.6815435, - "Medium": 0.8847544, - "Tight": 0.9675541, - "VTight": 0.9859251, - "VVTight": 0.9928449, - }, - "mu": { - "VLoose": 0.1058354, - "Loose": 0.2158633, - "Medium": 0.5551894, - "Tight": 0.8754835, - }, - "jet": { - "VVVLoose": 0.2599605, - "VVLoose": 0.4249705, - "VLoose": 0.5983682, - "Loose": 0.7848675, - "Medium": 0.8834768, - "Tight": 0.9308689, - "VTight": 0.9573137, - "VVTight": 0.9733927, - }, - } + workingPoints_ = WORKING_POINTS_v2p1 file_names = [ 'core:RecoTauTag/TrainingFiles/data/DeepTauId/deepTau_2017v2p6_e6_core.pb', @@ -647,34 +590,7 @@ def runTauID(self): if self.debug: print ("Adding DeepTau IDs") _deepTauName = "deepTau2017v2p1" - workingPoints_ = { - "e": { - "VVVLoose": 0.0630386, - "VVLoose": 0.1686942, - "VLoose": 0.3628130, - "Loose": 0.6815435, - "Medium": 0.8847544, - "Tight": 0.9675541, - "VTight": 0.9859251, - "VVTight": 0.9928449, - }, - "mu": { - "VLoose": 0.1058354, - "Loose": 0.2158633, - "Medium": 0.5551894, - "Tight": 0.8754835, - }, - "jet": { - "VVVLoose": 0.2599605, - "VVLoose": 0.4249705, - "VLoose": 0.5983682, - "Loose": 0.7848675, - "Medium": 0.8834768, - "Tight": 0.9308689, - "VTight": 0.9573137, - "VVTight": 0.9733927, - }, - } + workingPoints_ = WORKING_POINTS_v2p1 file_names = [ 'core:RecoTauTag/TrainingFiles/data/DeepTauId/deepTau_2017v2p6_e6_core.pb', @@ -701,7 +617,7 @@ def runTauID(self): if self.debug: print ("Adding DeepTau IDs") _deepTauName = "deepTau2018v2p5" - workingPoints_ = self.working_points_v2p5 + workingPoints_ = WORKING_POINTS_v2p5 file_names = [ 'core:RecoTauTag/TrainingFiles/data/DeepTauId/deepTau_2018v2p5_core.pb', From a5a192366b857d0f1e8a05c539339729e61966dd Mon Sep 17 00:00:00 2001 From: Oleg Filatov <20295221+ofivite@users.noreply.github.com> Date: Mon, 11 Jul 2022 18:43:24 +0200 Subject: [PATCH 07/20] add cut on VVVLoose wp vs jet for DeepTau v2p5 --- PhysicsTools/NanoAOD/python/taus_cff.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PhysicsTools/NanoAOD/python/taus_cff.py b/PhysicsTools/NanoAOD/python/taus_cff.py index 506786d49ffcd..9acc0f9e0d06b 100644 --- a/PhysicsTools/NanoAOD/python/taus_cff.py +++ b/PhysicsTools/NanoAOD/python/taus_cff.py @@ -16,7 +16,7 @@ finalTaus = cms.EDFilter("PATTauRefSelector", src = cms.InputTag("slimmedTaus"), - cut = cms.string("pt > 18 && tauID('decayModeFindingNewDMs') && (tauID('byLooseCombinedIsolationDeltaBetaCorr3Hits') || (tauID('chargedIsoPtSumdR03')+max(0.,tauID('neutralIsoPtSumdR03')-0.072*tauID('puCorrPtSum'))<2.5) || tauID('byVVVLooseDeepTau2017v2p1VSjet'))") + cut = cms.string("pt > 18 && tauID('decayModeFindingNewDMs') && (tauID('byLooseCombinedIsolationDeltaBetaCorr3Hits') || (tauID('chargedIsoPtSumdR03')+max(0.,tauID('neutralIsoPtSumdR03')-0.072*tauID('puCorrPtSum'))<2.5) || tauID('byVVVLooseDeepTau2017v2p1VSjet') || (tauID('byDeepTau2018v2p5VSjetraw') > %.4f))" % WORKING_POINTS_v2p5["jet"]["VVVLoose"]) ) for era in [run2_nanoAOD_94XMiniAODv2, run2_nanoAOD_94X2016, run2_nanoAOD_102Xv1, run2_nanoAOD_106Xv1]: From a9e6e10118c6c9a397082c63f2be55675c7fd66f Mon Sep 17 00:00:00 2001 From: Oleg Filatov <20295221+ofivite@users.noreply.github.com> Date: Mon, 11 Jul 2022 19:04:09 +0200 Subject: [PATCH 08/20] fix _tauIdWPMask in from_raw mode --- PhysicsTools/NanoAOD/python/taus_cff.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/PhysicsTools/NanoAOD/python/taus_cff.py b/PhysicsTools/NanoAOD/python/taus_cff.py index 9acc0f9e0d06b..ba64ae8cd04ba 100644 --- a/PhysicsTools/NanoAOD/python/taus_cff.py +++ b/PhysicsTools/NanoAOD/python/taus_cff.py @@ -37,15 +37,12 @@ def _tauIdWPMask(pattern, choices, doc="", from_raw=False, wp_thrs=None): if from_raw: assert wp_thrs is not None, "wp_thrs argument in _tauIdWPMask() is None, expect it to be dict-like" - vs_type = pattern.split('VS')[-1] - if vs_type not in ['e', 'mu', 'jet']: - raise ValueError("in WP from raw computation, vs_type should be in [e,mu,jet], got %s" % vs_type) var_definition = [] for wp_name in choices: - if not isinstance(wp_thrs[vs_type][wp_name], float): - raise TypeError("Threshold for vs_type=%s and WP=%s is not a float number." % (vs_type, wp_name)) - wp_definition = "(tauID('%s')>%.4f)" % (pattern % wp_name, wp_thrs[vs_type][wp_name]) + if not isinstance(wp_thrs[wp_name], float): + raise TypeError("Threshold for WP=%s is not a float number." % wp_name) + wp_definition = "(tauID('%s')>%.4f)" % (pattern, wp_thrs[wp_name]) var_definition.append(wp_definition) var_definition = " + ".join(var_definition) else: @@ -145,18 +142,18 @@ def _tauIdWPMask(pattern, choices, doc="", from_raw=False, wp_thrs=None): rawDeepTau2018v2p5VSe = Var("tauID('byDeepTau2018v2p5VSeraw')", float, doc="byDeepTau2018v2p5VSe raw output discriminator (deepTau2018v2p5)", precision=10), rawDeepTau2018v2p5VSmu = Var("tauID('byDeepTau2018v2p5VSmuraw')", float, doc="byDeepTau2018v2p5VSmu raw output discriminator (deepTau2018v2p5)", precision=10), rawDeepTau2018v2p5VSjet = Var("tauID('byDeepTau2018v2p5VSjetraw')", float, doc="byDeepTau2018v2p5VSjet raw output discriminator (deepTau2018v2p5)", precision=10), - idDeepTau2018v2p5VSe = _tauIdWPMask("by%sDeepTau2018v2p5VSe", + idDeepTau2018v2p5VSe = _tauIdWPMask("byDeepTau2018v2p5VSeraw", choices=("VVVLoose","VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), doc="byDeepTau2018v2p5VSe ID working points (deepTau2018v2p5)", - from_raw=True, wp_thrs=WORKING_POINTS_v2p5), - idDeepTau2018v2p5VSmu = _tauIdWPMask("by%sDeepTau2018v2p5VSmu", + from_raw=True, wp_thrs=WORKING_POINTS_v2p5["e"]), + idDeepTau2018v2p5VSmu = _tauIdWPMask("byDeepTau2018v2p5VSmuraw", choices=("VLoose", "Loose", "Medium", "Tight"), doc="byDeepTau2018v2p5VSmu ID working points (deepTau2018v2p5)", - from_raw=True, wp_thrs=WORKING_POINTS_v2p5), - idDeepTau2018v2p5VSjet = _tauIdWPMask("by%sDeepTau2018v2p5VSjet", + from_raw=True, wp_thrs=WORKING_POINTS_v2p5["mu"]), + idDeepTau2018v2p5VSjet = _tauIdWPMask("byDeepTau2018v2p5VSjetraw", choices=("VVVLoose","VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), doc="byDeepTau2018v2p5VSjet ID working points (deepTau2018v2p5)", - from_raw=True, wp_thrs=WORKING_POINTS_v2p5), + from_raw=True, wp_thrs=WORKING_POINTS_v2p5["jet"]), ) _variablesMiniV2 = cms.PSet( From 90ff2ad0d0c391141e379eaf91c897abcb57cb04 Mon Sep 17 00:00:00 2001 From: Oleg Filatov <20295221+ofivite@users.noreply.github.com> Date: Wed, 13 Jul 2022 10:28:51 +0200 Subject: [PATCH 09/20] rm import, add DeepTau v2p5 vars to DQM tools --- PhysicsTools/NanoAOD/python/nanoDQM_cfi.py | 6 ++++++ RecoTauTag/RecoTau/python/tauIdWPsDefs.py | 2 -- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py b/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py index ce4aec22c49ec..c7cc56faab7d0 100644 --- a/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py +++ b/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py @@ -782,6 +782,9 @@ Plot1D('idDeepTau2017v2p1VSe', 'idDeepTau2017v2p1VSe', 256, -0.5, 255.5, 'byDeepTau2017v2p1VSe ID working points (deepTau2017v2p1): bitmask 1 = VVVLoose, 2 = VVLoose, 4 = VLoose, 8 = Loose, 16 = Medium, 32 = Tight, 64 = VTight, 128 = VVTight'), Plot1D('idDeepTau2017v2p1VSjet', 'idDeepTau2017v2p1VSjet', 256, -0.5, 255.5, 'byDeepTau2017v2p1VSjet ID working points (deepTau2017v2p1): bitmask 1 = VVVLoose, 2 = VVLoose, 4 = VLoose, 8 = Loose, 16 = Medium, 32 = Tight, 64 = VTight, 128 = VVTight'), Plot1D('idDeepTau2017v2p1VSmu', 'idDeepTau2017v2p1VSmu', 16, -0.5, 15.5, 'byDeepTau2017v2p1VSmu ID working points (deepTau2017v2p1): bitmask 1 = VLoose, 2 = Loose, 4 = Medium, 8 = Tight'), + Plot1D('idDeepTau2018v2p5VSe', 'idDeepTau2018v2p5VSe', 11, -0.5, 10.5, 'byDeepTau2018v2p5VSe ID working points (deepTau2018v2p5): int 1 = VVVLoose, 2 = VVLoose, 3 = VLoose, 4 = Loose, 5 = Medium, 6 = Tight, 7 = VTight, 8 = VVTight'), + Plot1D('idDeepTau2018v2p5VSjet', 'idDeepTau2018v2p5VSjet', 11, -0.5, 10.5, 'byDeepTau2018v2p5VSjet ID working points (deepTau2018v2p5): int 1 = VVVLoose, 2 = VVLoose, 3 = VLoose, 4 = Loose, 5 = Medium, 6 = Tight, 7 = VTight, 8 = VVTight'), + Plot1D('idDeepTau2018v2p5VSmu', 'idDeepTau2018v2p5VSmu', 11, -0.5, 10.5, 'byDeepTau2018v2p5VSmu ID working points (deepTau2018v2p5): int 1 = VLoose, 2 = Loose, 3 = Medium, 4 = Tight'), NoPlot('jetIdx'), Plot1D('leadTkDeltaEta', 'leadTkDeltaEta', 20, -0.1, 0.1, 'eta of the leading track, minus tau eta'), Plot1D('leadTkDeltaPhi', 'leadTkDeltaPhi', 20, -0.1, 0.1, 'phi of the leading track, minus tau phi'), @@ -795,6 +798,9 @@ Plot1D('rawDeepTau2017v2p1VSe', 'rawDeepTau2017v2p1VSe', 20, 0, 1, 'byDeepTau2017v2p1VSe raw output discriminator (deepTau2017v2p1)'), Plot1D('rawDeepTau2017v2p1VSjet', 'rawDeepTau2017v2p1VSjet', 20, 0, 1, 'byDeepTau2017v2p1VSjet raw output discriminator (deepTau2017v2p1)'), Plot1D('rawDeepTau2017v2p1VSmu', 'rawDeepTau2017v2p1VSmu', 20, 0, 1, 'byDeepTau2017v2p1VSmu raw output discriminator (deepTau2017v2p1)'), + Plot1D('rawDeepTau2018v2p5VSe', 'rawDeepTau2018v2p5VSe', 20, 0, 1, 'byDeepTau2018v2p5VSe raw output discriminator (deepTau2018v2p5)'), + Plot1D('rawDeepTau2018v2p5VSjet', 'rawDeepTau2018v2p5VSjet', 20, 0, 1, 'byDeepTau2018v2p5VSjet raw output discriminator (deepTau2018v2p5)'), + Plot1D('rawDeepTau2018v2p5VSmu', 'rawDeepTau2018v2p5VSmu', 20, 0, 1, 'byDeepTau2018v2p5VSmu raw output discriminator (deepTau2018v2p5)'), Plot1D('rawIso', 'rawIso', 20, 0, 200, 'combined isolation (deltaBeta corrections)'), Plot1D('rawIsodR03', 'rawIsodR03', 20, 0, 200, 'combined isolation (deltaBeta corrections, dR=0.3)'), ) diff --git a/RecoTauTag/RecoTau/python/tauIdWPsDefs.py b/RecoTauTag/RecoTau/python/tauIdWPsDefs.py index 733e1f4c78656..134375939e148 100644 --- a/RecoTauTag/RecoTau/python/tauIdWPsDefs.py +++ b/RecoTauTag/RecoTau/python/tauIdWPsDefs.py @@ -1,5 +1,3 @@ -import FWCore.ParameterSet.Config as cms - WORKING_POINTS_v2p1 = { "e": { "VVVLoose": 0.0630386, From fb1c3e01fec99cfd6bc0b86aae0a2dca022ab356 Mon Sep 17 00:00:00 2001 From: Oleg Filatov <20295221+ofivite@users.noreply.github.com> Date: Wed, 13 Jul 2022 12:11:10 +0200 Subject: [PATCH 10/20] rm deepcopy import --- PhysicsTools/NanoAOD/python/taus_cff.py | 1 - 1 file changed, 1 deletion(-) diff --git a/PhysicsTools/NanoAOD/python/taus_cff.py b/PhysicsTools/NanoAOD/python/taus_cff.py index ba64ae8cd04ba..c1451c1bb4704 100644 --- a/PhysicsTools/NanoAOD/python/taus_cff.py +++ b/PhysicsTools/NanoAOD/python/taus_cff.py @@ -11,7 +11,6 @@ # Original DeepTau v2p5 in 12_4_X doesn't include WPs in MINIAOD # Import thresholds here to define WPs manually from raw scores -from copy import deepcopy from RecoTauTag.RecoTau.tauIdWPsDefs import WORKING_POINTS_v2p5 finalTaus = cms.EDFilter("PATTauRefSelector", From a0befdb70739f48d2bd0917de1909b117592958b Mon Sep 17 00:00:00 2001 From: Oleg Filatov <20295221+ofivite@users.noreply.github.com> Date: Wed, 13 Jul 2022 12:53:25 +0200 Subject: [PATCH 11/20] update threshold parsing from % to format() --- PhysicsTools/NanoAOD/python/taus_cff.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PhysicsTools/NanoAOD/python/taus_cff.py b/PhysicsTools/NanoAOD/python/taus_cff.py index c1451c1bb4704..eec660bda460d 100644 --- a/PhysicsTools/NanoAOD/python/taus_cff.py +++ b/PhysicsTools/NanoAOD/python/taus_cff.py @@ -15,7 +15,7 @@ finalTaus = cms.EDFilter("PATTauRefSelector", src = cms.InputTag("slimmedTaus"), - cut = cms.string("pt > 18 && tauID('decayModeFindingNewDMs') && (tauID('byLooseCombinedIsolationDeltaBetaCorr3Hits') || (tauID('chargedIsoPtSumdR03')+max(0.,tauID('neutralIsoPtSumdR03')-0.072*tauID('puCorrPtSum'))<2.5) || tauID('byVVVLooseDeepTau2017v2p1VSjet') || (tauID('byDeepTau2018v2p5VSjetraw') > %.4f))" % WORKING_POINTS_v2p5["jet"]["VVVLoose"]) + cut = cms.string("pt > 18 && tauID('decayModeFindingNewDMs') && (tauID('byLooseCombinedIsolationDeltaBetaCorr3Hits') || (tauID('chargedIsoPtSumdR03')+max(0.,tauID('neutralIsoPtSumdR03')-0.072*tauID('puCorrPtSum'))<2.5) || tauID('byVVVLooseDeepTau2017v2p1VSjet') || (tauID('byDeepTau2018v2p5VSjetraw') > {}))".format(WORKING_POINTS_v2p5["jet"]["VVVLoose"])) ) for era in [run2_nanoAOD_94XMiniAODv2, run2_nanoAOD_94X2016, run2_nanoAOD_102Xv1, run2_nanoAOD_106Xv1]: @@ -41,7 +41,7 @@ def _tauIdWPMask(pattern, choices, doc="", from_raw=False, wp_thrs=None): for wp_name in choices: if not isinstance(wp_thrs[wp_name], float): raise TypeError("Threshold for WP=%s is not a float number." % wp_name) - wp_definition = "(tauID('%s')>%.4f)" % (pattern, wp_thrs[wp_name]) + wp_definition = "(tauID('{}')>{})".format(pattern, wp_thrs[wp_name]) var_definition.append(wp_definition) var_definition = " + ".join(var_definition) else: From 1ff8c5469507f76c5bcd8721acfabdb621d127dd Mon Sep 17 00:00:00 2001 From: Oleg Filatov <20295221+ofivite@users.noreply.github.com> Date: Wed, 13 Jul 2022 13:01:58 +0200 Subject: [PATCH 12/20] change wp_definition to test_bit() --- PhysicsTools/NanoAOD/python/taus_cff.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PhysicsTools/NanoAOD/python/taus_cff.py b/PhysicsTools/NanoAOD/python/taus_cff.py index eec660bda460d..2734c554a0e64 100644 --- a/PhysicsTools/NanoAOD/python/taus_cff.py +++ b/PhysicsTools/NanoAOD/python/taus_cff.py @@ -41,7 +41,7 @@ def _tauIdWPMask(pattern, choices, doc="", from_raw=False, wp_thrs=None): for wp_name in choices: if not isinstance(wp_thrs[wp_name], float): raise TypeError("Threshold for WP=%s is not a float number." % wp_name) - wp_definition = "(tauID('{}')>{})".format(pattern, wp_thrs[wp_name]) + wp_definition = "test_bit(tauID('{}')-{}+1,0)".format(pattern, wp_thrs[wp_name]) var_definition.append(wp_definition) var_definition = " + ".join(var_definition) else: From 030ad71141008ec11e066a350ff86973238a7985 Mon Sep 17 00:00:00 2001 From: Oleg Filatov <20295221+ofivite@users.noreply.github.com> Date: Wed, 13 Jul 2022 15:12:27 +0200 Subject: [PATCH 13/20] update WP ranges in DQM tools --- PhysicsTools/NanoAOD/python/nanoDQM_cff.py | 24 +++++++++++----------- PhysicsTools/NanoAOD/python/nanoDQM_cfi.py | 16 +++++++-------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/PhysicsTools/NanoAOD/python/nanoDQM_cff.py b/PhysicsTools/NanoAOD/python/nanoDQM_cff.py index 51a6ece603c1c..879bc5126b73e 100644 --- a/PhysicsTools/NanoAOD/python/nanoDQM_cff.py +++ b/PhysicsTools/NanoAOD/python/nanoDQM_cff.py @@ -13,13 +13,13 @@ if (plot.name.value().find("MVA")>-1 and plot.name.value().find("2017")>-1) or (plot.name.value().find("AntiEle")>-1 and plot.name.value().find("2018")>-1) or (plot.name.value().find("AntiEleDeadECal")>-1) or (plot.name.value().find("DeepTau")>-1): continue _tauPlots80X.append(plot) -_tauPlots80X.extend([Plot1D('idMVAnewDM', 'idMVAnewDM', 64, -0.5, 63.5, 'IsolationMVArun2v1DBnewDMwLT ID working point: bitmask 1 = VLoose, 2 = Loose, 4 = Medium, 8 = Tight, 16 = VTight, 32 = VVTight'), - Plot1D('idMVAoldDM', 'idMVAoldDM', 64, -0.5, 63.5, 'IsolationMVArun2v1DBnewDMwLT ID working point: bitmask 1 = VLoose, 2 = Loose, 4 = Medium, 8 = Tight, 16 = VTight, 32 = VVTight'), - Plot1D('idMVAoldDMdR03', 'idMVAoldDMdR03', 64, -0.5, 63.5, 'IsolationMVArun2v1DBdR03oldDMwLT ID working point: bitmask 1 = VLoose, 2 = Loose, 4 = Medium, 8 = Tight, 16 = VTight, 32 = VVTight'), +_tauPlots80X.extend([Plot1D('idMVAnewDM', 'idMVAnewDM', 11, -0.5, 10.5, 'IsolationMVArun2v1DBnewDMwLT ID working point: int 1 = VLoose, 2 = Loose, 3 = Medium, 4 = Tight, 5 = VTight, 6 = VVTight'), + Plot1D('idMVAoldDM', 'idMVAoldDM', 11, -0.5, 10.5, 'IsolationMVArun2v1DBnewDMwLT ID working point: int 1 = VLoose, 2 = Loose, 3 = Medium, 4 = Tight, 5 = VTight, 6 = VVTight'), + Plot1D('idMVAoldDMdR03', 'idMVAoldDMdR03', 11, -0.5, 10.5, 'IsolationMVArun2v1DBdR03oldDMwLT ID working point: int 1 = VLoose, 2 = Loose, 3 = Medium, 4 = Tight, 5 = VTight, 6 = VVTight'), Plot1D('rawMVAnewDM', 'rawMVAnewDM', 20, -1, 1, 'byIsolationMVArun2v1DBnewDMwLT raw output discriminator'), Plot1D('rawMVAoldDM', 'rawMVAoldDM', 20, -1, 1, 'byIsolationMVArun2v1DBnewDMwLT raw output discriminator'), Plot1D('rawMVAoldDMdR03', 'rawMVAoldDMdR03', 20, -1, 1, 'byIsolationMVArun2v1DBdR03oldDMwLT raw output discriminator'), - Plot1D('idAntiEle', 'idAntiEle', 32, -0.5, 31.5, 'Anti-electron MVA discriminator V6: bitmask 1 = VLoose, 2 = Loose, 4 = Medium, 8 = Tight, 16 = VTight'), + Plot1D('idAntiEle', 'idAntiEle', 11, -0.5, 10.5, 'Anti-electron MVA discriminator V6: int 1 = VLoose, 2 = Loose, 3 = Medium, 4 = Tight, 5 = VTight'), Plot1D('rawAnti', 'rawAntiEle', 20, -100, 100, 'Anti-electron MVA discriminator V6 raw output discriminator'), Plot1D('rawAntiEleCat', 'rawAntiEleCat', 17, -1.5, 15.5, 'Anti-electron MVA discriminator V6 category') ]) @@ -34,13 +34,13 @@ _tauPlotsPreV9.extend([ Plot1D('idDecayMode', 'idDecayMode', 2, -0.5, 1.5, "tauID('decayModeFinding')"), Plot1D('idDecayModeNewDMs', 'idDecayModeNewDMs', 2, -0.5, 1.5, "tauID('decayModeFindingNewDMs')"), - Plot1D('idAntiEle', 'idAntiEle', 32, -0.5, 31.5, 'Anti-electron MVA discriminator V6: bitmask 1 = VLoose, 2 = Loose, 4 = Medium, 8 = Tight, 16 = VTight'), - Plot1D('idAntiEle2018', 'idAntiEle2018', 32, -0.5, 31.5, 'Anti-electron MVA discriminator V6 (2018): bitmask 1 = VLoose, 2 = Loose, 4 = Medium, 8 = Tight, 16 = VTight'), - Plot1D('idMVAnewDM2017v2', 'idMVAnewDM2017v2', 128, -0.5, 127.5, 'IsolationMVArun2v1DBnewDMwLT ID working point (2017v2): bitmask 1 = VVLoose, 2 = VLoose, 4 = Loose, 8 = Medium, 16 = Tight, 32 = VTight, 64 = VVTight'), - Plot1D('idMVAoldDM', 'idMVAoldDM', 64, -0.5, 63.5, 'IsolationMVArun2v1DBoldDMwLT ID working point: bitmask 1 = VLoose, 2 = Loose, 4 = Medium, 8 = Tight, 16 = VTight, 32 = VVTight'), - Plot1D('idMVAoldDM2017v1', 'idMVAoldDM2017v1', 128, -0.5, 127.5, 'IsolationMVArun2v1DBoldDMwLT ID working point (2017v1): bitmask 1 = VVLoose, 2 = VLoose, 4 = Loose, 8 = Medium, 16 = Tight, 32 = VTight, 64 = VVTight'), - Plot1D('idMVAoldDM2017v2', 'idMVAoldDM2017v2', 128, -0.5, 127.5, 'IsolationMVArun2v1DBoldDMwLT ID working point (2017v2): bitmask 1 = VVLoose, 2 = VLoose, 4 = Loose, 8 = Medium, 16 = Tight, 32 = VTight, 64 = VVTight'), - Plot1D('idMVAoldDMdR032017v2', 'idMVAoldDMdR032017v2', 128, -0.5, 127.5, 'IsolationMVArun2v1DBdR03oldDMwLT ID working point (217v2): bitmask 1 = VVLoose, 2 = VLoose, 4 = Loose, 8 = Medium, 16 = Tight, 32 = VTight, 64 = VVTight'), + Plot1D('idAntiEle', 'idAntiEle', 11, -0.5, 10.5, 'Anti-electron MVA discriminator V6: int 1 = VLoose, 2 = Loose, 3 = Medium, 4 = Tight, 5 = VTight'), + Plot1D('idAntiEle2018', 'idAntiEle2018', 11, -0.5, 10.5, 'Anti-electron MVA discriminator V6 (2018): int 1 = VLoose, 2 = Loose, 3 = Medium, 4 = Tight, 5 = VTight'), + Plot1D('idMVAnewDM2017v2', 'idMVAnewDM2017v2', 11, -0.5, 10.5, 'IsolationMVArun2v1DBnewDMwLT ID working point (2017v2): int 1 = VVLoose, 2 = VLoose, 3 = Loose, 4 = Medium, 5 = Tight, 6 = VTight, 7 = VVTight'), + Plot1D('idMVAoldDM', 'idMVAoldDM', 11, -0.5, 10.5, 'IsolationMVArun2v1DBoldDMwLT ID working point: int 1 = VLoose, 2 = Loose, 3 = Medium, 4 = Tight, 5 = VTight, 6 = VVTight'), + Plot1D('idMVAoldDM2017v1', 'idMVAoldDM2017v1', 11, -0.5, 10.5, 'IsolationMVArun2v1DBoldDMwLT ID working point (2017v1): int 1 = VVLoose, 2 = VLoose, 3 = Loose, 4 = Medium, 5 = Tight, 6 = VTight, 7 = VVTight'), + Plot1D('idMVAoldDM2017v2', 'idMVAoldDM2017v2', 11, -0.5, 10.5, 'IsolationMVArun2v1DBoldDMwLT ID working point (2017v2): int 1 = VVLoose, 2 = VLoose, 3 = Loose, 4 = Medium, 5 = Tight, 6 = VTight, 7 = VVTight'), + Plot1D('idMVAoldDMdR032017v2', 'idMVAoldDMdR032017v2', 11, -0.5, 10.5, 'IsolationMVArun2v1DBdR03oldDMwLT ID working point (217v2): int 1 = VVLoose, 2 = VLoose, 3 = Loose, 4 = Medium, 5 = Tight, 6 = VTight, 7 = VVTight'), Plot1D('rawAntiEle', 'rawAntiEle', 20, -100, 100, 'Anti-electron MVA discriminator V6 raw output discriminator'), Plot1D('rawAntiEle2018', 'rawAntiEle2018', 20, -100, 100, 'Anti-electron MVA discriminator V6 raw output discriminator (2018)'), Plot1D('rawAntiEleCat', 'rawAntiEleCat', 17, -1.5, 15.5, 'Anti-electron MVA discriminator V6 category'), @@ -58,7 +58,7 @@ for plot in nanoDQM.vplots.boostedTau.plots: _boostedTauPlotsV10.append(plot) _boostedTauPlotsV10.extend([ - Plot1D('idMVAoldDMdR032017v2', 'idMVAoldDMdR032017v2', 128, -0.5, 127.5, 'IsolationMVArun2017v2DBoldDMdR0p3wLT ID working point (2017v2): bitmask 1 = VVLoose, 2 = VLoose, 4 = Loose, 8 = Medium, 16 = Tight, 32 = VTight, 64 = VVTight'), + 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)') ]) diff --git a/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py b/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py index c7cc56faab7d0..68f9fd12f6739 100644 --- a/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py +++ b/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py @@ -777,11 +777,11 @@ Plot1D('genPartFlav', 'genPartFlav', 6, -0.5, 5.5, 'Flavour of genParticle for MC matching to status==2 taus: 1 = prompt electron, 2 = prompt muon, 3 = tau->e decay, 4 = tau->mu decay, 5 = hadronic tau decay, 0 = unknown or unmatched'), NoPlot('genPartIdx'), Plot1D('idAntiEleDeadECal', 'idAntiEleDeadECal', 2, -0.5, 1.5, "tauID('againstElectronDeadECAL')"), - Plot1D('idAntiMu', 'idAntiMu', 4, -0.5, 3.5, 'Anti-muon discriminator V3: : bitmask 1 = Loose, 2 = Tight'), + Plot1D('idAntiMu', 'idAntiMu', 11, -0.5, 10.5, 'Anti-muon discriminator V3: : int 1 = Loose, 2 = Tight'), Plot1D('idDecayModeOldDMs', 'idDecayModeOldDMs', 2, -0.5, 1.5, "tauID('decayModeFinding')"), - Plot1D('idDeepTau2017v2p1VSe', 'idDeepTau2017v2p1VSe', 256, -0.5, 255.5, 'byDeepTau2017v2p1VSe ID working points (deepTau2017v2p1): bitmask 1 = VVVLoose, 2 = VVLoose, 4 = VLoose, 8 = Loose, 16 = Medium, 32 = Tight, 64 = VTight, 128 = VVTight'), - Plot1D('idDeepTau2017v2p1VSjet', 'idDeepTau2017v2p1VSjet', 256, -0.5, 255.5, 'byDeepTau2017v2p1VSjet ID working points (deepTau2017v2p1): bitmask 1 = VVVLoose, 2 = VVLoose, 4 = VLoose, 8 = Loose, 16 = Medium, 32 = Tight, 64 = VTight, 128 = VVTight'), - Plot1D('idDeepTau2017v2p1VSmu', 'idDeepTau2017v2p1VSmu', 16, -0.5, 15.5, 'byDeepTau2017v2p1VSmu ID working points (deepTau2017v2p1): bitmask 1 = VLoose, 2 = Loose, 4 = Medium, 8 = Tight'), + Plot1D('idDeepTau2017v2p1VSe', 'idDeepTau2017v2p1VSe', 11, -0.5, 10.5, 'byDeepTau2017v2p1VSe ID working points (deepTau2017v2p1): int 1 = VVVLoose, 2 = VVLoose, 3 = VLoose, 4 = Loose, 5 = Medium, 6 = Tight, 7 = VTight, 8 = VVTight'), + Plot1D('idDeepTau2017v2p1VSjet', 'idDeepTau2017v2p1VSjet', 11, -0.5, 10.5, 'byDeepTau2017v2p1VSjet ID working points (deepTau2017v2p1): int 1 = VVVLoose, 2 = VVLoose, 3 = VLoose, 4 = Loose, 5 = Medium, 6 = Tight, 7 = VTight, 8 = VVTight'), + Plot1D('idDeepTau2017v2p1VSmu', 'idDeepTau2017v2p1VSmu', 11, -0.5, 10.5, 'byDeepTau2017v2p1VSmu ID working points (deepTau2017v2p1): int 1 = VLoose, 2 = Loose, 3 = Medium, 4 = Tight'), Plot1D('idDeepTau2018v2p5VSe', 'idDeepTau2018v2p5VSe', 11, -0.5, 10.5, 'byDeepTau2018v2p5VSe ID working points (deepTau2018v2p5): int 1 = VVVLoose, 2 = VVLoose, 3 = VLoose, 4 = Loose, 5 = Medium, 6 = Tight, 7 = VTight, 8 = VVTight'), Plot1D('idDeepTau2018v2p5VSjet', 'idDeepTau2018v2p5VSjet', 11, -0.5, 10.5, 'byDeepTau2018v2p5VSjet ID working points (deepTau2018v2p5): int 1 = VVVLoose, 2 = VVLoose, 3 = VLoose, 4 = Loose, 5 = Medium, 6 = Tight, 7 = VTight, 8 = VVTight'), Plot1D('idDeepTau2018v2p5VSmu', 'idDeepTau2018v2p5VSmu', 11, -0.5, 10.5, 'byDeepTau2018v2p5VSmu ID working points (deepTau2018v2p5): int 1 = VLoose, 2 = Loose, 3 = Medium, 4 = Tight'), @@ -848,10 +848,10 @@ Plot1D('eta', 'eta', 20, -3, 3, 'eta'), Plot1D('genPartFlav', 'genPartFlav', 6, -0.5, 5.5, 'Flavour of genParticle for MC matching to status==2 taus: 1 = prompt electron, 2 = prompt muon, 3 = tau->e decay, 4 = tau->mu decay, 5 = hadronic tau decay, 0 = unknown or unmatched'), NoPlot('genPartIdx'), - Plot1D('idAntiEle2018', 'idAntiEle2018', 32, -0.5, 31.5, 'Anti-electron MVA discriminator V6 (2018): bitmask 1 = VLoose, 2 = Loose, 4 = Medium, 8 = Tight, 16 = VTight'), - Plot1D('idAntiMu', 'idAntiMu', 4, -0.5, 3.5, 'Anti-muon discriminator V3: : bitmask 1 = Loose, 2 = Tight'), - Plot1D('idMVAnewDM2017v2', 'idMVAnewDM2017v2', 128, -0.5, 127.5, 'IsolationMVArun2017v2DBnewDMwLT ID working point (2017v2): bitmask 1 = VVLoose, 2 = VLoose, 4 = Loose, 8 = Medium, 16 = Tight, 32 = VTight, 64 = VVTight'), - Plot1D('idMVAoldDM2017v2', 'idMVAoldDM2017v2', 128, -0.5, 127.5, 'IsolationMVArun2017v2DBoldDMwLT ID working point (2017v2): bitmask 1 = VVLoose, 2 = VLoose, 4 = Loose, 8 = Medium, 16 = Tight, 32 = VTight, 64 = VVTight'), + Plot1D('idAntiEle2018', 'idAntiEle2018', 11, -0.5, 10.5, 'Anti-electron MVA discriminator V6 (2018): int 1 = VLoose, 2 = Loose, 3 = Medium, 4 = Tight, 5 = VTight'), + Plot1D('idAntiMu', 'idAntiMu', 11, -0.5, 10.5, 'Anti-muon discriminator V3: : int 1 = Loose, 2 = Tight'), + Plot1D('idMVAnewDM2017v2', 'idMVAnewDM2017v2', 11, -0.5, 10.5, 'IsolationMVArun2017v2DBnewDMwLT ID working point (2017v2): int 1 = VVLoose, 2 = VLoose, 3 = Loose, 4 = Medium, 5 = Tight, 6 = VTight, 7 = VVTight'), + Plot1D('idMVAoldDM2017v2', 'idMVAoldDM2017v2', 11, -0.5, 10.5, 'IsolationMVArun2017v2DBoldDMwLT ID working point (2017v2): int 1 = VVLoose, 2 = VLoose, 3 = Loose, 4 = Medium, 5 = Tight, 6 = VTight, 7 = VVTight'), NoPlot('jetIdx'), Plot1D('leadTkDeltaEta', 'leadTkDeltaEta', 20, -0.1, 0.1, 'eta of the leading track, minus tau eta'), Plot1D('leadTkDeltaPhi', 'leadTkDeltaPhi', 20, -0.1, 0.1, 'phi of the leading track, minus tau phi'), From 719cd280394cc8f2fb875e6d4b2d745d842c95a1 Mon Sep 17 00:00:00 2001 From: Michal Bluj Date: Wed, 13 Jul 2022 16:15:13 +0200 Subject: [PATCH 14/20] not acess deepTauv2p5 with old eras --- PhysicsTools/NanoAOD/python/taus_cff.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/PhysicsTools/NanoAOD/python/taus_cff.py b/PhysicsTools/NanoAOD/python/taus_cff.py index 2734c554a0e64..81672157ac63b 100644 --- a/PhysicsTools/NanoAOD/python/taus_cff.py +++ b/PhysicsTools/NanoAOD/python/taus_cff.py @@ -18,6 +18,10 @@ cut = cms.string("pt > 18 && tauID('decayModeFindingNewDMs') && (tauID('byLooseCombinedIsolationDeltaBetaCorr3Hits') || (tauID('chargedIsoPtSumdR03')+max(0.,tauID('neutralIsoPtSumdR03')-0.072*tauID('puCorrPtSum'))<2.5) || tauID('byVVVLooseDeepTau2017v2p1VSjet') || (tauID('byDeepTau2018v2p5VSjetraw') > {}))".format(WORKING_POINTS_v2p5["jet"]["VVVLoose"])) ) +run2_nanoAOD_106Xv2.toModify(finalTaus, + cut = cms.string("pt > 18 && tauID('decayModeFindingNewDMs') && (tauID('byLooseCombinedIsolationDeltaBetaCorr3Hits') || (tauID('chargedIsoPtSumdR03')+max(0.,tauID('neutralIsoPtSumdR03')-0.072*tauID('puCorrPtSum'))<2.5) || tauID('byVVVLooseDeepTau2017v2p1VSjet'))") +) + for era in [run2_nanoAOD_94XMiniAODv2, run2_nanoAOD_94X2016, run2_nanoAOD_102Xv1, run2_nanoAOD_106Xv1]: era.toModify(finalTaus, src = cms.InputTag("slimmedTausUpdated"), @@ -180,6 +184,14 @@ def _tauIdWPMask(pattern, choices, doc="", from_raw=False, wp_thrs=None): tauTable.variables = _variablesMiniV2 +(run2_nanoAOD_92X | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_94X2016 | run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1 | run2_nanoAOD_106Xv2).toModify(tauTable.variables, + rawDeepTau2018v2p5VSe = None, + rawDeepTau2018v2p5VSmu = None, + rawDeepTau2018v2p5VSjet = None, + idDeepTau2018v2p5VSe = None, + idDeepTau2018v2p5VSmu = None, + idDeepTau2018v2p5VSjet = None + ) (run2_nanoAOD_92X | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_94X2016 | run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1).toModify(tauTable, variables = cms.PSet(tauTable.variables, _mvaIsoVars2015Reduced, _mvaIsoVars2017v1, _mvaIsoVars2017v2) ) From df1aa3dbbbd6df2a085d99b2bacc78e0ae6167b5 Mon Sep 17 00:00:00 2001 From: Michal Bluj Date: Wed, 13 Jul 2022 16:21:05 +0200 Subject: [PATCH 15/20] read WPs of deepTauv2p5 directly from miniAOD --- PhysicsTools/NanoAOD/python/taus_cff.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/PhysicsTools/NanoAOD/python/taus_cff.py b/PhysicsTools/NanoAOD/python/taus_cff.py index 81672157ac63b..0d78cc19ff420 100644 --- a/PhysicsTools/NanoAOD/python/taus_cff.py +++ b/PhysicsTools/NanoAOD/python/taus_cff.py @@ -15,7 +15,7 @@ finalTaus = cms.EDFilter("PATTauRefSelector", src = cms.InputTag("slimmedTaus"), - cut = cms.string("pt > 18 && tauID('decayModeFindingNewDMs') && (tauID('byLooseCombinedIsolationDeltaBetaCorr3Hits') || (tauID('chargedIsoPtSumdR03')+max(0.,tauID('neutralIsoPtSumdR03')-0.072*tauID('puCorrPtSum'))<2.5) || tauID('byVVVLooseDeepTau2017v2p1VSjet') || (tauID('byDeepTau2018v2p5VSjetraw') > {}))".format(WORKING_POINTS_v2p5["jet"]["VVVLoose"])) + cut = cms.string("pt > 18 && tauID('decayModeFindingNewDMs') && (tauID('byLooseCombinedIsolationDeltaBetaCorr3Hits') || (tauID('chargedIsoPtSumdR03')+max(0.,tauID('neutralIsoPtSumdR03')-0.072*tauID('puCorrPtSum'))<2.5) || tauID('byVVVLooseDeepTau2017v2p1VSjet') || tauID('byVVVLooseDeepTau2018v2p5VSjet'))") ) run2_nanoAOD_106Xv2.toModify(finalTaus, @@ -145,18 +145,15 @@ def _tauIdWPMask(pattern, choices, doc="", from_raw=False, wp_thrs=None): rawDeepTau2018v2p5VSe = Var("tauID('byDeepTau2018v2p5VSeraw')", float, doc="byDeepTau2018v2p5VSe raw output discriminator (deepTau2018v2p5)", precision=10), rawDeepTau2018v2p5VSmu = Var("tauID('byDeepTau2018v2p5VSmuraw')", float, doc="byDeepTau2018v2p5VSmu raw output discriminator (deepTau2018v2p5)", precision=10), rawDeepTau2018v2p5VSjet = Var("tauID('byDeepTau2018v2p5VSjetraw')", float, doc="byDeepTau2018v2p5VSjet raw output discriminator (deepTau2018v2p5)", precision=10), - idDeepTau2018v2p5VSe = _tauIdWPMask("byDeepTau2018v2p5VSeraw", + idDeepTau2018v2p5VSe = _tauIdWPMask("by%sDeepTau2018v2p5VSe", choices=("VVVLoose","VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), - doc="byDeepTau2018v2p5VSe ID working points (deepTau2018v2p5)", - from_raw=True, wp_thrs=WORKING_POINTS_v2p5["e"]), - idDeepTau2018v2p5VSmu = _tauIdWPMask("byDeepTau2018v2p5VSmuraw", - choices=("VLoose", "Loose", "Medium", "Tight"), - doc="byDeepTau2018v2p5VSmu ID working points (deepTau2018v2p5)", - from_raw=True, wp_thrs=WORKING_POINTS_v2p5["mu"]), - idDeepTau2018v2p5VSjet = _tauIdWPMask("byDeepTau2018v2p5VSjetraw", + doc="byDeepTau2018v2p5VSe ID working points (deepTau2018v2p5)"), + idDeepTau2018v2p5VSmu = _tauIdWPMask("by%sDeepTau2018v2p5VSmu", + choices=("VLoose", "Loose", "Medium", "Tight"), + doc="byDeepTau2018v2p5VSmu ID working points (deepTau2018v2p5)"), + idDeepTau2018v2p5VSjet = _tauIdWPMask("by%sDeepTau2018v2p5VSjet", choices=("VVVLoose","VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), - doc="byDeepTau2018v2p5VSjet ID working points (deepTau2018v2p5)", - from_raw=True, wp_thrs=WORKING_POINTS_v2p5["jet"]), + doc="byDeepTau2018v2p5VSjet ID working points (deepTau2018v2p5)"), ) _variablesMiniV2 = cms.PSet( From 90ce7ecb13cafc1e9912657deaeaebe6c187ec7b Mon Sep 17 00:00:00 2001 From: Michal Bluj Date: Wed, 13 Jul 2022 17:17:39 +0200 Subject: [PATCH 16/20] fix subevrsion for deepTau v2 --- RecoTauTag/RecoTau/python/tools/runTauIdMVA.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RecoTauTag/RecoTau/python/tools/runTauIdMVA.py b/RecoTauTag/RecoTau/python/tools/runTauIdMVA.py index 66cb678779db3..b7f5785690c8e 100644 --- a/RecoTauTag/RecoTau/python/tools/runTauIdMVA.py +++ b/RecoTauTag/RecoTau/python/tools/runTauIdMVA.py @@ -576,7 +576,7 @@ def runTauID(self): taus = self.originalTauName, graph_file = file_names, version = full_version[1], - sub_version = 0 #MB: subversion cannot be properly deduced from file names + sub_version = 1 #MB: subversion cannot be properly deduced from file names; it should be 1 also for v2 )) self.processDeepProducer(_deepTauName, tauIDSources, workingPoints_) From 25adb353cffcc76eeea25d8c3e56630686bcd0fa Mon Sep 17 00:00:00 2001 From: Michal Bluj Date: Thu, 14 Jul 2022 11:11:26 +0200 Subject: [PATCH 17/20] switch off storing of deepTau v2p5 for old (previously forgotten) eras --- PhysicsTools/NanoAOD/python/taus_cff.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/PhysicsTools/NanoAOD/python/taus_cff.py b/PhysicsTools/NanoAOD/python/taus_cff.py index 0d78cc19ff420..6fd87775f5d66 100644 --- a/PhysicsTools/NanoAOD/python/taus_cff.py +++ b/PhysicsTools/NanoAOD/python/taus_cff.py @@ -181,14 +181,6 @@ def _tauIdWPMask(pattern, choices, doc="", from_raw=False, wp_thrs=None): tauTable.variables = _variablesMiniV2 -(run2_nanoAOD_92X | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_94X2016 | run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1 | run2_nanoAOD_106Xv2).toModify(tauTable.variables, - rawDeepTau2018v2p5VSe = None, - rawDeepTau2018v2p5VSmu = None, - rawDeepTau2018v2p5VSjet = None, - idDeepTau2018v2p5VSe = None, - idDeepTau2018v2p5VSmu = None, - idDeepTau2018v2p5VSjet = None - ) (run2_nanoAOD_92X | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_94X2016 | run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1).toModify(tauTable, variables = cms.PSet(tauTable.variables, _mvaIsoVars2015Reduced, _mvaIsoVars2017v1, _mvaIsoVars2017v2) ) @@ -224,6 +216,16 @@ def _tauIdWPMask(pattern, choices, doc="", from_raw=False, wp_thrs=None): era.toModify(tauTable.variables, idAntiEleDeadECal = Var("tauID('againstElectronDeadECALForNano')", bool, doc = "Anti-electron dead-ECal discriminator"), ) +(run2_nanoAOD_92X | run2_nanoAOD_94XMiniAODv1| run2_nanoAOD_94XMiniAODv2 | \ + run2_nanoAOD_94X2016 | run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1 | \ + run2_nanoAOD_106Xv2).toModify(tauTable.variables, + rawDeepTau2018v2p5VSe = None, + rawDeepTau2018v2p5VSmu = None, + rawDeepTau2018v2p5VSjet = None, + idDeepTau2018v2p5VSe = None, + idDeepTau2018v2p5VSmu = None, + idDeepTau2018v2p5VSjet = None + ) tauGenJetsForNano = tauGenJets.clone( GenParticles = "finalGenParticles", From 7e52abccdfa346a1cda0e746c10a1a9f3f0ee2cf Mon Sep 17 00:00:00 2001 From: Michal Bluj Date: Mon, 25 Jul 2022 12:31:08 +0200 Subject: [PATCH 18/20] Add customization to add items missing in Run-2 UL samples for nano v10 (deepTau v2p5) --- PhysicsTools/NanoAOD/python/nano_cff.py | 26 +++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/PhysicsTools/NanoAOD/python/nano_cff.py b/PhysicsTools/NanoAOD/python/nano_cff.py index 441568d15b0ae..1fb3ead8858f1 100644 --- a/PhysicsTools/NanoAOD/python/nano_cff.py +++ b/PhysicsTools/NanoAOD/python/nano_cff.py @@ -322,3 +322,29 @@ def nanoWmassGenCustomize(process): run2_nanoAOD_106Xv1 ) _modifiers.toModify(linkedObjects,lowPtElectrons="") _modifiers.toModify(simpleCleanerTable,lowPtElectrons="") + +###add items missing in Run-2 UL samples needed for V10 +def nanoAOD_customizeV10(process): + ## deepTauID v2p5 + _originalTauName = process.finalTaus.src.value() + _updatedTauName = _originalTauName+'ForV10' + _tauIdEmbedderForV10 = tauIdConfig.TauIDEmbedder(process, debug = False, + originalTauName = _originalTauName, + updatedTauName = _updatedTauName, + postfix = "V10", + toKeep = ['deepTau2018v2p5']) + _tauIdEmbedderForV10.runTauID() + process.rerunMvaIsolationTaskV10.add(getattr(process, _updatedTauName)) + process.tauTask.add(process.rerunMvaIsolationTaskV10) + process.finalTaus.src = _updatedTauName + #add selection of final taus + _selStrV10 = process.finalTaus.cut.value().replace("tauID('byVVVLooseDeepTau2017v2p1VSjet')", + "tauID('byVVVLooseDeepTau2017v2p1VSjet') || tauID('byVVVLooseDeepTau2018v2p5VSjet')") + process.finalTaus.cut = _selStrV10 + #add to tau table + from PhysicsTools.NanoAOD.taus_cff import _deepTauVars2018v2p5 + _tauVarsForV10 = cms.PSet(process.tauTable.variables, + _deepTauVars2018v2p5) + process.tauTable.variables = _tauVarsForV10 + + return process From bd03a90a52f7a97594b3cd48eda8a070a0d5f95e Mon Sep 17 00:00:00 2001 From: Michal Bluj Date: Mon, 1 Aug 2022 14:33:50 +0200 Subject: [PATCH 19/20] Run deepTauID v2p5 and add it to tau tables for run2_nanoAOD_106Xv2 and run3_nanoAOD_122, and remove not needed customization function --- PhysicsTools/NanoAOD/python/nano_cff.py | 28 ++----------------------- PhysicsTools/NanoAOD/python/taus_cff.py | 20 +++++++----------- 2 files changed, 10 insertions(+), 38 deletions(-) diff --git a/PhysicsTools/NanoAOD/python/nano_cff.py b/PhysicsTools/NanoAOD/python/nano_cff.py index 1fb3ead8858f1..280311a558d15 100644 --- a/PhysicsTools/NanoAOD/python/nano_cff.py +++ b/PhysicsTools/NanoAOD/python/nano_cff.py @@ -277,6 +277,8 @@ def nanoAOD_customizeCommon(process): ) (run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94X2016 | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1).toModify(nanoAOD_tau_switch, idsToAdd = ["deepTau2017v2p1"]) (run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94X2016 | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1).toModify(process, lambda p : nanoAOD_addTauIds(p, nanoAOD_tau_switch.idsToAdd.value())) + (run2_nanoAOD_106Xv2 | run3_nanoAOD_122).toModify(nanoAOD_tau_switch, idsToAdd = ["deepTau2018v2p5"]) + (run2_nanoAOD_106Xv2 | run3_nanoAOD_122).toModify(process, lambda p : nanoAOD_addTauIds(p, nanoAOD_tau_switch.idsToAdd.value())) nanoAOD_boostedTau_switch = cms.PSet( idsToAdd = cms.vstring() ) @@ -322,29 +324,3 @@ def nanoWmassGenCustomize(process): run2_nanoAOD_106Xv1 ) _modifiers.toModify(linkedObjects,lowPtElectrons="") _modifiers.toModify(simpleCleanerTable,lowPtElectrons="") - -###add items missing in Run-2 UL samples needed for V10 -def nanoAOD_customizeV10(process): - ## deepTauID v2p5 - _originalTauName = process.finalTaus.src.value() - _updatedTauName = _originalTauName+'ForV10' - _tauIdEmbedderForV10 = tauIdConfig.TauIDEmbedder(process, debug = False, - originalTauName = _originalTauName, - updatedTauName = _updatedTauName, - postfix = "V10", - toKeep = ['deepTau2018v2p5']) - _tauIdEmbedderForV10.runTauID() - process.rerunMvaIsolationTaskV10.add(getattr(process, _updatedTauName)) - process.tauTask.add(process.rerunMvaIsolationTaskV10) - process.finalTaus.src = _updatedTauName - #add selection of final taus - _selStrV10 = process.finalTaus.cut.value().replace("tauID('byVVVLooseDeepTau2017v2p1VSjet')", - "tauID('byVVVLooseDeepTau2017v2p1VSjet') || tauID('byVVVLooseDeepTau2018v2p5VSjet')") - process.finalTaus.cut = _selStrV10 - #add to tau table - from PhysicsTools.NanoAOD.taus_cff import _deepTauVars2018v2p5 - _tauVarsForV10 = cms.PSet(process.tauTable.variables, - _deepTauVars2018v2p5) - process.tauTable.variables = _tauVarsForV10 - - return process diff --git a/PhysicsTools/NanoAOD/python/taus_cff.py b/PhysicsTools/NanoAOD/python/taus_cff.py index 6fd87775f5d66..106ae3e842230 100644 --- a/PhysicsTools/NanoAOD/python/taus_cff.py +++ b/PhysicsTools/NanoAOD/python/taus_cff.py @@ -18,10 +18,6 @@ cut = cms.string("pt > 18 && tauID('decayModeFindingNewDMs') && (tauID('byLooseCombinedIsolationDeltaBetaCorr3Hits') || (tauID('chargedIsoPtSumdR03')+max(0.,tauID('neutralIsoPtSumdR03')-0.072*tauID('puCorrPtSum'))<2.5) || tauID('byVVVLooseDeepTau2017v2p1VSjet') || tauID('byVVVLooseDeepTau2018v2p5VSjet'))") ) -run2_nanoAOD_106Xv2.toModify(finalTaus, - cut = cms.string("pt > 18 && tauID('decayModeFindingNewDMs') && (tauID('byLooseCombinedIsolationDeltaBetaCorr3Hits') || (tauID('chargedIsoPtSumdR03')+max(0.,tauID('neutralIsoPtSumdR03')-0.072*tauID('puCorrPtSum'))<2.5) || tauID('byVVVLooseDeepTau2017v2p1VSjet'))") -) - for era in [run2_nanoAOD_94XMiniAODv2, run2_nanoAOD_94X2016, run2_nanoAOD_102Xv1, run2_nanoAOD_106Xv1]: era.toModify(finalTaus, src = cms.InputTag("slimmedTausUpdated"), @@ -217,14 +213,14 @@ def _tauIdWPMask(pattern, choices, doc="", from_raw=False, wp_thrs=None): idAntiEleDeadECal = Var("tauID('againstElectronDeadECALForNano')", bool, doc = "Anti-electron dead-ECal discriminator"), ) (run2_nanoAOD_92X | run2_nanoAOD_94XMiniAODv1| run2_nanoAOD_94XMiniAODv2 | \ - run2_nanoAOD_94X2016 | run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1 | \ - run2_nanoAOD_106Xv2).toModify(tauTable.variables, - rawDeepTau2018v2p5VSe = None, - rawDeepTau2018v2p5VSmu = None, - rawDeepTau2018v2p5VSjet = None, - idDeepTau2018v2p5VSe = None, - idDeepTau2018v2p5VSmu = None, - idDeepTau2018v2p5VSjet = None + run2_nanoAOD_94X2016 | run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1 +).toModify(tauTable.variables, + rawDeepTau2018v2p5VSe = None, + rawDeepTau2018v2p5VSmu = None, + rawDeepTau2018v2p5VSjet = None, + idDeepTau2018v2p5VSe = None, + idDeepTau2018v2p5VSmu = None, + idDeepTau2018v2p5VSjet = None ) tauGenJetsForNano = tauGenJets.clone( From d0122b1f7436ac8b0ecc4293b6ab955175183fd9 Mon Sep 17 00:00:00 2001 From: Michal Bluj Date: Tue, 2 Aug 2022 12:01:08 +0200 Subject: [PATCH 20/20] Add suffixes to protect against recreaction of tauId modules with same names and different inputs --- PhysicsTools/NanoAOD/python/nano_cff.py | 7 ++++--- PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py | 5 +++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/PhysicsTools/NanoAOD/python/nano_cff.py b/PhysicsTools/NanoAOD/python/nano_cff.py index 280311a558d15..0010b1cd377e5 100644 --- a/PhysicsTools/NanoAOD/python/nano_cff.py +++ b/PhysicsTools/NanoAOD/python/nano_cff.py @@ -121,10 +121,11 @@ def nanoAOD_addTauIds(process, idsToRun=[]): updatedTauName = "slimmedTausUpdated" tauIdEmbedder = tauIdConfig.TauIDEmbedder(process, debug = False, updatedTauName = updatedTauName, + postfix = "ForNano", toKeep = idsToRun) tauIdEmbedder.runTauID() _tauTask = patTauMVAIDsTask.copy() - _tauTask.add(process.rerunMvaIsolationTask) + _tauTask.add(process.rerunMvaIsolationTaskForNano) _tauTask.add(finalTaus) process.finalTaus.src = updatedTauName #remember to adjust the selection and tables with added IDs @@ -139,10 +140,10 @@ def nanoAOD_addBoostedTauIds(process, idsToRun=[]): boostedTauIdEmbedder = tauIdConfig.TauIDEmbedder(process, debug = False, originalTauName = "slimmedTausBoosted", updatedTauName = updatedBoostedTauName, - postfix = "Boosted", + postfix = "BoostedForNano", toKeep = idsToRun) boostedTauIdEmbedder.runTauID() - _boostedTauTask = process.rerunMvaIsolationTaskBoosted.copy() + _boostedTauTask = process.rerunMvaIsolationTaskBoostedForNano.copy() _boostedTauTask.add(getattr(process, updatedBoostedTauName)) _boostedTauTask.add(process.finalBoostedTaus) process.finalBoostedTaus.src = updatedBoostedTauName diff --git a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py index 43067e68b4ca6..a8078bb6be01d 100644 --- a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py +++ b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py @@ -378,6 +378,7 @@ def _add_deepFlavour(process): process, debug = False, originalTauName = _noUpdatedTauName, updatedTauName = _updatedTauName, + postfix = 'ForMini', toKeep = ['deepTau2017v2p1','deepTau2018v2p5'] ) from Configuration.Eras.Modifier_phase2_common_cff import phase2_common #Phase2 Tau MVA @@ -387,8 +388,8 @@ def _add_deepFlavour(process): addToProcessAndTask(_noUpdatedTauName, process.slimmedTaus.clone(),process,task) delattr(process, 'slimmedTaus') process.slimmedTaus = getattr(process, _updatedTauName).clone() - process.rerunMvaIsolationTask.add(process.slimmedTaus) - task.add(process.rerunMvaIsolationTask) + process.rerunMvaIsolationTaskForMini.add(process.slimmedTaus) + task.add(process.rerunMvaIsolationTaskForMini) #-- Rerun tauID against dead ECal towers to taus for the various re-MiniAOD eras # to enable default behoviour with leading track extrapolation to ECAL