diff --git a/Trigger/TrigEvent/TrigNavTools/TrigNavTools/TrigNavigationSlimmingTool.h b/Trigger/TrigEvent/TrigNavTools/TrigNavTools/TrigNavigationSlimmingTool.h index 99e63909be431e1be6534054c5eabefe016ee0fc..670f81e8da88ba25813d2b7c961e6fa5edd2310c 100644 --- a/Trigger/TrigEvent/TrigNavTools/TrigNavTools/TrigNavigationSlimmingTool.h +++ b/Trigger/TrigEvent/TrigNavTools/TrigNavTools/TrigNavigationSlimmingTool.h @@ -71,9 +71,6 @@ namespace HLT { StatusCode doSlimming( std::vector<uint32_t>& slimmed_and_serialized ) const; - std::map<std::string, int>* getFeatureOccurrences(HLT::NavigationCore* navigation); - - private: ToolHandle<Trig::TrigDecisionTool> m_trigDecisionTool; @@ -251,12 +248,6 @@ namespace HLT { bool toBeIncluded(State& state, TriggerElement *te, std::vector<TriggerElement*> *inclusionList, std::vector<TriggerElement*> *exclusionList); - /** - * @brief Returns the label for the given feature - */ - std::string getLabel(const HLT::NavigationCore& navigation, - const TriggerElement::FeatureAccessHelper &fah) const; - /** * @brief Propagates the features on given TE to its children */ diff --git a/Trigger/TrigEvent/TrigNavTools/TrigNavTools/getFeatureOccurrences.h b/Trigger/TrigEvent/TrigNavTools/TrigNavTools/getFeatureOccurrences.h new file mode 100644 index 0000000000000000000000000000000000000000..fe6419ea616a8320367f291b5fda2ca87b7e71a5 --- /dev/null +++ b/Trigger/TrigEvent/TrigNavTools/TrigNavTools/getFeatureOccurrences.h @@ -0,0 +1,41 @@ +// This file's extension implies that it's C, but it's really -*- C++ -*-. +/* + * Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration. + */ +/** + * @file TrigNavTools/getFeatureOccurrences.h + * @author scott snyder <snyder@bnl.gov> + * @date May, 2020 + * @brief Return number of occurrences of each feature. + * + * Broken out from the old TrigNavigationSlimmingTool (B. Smith / T. Bold). + */ + + +#ifndef TRIGNAVTOOLS_GETFEATUREOCCURRENCES_H +#define TRIGNAVTOOLS_GETFEATUREOCCURRENCES_H + + +#include <map> +#include <string> + + +namespace HLT { + + +class NavigationCore; + + +namespace TrigNavTools { + + +/// Return number of occurrences of each feature. +std::map<std::string, int> +getFeatureOccurrences (const HLT::NavigationCore* navigation); + + + +}} // namespace HLT::TrigNavTools + + +#endif // not TRIGNAVTOOLS_GETFEATUREOCCURRENCES_H diff --git a/Trigger/TrigEvent/TrigNavTools/src/TrigNavigationSlimmingTool.cxx b/Trigger/TrigEvent/TrigNavTools/src/TrigNavigationSlimmingTool.cxx index 2de74db35c49e6be597eacd581f4b3b2b3f9c83b..fa5025c3437fa6265d8fb1095e7cfceeb7b39ef9 100644 --- a/Trigger/TrigEvent/TrigNavTools/src/TrigNavigationSlimmingTool.cxx +++ b/Trigger/TrigEvent/TrigNavTools/src/TrigNavigationSlimmingTool.cxx @@ -14,12 +14,15 @@ //#include "TrigNavigation/TriggerElementFactory.h" #include "TrigNavigation/Holder.h" #include "GaudiKernel/ThreadLocalContext.h" +#include "getLabel.h" #include "TrigNavTools/TrigNavigationSlimmingTool.h" #include <iostream> +using HLT::TrigNavTools::SlimmingHelper; + /********************************************************************** * * Constructors and destructors @@ -320,40 +323,6 @@ StatusCode HLT::TrigNavigationSlimmingTool::finalize() { -std::map<std::string, int> *HLT::TrigNavigationSlimmingTool::getFeatureOccurrences(HLT::NavigationCore* navigation) { - if(!navigation) - return 0; - - if (navigation->getInitialNode() == 0 ) - return 0; - - std::map<std::string, int> *featureOccurrences = new std::map<std::string, int>; - - - for ( auto te : navigation->getAllTEs() ) { - for ( const auto& fea: te->getFeatureAccessHelpers() ) { - (*featureOccurrences)[getLabel(*navigation, fea)] += 1; - } - } - - return featureOccurrences; -} - -std::string HLT::TrigNavigationSlimmingTool::getLabel(const HLT::NavigationCore& navigation, - const TriggerElement::FeatureAccessHelper &fah) const { - - CLID clid = fah.getCLID(); - std::string label; - HLTNavDetails::IHolder *h = navigation.getHolder(clid, fah.getIndex().subTypeIndex()); - if(h) label = h->label(); - - return label; -} - - - - - StatusCode HLT::TrigNavigationSlimmingTool::lateFillConfiguration(State& state) const { // remember the configured chain names, as they will be useful later @@ -534,11 +503,11 @@ bool HLT::TrigNavigationSlimmingTool::toBeIncluded(State& state, te->getFeatureAccessHelpers().begin(); iter != te->getFeatureAccessHelpers().end(); ++iter) { // grab the label and check if it was found in the inclusion list - if(std::find(inclusionList->begin(), inclusionList->end(), this->getLabel(state.navigation, *iter )) != inclusionList->end()) + if(std::find(inclusionList->begin(), inclusionList->end(), SlimmingHelper::getLabel(state.navigation, *iter )) != inclusionList->end()) return true; // now find if its in the exclusion list if(exclusionList && std::find(exclusionList->begin(), exclusionList->end(), - this->getLabel( state.navigation, *iter )) != exclusionList->end()) + SlimmingHelper::getLabel( state.navigation, *iter )) != exclusionList->end()) onExclusionList = 1; } @@ -562,7 +531,7 @@ bool HLT::TrigNavigationSlimmingTool::toBeIncluded(State& state, te->getFeatureAccessHelpers().begin(); iter != te->getFeatureAccessHelpers().end(); ++iter) { // grab the label and check if it was found in the exclusion list - if(std::find(exclusionList->begin(), exclusionList->end(), this->getLabel(state.navigation, *iter )) != exclusionList->end()) + if(std::find(exclusionList->begin(), exclusionList->end(), SlimmingHelper::getLabel(state.navigation, *iter )) != exclusionList->end()) return false; } diff --git a/Trigger/TrigEvent/TrigNavTools/src/getFeatureOccurrences.cxx b/Trigger/TrigEvent/TrigNavTools/src/getFeatureOccurrences.cxx new file mode 100644 index 0000000000000000000000000000000000000000..5b09dc5273d2cb40c266c5c9d07d3dd712c76fef --- /dev/null +++ b/Trigger/TrigEvent/TrigNavTools/src/getFeatureOccurrences.cxx @@ -0,0 +1,39 @@ +/** + * @file TrigNavTools/src/getFeatureOccurrences.h + * @author scott snyder <snyder@bnl.gov> + * @date May, 2020 + * @brief Return number of occurrences of each feature. + * + * Broken out from the old TrigNavigationSlimmingTool (B. Smith / T. Bold). + */ + + +#include "TrigNavTools/getFeatureOccurrences.h" +#include "TrigNavigation/Navigation.h" +#include "getLabel.h" + + +namespace HLT { +namespace TrigNavTools { + + +/// Return number of occurrences of each feature. +std::map<std::string, int> +getFeatureOccurrences (const HLT::NavigationCore* navigation) +{ + std::map<std::string, int> featureOccurrences; + + if (navigation && navigation->getInitialNode()) { + + for ( auto te : navigation->getAllTEs() ) { + for ( const auto& fea: te->getFeatureAccessHelpers() ) { + featureOccurrences[SlimmingHelper::getLabel(*navigation, fea)] += 1; + } + } + } + + return featureOccurrences; +} + + +}} // namespace HLT::TrigNavTools diff --git a/Trigger/TrigEvent/TrigNavTools/src/getLabel.cxx b/Trigger/TrigEvent/TrigNavTools/src/getLabel.cxx new file mode 100644 index 0000000000000000000000000000000000000000..11480ae3c9523bcf3307433868a9e56a02b93934 --- /dev/null +++ b/Trigger/TrigEvent/TrigNavTools/src/getLabel.cxx @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration. + */ +/** + * @file TrigNavTools/src/getLabel.cxx + * @author scott snyder <snyder@bnl.gov> + * @date May, 2020 + * @brief Helper function to get a label for a feature. + * + * Broken out from the old TrigNavigationSlimmingTool (B. Smith / T. Bold). + */ + + +#include "getLabel.h" +#include "TrigNavigation/Navigation.h" + + +namespace HLT { +namespace TrigNavTools { + + +std::string +SlimmingHelper::getLabel(const HLT::NavigationCore& navigation, + const HLT::TriggerElement::FeatureAccessHelper& fah) +{ + CLID clid = fah.getCLID(); + std::string label; + HLTNavDetails::IHolder *h = navigation.getHolder(clid, fah.getIndex().subTypeIndex()); + if(h) label = h->label(); + + return label; +} + + +}} // namespace HLT::TrigNavTools diff --git a/Trigger/TrigEvent/TrigNavTools/src/getLabel.h b/Trigger/TrigEvent/TrigNavTools/src/getLabel.h new file mode 100644 index 0000000000000000000000000000000000000000..18424dca4ef7bf1cd4ef72fc1a1cde096cd110de --- /dev/null +++ b/Trigger/TrigEvent/TrigNavTools/src/getLabel.h @@ -0,0 +1,44 @@ +// This file's extension implies that it's C, but it's really -*- C++ -*-. +/* + * Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration. + */ +/** + * @file TrigNavTools/src/getLabel.h + * @author scott snyder <snyder@bnl.gov> + * @date May, 2020 + * @brief Helper function to get a label for a feature. + * + * Broken out from the old TrigNavigationSlimmingTool (B. Smith / T. Bold). + */ + + +#ifndef TRIGNAVTOOLS_GETLABEL_H +#define TRIGNAVTOOLS_GETLABEL_H + + +#include "TrigNavigation/TriggerElement.h" +#include <string> + + +namespace HLT { + + +class NavigationCore; + + +namespace TrigNavTools { + + +// Wrapped in a class so we can more easily declare it a friend +// in NavigationCore. +struct SlimmingHelper { + static + std::string getLabel (const HLT::NavigationCore& navigation, + const HLT::TriggerElement::FeatureAccessHelper& fah); +}; + + +}} // namespace HLT::TrigNavTools + + +#endif // not TRIGNAVTOOLS_GETLABEL_H diff --git a/Trigger/TrigEvent/TrigNavigation/TrigNavigation/NavigationCore.h b/Trigger/TrigEvent/TrigNavigation/TrigNavigation/NavigationCore.h index 1d14bac24595571b3bb9eb4e23f1a56655c7ed9e..be488a5f8c915d6078d9fb8a374c402b1db33551 100644 --- a/Trigger/TrigEvent/TrigNavigation/TrigNavigation/NavigationCore.h +++ b/Trigger/TrigEvent/TrigNavigation/TrigNavigation/NavigationCore.h @@ -1,7 +1,7 @@ // Emacs -*- c++ -*- /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ @@ -43,6 +43,9 @@ class TrigBStoxAODTool; namespace HLT { class TrigNavigationSlimmingTool; + namespace TrigNavTools { + struct SlimmingHelper; + } /** * @brief The NavigationCore class, adds on top of the TrigNavStructure the EDM read-only handling * @@ -95,6 +98,7 @@ namespace HLT { class NavigationCore : public HLT::TrigNavStructure { friend class HLT::TrigNavigationSlimmingTool; + friend struct HLT::TrigNavTools::SlimmingHelper; friend class HLTNavDetails::TypeMapDeleter; friend class ::TrigBStoxAODTool; public: diff --git a/Trigger/TrigValidation/TrigValAlgs/TrigValAlgs/TrigSlimValAlg.h b/Trigger/TrigValidation/TrigValAlgs/TrigValAlgs/TrigSlimValAlg.h index 5bb42c02b8f8d99b0ef84dab172b36ef3c93bda6..32504f99fe77adbe3fb3564f5b93e790bcb61f22 100644 --- a/Trigger/TrigValidation/TrigValAlgs/TrigValAlgs/TrigSlimValAlg.h +++ b/Trigger/TrigValidation/TrigValAlgs/TrigValAlgs/TrigSlimValAlg.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #ifndef CLASS_TRIG_SLIM_VALIDATION_H @@ -10,7 +10,6 @@ #include "TrigDecisionTool/TrigDecisionTool.h" #include "TrigNavigation/TriggerElement.h" -#include "TrigNavTools/TrigNavigationSlimmingTool.h" #include "AthenaBaseComps/AthAlgorithm.h" #include <iostream> @@ -250,7 +249,6 @@ class TrigSlimValAlg : public AthAlgorithm { // tools ToolHandle<Trig::TrigDecisionTool> m_trigDecisionTool; //<! TrigDecisionTool - ToolHandle<HLT::TrigNavigationSlimmingTool> m_slimmingTool; //<! Navigation Slimming Tool // internal data std::vector<std::string> m_configuredGroups; //<! cache group->chain map diff --git a/Trigger/TrigValidation/TrigValAlgs/src/TrigSlimValAlg.cxx b/Trigger/TrigValidation/TrigValAlgs/src/TrigSlimValAlg.cxx index b796edf2defc6961a07936c657fb775f15397205..cbe8ad4dedee8b0b7cd142e3fddd7270b6d400c7 100644 --- a/Trigger/TrigValidation/TrigValAlgs/src/TrigSlimValAlg.cxx +++ b/Trigger/TrigValidation/TrigValAlgs/src/TrigSlimValAlg.cxx @@ -1,20 +1,19 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #include "TrigNavigation/Navigation.h" #include "TrigValAlgs/TrigSlimValAlg.h" +#include "TrigNavTools/getFeatureOccurrences.h" TrigSlimValAlg::TrigSlimValAlg(const std::string& name, ISvcLocator *pSvcLocator) : AthAlgorithm(name, pSvcLocator), m_trigDecisionTool("Trig::TrigDecisionTool/TrigDecisionTool"), - m_slimmingTool("HLT::TrigNavigationSlimmingTool/TrigNavigationSlimmingTool"), m_eventSeen(0) { declareProperty("TrigDecisionTool", m_trigDecisionTool); - declareProperty("SlimmingTool", m_slimmingTool); } @@ -29,15 +28,6 @@ StatusCode TrigSlimValAlg::initialize() { return StatusCode::FAILURE; } - // load the slimming tool - if( !m_slimmingTool.empty() ) { - ATH_CHECK( m_slimmingTool.retrieve() ); - } - else { - ATH_MSG_ERROR ("Could not retrive the TrigNavigationSlimmingTool as it was not specified!" ); - return StatusCode::FAILURE; - } - return StatusCode::SUCCESS; } @@ -73,7 +63,7 @@ StatusCode TrigSlimValAlg::execute() { ATH_MSG_INFO ("REGTEST " << "======== START of TrigSlimValidation DUMP ========" ); // store some needed information from the navigation structure - std::map<std::string, int> *featureOccurrences = m_slimmingTool->getFeatureOccurrences(navigation); + std::map<std::string, int> featureOccurrences = HLT::TrigNavTools::getFeatureOccurrences(navigation); TrigSlimValAlg::elementSet *allTriggerElements = this->getAllTriggerElements(navigation); // Print the aggregate navigation structure information @@ -97,7 +87,7 @@ StatusCode TrigSlimValAlg::execute() { ATH_MSG_INFO ("REGTEST " << "Number of trigger elements: " << recursiveCount( navigation, numberCounter, sumUpdate ) ); ATH_MSG_INFO ("REGTEST " << "Number of distinct features: " - << featureOccurrences->size() ); + << featureOccurrences.size() ); ATH_MSG_INFO ("REGTEST " << "Number of intermediate trigger elements: " << recursiveCount( navigation, intermediateCounter, sumUpdate ) ); ATH_MSG_INFO ("REGTEST " << "Number of featureless trigger elements: " @@ -136,8 +126,8 @@ StatusCode TrigSlimValAlg::execute() { // print the feature information - for(std::map<std::string, int>::const_iterator iter = featureOccurrences->begin(); - iter != featureOccurrences->end(); ++iter) + for(std::map<std::string, int>::const_iterator iter = featureOccurrences.begin(); + iter != featureOccurrences.end(); ++iter) ATH_MSG_INFO ("REGTEST " << "Occurrences of feature " << (*iter).first << ": " << (*iter).second ); @@ -188,7 +178,6 @@ StatusCode TrigSlimValAlg::execute() { // clean up and finish delete allTriggerElements; allTriggerElements = 0; - delete featureOccurrences; featureOccurrences = 0; // print the TrigSlimValidation footer ATH_MSG_INFO ("REGTEST " << "======== END of TrigSlimValidation DUMP ========" );