ATLAS Offline Software
Loading...
Searching...
No Matches
HltROBDataProviderSvc Class Reference

ROBDataProvider service for retrieving and serving ROB data in HLT online. More...

#include <HltROBDataProviderSvc.h>

Inheritance diagram for HltROBDataProviderSvc:
Collaboration diagram for HltROBDataProviderSvc:

Classes

struct  EventCache
 struct which provides the event cache for each slot More...

Public Types

typedef OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment ROBF
 ROB Fragment class.

Public Member Functions

 HltROBDataProviderSvc (const std::string &name, ISvcLocator *pSvcLocator)
virtual StatusCode initialize () override
virtual StatusCode finalize () override
virtual void addROBData (const EventContext &, const std::vector< uint32_t > &, const std::string_view callerName="UNKNOWN") override
 Signal ROB fragments which should be considered for prefetching in online running.
virtual void setNextEvent (const EventContext &, const std::vector< ROBF > &) override
 Start a new event with a set of ROB fragments, e.g. from LVL1 result, in online and add the fragments to the ROB cache.
virtual void setNextEvent (const EventContext &, const RawEvent *) override
 Start a new event with a full event fragment and add all ROB fragments in to the ROB cache.
virtual void getROBData (const EventContext &, const std::vector< uint32_t > &, std::vector< const ROBF * > &, const std::string_view callerName="UNKNOWN") override
 Retrieve ROB fragments for given ROB ids from the ROB cache.
virtual const RawEventgetEvent (const EventContext &) override
 Retrieve the full event fragment.
virtual void setEventStatus (const EventContext &, uint32_t) override
 Store the status for the event.
virtual uint32_t getEventStatus (const EventContext &) override
 Retrieve the status for the event.
virtual void processCachedROBs (const EventContext &, const std::function< void(const ROBF *)> &) const override
 Apply a function to all ROBs in the cache.
virtual bool isEventComplete (const EventContext &) const override
 Flag to check if all event data have been retrieved.
virtual int collectCompleteEventData (const EventContext &, const std::string_view callerName="UNKNOWN") override
 retrieve in online running all ROBs for the event from the readout system. Only those ROBs are retrieved which are not already in the cache

Private Types

typedef tbb::concurrent_unordered_map< uint32_t, ROBFROBMAP
 map for all the ROB fragments
typedef std::vector< std::pair< int, int > > ArrayPairIntType
 vector of Source ids and status words to be ignored for the ROB map
typedef std::map< uint32_t, std::vector< uint32_t > > FilterRobMap
 map of full ROB Source ids and status words to be ignored for the ROB map
typedef std::map< eformat::SubDetector, std::vector< uint32_t > > FilterSubDetMap
 map of Sub Det Source ids and status words to be ignored for the ROB map

Private Member Functions

bool robmap_filterRobWithStatus (const ROBF *)
 method to filter ROBs with given Status code
robmonitor::ROBDataStruct robmap_getRobData (const ROBF &, robmonitor::ROBHistory)
 method to get ROB fragment from ROBF input: context ROB fragment to be parsed ROB history status
void eventCache_clear (EventCache *)
 method to clear an event cache in a slot input: pointer to cache
