diff --git a/PhysicsAnalysis/AnalysisCommon/AssociationUtils/AssociationUtils/OverlapRemovalGenUseAlg.h b/PhysicsAnalysis/AnalysisCommon/AssociationUtils/AssociationUtils/OverlapRemovalGenUseAlg.h index 85079901baaaed61e02d67517d7649c2b7f8656d..4d15bbbca0d12fe763e8909e3bf3b669815360a1 100644 --- a/PhysicsAnalysis/AnalysisCommon/AssociationUtils/AssociationUtils/OverlapRemovalGenUseAlg.h +++ b/PhysicsAnalysis/AnalysisCommon/AssociationUtils/AssociationUtils/OverlapRemovalGenUseAlg.h @@ -85,7 +85,7 @@ class OverlapRemovalGenUseAlg : public EL::AnaAlgorithm SG::WriteDecorHandleKeyArray<ContainerType> m_writeDecorKeys{}; }; - DataKeyHandler<xAOD::JetContainer> m_jetKey{this, "JetKey", "AntiKt4EMTopoJets", + DataKeyHandler<xAOD::JetContainer> m_jetKey{this, "JetKey", "AntiKt4EMPFlowJets", "StoreGate/TEvent key for jets"}; DataKeyHandler<xAOD::ElectronContainer> m_electronKey{this, "ElectronKey", "Electrons", diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/JetCommonConfig.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/JetCommonConfig.py index 07d0784fbbcfff0bd0b7d3d3a00b0cd971df24e3..18d92819b5d477aa5b4e5fe6193e3d4de2c91d75 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/JetCommonConfig.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss/python/JetCommonConfig.py @@ -101,15 +101,16 @@ def AddSidebandEventShapeCfg(ConfigFlags): return acc -def AddJvtDecorationAlgCfg(ConfigFlags, algName = "JvtPassDecorAlg", **kwargs): +def AddJvtDecorationAlgCfg(ConfigFlags, algName = "JvtPassDecorAlg", jetContainer='AntiKt4EMTopo', **kwargs): acc = ComponentAccumulator() # Decorate if jet passed JVT criteria from JetJvtEfficiency.JetJvtEfficiencyToolConfig import getJvtEffToolCfg - passJvtTool = acc.popToolsAndMerge(getJvtEffToolCfg(ConfigFlags, 'AntiKt4EMTopo')) - passJvtTool.PassJVTKey = "AntiKt4EMTopoJets.DFCommonJets_passJvt" + + passJvtTool = acc.popToolsAndMerge(getJvtEffToolCfg(ConfigFlags, jetContainer)) + passJvtTool.PassJVTKey = "{}Jets.DFCommonJets_passJvt".format(jetContainer) passJvtTool.SuppressOutputDependence = False kwargs.setdefault("Decorators", [passJvtTool]) - kwargs.setdefault("JetContainer", "AntiKt4EMTopoJets") + kwargs.setdefault("JetContainer", "{}Jets".format(jetContainer)) acc.addEventAlgo(CompFactory.JetDecorationAlg(algName, **kwargs), primary = True) return acc @@ -117,16 +118,29 @@ def AddEventCleanFlagsCfg(ConfigFlags, workingPoints = ['Loose', 'Tight', 'Loose """Add event cleaning flags""" acc = ComponentAccumulator() - acc.merge(AddJvtDecorationAlgCfg(ConfigFlags)) - + acc.merge(AddJvtDecorationAlgCfg(ConfigFlags, algName="JvtPassDecorAlg_EMTopo", jetContainer='AntiKt4EMTopo')) + acc.merge(AddJvtDecorationAlgCfg(ConfigFlags, algName="JvtPassDecorAlg", jetContainer='AntiKt4EMPFlow')) from DerivationFrameworkTau.TauCommonConfig import AddTauAugmentationCfg acc.merge(AddTauAugmentationCfg(ConfigFlags, prefix="JetCommon", doLoose=True)) + # Overlap for EMTopo from AssociationUtils.AssociationUtilsConfig import OverlapRemovalToolCfg - outputLabel = 'DFCommonJets_passOR' + outputLabel_legacy = 'DFCommonJets_passOR' bJetLabel = '' #default tauLabel = 'DFTauLoose' + orTool_legacy = acc.popToolsAndMerge(OverlapRemovalToolCfg(ConfigFlags,outputLabel=outputLabel_legacy,bJetLabel=bJetLabel)) + algOR_legacy = CompFactory.OverlapRemovalGenUseAlg('OverlapRemovalGenUseAlg_EMTopo', + JetKey="AntiKt4EMTopoJets", + OverlapLabel=outputLabel_legacy, + OverlapRemovalTool=orTool_legacy, + TauLabel=tauLabel, + BJetLabel=bJetLabel + ) + acc.addEventAlgo(algOR_legacy) + + # Overlap for EMPFlow + outputLabel = 'DFCommonJets_passOR' orTool = acc.popToolsAndMerge(OverlapRemovalToolCfg(ConfigFlags,outputLabel=outputLabel,bJetLabel=bJetLabel)) algOR = CompFactory.OverlapRemovalGenUseAlg('OverlapRemovalGenUseAlg', OverlapLabel=outputLabel, @@ -144,6 +158,7 @@ def AddEventCleanFlagsCfg(ConfigFlags, workingPoints = ['Loose', 'Tight', 'Loose supportedWPs = ['Loose', 'Tight', 'LooseLLP', 'VeryLooseLLP', 'SuperLooseLLP'] prefix = "DFCommonJets_" + evt_lvl_suppWPs_PFlow = ['LooseBad', 'TightBad'] for wp in workingPoints: if wp not in supportedWPs: @@ -153,23 +168,59 @@ def AddEventCleanFlagsCfg(ConfigFlags, workingPoints = ['Loose', 'Tight', 'Loose # LLP WPs have a slightly different name format if 'LLP' in wp: cleaningLevel = wp.replace('LLP', 'BadLLP') - - jetCleaningTool = acc.popToolsAndMerge(JetCleaningToolCfg(ConfigFlags, 'JetCleaningTool_'+cleaningLevel, 'AntiKt4EMTopoJets', cleaningLevel, False)) - acc.addPublicTool(jetCleaningTool) - - ecTool = acc.popToolsAndMerge(EventCleaningToolCfg(ConfigFlags,'EventCleaningTool_' + wp, cleaningLevel)) - ecTool.JetCleanPrefix = prefix - ecTool.JetContainer = "AntiKt4EMTopoJets" - ecTool.JetCleaningTool = jetCleaningTool - acc.addPublicTool(ecTool) - - eventCleanAlg = CompFactory.EventCleaningTestAlg('EventCleaningTestAlg_'+wp, - EventCleaningTool=ecTool, - JetCollectionName="AntiKt4EMTopoJets", - EventCleanPrefix=prefix, - CleaningLevel=cleaningLevel, - doEvent = ('Loose' in wp)) # Only store event-level flags for Loose and LooseLLP - acc.addEventAlgo(eventCleanAlg) + + # Add support for TightBad event flag as well + doEvent_PFlow=False + for evt_swp in evt_lvl_suppWPs_PFlow: + if evt_swp == cleaningLevel: + doEvent_PFlow=True + break + + doEvent_EMTopo=False + if 'Loose' in cleaningLevel: + doEvent_EMTopo=True + + ## for EMTopo (Legacy), also support for LLPs + if doEvent_EMTopo: + jetCleaningTool_legacy = acc.popToolsAndMerge(JetCleaningToolCfg( + ConfigFlags, 'JetCleaningTool_'+cleaningLevel+'_EMTopo', + 'AntiKt4EMTopo', cleaningLevel, False)) + acc.addPublicTool(jetCleaningTool_legacy) + ecTool_legacy = acc.popToolsAndMerge(EventCleaningToolCfg( + ConfigFlags,'EventCleaningTool_'+wp+'_EMTopo', cleaningLevel)) + ecTool_legacy.JetCleanPrefix = prefix + ecTool_legacy.JetContainer = "AntiKt4EMTopoJets" + ecTool_legacy.JetCleaningTool = jetCleaningTool_legacy + acc.addPublicTool(ecTool_legacy) + + eventCleanAlg_legacy = CompFactory.EventCleaningTestAlg('EventCleaningTestAlg_'+wp+'_EMTopo', + EventCleaningTool=ecTool_legacy, + JetCollectionName="AntiKt4EMTopoJets", + EventCleanPrefix=prefix, + CleaningLevel=cleaningLevel, + doEvent=True) # Only store event-level flags for Loose and LooseLLP + acc.addEventAlgo(eventCleanAlg_legacy) + + ## For PFlow + if doEvent_PFlow: + jetCleaningTool = acc.popToolsAndMerge(JetCleaningToolCfg( + ConfigFlags, 'JetCleaningTool_'+cleaningLevel, + 'AntiKt4EMPFlowJets', cleaningLevel, False)) + acc.addPublicTool(jetCleaningTool) + + ecTool = acc.popToolsAndMerge(EventCleaningToolCfg(ConfigFlags,'EventCleaningTool_' + wp, cleaningLevel)) + ecTool.JetCleanPrefix = prefix + ecTool.JetContainer = "AntiKt4EMPFlowJets" + ecTool.JetCleaningTool = jetCleaningTool + acc.addPublicTool(ecTool) + + eventCleanAlg = CompFactory.EventCleaningTestAlg('EventCleaningTestAlg_'+wp, + EventCleaningTool=ecTool, + JetCollectionName="AntiKt4EMPFlowJets", + EventCleanPrefix=prefix, + CleaningLevel=cleaningLevel, + doEvent=True) # for PFlow we use Loose and Tight + acc.addEventAlgo(eventCleanAlg) return acc diff --git a/PhysicsAnalysis/JetMissingEtID/JetSelectorTools/src/EventCleaningTestAlg.cxx b/PhysicsAnalysis/JetMissingEtID/JetSelectorTools/src/EventCleaningTestAlg.cxx index 6d644a5d7db23b88ca211b98d28c6a8f16397c60..6fd8cecdaf0efaed1a30e8665aaa8489196a4824 100644 --- a/PhysicsAnalysis/JetMissingEtID/JetSelectorTools/src/EventCleaningTestAlg.cxx +++ b/PhysicsAnalysis/JetMissingEtID/JetSelectorTools/src/EventCleaningTestAlg.cxx @@ -26,9 +26,16 @@ StatusCode EventCleaningTestAlg::initialize() // Try to retrieve the tool ATH_CHECK( m_ecTool.retrieve() ); ATH_CHECK( m_jetKey.initialize()); - ATH_CHECK(m_evtKey.initialize()); - // Create the decorator - m_evtInfoDecor = m_evtKey.key() + "." + m_prefix + "eventClean_"+m_cleaningLevel; + ATH_CHECK( m_evtKey.initialize() ); + // Create the decorator + // Use an if statement to leave a legacy + auto labelString = m_cleaningLevel; + if (m_jetKey.key() == "AntiKt4EMTopoJets") { + labelString = m_cleaningLevel + "_EMTopo"; + } + else {} + + m_evtInfoDecor = m_evtKey.key() + "." + m_prefix + "eventClean_"+labelString; ATH_CHECK(m_evtInfoDecor.initialize(m_doEvent)); return StatusCode::SUCCESS; } diff --git a/PhysicsAnalysis/JetMissingEtID/JetSelectorTools/src/EventCleaningTestAlg.h b/PhysicsAnalysis/JetMissingEtID/JetSelectorTools/src/EventCleaningTestAlg.h index 9314adc71378621cb9daf3202aab2335f96d0d89..d36a5db9a424fb945a28f23f310e7496f3031ca4 100644 --- a/PhysicsAnalysis/JetMissingEtID/JetSelectorTools/src/EventCleaningTestAlg.h +++ b/PhysicsAnalysis/JetMissingEtID/JetSelectorTools/src/EventCleaningTestAlg.h @@ -40,7 +40,7 @@ class EventCleaningTestAlg : public AthAlgorithm ToolHandle<ECUtils::IEventCleaningTool> m_ecTool{this, "EventCleaningTool","ECUtils::EventCleaningTool/EventCleaningTool" }; - SG::ReadHandleKey<xAOD::JetContainer> m_jetKey{this, "JetCollectionName", "AntiKt4EMTopoJets", + SG::ReadHandleKey<xAOD::JetContainer> m_jetKey{this, "JetCollectionName", "AntiKt4EMPFlowJets", "Jet collection name"}; SG::ReadHandleKey<xAOD::EventInfo> m_evtKey{this, "EventInfoKey", "EventInfo"};