diff --git a/Trigger/TrigCost/TrigCostAnalysis/src/TrigCostAnalysis.cxx b/Trigger/TrigCost/TrigCostAnalysis/src/TrigCostAnalysis.cxx index 1f3e1277a621424df9f4da201281a0331a82064c..ed9506173ff90678624c1109ce9bd1fa6740527b 100644 --- a/Trigger/TrigCost/TrigCostAnalysis/src/TrigCostAnalysis.cxx +++ b/Trigger/TrigCost/TrigCostAnalysis/src/TrigCostAnalysis.cxx @@ -166,7 +166,8 @@ StatusCode TrigCostAnalysis::execute() { // Save indexes of algorithm in costDataHandle std::map<std::string, std::set<size_t>> chainToAlgIdx; - std::map<std::string, std::vector<TrigConf::Chain>> algToChain = m_algToChainTool->getChainsForAllAlgs(context); + std::map<std::string, std::vector<TrigConf::Chain>> algToChain; + ATH_CHECK( m_algToChainTool->getChainsForAllAlgs(context, algToChain) ); for (const xAOD::TrigComposite* tc : *costDataHandle) { const uint32_t nameHash = tc->getDetail<TrigConf::HLTHash>("alg"); const std::string name = TrigConf::HLTUtils::hash2string(nameHash, "ALG"); diff --git a/Trigger/TrigSteer/TrigCompositeUtils/Root/AlgToChainTool.cxx b/Trigger/TrigSteer/TrigCompositeUtils/Root/AlgToChainTool.cxx index 48bb66a3da2e42da535e836431979050f8da36d4..26c5bcf205c0e27d6d090d6bc191770fb48376a6 100644 --- a/Trigger/TrigSteer/TrigCompositeUtils/Root/AlgToChainTool.cxx +++ b/Trigger/TrigSteer/TrigCompositeUtils/Root/AlgToChainTool.cxx @@ -38,6 +38,9 @@ StatusCode TrigCompositeUtils::AlgToChainTool::start() { for ( const auto& sequencer : hltMenuHandle->sequencers() ) { for ( const std::string& algorithm : sequencer.second ) { + // PassFilter is for empty steps - will never be associated with a chain + if (algorithm.find("PassFilter") == 0) continue; + // Save just second part of algorithm ex. RoRSeqFilter/FFastCaloElectron -> FFastCaloElectron m_algToSequencersMap[algorithm.substr(algorithm.find('/') + 1)] .push_back(sequencer.first); @@ -75,14 +78,19 @@ std::vector<TrigConf::Chain> TrigCompositeUtils::AlgToChainTool::getChainsForAlg try { for ( const std::string& sequencer : m_algToSequencersMap.at(algorithmName) ) { - result.insert( - result.end(), - m_sequencerToChainMap.at(sequencer).begin(), - m_sequencerToChainMap.at(sequencer).end() - ); + try { + result.insert( + result.end(), + m_sequencerToChainMap.at(sequencer).begin(), + m_sequencerToChainMap.at(sequencer).end() + ); + } + catch ( const std::out_of_range & ex ) { + ATH_MSG_DEBUG ( "Sequence " << sequencer << " is not part of the menu!" ); + } } } catch ( const std::out_of_range & ex ) { - ATH_MSG_DEBUG ( algorithmName << " is not part of the menu!" ); + ATH_MSG_DEBUG ( "Algorithm " << algorithmName << " is not part of the menu!" ); } return result; @@ -125,10 +133,11 @@ std::set<TrigCompositeUtils::DecisionID> TrigCompositeUtils::AlgToChainTool::ret for ( const std::string& key : keys ) { // Look for given collection - if ( !collectionName.empty() && key.find(collectionName) != 0 ){ + if ( !collectionName.empty() && (key.find(collectionName) != 0) ){ continue; } + // Get data from any nav collection if( collectionName.empty() && (key.find("HLTNav") != 0 || key == "HLTNav_Summary") ) { continue; } @@ -146,14 +155,29 @@ std::set<TrigCompositeUtils::DecisionID> TrigCompositeUtils::AlgToChainTool::ret } -std::map<std::string, std::vector<TrigConf::Chain>> TrigCompositeUtils::AlgToChainTool::getChainsForAllAlgs(const EventContext& context) const { - std::map<std::string, std::vector<TrigConf::Chain>> algToChain; + StatusCode TrigCompositeUtils::AlgToChainTool::getChainsForAllAlgs(const EventContext& context, std::map<std::string, std::vector<TrigConf::Chain>>& algToChain) const { + + SG::ReadHandle<TrigConf::HLTMenu> hltMenuHandle = SG::makeHandle(m_HLTMenuKey, context); + ATH_CHECK(hltMenuHandle.isValid()); + std::map<std::string, std::vector<std::string>> sequencers = hltMenuHandle->sequencers(); // Look for chains which were active for any of the algorithms of the sequence // Name of collection for given sequencer consist sequence's filter's name std::map<std::string, std::set<TrigCompositeUtils::DecisionID>> seqToActiveChains; for (const auto& sequence : m_sequencerToChainMap) { - seqToActiveChains[sequence.first] = retrieveActiveChains(context, "HLTNav_F" + sequence.first + "_"); + // Look for associated filters names with the sequence + const std::vector<std::string>& algorithms = sequencers.at(sequence.first); + for ( const std::string& algorithm : algorithms ) { + if (algorithm.find("FStep") == std::string::npos) continue; + + std::string filterName = "HLTNav_" + algorithm.substr(algorithm.find('/') + 1) + "__"; + // For example RoRSeqFilter/FStep18_Step13_1FSLRTTrigger -> HLTNav_FStep18_Step13_1FSLRTger + if (filterName.find("Trig") != std::string::npos){ + filterName.replace(filterName.find("Trig"), 4, ""); + } + seqToActiveChains[sequence.first] = retrieveActiveChains(context, filterName); + + } } for (const auto& algSeqPair : m_algToSequencersMap){ @@ -173,7 +197,8 @@ std::map<std::string, std::vector<TrigConf::Chain>> TrigCompositeUtils::AlgToCha algToChain[algSeqPair.first] = chainsPerAlg; } - return algToChain; + + return StatusCode::SUCCESS; } diff --git a/Trigger/TrigSteer/TrigCompositeUtils/TrigCompositeUtils/AlgToChainTool.h b/Trigger/TrigSteer/TrigCompositeUtils/TrigCompositeUtils/AlgToChainTool.h index 796f19576e6e366bbf53706731b7365f54c0e1ae..08f75cc93048fc52b8a1f4576811f4df4d6a5969 100644 --- a/Trigger/TrigSteer/TrigCompositeUtils/TrigCompositeUtils/AlgToChainTool.h +++ b/Trigger/TrigSteer/TrigCompositeUtils/TrigCompositeUtils/AlgToChainTool.h @@ -41,22 +41,22 @@ namespace TrigCompositeUtils { virtual StatusCode start() override; - /// Request set of chains' names for given algorithm - static lookup + /// Request set of chains' names for given algorithm - static lookup (menu) std::set<std::string> getChainsNamesForAlg(const std::string& algorithmName) const; - /// Request set of chains for given algorithm - static lookup + /// Request set of chains for given algorithm - static lookup (menu) std::vector<TrigConf::Chain> getChainsForAlg(const std::string& algorithmName) const; - /// Request set of active chains for given algorithm - dynamic lookup + /// Request set of active chains for given algorithm - dynamic lookup (navigation) std::set<std::string> getActiveChainsForAlg(const std::string& algorithmName, const EventContext& context) const; /// Request set of chains for all algorithms in the menu - std::map<std::string, std::vector<TrigConf::Chain>> getChainsForAllAlgs(const EventContext& context) const; + StatusCode getChainsForAllAlgs(const EventContext& context, std::map<std::string, std::vector<TrigConf::Chain>>& algToChain) const; /// Request set of chains from given navigation collection std::set<TrigCompositeUtils::DecisionID> retrieveActiveChains(const EventContext& context, const std::string& collectionName = "") const; - /// Request all chains + /// Request all chains from the menu StatusCode getAllChains(std::vector<TrigConf::Chain>&) const; /// Retrieve chain information for gived chain id diff --git a/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py b/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py index 0a69fe4096e14ae4fd73e41213f07b965ad3dd8c..587f1c42d489454dcfadc425872ee1e877e1ea05 100644 --- a/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py +++ b/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py @@ -605,7 +605,7 @@ TriggerHLTListRun3 = [ ] # HLTNav_* object list is built dynamically during job configuration, here we only define its output targets -HLTNavEDMTargets = 'BS CostMonDS ESD AODFULL AODSLIM' +HLTNavEDMTargets = 'BS ESD AODFULL AODSLIM' #------------------------------------------------------------------------------- # EDM details list to store the transient-persistent version @@ -665,6 +665,12 @@ def addHLTNavigationToEDMList(edmList, allDecisions, hypoDecisions): (typeName, HLTNavEDMTargets, 'Steer'), (typeNameAux, HLTNavEDMTargets, 'Steer')]) + # Cost stream requires only filters and L1 seeded chains + if decisionCollection.startswith("HLTNav_FStep") or decisionCollection == "HLTNav_Summary" or decisionCollection.startswith("HLTNav_L1"): + edmList.extend([ + (typeName, 'CostMonDS', 'Steer'), + (typeNameAux, 'CostMonDS', 'Steer')]) + def addExtraCollectionsToEDMList(edmList, extraList): """ Extend edmList with extraList, keeping track whether a completely new