From c038bc87d2c539a233f705a662fc8d00d50f9978 Mon Sep 17 00:00:00 2001 From: Aleksandra Poreba <aleksandra.poreba@cern.ch> Date: Mon, 30 Nov 2020 12:04:14 +0100 Subject: [PATCH 1/5] Handle DISABLED flag --- .../TrigServices/src/HltROBDataProviderSvc.cxx | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx b/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx index 4c66982eb6fa..9b200bcb6127 100644 --- a/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx +++ b/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx @@ -414,9 +414,22 @@ robmonitor::ROBDataStruct HltROBDataProviderSvc::robmap_getRobData(const ROBF& r { auto robData = robmonitor::ROBDataStruct(robFrag.source_id()); robData.rob_size = robFrag.fragment_size_word(); - robData.rob_history = robStatus; + robData.rob_status_word = robFrag.nstatus() ? robFrag.status()[0] : 0; + // Check if ROB is enabled + if (m_enabledROBs.value().size() != 0 && std::find(m_enabledROBs.begin(), m_enabledROBs.end(), robData.rob_id) == m_enabledROBs.end()){ + robData.rob_history = robmonitor::DISABLED; + } + else { + robData.rob_history = robStatus; + + // All enabled ROBs for ROS are prefetched if the flag is on - see setNextEvent + //if (m_prefetchAllROBsfromROS.value()) { + // robData.rob_history |= robmonitor::SCHEDULED; + //} + } + return robData; } -- GitLab From d516bc7d847f37cdb2e583a5237c56145a6e8a34 Mon Sep 17 00:00:00 2001 From: Aleksandra Poreba <aleksandra.poreba@cern.ch> Date: Tue, 1 Dec 2020 17:51:40 +0100 Subject: [PATCH 2/5] Add DISABLED and IGNORED flag handling --- .../src/HltROBDataProviderSvc.cxx | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx b/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx index 9b200bcb6127..41db750dd971 100644 --- a/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx +++ b/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx @@ -387,6 +387,17 @@ void HltROBDataProviderSvc::getROBData(const EventContext& context, monitorData.requested_ROBs[robInfo.robFragment.source_id()] = robmap_getRobData(robInfo.robFragment, robInfo.robIsCached ? robmonitor::DCM_CACHED : robmonitor::RETRIEVED); } + + // Find not enabled ROBs + std::vector<uint32_t> disabledROBs; + std::set_difference(robIds.begin(), robIds.end(), + m_enabledROBs.begin(), m_enabledROBs.end(), + std::inserter(disabledROBs, disabledROBs.begin())); + + for (uint32_t robId : disabledROBs) { + monitorData.requested_ROBs[robId] = robmonitor::ROBDataStruct(robId); + monitorData.requested_ROBs[robId].rob_history = robmonitor::DISABLED; + } } // add the ROBs to the cache/rob map @@ -414,20 +425,13 @@ robmonitor::ROBDataStruct HltROBDataProviderSvc::robmap_getRobData(const ROBF& r { auto robData = robmonitor::ROBDataStruct(robFrag.source_id()); robData.rob_size = robFrag.fragment_size_word(); - robData.rob_status_word = robFrag.nstatus() ? robFrag.status()[0] : 0; - // Check if ROB is enabled - if (m_enabledROBs.value().size() != 0 && std::find(m_enabledROBs.begin(), m_enabledROBs.end(), robData.rob_id) == m_enabledROBs.end()){ - robData.rob_history = robmonitor::DISABLED; - } + if (robmap_filterRobWithStatus(&robFrag)){ + robData.rob_history = robmonitor::IGNORED; + } else { robData.rob_history = robStatus; - - // All enabled ROBs for ROS are prefetched if the flag is on - see setNextEvent - //if (m_prefetchAllROBsfromROS.value()) { - // robData.rob_history |= robmonitor::SCHEDULED; - //} } return robData; -- GitLab From e5d688b9a0526fbb0db50ffdb4f37b4fc2d9aa53 Mon Sep 17 00:00:00 2001 From: Aleksandra Poreba <aleksandra.poreba@cern.ch> Date: Wed, 2 Dec 2020 09:29:27 +0100 Subject: [PATCH 3/5] Fix finding disabled ROBs --- .../TrigServices/src/HltROBDataProviderSvc.cxx | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx b/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx index 41db750dd971..70ca973c344c 100644 --- a/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx +++ b/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx @@ -389,14 +389,11 @@ void HltROBDataProviderSvc::getROBData(const EventContext& context, } // Find not enabled ROBs - std::vector<uint32_t> disabledROBs; - std::set_difference(robIds.begin(), robIds.end(), - m_enabledROBs.begin(), m_enabledROBs.end(), - std::inserter(disabledROBs, disabledROBs.begin())); - - for (uint32_t robId : disabledROBs) { - monitorData.requested_ROBs[robId] = robmonitor::ROBDataStruct(robId); - monitorData.requested_ROBs[robId].rob_history = robmonitor::DISABLED; + for (uint32_t robId : robIds) { + if (std::find(m_enabledROBs.begin(), m_enabledROBs.end(), robId) != m_enabledROBs.end()) { + monitorData.requested_ROBs[robId] = robmonitor::ROBDataStruct(robId); + monitorData.requested_ROBs[robId].rob_history = robmonitor::DISABLED; + } } } -- GitLab From 063aaa2c1fa016645b725ce79914e662728103d8 Mon Sep 17 00:00:00 2001 From: Aleksandra Poreba <aleksandra.poreba@cern.ch> Date: Wed, 2 Dec 2020 10:04:15 +0100 Subject: [PATCH 4/5] Check IGNORED just for DCM retrieved ROBs --- .../src/HltROBDataProviderSvc.cxx | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx b/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx index 70ca973c344c..f34f3021509a 100644 --- a/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx +++ b/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx @@ -384,8 +384,17 @@ void HltROBDataProviderSvc::getROBData(const EventContext& context, // Monitor DCM ROBs for (const hltinterface::DCM_ROBInfo& robInfo : vRobInfos) { - monitorData.requested_ROBs[robInfo.robFragment.source_id()] = robmap_getRobData(robInfo.robFragment, - robInfo.robIsCached ? robmonitor::DCM_CACHED : robmonitor::RETRIEVED); + robmonitor::ROBHistory status; + + // Check if ROB was cached + if (robmap_filterRobWithStatus(&robInfo.robFragment)){ + status = robmonitor::IGNORED; + } + else { + status = robInfo.robIsCached ? robmonitor::DCM_CACHED : robmonitor::RETRIEVED; + } + + monitorData.requested_ROBs[robInfo.robFragment.source_id()] = robmap_getRobData(robInfo.robFragment, status); } // Find not enabled ROBs @@ -423,13 +432,7 @@ robmonitor::ROBDataStruct HltROBDataProviderSvc::robmap_getRobData(const ROBF& r auto robData = robmonitor::ROBDataStruct(robFrag.source_id()); robData.rob_size = robFrag.fragment_size_word(); robData.rob_status_word = robFrag.nstatus() ? robFrag.status()[0] : 0; - - if (robmap_filterRobWithStatus(&robFrag)){ - robData.rob_history = robmonitor::IGNORED; - } - else { - robData.rob_history = robStatus; - } + robData.rob_history = robStatus; return robData; } -- GitLab From b1fc7cd2574353cfb95036abb97f7cd79550ce23 Mon Sep 17 00:00:00 2001 From: Aleksandra Poreba <aleksandra.poreba@cern.ch> Date: Wed, 2 Dec 2020 16:47:35 +0100 Subject: [PATCH 5/5] Pass list of ignored/disabled rob ids as optional set --- .../src/HltROBDataProviderSvc.cxx | 51 ++++++++++++------- .../TrigServices/src/HltROBDataProviderSvc.h | 9 +++- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx b/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx index f34f3021509a..8d12be750c08 100644 --- a/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx +++ b/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx @@ -382,12 +382,16 @@ void HltROBDataProviderSvc::getROBData(const EventContext& context, monitorData.requested_ROBs[robFrag->source_id()] = robmap_getRobData(*robFrag, robmonitor::HLT_CACHED); } + // Add the ROBs to the cache/rob map and collect ignored robs + std::set<uint32_t> robIds_ignored; + eventCache_addRobData(cache, robFragments_missing, robIds_ignored); + // Monitor DCM ROBs for (const hltinterface::DCM_ROBInfo& robInfo : vRobInfos) { robmonitor::ROBHistory status; - // Check if ROB was cached - if (robmap_filterRobWithStatus(&robInfo.robFragment)){ + // Check ROB history + if (robIds_ignored.find(robInfo.robFragment.source_id()) != robIds_ignored.end()) { status = robmonitor::IGNORED; } else { @@ -397,20 +401,23 @@ void HltROBDataProviderSvc::getROBData(const EventContext& context, monitorData.requested_ROBs[robInfo.robFragment.source_id()] = robmap_getRobData(robInfo.robFragment, status); } - // Find not enabled ROBs - for (uint32_t robId : robIds) { - if (std::find(m_enabledROBs.begin(), m_enabledROBs.end(), robId) != m_enabledROBs.end()) { + // Return all the requested ROB fragments from the cache and collect disabled ROBs + std::set<uint32_t> robIds_disabled; + eventCache_checkRobListToCache(cache, robIds, robFragments, robIds_missing, robIds_disabled); + + // Fill disabled ROBs + for (uint32_t robId : robIds_disabled) { monitorData.requested_ROBs[robId] = robmonitor::ROBDataStruct(robId); monitorData.requested_ROBs[robId].rob_history = robmonitor::DISABLED; - } } } + else { + // add the ROBs to the cache/rob map + eventCache_addRobData(cache, robFragments_missing) ; - // add the ROBs to the cache/rob map - eventCache_addRobData(cache, robFragments_missing) ; - - // return all the requested ROB fragments from the cache - eventCache_checkRobListToCache(cache, robIds, robFragments, robIds_missing) ; + // return all the requested ROB fragments from the cache + eventCache_checkRobListToCache(cache, robIds, robFragments, robIds_missing) ; + } // Save ROS processing time and pass ROS data to CostMonitor if (m_doCostMonitoring && m_trigCostSvcHandle->isMonitoredEvent(context, /*includeMultiSlot =*/ false)) { @@ -596,7 +603,8 @@ void HltROBDataProviderSvc::eventCache_clear(EventCache* cache) void HltROBDataProviderSvc::eventCache_checkRobListToCache(EventCache* cache, const std::vector<uint32_t>& robIds_toCheck, std::vector<const ROBF*>& robFragments_inCache, - std::vector<uint32_t>& robIds_missing ) + std::vector<uint32_t>& robIds_missing, + std::optional<std::reference_wrapper<std::set<uint32_t>>> robIds_disabled ) { ATH_MSG_VERBOSE("start of " << __FUNCTION__ << " number of ROB Ids to check = " << robIds_toCheck.size()); @@ -630,12 +638,15 @@ void HltROBDataProviderSvc::eventCache_checkRobListToCache(EventCache* cache, co // check if ROB is actually enabled for readout if (m_enabledROBs.value().size() != 0) { - std::vector<uint32_t>::const_iterator rob_enabled_it = - std::find(m_enabledROBs.value().begin(), m_enabledROBs.value().end(),id); + std::vector<uint32_t>::const_iterator rob_enabled_it = + std::find(m_enabledROBs.value().begin(), m_enabledROBs.value().end(),id); if(rob_enabled_it == m_enabledROBs.value().end()) { - ATH_MSG_VERBOSE(__FUNCTION__ << " ROB Id : 0x" << MSG::hex << id << MSG::dec - << " will be not added, since it is not on the list of enabled ROBs."); - continue; + ATH_MSG_VERBOSE(__FUNCTION__ << " ROB Id : 0x" << MSG::hex << id << MSG::dec + << " will be not added, since it is not on the list of enabled ROBs."); + if (robIds_disabled) { + robIds_disabled->get().insert(id); + } + continue; } } @@ -645,7 +656,8 @@ void HltROBDataProviderSvc::eventCache_checkRobListToCache(EventCache* cache, co } // end loop over input ROB Ids to check } -void HltROBDataProviderSvc::eventCache_addRobData(EventCache* cache, const std::vector<ROBF>& robFragments) +void HltROBDataProviderSvc::eventCache_addRobData(EventCache* cache, const std::vector<ROBF>& robFragments, + std::optional<std::reference_wrapper<std::set<uint32_t>>> robIds_ignored) { ATH_MSG_VERBOSE("start of " << __FUNCTION__ << " number of ROB fragments to add = " << robFragments.size()); @@ -696,6 +708,9 @@ void HltROBDataProviderSvc::eventCache_addRobData(EventCache* cache, const std:: << " and Specific Status Code = 0x" << std::setw(4) << tmpstatus.specific() << MSG::dec << " removed for (global Id, L1 Id) = (" << cache->globalEventNumber << "," << cache->currentLvl1ID <<")" ); } + if (robIds_ignored) { + robIds_ignored->get().insert(id); + } continue; } diff --git a/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.h b/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.h index 72ae025fffbc..bdf1a69f3fe6 100644 --- a/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.h +++ b/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.h @@ -203,14 +203,19 @@ private: /// output: /// vector of ROB fragments available already in cache /// vector of ROB Ids missing in cache + /// set of disabled ROBs void eventCache_checkRobListToCache(EventCache*, const std::vector<uint32_t>&, - std::vector<const ROBF*>&, std::vector<uint32_t>& ); + std::vector<const ROBF*>&, std::vector<uint32_t>&, + std::optional<std::reference_wrapper<std::set<uint32_t>>> robIds_disabled = std::nullopt); /// method to add ROB fragments to an event cache in a slot /// input: /// pointer to cache /// vector of ROB fragments to add to the cache - void eventCache_addRobData(EventCache*, const std::vector<ROBF>&) ; + /// output: + /// set of ignored ROBs + void eventCache_addRobData(EventCache*, const std::vector<ROBF>&, + std::optional<std::reference_wrapper<std::set<uint32_t>>> robIds_ignored = std::nullopt) ; /// Monitoring tool ToolHandle<GenericMonitoringTool> m_monTool{this, "MonTool", "", "Monitoring tool"}; -- GitLab