void eventCache_checkRobListToCache (EventCache *, const 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 compare a list of ROB Ids to the ones in an event cache in a slot input: pointer to cache vector of ROB Ids to compare to existing ones in cache output: vector of ROB fragments available already in cache vector of ROB Ids missing in cache set of disabled ROBs
void eventCache_addRobData (EventCache *, std::vector< ROBF > &&, std::optional< std::reference_wrapper< std::set< uint32_t > > > robIds_ignored=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 output: set of ignored ROBs

Private Attributes

SG::SlotSpecificObj< EventCachem_eventsCache
 An event cache for each slot.
Gaudi::Property< ArrayPairIntTypem_filterRobWithStatus
Gaudi::Property< ArrayPairIntTypem_filterSubDetWithStatus
FilterRobMap m_filterRobMap
FilterSubDetMap m_filterSubDetMap
Gaudi::Property< bool > m_filterEmptyROB
 Filter out empty ROB fragments which are send by the ROS.
bool m_maskL2EFModuleID = false
 For Run 1 the module ID for the Lvl2/EF result contained the machine ID and needed to be filtered out to access these result records transparently.
Gaudi::Property< bool > m_readROBfromOKS
Gaudi::Property< std::vector< uint32_t > > m_enabledROBs
Gaudi::Property< bool > m_prefetchAllROBsfromROS
Gaudi::Property< std::vector< uint8_t > > m_prefetchSubDetROS
std::vector< uint32_t > m_prefetchWholeROSList
Gaudi::Property< bool > m_doCostMonitoring
ServiceHandle< ITrigCostSvcm_trigCostSvcHandle
ToolHandle< GenericMonitoringToolm_monTool {this, "MonTool", "", "Monitoring tool"}
 Monitoring tool.

Detailed Description

ROBDataProvider service for retrieving and serving ROB data in HLT online.

Definition at line 38 of file HltROBDataProviderSvc.h.

Member Typedef Documentation

◆ ArrayPairIntType

typedef std::vector< std::pair<int, int> > HltROBDataProviderSvc::ArrayPairIntType
private

vector of Source ids and status words to be ignored for the ROB map

Definition at line 111 of file HltROBDataProviderSvc.h.

◆ FilterRobMap

typedef std::map<uint32_t, std::vector<uint32_t> > HltROBDataProviderSvc::FilterRobMap
private

map of full ROB Source ids and status words to be ignored for the ROB map

Definition at line 118 of file HltROBDataProviderSvc.h.

◆ FilterSubDetMap

typedef std::map<eformat::SubDetector, std::vector<uint32_t> > HltROBDataProviderSvc::FilterSubDetMap
private

map of Sub Det Source ids and status words to be ignored for the ROB map

Definition at line 121 of file HltROBDataProviderSvc.h.

◆ ROBF

◆ ROBMAP

typedef tbb::concurrent_unordered_map<uint32_t, ROBF> HltROBDataProviderSvc::ROBMAP
private

map for all the ROB fragments

Definition at line 88 of file HltROBDataProviderSvc.h.

Constructor & Destructor Documentation

◆ HltROBDataProviderSvc()

HltROBDataProviderSvc::HltROBDataProviderSvc ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 25 of file HltROBDataProviderSvc.cxx.

25 :
26 base_class(name, pSvcLocator)
27{
28}

Member Function Documentation

◆ addROBData()

void HltROBDataProviderSvc::addROBData ( const EventContext & context,
const std::vector< uint32_t > & robIds,
const std::string_view callerName = "UNKNOWN" )
overridevirtual

Signal ROB fragments which should be considered for prefetching in online running.

Implementation of IROBDataProviderSvc interface —

Signal ROB fragments which should be considered for prefetching in online running

Definition at line 201 of file HltROBDataProviderSvc.cxx.

203{
204 ATH_MSG_VERBOSE("start of " << __FUNCTION__ << ": Number of ROB Ids to add = " << robIds.size()
205 << " caller name = " << callerName);
206 EventCache* cache = m_eventsCache.get( context );
207
208 // allocate vector of missing ROB Ids
209 std::vector<uint32_t> robIds_missing ;
210
211 // allocate vector with existing ROB fragments in cache
212 std::vector<const ROBF*> robFragments_inCache ;
213
214 // check input ROB list against cache
215 eventCache_checkRobListToCache(cache,robIds, robFragments_inCache, robIds_missing ) ;
216
217 // call data collector
218 if (!robIds_missing.empty()) {
219 ATH_MSG_DEBUG( __FUNCTION__ << ": Number of ROB Ids to reserve with DCM = " << robIds_missing.size());
220 // reserve the ROBs in the DCM
221 try {
222 auto mon_robres_t = Monitored::Timer("TIME_ROBReserveData");
223 hltinterface::DataCollector::instance()->reserveROBData(cache->globalEventNumber, robIds_missing);
224 mon_robres_t.stop();
225 // Fill monitoring histograms
226 auto mon_robres_nROBs = Monitored::Scalar("NUMBER_ROBReserveData",robIds_missing.size());
227 auto mon = Monitored::Group(m_monTool, mon_robres_t, mon_robres_nROBs);
228 } catch (const std::exception& ex) {
229 ATH_MSG_ERROR( __FUNCTION__ << ":" << __LINE__
230 << "Failed to reserve ROB data, caught an unexpected exception: " << ex.what());
231 } catch (...) {
232 ATH_MSG_ERROR( __FUNCTION__ << ":" << __LINE__
233 << "Failed to reserve ROB data, caught an unexpected exception.");
234 }
235 }
236}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_DEBUG(x)
void eventCache_checkRobListToCache(EventCache *, const 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 compare a list of ROB Ids to the ones in an event cache in a slot input: pointer to cache v...
ToolHandle< GenericMonitoringTool > m_monTool
Monitoring tool.
SG::SlotSpecificObj< EventCache > m_eventsCache
An event cache for each slot.
struct which provides the event cache for each slot

◆ collectCompleteEventData()

int HltROBDataProviderSvc::collectCompleteEventData ( const EventContext & context,
const std::string_view callerName = "UNKNOWN" )
overridevirtual

retrieve in online running all ROBs for the event from the readout system. Only those ROBs are retrieved which are not already in the cache

Definition at line 477 of file HltROBDataProviderSvc.cxx.

478{
479 ATH_MSG_VERBOSE("start of " << __FUNCTION__ << " caller name = " << callerName);
480
481 EventCache* cache = m_eventsCache.get( context );
482
483 // lock for event cache update with DCM
484 std::lock_guard<std::mutex> lock( cache->eventCache_mtx );
485
486 // return if event is already complete
487 if (cache->isEventComplete) return 0;
488
489 typedef std::vector<hltinterface::DCM_ROBInfo> ROBInfoVec;
490 ROBInfoVec vRobInfos ;
491 if (!m_enabledROBs.value().empty()) {
492 vRobInfos.reserve( m_enabledROBs.value().size() ) ;
493 } else {
494 vRobInfos.reserve( MAX_ROBFRAGMENTS ) ;
495 }
496
497 // Get ROB Fragments for complete event with DataCollector
498 try {
499 auto mon_col_t = Monitored::Timer("TIME_CollectAllROBs");
500 hltinterface::DataCollector::instance()->collect(vRobInfos, cache->globalEventNumber);
501 mon_col_t.stop();
502 ATH_MSG_DEBUG( __FUNCTION__ << ": Number of received ROB Ids = " << vRobInfos.size() );
503 // Fill monitoring histograms
504 auto mon_col_nROBs = Monitored::Scalar("NUMBER_CollectAllROBs",vRobInfos.size());
505 auto mon = Monitored::Group(m_monTool, mon_col_t, mon_col_nROBs);
506 } catch (const std::exception& ex) {
507 ATH_MSG_ERROR( __FUNCTION__ << ":" << __LINE__
508 << "Failed to collect complete event, caught an unexpected exception: " << ex.what()
509 << ". Throwing hltonl::Exception::EventSourceCorrupted" );
510 throw hltonl::Exception::EventSourceCorrupted();
511 } catch (...) {
512 ATH_MSG_ERROR( __FUNCTION__ << ":" << __LINE__
513 << "Failed to collect complete event, caught an unexpected exception. "
514 << "Throwing hltonl::Exception::EventSourceCorrupted" );
515 throw hltonl::Exception::EventSourceCorrupted();
516 }
517
518 // Store retrieved ROB data in the cache
519 std::vector<ROBF> robFragments_missing;
520 robFragments_missing.reserve( vRobInfos.size() );
521 for(ROBInfoVec::const_iterator it=vRobInfos.begin(); it!=vRobInfos.end(); ++it) {
522 ATH_MSG_VERBOSE(__FUNCTION__ << " ROB Id = 0x" << MSG::hex << it->robFragment.source_id() << MSG::dec
523 << " retrieved from DCM for (global Id, L1 Id) = (" << cache->globalEventNumber << "," << cache->currentLvl1ID <<")" );
524 robFragments_missing.push_back( it->robFragment );
525 }
526 // add the ROBs to the cache/rob map
527 eventCache_addRobData(cache, std::move(robFragments_missing)) ;
528
529 // update event complete flag
530 cache->isEventComplete = true;
531
532 return vRobInfos.size();
533}
static const size_t MAX_ROBFRAGMENTS
Gaudi::Property< std::vector< uint32_t > > m_enabledROBs
void eventCache_addRobData(EventCache *, std::vector< ROBF > &&, std::optional< std::reference_wrapper< std::set< uint32_t > > > robIds_ignored=std::nullopt)
method to add ROB fragments to an event cache in a slot input: pointer to cache vector of ROB fragmen...

◆ eventCache_addRobData()

void HltROBDataProviderSvc::eventCache_addRobData ( EventCache * cache,
std::vector< ROBF > && robFragments,
std::optional< std::reference_wrapper< std::set< uint32_t > > > robIds_ignored = std::nullopt )
private

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 output: set of ignored ROBs

Definition at line 653 of file HltROBDataProviderSvc.cxx.

655{
656 ATH_MSG_VERBOSE("start of " << __FUNCTION__ << " number of ROB fragments to add = " << robFragments.size());
657
658 for (const ROBF& rob : robFragments) {
659
660 // Source ID
661 uint32_t id = rob.source_id();
662 ATH_MSG_VERBOSE(__FUNCTION__ << " Id = 0x" << std::hex << id << std::dec );
663
664 // mask off the module ID for L2 and EF result for Run 1 data
665 if ( (eformat::helper::SourceIdentifier(id).module_id() != 0) &&
666 (eformat::helper::SourceIdentifier(id).subdetector_id() == eformat::TDAQ_LVL2) ) {
667 id = eformat::helper::SourceIdentifier(eformat::helper::SourceIdentifier(id).subdetector_id(),0).code();
668 if (!m_maskL2EFModuleID) {
669 ATH_MSG_ERROR(__FUNCTION__ << " Inconsistent flag for masking L2/EF module IDs");
671 }
672 } else if ( (eformat::helper::SourceIdentifier(id).module_id() != 0) &&
673 (eformat::helper::SourceIdentifier(id).subdetector_id() == eformat::TDAQ_EVENT_FILTER) &&
675 id = eformat::helper::SourceIdentifier(eformat::helper::SourceIdentifier(id).subdetector_id(),0).code();
676 }
677
678 // check if ROB is already in cache
679 { ROBMAP::const_iterator it = cache->robmap.find(id);
680 if (it != cache->robmap.end()) {
681 ATH_MSG_VERBOSE(__FUNCTION__ << " Duplicate ROB Id 0x" << MSG::hex << id << MSG::dec
682 << " found for (global Id, L1 Id) = (" << cache->globalEventNumber << "," << cache->currentLvl1ID <<")" );
683 continue;
684 }
685 }
686
687 // filter ROBs with external criteria
688 if (robmap_filterRobWithStatus(&rob)) {
689 if (rob.nstatus() > 0) {
690 const uint32_t* it_status;
691 rob.status(it_status);
692 eformat::helper::Status tmpstatus(*it_status);
693 ATH_MSG_VERBOSE(__FUNCTION__ << " ROB Id = 0x" << MSG::hex << id << std::setfill('0')
694 << " with Generic Status Code = 0x" << std::setw(4) << tmpstatus.generic()
695 << " and Specific Status Code = 0x" << std::setw(4) << tmpstatus.specific() << MSG::dec
696 << " removed for (global Id, L1 Id) = (" << cache->globalEventNumber << "," << cache->currentLvl1ID <<")" );
697 }
698 if (robIds_ignored) {
699 robIds_ignored->get().insert(id);
700 }
701 continue;
702 }
703
704 // check for ROBs with no data
705 if ((rob.rod_ndata() == 0) && (m_filterEmptyROB)) {
706 ATH_MSG_VERBOSE(__FUNCTION__ << " Empty ROB Id = 0x" << MSG::hex << id << MSG::dec
707 << " removed for (global Id, L1 Id) = (" << cache->globalEventNumber << "," << cache->currentLvl1ID <<")" );
708 continue;
709 }
710
711 // add ROB to map
712 { cache->robmap.insert(std::make_pair(id,std::move(rob))); }
713 }
714}
OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment ROBF
ROB Fragment class.
bool robmap_filterRobWithStatus(const ROBF *)
method to filter ROBs with given Status code
Gaudi::Property< bool > m_filterEmptyROB
Filter out empty ROB fragments which are send by the ROS.
bool m_maskL2EFModuleID
For Run 1 the module ID for the Lvl2/EF result contained the machine ID and needed to be filtered out...
setEventNumber uint32_t

◆ eventCache_checkRobListToCache()

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::optional< std::reference_wrapper< std::set< uint32_t > > > robIds_disabled = std::nullopt )
private

method to compare a list of ROB Ids to the ones in an event cache in a slot input: pointer to cache vector of ROB Ids to compare to existing ones in cache output: vector of ROB fragments available already in cache vector of ROB Ids missing in cache set of disabled ROBs

Definition at line 598 of file HltROBDataProviderSvc.cxx.

602{
603 ATH_MSG_VERBOSE("start of " << __FUNCTION__ << " number of ROB Ids to check = " << robIds_toCheck.size());
604
605 // clear output arrays
606 robFragments_inCache.clear();
607 robIds_missing.clear();
608
609 // allocate sufficient space for output arrays
610 robFragments_inCache.reserve( robIds_toCheck.size() );
611 robIds_missing.reserve( robIds_toCheck.size() );
612
613 // check input ROB ids
614 for (uint32_t id : robIds_toCheck) {
615
616 // check for duplicate IDs on the list of missing ROBs
617 std::vector<uint32_t>::iterator missing_it = std::find(robIds_missing.begin(), robIds_missing.end(), id);
618 if (missing_it != robIds_missing.end()) {
619 ATH_MSG_VERBOSE(__FUNCTION__ << " ROB Id : 0x" << MSG::hex << id << MSG::dec <<" is already on the list of missing IDs.");
620 continue;
621 }
622
623 // check if ROB is already in cache
624 { ROBMAP::const_iterator map_it = cache->robmap.find(id);
625 if (map_it != cache->robmap.end()) {
626 ATH_MSG_VERBOSE(__FUNCTION__ << " ROB Id 0x" << MSG::hex << id << MSG::dec
627 << " found for (global Id, L1 Id) = (" << cache->globalEventNumber << "," << cache->currentLvl1ID <<")" );
628 robFragments_inCache.push_back( &(map_it->second) );
629 continue;
630 }
631 }
632
633 // check if ROB is actually enabled for readout
634 if (!m_enabledROBs.value().empty()) {
635 std::vector<uint32_t>::const_iterator rob_enabled_it =
636 std::find(m_enabledROBs.value().begin(), m_enabledROBs.value().end(),id);
637 if(rob_enabled_it == m_enabledROBs.value().end()) {
638 ATH_MSG_VERBOSE(__FUNCTION__ << " ROB Id : 0x" << MSG::hex << id << MSG::dec
639 << " will be not added, since it is not on the list of enabled ROBs.");
640 if (robIds_disabled) {
641 robIds_disabled->get().insert(id);
642 }
643 continue;
644 }
645 }
646
647 // the ROB is not in the cache and should be eventually added
648 ATH_MSG_VERBOSE(__FUNCTION__ << " ROB Id : 0x" << MSG::hex << id << MSG::dec <<" is missing ");
649 robIds_missing.push_back( id ) ;
650 } // end loop over input ROB Ids to check
651}

◆ eventCache_clear()

void HltROBDataProviderSvc::eventCache_clear ( EventCache * cache)
private

method to clear an event cache in a slot input: pointer to cache

Definition at line 587 of file HltROBDataProviderSvc.cxx.

588{
589 ATH_MSG_VERBOSE("start of " << __FUNCTION__);
590 cache->event = nullptr;
591 cache->currentLvl1ID = 0;
592 cache->globalEventNumber = 0;
593 cache->eventStatus = 0;
594 cache->isEventComplete = false;
595 { cache->robmap.clear(); }
596}

◆ finalize()

StatusCode HltROBDataProviderSvc::finalize ( )
overridevirtual

Definition at line 192 of file HltROBDataProviderSvc.cxx.

193{
194 ATH_CHECK(m_monTool.release());
195 return StatusCode::SUCCESS;
196}
#define ATH_CHECK
Evaluate an expression and check for errors.

◆ getEvent()

const RawEvent * HltROBDataProviderSvc::getEvent ( const EventContext & context)
overridevirtual

Retrieve the full event fragment.

Definition at line 439 of file HltROBDataProviderSvc.cxx.

440{
441 ATH_MSG_VERBOSE("start of " << __FUNCTION__);
442 return m_eventsCache.get( context )->event;
443}

◆ getEventStatus()

uint32_t HltROBDataProviderSvc::getEventStatus ( const EventContext & context)
overridevirtual

Retrieve the status for the event.

Definition at line 453 of file HltROBDataProviderSvc.cxx.

454{
455 ATH_MSG_VERBOSE("start of " << __FUNCTION__);
456 return m_eventsCache.get( context )->eventStatus;
457}

◆ getROBData()

void HltROBDataProviderSvc::getROBData ( const EventContext & context,
const std::vector< uint32_t > & robIds,
std::vector< const ROBF * > & robFragments,
const std::string_view callerName = "UNKNOWN" )
overridevirtual

Retrieve ROB fragments for given ROB ids from the ROB cache.

Definition at line 306 of file HltROBDataProviderSvc.cxx.

309{
310 EventCache* cache = m_eventsCache.get( context );
311
312 // lock for event cache update with DCM
313 std::lock_guard<std::mutex> lock( cache->eventCache_mtx );
314
315 TrigTimeStamp rosStartTime;
316
317 ATH_MSG_VERBOSE("start of " << __FUNCTION__ << ": Number of ROB Ids to get = " << robIds.size()
318 << " caller name = " << callerName);
319
320 // allocate vector of missing ROB Ids
321 std::vector<uint32_t> robIds_missing ;
322
323 // check input ROB list against cache
324 eventCache_checkRobListToCache(cache, robIds, robFragments, robIds_missing) ;
325
326 // no missing ROB fragments, return the found ROB fragments
327 if (robIds_missing.empty()) {
328 ATH_MSG_DEBUG( __FUNCTION__ << ": All requested ROB Ids were found in the cache. ");
329 return;
330 }
331
332 // There were missing ROB fragments retrieve them from the DCM and add them to the cache
333 ATH_MSG_DEBUG( __FUNCTION__ << ": Number of ROB Ids to retrieve with DCM = " << robIds_missing.size());
334
335 typedef std::vector<hltinterface::DCM_ROBInfo> ROBInfoVec;
336 ROBInfoVec vRobInfos;
337
338 // Get ROB Fragments with DataCollector
339 vRobInfos.reserve( robIds_missing.size() ) ;
340 try {
341 auto mon_rob_t = Monitored::Timer("TIME_ROBRequest");
342 hltinterface::DataCollector::instance()->collect(vRobInfos, cache->globalEventNumber, robIds_missing);
343 mon_rob_t.stop();
344 // Fill monitoring histograms
345 auto mon_rob_nROBs = Monitored::Scalar("NUMBER_ROBRequest",vRobInfos.size());
346 auto mon = Monitored::Group(m_monTool, mon_rob_t, mon_rob_nROBs);
347 } catch (const std::exception& ex) {
348 ATH_MSG_ERROR( __FUNCTION__ << ":" << __LINE__
349 << "Failed to collect ROBs, caught an unexpected exception: " << ex.what()
350 << ". Throwing hltonl::Exception::EventSourceCorrupted" );
351 throw hltonl::Exception::EventSourceCorrupted();
352 } catch (...) {
353 ATH_MSG_ERROR( __FUNCTION__ << ":" << __LINE__
354 << "Failed to collect ROBs, caught an unexpected exception. "
355 << "Throwing hltonl::Exception::EventSourceCorrupted" );
356 throw hltonl::Exception::EventSourceCorrupted();
357 }
358
359 // Store retrieved ROB data in the cache
360 std::vector<ROBF> robFragments_missing;
361 robFragments_missing.reserve( vRobInfos.size() );
362 for(ROBInfoVec::const_iterator it=vRobInfos.begin(); it!=vRobInfos.end(); ++it) {
363 ATH_MSG_DEBUG(__FUNCTION__ << " ROB Id = 0x" << MSG::hex << it->robFragment.source_id() << MSG::dec
364 << " retrieved from DCM for (global Id, L1 Id) = (" << cache->globalEventNumber << "," << cache->currentLvl1ID <<")" );
365 robFragments_missing.push_back( it->robFragment );
366 }
367
368 // Check if event should be monitored and monitor ROB data
369 auto monitorData = robmonitor::ROBDataMonitorStruct(cache->currentLvl1ID, std::string(callerName));
370 if (m_doCostMonitoring && m_trigCostSvcHandle->isMonitoredEvent(context, /*includeMultiSlot =*/ false)) {
371 // Monitor HLT cached ROBs
372 for (const ROBF* robFrag : robFragments) {
373 monitorData.requested_ROBs[robFrag->source_id()] = robmap_getRobData(*robFrag, robmonitor::HLT_CACHED);
374 }
375
376 // Add the ROBs to the cache/rob map and collect ignored robs
377 std::set<uint32_t> robIds_ignored;
378 eventCache_addRobData(cache, std::move(robFragments_missing), robIds_ignored);
379
380 // Monitor DCM ROBs
381 for (const hltinterface::DCM_ROBInfo& robInfo : vRobInfos) {
383
384 // Check ROB history
385 if (robIds_ignored.find(robInfo.robFragment.source_id()) != robIds_ignored.end()) {
387 }
388 else {
389 status = robInfo.robIsCached ? robmonitor::DCM_CACHED : robmonitor::RETRIEVED;
390 }
391
392 monitorData.requested_ROBs[robInfo.robFragment.source_id()] = robmap_getRobData(robInfo.robFragment, status);
393 }
394
395 // Return all the requested ROB fragments from the cache and collect disabled ROBs
396 std::set<uint32_t> robIds_disabled;
397 eventCache_checkRobListToCache(cache, robIds, robFragments, robIds_missing, robIds_disabled);
398
399 // Fill undefined (not enabled) ROBs
400 for (uint32_t robId : robIds_disabled) {
401 monitorData.requested_ROBs[robId] = robmonitor::ROBDataStruct(robId);
402 monitorData.requested_ROBs[robId].rob_history = robmonitor::UNDEFINED;
403 }
404 }
405 else {
406 // add the ROBs to the cache/rob map
407 eventCache_addRobData(cache, std::move(robFragments_missing)) ;
408
409 // return all the requested ROB fragments from the cache
410 eventCache_checkRobListToCache(cache, robIds, robFragments, robIds_missing) ;
411 }
412
413 // Save ROS processing time and pass ROS data to CostMonitor
414 if (m_doCostMonitoring && m_trigCostSvcHandle->isMonitoredEvent(context, /*includeMultiSlot =*/ false)) {
415 TrigTimeStamp rosEndTime;
416
417 monitorData.start_time = rosStartTime.microsecondsSinceEpoch();
418 monitorData.end_time = rosEndTime.microsecondsSinceEpoch();
419
420 // Check if ROBMonitorDataStruct is move-constructible
421 static_assert(std::is_nothrow_move_constructible<robmonitor::ROBDataMonitorStruct>::value);
422 if (m_trigCostSvcHandle->monitorROS(context, std::move(monitorData)).isFailure()) {
423 ATH_MSG_WARNING("TrigCost ROS monitoring failed!");
424 }
425 }
426}
#define ATH_MSG_WARNING(x)
ServiceHandle< ITrigCostSvc > m_trigCostSvcHandle
robmonitor::ROBDataStruct robmap_getRobData(const ROBF &, robmonitor::ROBHistory)
method to get ROB fragment from ROBF input: context ROB fragment to be parsed ROB history status
Gaudi::Property< bool > m_doCostMonitoring
uint64_t microsecondsSinceEpoch() const
status
Definition merge.py:16
ROBHistory
A structure with data about ROB properties.

◆ initialize()

StatusCode HltROBDataProviderSvc::initialize ( )
overridevirtual

Definition at line 30 of file HltROBDataProviderSvc.cxx.

31{
32 ATH_MSG_INFO("HltROBDataProviderSvc::" << __FUNCTION__ << ": name = " << name());
33//===================================================================
34// The filtering of ROBs can be configured with job options as:
35//
36// for individual ROBs as :
37// ------------------------
38// ROBDataProviderSvc.filterRobWithStatus = [ (ROB SourceId, StatusCode to remove),
39// (ROB SourceId 2, StatusCode to remove 2), ... ]
40// and:
41// ROBDataProviderSvc.filterRobWithStatus += [ (ROB SourceId n, StatusCode to remove n) ]
42//
43// Example:
44// ROBDataProviderSvc.filterRobWithStatus = [ (0x42002a,0x0000000f), (0x42002e,0x00000008) ]
45// ROBDataProviderSvc.filterRobWithStatus += [ (0x42002b,0x00000000) ]
46//
47// for all ROBs of a given sub detector as :
48// -----------------------------------------
49// ROBDataProviderSvc.filterSubDetWithStatus = [ (Sub Det Id, StatusCode to remove),
50// (Sub Det Id 2, StatusCode to remove 2), ... ]
51// and:
52// ROBDataProviderSvc.filterSubDetWithStatus += [ (Sub Det Id n, StatusCode to remove n) ]
53//
54// Example:
55// ROBDataProviderSvc.filterSubDetWithStatus = [ (0x41,0x00000000), (0x42,0x00000000) ]
56// ROBDataProviderSvc.filterSubDetWithStatus += [ (0x41,0xcb0002) ]
57//
58// For valid ROB Source Ids, Sub Det Ids and ROB Status elements see the event format
59// document ATL-D-ES-0019 (EDMS)
60//===================================================================
61 // get list of ROBs to filter out by status code
62 for (unsigned int i = 0; i < m_filterRobWithStatus.value().size(); i++) {
63 eformat::helper::SourceIdentifier tmpsrc(m_filterRobWithStatus.value()[i].first);
64 if (tmpsrc.human_detector() != "UNKNOWN") {
65 m_filterRobMap[tmpsrc.code()].push_back(m_filterRobWithStatus.value()[i].second);
66 }
67 }
68
69 // get list of subdetectors to filter out by status code
70 for (unsigned int i = 0; i < m_filterSubDetWithStatus.value().size(); i++) {
71 eformat::helper::SourceIdentifier tmpsrc((eformat::SubDetector)m_filterSubDetWithStatus.value()[i].first, 0);
72 if (tmpsrc.human_detector() != "UNKNOWN") {
73 m_filterSubDetMap[tmpsrc.subdetector_id()].push_back(m_filterSubDetWithStatus.value()[i].second);
74 }
75 }
76 ATH_MSG_INFO(" ---> Filter out empty ROB fragments = " << m_filterEmptyROB);
77
78 // print list of ROBs to filter out by status code
79 ATH_MSG_INFO(" ---> Filter out specific ROBs by Status Code: # ROBs = " << m_filterRobMap.size());
80 for (const auto& it : m_filterRobMap) {
81 eformat::helper::SourceIdentifier tmpsrc(it.first);
82 ATH_MSG_INFO(" RobId=0x" << MSG::hex << it.first << " -> in Sub Det = " << tmpsrc.human_detector());
83
84 for (auto it_status: it.second) {
85 eformat::helper::Status tmpstatus(it_status);
86 ATH_MSG_INFO(" Status Code=0x"
87 << MSG::hex << std::setfill( '0' ) << std::setw(8) << tmpstatus.code()
88 << " Generic Part=0x" << std::setw(4) << tmpstatus.generic()
89 << " Specific Part=0x" << std::setw(4) << tmpstatus.specific() << MSG::dec);
90 }
91 }
92
93 // print list of subdetectors to filter out by status code
94 ATH_MSG_INFO(" ---> Filter out Sub Detector ROBs by Status Code: # Sub Detectors = " << m_filterSubDetMap.size());
95 for (const auto& it : m_filterSubDetMap) {
96 eformat::helper::SourceIdentifier tmpsrc(it.first, 0);
97 ATH_MSG_INFO(" SubDetId=0x" << MSG::hex << it.first << " -> " << tmpsrc.human_detector());
98 for (auto it_status : it.second) {
99 eformat::helper::Status tmpstatus(it_status);
100 ATH_MSG_INFO(" Status Code=0x"
101 << MSG::hex << std::setfill( '0' ) << std::setw(8) << tmpstatus.code()
102 << " Generic Part=0x" << std::setw(4) << tmpstatus.generic()
103 << " Specific Part=0x" << std::setw(4) << tmpstatus.specific() << MSG::dec);
104 }
105 }
106
107 // get the list of enabled ROBs from OKS
108 bool robOKSconfigFound = false;
109
110 if ( m_readROBfromOKS.value() ) {
111 ServiceHandle<Gaudi::Interfaces::IOptionsSvc> jobOptionsSvc("JobOptionsSvc", name());
112 if ((jobOptionsSvc.retrieve()).isFailure()) {
113 ATH_MSG_ERROR("Could not find JobOptionsSvc");
114 } else {
115 if (jobOptionsSvc->has("DataFlowConfig.DF_Enabled_ROB_IDs") &&
116 m_enabledROBs.fromString(jobOptionsSvc->get("DataFlowConfig.DF_Enabled_ROB_IDs")).isSuccess()) {
117 robOKSconfigFound = true;
118 ATH_MSG_INFO(" ---> Read from OKS = "
119 << MSG::dec << m_enabledROBs.value().size() << " enabled ROB IDs.");
120 } else {
121 ATH_MSG_WARNING("Could not set Property 'enabledROBs' from OKS.");
122 }
123 }
124 }
125
126 // print list of enabled ROBs, read from OKS
127 ATH_MSG_INFO(" ---> Read list of enabled ROBs from OKS = " << m_readROBfromOKS);
128 if (m_enabledROBs.value().empty()) {
129 ATH_MSG_INFO(" ---> The list of enabled ROBs has size = 0. No check will be performed ");
130 } else {
131 if (m_readROBfromOKS.value() && robOKSconfigFound) {
132 ATH_MSG_INFO(" ---> The list of enabled ROBs has size = " << MSG::dec << m_enabledROBs.value().size()
133 << ". It was read from the partition database." );
134 } else {
135 ATH_MSG_INFO(" ---> The list of enabled ROBs has size = " << MSG::dec << m_enabledROBs.value().size()
136 << ". It was read from job options." );
137 }
138 }
139
140 // prefetch all ROBs in a ROS on a first retrieval of ROBs from this ROS
141 ATH_MSG_INFO(" ---> Prefetch all ROBs in a ROS on first retrieval = " << m_prefetchAllROBsfromROS);
142
143 if ( m_prefetchAllROBsfromROS.value() && !m_enabledROBs.value().empty() ) {
144 m_prefetchWholeROSList.reserve( m_enabledROBs.value().size() );
145 if ( m_prefetchSubDetROS.value().empty() ||
146 (std::find(m_prefetchSubDetROS.value().begin(),m_prefetchSubDetROS.value().end(),0) != m_prefetchSubDetROS.value().end())
147 )
148 {
150 ATH_MSG_INFO(" All enabled ROBs are used for prefetching. ROB list size = " << m_prefetchWholeROSList.size() );
151 } else {
152 ATH_MSG_INFO(" The following sub-detectors or sub-detector groups are configured for prefetching : Number = "
153 << m_prefetchSubDetROS.value().size() );
154 for (uint8_t it : m_prefetchSubDetROS.value() ) {
155 if (it > 0xf) {
156 eformat::SubDetector sd(static_cast<eformat::SubDetector>(it));
157 eformat::helper::SourceIdentifier tmpsrc(sd, 0);
158 ATH_MSG_INFO(" SubDetId = 0x" << MSG::hex << std::setw(2) << (int)it << MSG::dec << " -> Group : "
159 << tmpsrc.human_group()
160 << " -> SubDetector : " << tmpsrc.human_detector() );
161 } else {
162 eformat::SubDetectorGroup sg(static_cast<eformat::SubDetectorGroup>(it));
163 ATH_MSG_INFO(" SubDetGroup = 0x" << MSG::hex << std::setw(1) << (int)it << MSG::dec << " -> Group : "
164 << eformat::helper::SubDetectorGroupDictionary.string(sg));
165 }
166 }
167 // establish prefetch list
169 for (auto rob : m_enabledROBs.value() ) {
170 eformat::helper::SourceIdentifier tmpsrc(rob);
171 if( (std::find(m_prefetchSubDetROS.value().begin(),m_prefetchSubDetROS.value().end(),tmpsrc.subdetector_id())
172 != m_prefetchSubDetROS.value().end()) ||
173 (std::find(m_prefetchSubDetROS.value().begin(),m_prefetchSubDetROS.value().end(),tmpsrc.subdetector_group())
174 != m_prefetchSubDetROS.value().end())
175 ) m_prefetchWholeROSList.push_back(rob);
176 }
177 ATH_MSG_INFO(" Number of ROBs which are used for prefetching = " << m_prefetchWholeROSList.size() );
178 }
179 }
180
181 // Setup the slot specific cache
182 m_eventsCache = SG::SlotSpecificObj<EventCache>( SG::getNSlots() );
183
184 // Retrieve the monitoring tool
185 if (!m_monTool.empty()) ATH_CHECK(m_monTool.retrieve());
186
188
189 return(StatusCode::SUCCESS);
190}
#define ATH_MSG_INFO(x)
std::vector< uint32_t > m_prefetchWholeROSList
Gaudi::Property< ArrayPairIntType > m_filterRobWithStatus
Gaudi::Property< bool > m_prefetchAllROBsfromROS
Gaudi::Property< ArrayPairIntType > m_filterSubDetWithStatus
Gaudi::Property< std::vector< uint8_t > > m_prefetchSubDetROS
Gaudi::Property< bool > m_readROBfromOKS
size_t getNSlots()
Return the number of event slots.

◆ isEventComplete()

bool HltROBDataProviderSvc::isEventComplete ( const EventContext & context) const
overridevirtual

Flag to check if all event data have been retrieved.

Definition at line 470 of file HltROBDataProviderSvc.cxx.

471{
472 ATH_MSG_VERBOSE("start of " << __FUNCTION__);
473 return m_eventsCache.get( context )->isEventComplete;
474}

◆ processCachedROBs()

void HltROBDataProviderSvc::processCachedROBs ( const EventContext & context,
const std::function< void(const ROBF *)> & fn ) const
overridevirtual

Apply a function to all ROBs in the cache.

Definition at line 460 of file HltROBDataProviderSvc.cxx.

461{
462 ATH_MSG_VERBOSE("start of " << __FUNCTION__);
463 for ( const auto& el : m_eventsCache.get( context )->robmap )
464 {
465 fn( &el.second );
466 }
467}

◆ robmap_filterRobWithStatus()

bool HltROBDataProviderSvc::robmap_filterRobWithStatus ( const ROBF * rob)
private

method to filter ROBs with given Status code

Definition at line 536 of file HltROBDataProviderSvc.cxx.

537{
538 // No filter criteria defined
539 if (m_filterRobMap.empty() && m_filterSubDetMap.empty()) {
540 return(false);
541 }
542
543 // There should be at least one status element if there was an error
544 // in case there are 0 status elements then there was no known error
545 // (see event format document ATL-D-ES-0019 (EDMS))
546 const uint32_t* rob_it_status;
547 const uint32_t null_status(0);
548 // The ROB has no status elements
549 if (rob->nstatus() == 0) {
550 rob_it_status = &null_status;
551 } else {
552 // The ROB has at least one status element, access it via an iterator
553 rob->status(rob_it_status);
554 }
555
556 // Build the full ROB Sourceidentifier
557 eformat::helper::SourceIdentifier tmpsrc(rob->rob_source_id());
558
559 // Check if there is a ROB specific filter rule defined for this ROB Id and match the status code
560 FilterRobMap::iterator map_it_rob = m_filterRobMap.find(tmpsrc.code());
561 if (map_it_rob != m_filterRobMap.end()) {
562 for (auto it_status: (*map_it_rob).second) {
563 if (*rob_it_status == it_status) {
564 ATH_MSG_VERBOSE(__FUNCTION__ << " ROB Id = 0x" << MSG::hex << tmpsrc.code()
565 << " with status = 0x" << *rob_it_status << MSG::dec
566 << " removed due to ROB filter rule.");
567 return(true);
568 }
569 }
570 }
571
572 // Check if there is a sub detector specific filter rule defined for this ROB Id and match the status code
573 FilterSubDetMap::iterator map_it_subdet = m_filterSubDetMap.find(tmpsrc.subdetector_id());
574 if (map_it_subdet != m_filterSubDetMap.end()) {
575 for (auto it_status: (*map_it_subdet).second) {
576 if (*rob_it_status == it_status) {
577 ATH_MSG_VERBOSE(__FUNCTION__ << " ROB Id = 0x" << MSG::hex << tmpsrc.code()
578 << " with status = 0x" << *rob_it_status << MSG::dec
579 << " removed due to SubDet filter rule.");
580 return(true);
581 }
582 }
583 }
584 return(false);
585}

◆ robmap_getRobData()

robmonitor::ROBDataStruct HltROBDataProviderSvc::robmap_getRobData ( const ROBF & robFrag,
robmonitor::ROBHistory robStatus )
private

method to get ROB fragment from ROBF input: context ROB fragment to be parsed ROB history status

Definition at line 428 of file HltROBDataProviderSvc.cxx.

429{
430 auto robData = robmonitor::ROBDataStruct(robFrag.source_id());
431 robData.rob_size = robFrag.fragment_size_word();
432 robData.rob_status_word = robFrag.nstatus() ? robFrag.status()[0] : 0;
433 robData.rob_history = robStatus;
434
435 return robData;
436}

◆ setEventStatus()

void HltROBDataProviderSvc::setEventStatus ( const EventContext & context,
uint32_t status )
overridevirtual

Store the status for the event.

Definition at line 446 of file HltROBDataProviderSvc.cxx.

447{
448 ATH_MSG_VERBOSE("start of " << __FUNCTION__);
449 m_eventsCache.get(context)->eventStatus = status;
450}

◆ setNextEvent() [1/2]

void HltROBDataProviderSvc::setNextEvent ( const EventContext & context,
const RawEvent * re )
overridevirtual

Start a new event with a full event fragment and add all ROB fragments in to the ROB cache.

Definition at line 246 of file HltROBDataProviderSvc.cxx.

247{
248 ATH_MSG_VERBOSE("start of " << __FUNCTION__);
249 EventCache* cache = m_eventsCache.get( context );
250
251 // clear the event cache of the previous event
252 eventCache_clear( cache );
253
254 //----------------------------------------------+
255 // Fill the event cache with the new event data |
256 //----------------------------------------------+
257
258 // store the pointer to the event
259 cache->event = re;
260 // set the LVL1 id
261 cache->currentLvl1ID = re->lvl1_id();
262 // set the global event number
263 cache->globalEventNumber = re->global_id();
264 // set flag for masking L2/EF module ID, this is only necessary for the separate L2 and EF systems from Run 1
265 m_maskL2EFModuleID = (re->nlvl2_trigger_info() != 0);
266
267 //--------------------+
268 // Fill the ROB cache |
269 //--------------------+
270
271 // get all the ROBFragments
272 //coverity[STACK_USE]
274 size_t number_robs = re->children(robF,MAX_ROBFRAGMENTS);
275 if (number_robs == MAX_ROBFRAGMENTS) {
276 ATH_MSG_ERROR("ROB buffer overflow: ROBs found = " << number_robs
277 << " Max. number of ROBs allowed = " << MAX_ROBFRAGMENTS);
278 }
279 std::vector<ROBF> rob_fragments;
280 rob_fragments.reserve(number_robs);
281 // loop over all ROBs
282 for (size_t irob = 0; irob < number_robs; irob++) {
283 rob_fragments.emplace_back(robF[irob]);
284 }
285 // add the ROBs to the cache/rob map, but extract the size before moving it
286 const size_t nRobs = rob_fragments.size();
287 eventCache_addRobData(cache, std::move(rob_fragments)) ;
288
289 ATH_MSG_DEBUG(" ---> setNextEvent for " << name() );
290 ATH_MSG_DEBUG(" current [global id, LVL1 id] = [" << cache->globalEventNumber << "," << cache->currentLvl1ID << "]" );
291 ATH_MSG_DEBUG(" number of received ROBs = " << nRobs );
292 ATH_MSG_DEBUG(" size of ROB cache = " << cache->robmap.size() );
293
294 //------------------------------+
295 // Initiate whole ROS retrieval |
296 //------------------------------+
297 if ( m_prefetchAllROBsfromROS.value() && !m_prefetchWholeROSList.empty() ) {
298 addROBData( context, m_prefetchWholeROSList, "prefetch_HLTROBDataProviderSvc" );
299 ATH_MSG_DEBUG(" ROS prefetch init. size = " << m_prefetchWholeROSList.size() );
300 }
301
302 return;
303}
const boost::regex re(r_e)
void eventCache_clear(EventCache *)
method to clear an event cache in a slot input: pointer to cache
virtual void addROBData(const EventContext &, const std::vector< uint32_t > &, const std::string_view callerName="UNKNOWN") override
Signal ROB fragments which should be considered for prefetching in online running.
const DataType * PointerType
Definition RawEvent.h:25

◆ setNextEvent() [2/2]

void HltROBDataProviderSvc::setNextEvent ( const EventContext & context,
const std::vector< ROBF > & result )
overridevirtual

Start a new event with a set of ROB fragments, e.g. from LVL1 result, in online and add the fragments to the ROB cache.

Definition at line 239 of file HltROBDataProviderSvc.cxx.

240{
241 ATH_MSG_FATAL("Obsolete method HltROBDataProviderSvc::setNextEvent(const EventContext& context, const std::vector<ROBF>& result) called "
242 << "\n context = " << context << " number of ROB fragments = " << result.size() );
243}
#define ATH_MSG_FATAL(x)

Member Data Documentation

◆ m_doCostMonitoring

Gaudi::Property<bool> HltROBDataProviderSvc::m_doCostMonitoring
private
Initial value:
{
this, "doCostMonitoring", false, "Enables start-of-event cost monitoring behavior."}

Definition at line 154 of file HltROBDataProviderSvc.h.

154 {
155 this, "doCostMonitoring", false, "Enables start-of-event cost monitoring behavior."};

◆ m_enabledROBs

Gaudi::Property< std::vector<uint32_t> > HltROBDataProviderSvc::m_enabledROBs
private
Initial value:
{
this, "enabledROBs", {} , "Enabled ROBs for retrieval"}

Definition at line 137 of file HltROBDataProviderSvc.h.

137 {
138 this, "enabledROBs", {} , "Enabled ROBs for retrieval"};

◆ m_eventsCache

SG::SlotSpecificObj<EventCache> HltROBDataProviderSvc::m_eventsCache
private

An event cache for each slot.

Definition at line 104 of file HltROBDataProviderSvc.h.

◆ m_filterEmptyROB

Gaudi::Property<bool> HltROBDataProviderSvc::m_filterEmptyROB
private
Initial value:
{
this, "filterEmptyROB", false , "Filter out empty ROB fragments"}

Filter out empty ROB fragments which are send by the ROS.

Definition at line 125 of file HltROBDataProviderSvc.h.

125 {
126 this, "filterEmptyROB", false , "Filter out empty ROB fragments"};

◆ m_filterRobMap

FilterRobMap HltROBDataProviderSvc::m_filterRobMap
private

Definition at line 119 of file HltROBDataProviderSvc.h.

◆ m_filterRobWithStatus

Gaudi::Property< ArrayPairIntType > HltROBDataProviderSvc::m_filterRobWithStatus
private
Initial value:
{
this, "filterRobWithStatus", {} , "List of ROBs with status code to remove"}

Definition at line 112 of file HltROBDataProviderSvc.h.

112 {
113 this, "filterRobWithStatus", {} , "List of ROBs with status code to remove"};

◆ m_filterSubDetMap

FilterSubDetMap HltROBDataProviderSvc::m_filterSubDetMap
private

Definition at line 122 of file HltROBDataProviderSvc.h.

◆ m_filterSubDetWithStatus

Gaudi::Property< ArrayPairIntType > HltROBDataProviderSvc::m_filterSubDetWithStatus
private
Initial value:
{
this, "filterSubDetWithStatus", {} , "List of SubDets with status code to remove"}

Definition at line 114 of file HltROBDataProviderSvc.h.

114 {
115 this, "filterSubDetWithStatus", {} , "List of SubDets with status code to remove"};

◆ m_maskL2EFModuleID

bool HltROBDataProviderSvc::m_maskL2EFModuleID = false
private

For Run 1 the module ID for the Lvl2/EF result contained the machine ID and needed to be filtered out to access these result records transparently.

Definition at line 130 of file HltROBDataProviderSvc.h.

◆ m_monTool

ToolHandle<GenericMonitoringTool> HltROBDataProviderSvc::m_monTool {this, "MonTool", "", "Monitoring tool"}
private

Monitoring tool.

Definition at line 205 of file HltROBDataProviderSvc.h.

205{this, "MonTool", "", "Monitoring tool"};

◆ m_prefetchAllROBsfromROS

Gaudi::Property<bool> HltROBDataProviderSvc::m_prefetchAllROBsfromROS
private
Initial value:
{
this, "prefetchAllROBsfromROS", false , "When ROBs from a ROS are requested then prefetch all ROBs in this ROS"}

Definition at line 141 of file HltROBDataProviderSvc.h.

141 {
142 this, "prefetchAllROBsfromROS", false , "When ROBs from a ROS are requested then prefetch all ROBs in this ROS"};

◆ m_prefetchSubDetROS

Gaudi::Property< std::vector<uint8_t> > HltROBDataProviderSvc::m_prefetchSubDetROS
private
Initial value:
{
this, "prefetchSubDetROS", {} , "List of sub-detectors for which whole ROS prefetching is used"}

Definition at line 149 of file HltROBDataProviderSvc.h.

149 {
150 this, "prefetchSubDetROS", {} , "List of sub-detectors for which whole ROS prefetching is used"};

◆ m_prefetchWholeROSList

std::vector<uint32_t> HltROBDataProviderSvc::m_prefetchWholeROSList
private

Definition at line 152 of file HltROBDataProviderSvc.h.

◆ m_readROBfromOKS

Gaudi::Property<bool> HltROBDataProviderSvc::m_readROBfromOKS
private
Initial value:
{
this, "readROBfromOKS", true , "Read enabled ROBs from OKS"}

Definition at line 133 of file HltROBDataProviderSvc.h.

133 {
134 this, "readROBfromOKS", true , "Read enabled ROBs from OKS"};

◆ m_trigCostSvcHandle

ServiceHandle<ITrigCostSvc> HltROBDataProviderSvc::m_trigCostSvcHandle
private
Initial value:
{
this, "TrigCostSvc", "TrigCostSvc", "The trigger cost service" }

Definition at line 157 of file HltROBDataProviderSvc.h.

157 {
158 this, "TrigCostSvc", "TrigCostSvc", "The trigger cost service" };

The documentation for this class was generated from the following files: