From 5480ab4e720119a82ac7cbc6e358dc0647ec166f Mon Sep 17 00:00:00 2001 From: Frank Winklmeier <fwinkl@cern> Date: Wed, 17 Mar 2021 11:27:09 +0100 Subject: [PATCH] TrigEgammaHypo: Restore TrigEgammaPidTools TrigEgammaPidTool was prematurely deleted in !41470. Add it back until remaining dependencies are resolved. --- .../python/TrigEgammaPidTools.py | 285 ++++++++++++++++++ 1 file changed, 285 insertions(+) create mode 100644 Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigEgammaPidTools.py diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigEgammaPidTools.py b/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigEgammaPidTools.py new file mode 100644 index 000000000000..8c06103c68f7 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigEgammaPidTools.py @@ -0,0 +1,285 @@ +# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration + +# flake8: noqa (legacy trigger) + +# +# TrigEgammaPidTools +# Add all pid selectors to ToolSvc +# Using versioned configuration -- over rides the configuration defined in mapping +# Conf files should be moved to $CALIBPATH and seperated into directories +# +# Trigger specific interface methods have been removed +# Behavior now set via properties +# Results is multiple instances of tools to apply calo-only and trigger threshold +############################################################### +# Release 21 Update +# Remove Run1 selectors +# Remove unused selectors +# 21.0.12 -- Use TrigEgammaFlags to control version +# Future plans: +# Move all tools into TrigEgammaRec +# Ensure consistent initialize of Pid Tools in menu or in ToolFactories + +from PATCore.HelperUtils import * +from AthenaCommon import CfgMgr + +import sys +import cppyy +import logging +cppyy.load_library('libElectronPhotonSelectorToolsDict') +from ROOT import LikeEnum +from ROOT import egammaPID + +# Include electron menus for LH and Cut-based +from ElectronPhotonSelectorTools.ElectronLikelihoodToolMapping import electronLHmenu +from ElectronPhotonSelectorTools.ElectronIsEMSelectorMapping import electronPIDmenu +from ElectronPhotonSelectorTools.PhotonIsEMSelectorMapping import photonPIDmenu +from ElectronPhotonSelectorTools.ConfiguredAsgElectronIsEMSelectors import ConfiguredAsgElectronIsEMSelector +from ElectronPhotonSelectorTools.ConfiguredAsgElectronLikelihoodTools import ConfiguredAsgElectronLikelihoodTool +from ElectronPhotonSelectorTools.ConfiguredAsgPhotonIsEMSelectors import ConfiguredAsgPhotonIsEMSelector +from ElectronPhotonSelectorTools.TrigEGammaPIDdefs import SelectionDefElectron +from ElectronPhotonSelectorTools.TrigEGammaPIDdefs import SelectionDefPhoton +from ElectronPhotonSelectorTools.TrigEGammaPIDdefs import BitDefElectron + +mlog = logging.getLogger ('TrigEgammaPidTools') +# Path for versioned configuration +from TriggerJobOpts.TriggerFlags import TriggerFlags +TriggerFlags.EgammaSlice.pidVersion.set_On() +mlog.info("TrigEgammaPidTools version %s", TriggerFlags.EgammaSlice.pidVersion()) +ConfigFilePath = TriggerFlags.EgammaSlice.pidVersion() + +# Dictionaries for ToolNames +ElectronToolName = {'vloose':'AsgElectronIsEMVLooseSelector', + 'loose':'AsgElectronIsEMLooseSelector', + 'medium':'AsgElectronIsEMMediumSelector', + 'tight':'AsgElectronIsEMTightSelector', + 'mergedtight':'AsgElectronIsEMMergedTightSelector', + 'lhvloose':'AsgElectronLHVLooseSelector', + 'lhloose':'AsgElectronLHLooseSelector', + 'lhmedium':'AsgElectronLHMediumSelector', + 'lhtight':'AsgElectronLHTightSelector', + 'bloose': 'AsgElectronIsEMBLooseSelector', + } + +ElectronCaloToolName = {'vloose':'AsgElectronIsEMVLooseCaloSelector', + 'loose':'AsgElectronIsEMLooseCaloSelector', + 'medium':'AsgElectronIsEMMediumCaloSelector', + 'tight':'AsgElectronIsEMTightCaloSelector', + 'mergedtight':'AsgElectronIsEMMergedTightCaloSelector', + 'lhvloose':'AsgElectronLHVLooseCaloSelector', + 'lhloose':'AsgElectronLHLooseCaloSelector', + 'lhmedium':'AsgElectronLHMediumCaloSelector', + 'lhtight':'AsgElectronLHTightCaloSelector', + 'bloose': 'AsgElectronIsEMBLooseSelector', + } + +# Here we select our isEM bits used by bphys selection. Once ready this part should go to ElectronPhotonSelectorTools/python/TrigEGammaPIDdefs.py +# anynew tag needs to be added to SignatureDict + +#in order, 1-8: +#electronCutNames = ["HadLeakage","Reta37","Weta2c","Wtot","DEmaxs1","TrkPix","TrkSi","DeltaEta"] +#electronCutNames_Long = [ +# 1 "ClusterHadronicLeakage_Electron", +# 2 "ClusterMiddleEratio37_Electron", +# 3 "ClusterMiddleWidth_Electron", +# 4 "ClusterStripsWtot_Electron" +# 5 ,"ClusterStripsDEmaxs1_Electron", +# 6 "TrackPixel_Electron", +# 7 "TrackSi_Electron", +# 8 "TrackMatchEta_Electron"] + +# The cuts in TrigL2CaloHypoCutDefs.py also have to be tuned. Disable them for now + +BLooseISEMBits = { + 'bloose' : ( 0x1 << BitDefElectron.ClusterMiddleWidth_Electron | + 0x1 << BitDefElectron.TrackPixel_Electron | + 0x1 << BitDefElectron.TrackSi_Electron + ), + } + + + + +# Electron LH tools for alignment / commisioning +ElectronLHVLooseToolName = {'cutd0dphideta':'AsgElectronLHVeryLooseCutD0DphiDetaSelector', + 'nod0':'AsgElectronLHVeryLooseNoD0Selector', + 'nodeta':'AsgElectronLHVeryLooseNoDetaSelector', + 'nodphires':'AsgElectronLHVeryLooseNoDphiResSelector',} + +ElectronLHVLooseToolConfigFile = {'cutd0dphideta':'ElectronLikelihoodVeryLooseTriggerConfig_CutDphiDeta.conf', + 'nod0':'ElectronLikelihoodVeryLooseTriggerConfig.conf', + 'nodeta':'ElectronLikelihoodVeryLooseTriggerConfig_NoDeta.conf', + 'nodphires':'ElectronLikelihoodVeryLooseTriggerConfig_NoDphi.conf',} + +ElectronLHLooseToolName = {'cutd0dphideta':'AsgElectronLHLooseCutD0DphiDetaSelector', + 'nod0':'AsgElectronLHLooseNoD0Selector', + 'nodeta':'AsgElectronLHLooseNoDetaSelector', + 'nodphires':'AsgElectronLHLooseNoDphiResSelector',} + +ElectronLHLooseToolConfigFile = {'cutd0dphideta':'ElectronLikelihoodLooseTriggerConfig_CutDphiDeta.conf', + 'nod0':'ElectronLikelihoodLooseTriggerConfig.conf', + 'nodeta':'ElectronLikelihoodLooseTriggerConfig_NoDeta.conf', + 'nodphires':'ElectronLikelihoodLooseTriggerConfig_NoDphi.conf',} + +ElectronLHMediumToolName = {'cutd0dphideta':'AsgElectronLHMediumCutD0DphiDetaSelector', + 'nod0':'AsgElectronLHMediumNoD0Selector', + 'nodeta':'AsgElectronLHMediumNoDetaSelector', + 'nodphires':'AsgElectronLHMediumNoDphiResSelector',} + +ElectronLHMediumToolConfigFile = {'cutd0dphideta':'ElectronLikelihoodMediumTriggerConfig_CutDphiDeta.conf', + 'nod0':'ElectronLikelihoodMediumTriggerConfig.conf', + 'nodeta':'ElectronLikelihoodMediumTriggerConfig_NoDeta.conf', + 'nodphires':'ElectronLikelihoodMediumTriggerConfig_NoDphi.conf',} + +ElectronLHTightToolName = {'cutd0dphideta':'AsgElectronLHTightCutD0DphiDetaSelector', + 'nod0':'AsgElectronLHTightNoD0Selector', + 'nodeta':'AsgElectronLHTightNoDetaSelector', + 'nodphires':'AsgElectronLHTightNoDphiResSelector', + 'smooth':'AsgElectronLHTightSmoothSelector'} + +ElectronLHTightToolConfigFile = {'cutd0dphideta':'ElectronLikelihoodTightTriggerConfig_CutDphiDeta.conf', + 'nod0':'ElectronLikelihoodTightTriggerConfig.conf', + 'nodeta':'ElectronLikelihoodTightTriggerConfig_NoDeta.conf', + 'nodphires':'ElectronLikelihoodTightTriggerConfig_NoDphi.conf', + 'smooth':'ElectronLikelihoodTightTriggerConfig_Smooth.conf'} + +ElectronToolConfigFile = {'vloose':'ElectronIsEMVLooseSelectorCutDefs.conf', + 'loose':'ElectronIsEMLooseSelectorCutDefs.conf', + 'medium':'ElectronIsEMMediumSelectorCutDefs.conf', + 'tight':'ElectronIsEMTightSelectorCutDefs.conf', + 'mergedtight':'ElectronIsEMMergedTightSelectorCutDefs.conf', + 'lhvloose':'ElectronLikelihoodVeryLooseTriggerConfig2015.conf', + 'lhloose':'ElectronLikelihoodLooseTriggerConfig2015.conf', + 'lhmedium':'ElectronLikelihoodMediumTriggerConfig2015.conf', + 'lhtight':'ElectronLikelihoodTightTriggerConfig2015.conf', + } + +ElectronCaloToolConfigFile = {'vloose':'ElectronIsEMVLooseSelectorCutDefs.conf', + 'loose':'ElectronIsEMLooseSelectorCutDefs.conf', + 'medium':'ElectronIsEMMediumSelectorCutDefs.conf', + 'tight':'ElectronIsEMTightSelectorCutDefs.conf', + 'mergedtight':'ElectronIsEMMergedTightSelectorCutDefs.conf', + 'lhvloose':'ElectronLikelihoodVeryLooseTriggerConfig_CaloOnly.conf', + 'lhloose':'ElectronLikelihoodLooseTriggerConfig_CaloOnly.conf', + 'lhmedium':'ElectronLikelihoodMediumTriggerConfig_CaloOnly.conf', + 'lhtight':'ElectronLikelihoodTightTriggerConfig_CaloOnly.conf',} + +ElectronIsEMBits = {'vloose':SelectionDefElectron.ElectronLooseHLT, + 'loose':SelectionDefElectron.ElectronLooseHLT, + 'medium':SelectionDefElectron.ElectronMediumHLT, + 'tight':SelectionDefElectron.ElectronTightHLT, + 'mergedtight':SelectionDefElectron.ElectronTightHLT, #Can define separate mask + 'lhvloose':SelectionDefElectron.ElectronLooseHLT, + 'lhloose':SelectionDefElectron.ElectronLooseHLT, + 'lhmedium':SelectionDefElectron.ElectronLooseHLT, + 'lhtight':SelectionDefElectron.ElectronLooseHLT,} + +ElectronPidName = {'vloose':egammaPID.ElectronIDLooseHLT, + 'loose':egammaPID.ElectronIDLooseHLT, + 'medium':egammaPID.ElectronIDMediumHLT, + 'tight':egammaPID.ElectronIDTightHLT, + 'mergedtight':egammaPID.ElectronIDTightHLT, + } + +# Dictionaries for ToolNames +PhotonToolName = {'loose':'AsgPhotonIsEMLooseSelector', + 'medium':'AsgPhotonIsEMMediumSelector', + 'tight':'AsgPhotonIsEMTightSelector',} + +PhotonToolConfigFile = {'loose':"PhotonIsEMLooseSelectorCutDefs.conf", + 'medium':"PhotonIsEMMediumSelectorCutDefs.conf", + 'tight':"PhotonIsEMTightSelectorCutDefs.conf",} + +PhotonIsEMBits = {'loose':SelectionDefPhoton.PhotonLoose, + 'medium':SelectionDefPhoton.PhotonMedium, + 'tight':SelectionDefPhoton.PhotonTight,} + +# Add function to add to ToolSvc, same as in Factories +def addToToolSvc( tool ): + "addToToolSvc( tool ) --> add tool to ToolSvc" + from AthenaCommon.AppMgr import ToolSvc + if not hasattr(ToolSvc,tool.getName()): + ToolSvc += tool + #print tool + return tool + +def ElectronPidTools(): + # Versioned selectors for Run2 + #print '=========== Run2 PID ============' + for key in ElectronToolName: + if('lh' in key): + tool=CfgMgr.AsgElectronLikelihoodTool(ElectronToolName[key]) + tool.ConfigFile = ConfigFilePath + ElectronToolConfigFile[key] + tool.usePVContainer = False + addToToolSvc( tool ) + elif( 'bloose' in key ): + tool=CfgMgr.AsgElectronIsEMSelector(ElectronToolName[key]) + tool.ConfigFile = ConfigFilePath + ElectronToolConfigFile['loose'] # use loose isEMconfig for all bloose settings and just change isEM bit + tool.isEMMask = BLooseISEMBits[key] + addToToolSvc( tool ) + + else: + tool=CfgMgr.AsgElectronIsEMSelector(ElectronToolName[key]) + tool.ConfigFile = ConfigFilePath + ElectronToolConfigFile[key] + tool.isEMMask = ElectronIsEMBits[key] + addToToolSvc( tool ) + + # Calo-only selectors + #print '=========== Run2 PID Calo============' + for key in ElectronCaloToolName: + if('lh' in key): + tool=CfgMgr.AsgElectronLikelihoodTool(ElectronCaloToolName[key]) + tool.ConfigFile = ConfigFilePath + ElectronCaloToolConfigFile[key] + tool.usePVContainer = False + tool.caloOnly = True + addToToolSvc( tool ) + elif('bloose' in key): + tool=CfgMgr.AsgElectronIsEMSelector(ElectronCaloToolName[key]) + tool.ConfigFile = ConfigFilePath + ElectronCaloToolConfigFile['loose'] # use loose isEMconfig for all bloose settings and just change isEM bit + tool.caloOnly = True + tool.isEMMask = BLooseISEMBits[key] + addToToolSvc( tool ) + + else: + tool=CfgMgr.AsgElectronIsEMSelector(ElectronCaloToolName[key]) + tool.ConfigFile = ConfigFilePath + ElectronCaloToolConfigFile[key] + tool.isEMMask = ElectronIsEMBits[key] + tool.caloOnly = True + addToToolSvc( tool ) + + + # Special LH triggers for alignment / commisioning + for key in ElectronLHVLooseToolName: + tool=CfgMgr.AsgElectronLikelihoodTool(ElectronLHVLooseToolName[key]) + tool.ConfigFile = ConfigFilePath + ElectronLHVLooseToolConfigFile[key] + tool.usePVContainer = False + addToToolSvc( tool ) + + for key in ElectronLHLooseToolName: + tool=CfgMgr.AsgElectronLikelihoodTool(ElectronLHLooseToolName[key]) + tool.ConfigFile = ConfigFilePath + ElectronLHLooseToolConfigFile[key] + tool.usePVContainer = False + addToToolSvc( tool ) + + for key in ElectronLHMediumToolName: + tool=CfgMgr.AsgElectronLikelihoodTool(ElectronLHMediumToolName[key]) + tool.ConfigFile = ConfigFilePath + ElectronLHMediumToolConfigFile[key] + tool.usePVContainer = False + addToToolSvc( tool ) + + for key in ElectronLHTightToolName: + tool=CfgMgr.AsgElectronLikelihoodTool(ElectronLHTightToolName[key]) + tool.ConfigFile = ConfigFilePath + ElectronLHTightToolConfigFile[key] + tool.usePVContainer = False + addToToolSvc( tool ) + +def PhotonPidTools(): + from AthenaCommon.AppMgr import ToolSvc + # Run2 Photon trigger + for key in PhotonToolName: + tool=CfgMgr.AsgPhotonIsEMSelector(PhotonToolName[key]) + tool.ConfigFile = ConfigFilePath + PhotonToolConfigFile[key] + tool.isEMMask = PhotonIsEMBits[key] + tool.ForceConvertedPhotonPID = True + addToToolSvc( tool ) +del mlog -- GitLab