From e867541bc36b8b8fa018a0d6aa33adb199acc44d 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/18] 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 c7f1a15d89df4170c1e8554265f3d24acc6a25f4 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/18] 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 7518c340bfae6a34e0444e8b35683a19327e103d 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/18] 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 141182cfcb235985b4a41e05927491e29959d8c3 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/18] 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 920d2f878e2c8d708d198454850c8860b5143eb4 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/18] 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 c0feda9923a1b..5a58fc44a3d6c 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 c6f626bde3fb108a64cda03c5e01dd0e4787b1af 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/18] 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 bdf73e96799bf1207a9ae49d8786782cf7a3909e 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/18] 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 7fbd5d3a6717e745c03672c2c82df0eb8789cc90 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/18] 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 6a37fcf2e687c9855a29e286fbdc4a90b774b517 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/18] 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 4eda9a9fb9403..c66d53d2a9396 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 802ee8c61debe0348c33a8ddbdbaacbb858d47a7 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/18] 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 62ac9df90f65fb87fc7a120f0f47c77d101c6449 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/18] 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 9ff2f5eebc04f2d9e9cb938b878bc140ec71fc3a 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/18] 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 9a37a40e6eede5345a3c005cda613f38f36d6a01 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/18] 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 c66d53d2a9396..4522776357fd8 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 dbaf66e8cd9d0df48b08721c41ed862c33ff6f20 Mon Sep 17 00:00:00 2001 From: Michal Bluj Date: Wed, 13 Jul 2022 16:15:13 +0200 Subject: [PATCH 14/18] 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 37c8576ba98e5cc33990e0a14ab35d884e35f74c Mon Sep 17 00:00:00 2001 From: Michal Bluj Date: Wed, 13 Jul 2022 16:21:05 +0200 Subject: [PATCH 15/18] 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 d09f58d02e510ac0dbad39852e3d26d5ca5bfc4c Mon Sep 17 00:00:00 2001 From: Michal Bluj Date: Wed, 13 Jul 2022 17:17:39 +0200 Subject: [PATCH 16/18] 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 01e97e4d6b980456e7df511f8ffed471936d80df Mon Sep 17 00:00:00 2001 From: Michal Bluj Date: Thu, 14 Jul 2022 11:11:26 +0200 Subject: [PATCH 17/18] 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 19182bbd747b78b88da0eac12323133739f8c25f Mon Sep 17 00:00:00 2001 From: Konstantin Date: Mon, 18 Jul 2022 17:02:48 +0200 Subject: [PATCH 18/18] Remove DeepTau v2p5 related modifications. --- PhysicsTools/NanoAOD/python/nanoDQM_cfi.py | 14 +--- PhysicsTools/NanoAOD/python/taus_cff.py | 78 ++++++------------- RecoTauTag/RecoTau/python/tauIdWPsDefs.py | 29 ------- .../RecoTau/python/tools/runTauIdMVA.py | 12 ++- 4 files changed, 34 insertions(+), 99 deletions(-) diff --git a/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py b/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py index 4522776357fd8..e65ff58215ebd 100644 --- a/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py +++ b/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py @@ -782,9 +782,6 @@ 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'), 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'), @@ -798,9 +795,6 @@ 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)'), ) @@ -884,10 +878,10 @@ BeamSpot = cms.PSet( sels = cms.PSet(), plots = cms.VPSet( - Plot1D('z', 'z', 20, 0.5, 1.5, 'BeamSpot center, z coordinate (cm)'), - Plot1D('zError', 'zError', 20, 0., 0.01, 'Error on BeamSpot center, z coordinate (cm)'), - Plot1D('sigmaZ', 'sigmaZ', 20, 0., 10, 'Width of BeamSpot in z (cm)'), - Plot1D('sigmaZError', 'sigmaZError', 20, 0., 0.01, 'Error on width of BeamSpot in z (cm)'), + Plot1D('z', 'z', 20, 0.5, 1.5, 'BeamSpot center, z coordinate (cm)'), + Plot1D('zError', 'zError', 20, 0., 0.01, 'Error on BeamSpot center, z coordinate (cm)'), + Plot1D('sigmaZ', 'sigmaZ', 20, 0., 10, 'Width of BeamSpot in z (cm)'), + Plot1D('sigmaZError', 'sigmaZError', 20, 0., 0.01, 'Error on width of BeamSpot in z (cm)'), ) ), Rho = cms.PSet( diff --git a/PhysicsTools/NanoAOD/python/taus_cff.py b/PhysicsTools/NanoAOD/python/taus_cff.py index 6fd87775f5d66..a804da0a10d15 100644 --- a/PhysicsTools/NanoAOD/python/taus_cff.py +++ b/PhysicsTools/NanoAOD/python/taus_cff.py @@ -1,7 +1,7 @@ import FWCore.ParameterSet.Config as cms from PhysicsTools.NanoAOD.common_cff import * from PhysicsTools.JetMCAlgos.TauGenJets_cfi import tauGenJets -from PhysicsTools.JetMCAlgos.TauGenJetsDecayModeSelectorAllHadrons_cfi import tauGenJetsSelectorAllHadrons +from PhysicsTools.JetMCAlgos.TauGenJetsDecayModeSelectorAllHadrons_cfi import tauGenJetsSelectorAllHadrons ##################### Updated tau collection with MVA-based tau-Ids rerun ####### # Used only in some eras @@ -9,17 +9,9 @@ ##################### 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.tauIdWPsDefs import WORKING_POINTS_v2p5 - 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('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'))") + 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]: @@ -40,7 +32,7 @@ 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" - + var_definition = [] for wp_name in choices: if not isinstance(wp_thrs[wp_name], float): @@ -50,7 +42,7 @@ def _tauIdWPMask(pattern, choices, doc="", from_raw=False, wp_thrs=None): var_definition = " + ".join(var_definition) else: 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) @@ -112,14 +104,14 @@ def _tauIdWPMask(pattern, choices, doc="", from_raw=False, wp_thrs=None): 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 = _tauIdWPMask( "by%sIsolationMVArun2v1DBnewDMwLT2017v2", - choices=("VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), + 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"), + 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"), + idMVAoldDMdR032017v2 = _tauIdWPMask( "by%sIsolationMVArun2v1DBdR03oldDMwLT2017v2", + choices=("VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), doc="IsolationMVArun2v1DBoldDMdR0p3wLT ID working point (2017v2)") ) _mvaAntiEVars2015 = cms.PSet( @@ -131,35 +123,20 @@ def _tauIdWPMask(pattern, choices, doc="", from_raw=False, wp_thrs=None): 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 = _tauIdWPMask("by%sDeepTau2017v2p1VSe", - choices=("VVVLoose","VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), + idDeepTau2017v2p1VSe = _tauIdWPMask("by%sDeepTau2017v2p1VSe", + choices=("VVVLoose","VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), doc="byDeepTau2017v2p1VSe ID working points (deepTau2017v2p1)"), - idDeepTau2017v2p1VSmu = _tauIdWPMask("by%sDeepTau2017v2p1VSmu", + 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"), + 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 = _tauIdWPMask("by%sDeepTau2018v2p5VSe", - choices=("VVVLoose","VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), - 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)"), -) _variablesMiniV2 = cms.PSet( _tauVarsBase, - _deepTauVars2017v2p1, - _deepTauVars2018v2p5 + _deepTauVars2017v2p1 ) _variablesMiniV1 = cms.PSet( _variablesMiniV2, @@ -167,11 +144,11 @@ def _tauIdWPMask(pattern, choices, 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 = _tauIdWPMask( "by%sIsolationMVArun2v1DBoldDMwLT", - choices=("VLoose","Loose","Medium","Tight","VTight","VVTight"), +_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"), +_variablesMiniV1.idMVAoldDM2017v1 = _tauIdWPMask( "by%sIsolationMVArun2v1DBoldDMwLT2017v1", + choices=("VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"), doc="IsolationMVArun2v1DBoldDMwLT ID working point (2017v1)") _variables80X = cms.PSet( _tauVarsBase, @@ -216,16 +193,6 @@ 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", @@ -252,7 +219,7 @@ def _tauIdWPMask(pattern, choices, doc="", from_raw=False, wp_thrs=None): pt = Var("pt", float,precision=8), phi = Var("phi", float,precision=8), eta = Var("eta", float,precision=8), - mass = Var("mass", float,precision=8), + mass = Var("mass", float,precision=8), charge = Var("charge", int), status = Var("status", int, doc="Hadronic tau decay mode. 0=OneProng0PiZero, 1=OneProng1PiZero, 2=OneProng2PiZero, 10=ThreeProng0PiZero, 11=ThreeProng1PiZero, 15=Other"), genPartIdxMother = Var("?numberOfMothers>0?motherRef(0).key():-1", int, doc="index of the mother particle"), @@ -286,7 +253,7 @@ def _tauIdWPMask(pattern, choices, doc="", from_raw=False, wp_thrs=None): tauMCTable = cms.EDProducer("CandMCMatchTableProducer", src = tauTable.src, mcMap = cms.InputTag("tausMCMatchLepTauForTable"), - mcMapVisTau = cms.InputTag("tausMCMatchHadTauForTable"), + mcMapVisTau = cms.InputTag("tausMCMatchHadTauForTable"), objName = tauTable.name, objType = tauTable.name, #cms.string("Tau"), branchName = cms.string("genPart"), @@ -304,4 +271,3 @@ def _tauIdWPMask(pattern, choices, doc="", from_raw=False, wp_thrs=None): genTauTask = cms.Task(tauGenJetsForNano,tauGenJetsSelectorAllHadronsForNano,genVisTaus,genVisTauTable) tauMCTask = cms.Task(genTauTask,tausMCMatchLepTauForTable,tausMCMatchHadTauForTable,tauMCTable) - diff --git a/RecoTauTag/RecoTau/python/tauIdWPsDefs.py b/RecoTauTag/RecoTau/python/tauIdWPsDefs.py index 134375939e148..947e0f422c424 100644 --- a/RecoTauTag/RecoTau/python/tauIdWPsDefs.py +++ b/RecoTauTag/RecoTau/python/tauIdWPsDefs.py @@ -26,32 +26,3 @@ "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 b7f5785690c8e..7bec282150573 100644 --- a/RecoTauTag/RecoTau/python/tools/runTauIdMVA.py +++ b/RecoTauTag/RecoTau/python/tools/runTauIdMVA.py @@ -3,7 +3,7 @@ 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 +from RecoTauTag.RecoTau.tauIdWPsDefs import WORKING_POINTS_v2p1 import os import re @@ -60,7 +60,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 - + @staticmethod def get_cmssw_version(debug = False): """returns 'CMSSW_X_Y_Z'""" @@ -617,7 +617,11 @@ def runTauID(self): if self.debug: print ("Adding DeepTau IDs") _deepTauName = "deepTau2018v2p5" - workingPoints_ = WORKING_POINTS_v2p5 + workingPoints_ = { + "e": {}, + "mu": {}, + "jet": {}, + } file_names = [ 'core:RecoTauTag/TrainingFiles/data/DeepTauId/deepTau_2018v2p5_core.pb', @@ -869,7 +873,7 @@ def processDeepProducer(self, producer_name, tauIDSources, workingPoints_): for target,points in workingPoints_.items(): setattr(tauIDSources, 'by{}VS{}raw'.format(producer_name[0].upper()+producer_name[1:], target), cms.PSet(inputTag = cms.InputTag(producer_name+self.postfix, 'VS{}'.format(target)), workingPointIndex = cms.int32(-1))) - + cut_expressions = [] for index, (point,cut) in enumerate(points.items()): cut_expressions.append(str(cut))