ATLAS Offline Software
Loading...
Searching...
No Matches
ROBDataProviderSvc.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef BYTESTREAMCNVSVCBASE_ROBDATAPROVIDERSVC_H
6#define BYTESTREAMCNVSVCBASE_ROBDATAPROVIDERSVC_H
7
9
13
14#include "Gaudi/Property.h"
15#include "eformat/SourceIdentifier.h"
16
17#include <vector>
18#include <memory>
19#include <unordered_map>
20
33class ROBDataProviderSvc : public extends<AthService, IROBDataProviderSvc> {
34
35public:
38
40 using base_class::base_class;
41
43 virtual StatusCode initialize() override;
44
46 virtual void setNextEvent(const EventContext& ctx, const RawEvent* re) override;
47
49 virtual void getROBData(const EventContext& ctx, const std::vector<uint32_t>& robIds,
50 VROBFRAG& robFragments,
51 const std::string_view callerName="UNKNOWN") override;
52
54 virtual const RawEvent* getEvent(const EventContext& ctx) override;
55
57 virtual void setEventStatus(const EventContext& ctx, uint32_t status) override;
58
60 virtual uint32_t getEventStatus(const EventContext& ctx) override;
61
62 virtual void processCachedROBs(const EventContext& ctx,
63 const std::function< void(const ROBF* )>& fn ) const override;
64
65private:
67 bool filterRobWithStatus(const ROBF* rob);
68
70 struct EventCache {
71 const RawEvent* event = nullptr;
72 uint32_t eventStatus = 0;
73 uint32_t currentLvl1ID = 0;
74 std::unordered_map<uint32_t, std::unique_ptr<const ROBF>> robmap;
75 };
77
79 std::unordered_map<uint32_t, std::vector<uint32_t>> m_filterRobMap;
80
82 std::unordered_map<eformat::SubDetector, std::vector<uint32_t>> m_filterSubDetMap;
83
84 // Properties
85 Gaudi::Property<std::vector<std::pair<int, int>>> m_filterRobWithStatus{
86 this, "filterRobWithStatus", {}, "ROB IDs and status words to filter (full ROB SourceID)"};
87 Gaudi::Property<std::vector<std::pair<int, int>>> m_filterSubDetWithStatus{
88 this, "filterSubDetWithStatus", {}, "Sub-detector IDs and status words to filter"};
89 Gaudi::Property<bool> m_filterEmptyROB{
90 this, "filterEmptyROB", false, "Filter out empty ROB fragments"};
91};
92
93#endif
const std::regex re(r_e)
Maintain a set of objects, one per slot.
OFFLINE_FRAGMENTS_NAMESPACE::FullEventFragment RawEvent
data type for reading raw event
Definition RawEvent.h:37
ROBDataProviderSvc provides access to individual ROB fragments.
virtual uint32_t getEventStatus(const EventContext &ctx) override
Retrieve the status for the event.
virtual void processCachedROBs(const EventContext &ctx, const std::function< void(const ROBF *)> &fn) const override
virtual const RawEvent * getEvent(const EventContext &ctx) override
Retrieve the whole event.
virtual StatusCode initialize() override
Initialize.
std::unordered_map< uint32_t, std::vector< uint32_t > > m_filterRobMap
map of full ROB Source ids and status words to be ignored for the ROB map
virtual void setNextEvent(const EventContext &ctx, const RawEvent *re) override
Add all ROBFragments of a RawEvent to cache.
Gaudi::Property< std::vector< std::pair< int, int > > > m_filterSubDetWithStatus
Gaudi::Property< bool > m_filterEmptyROB
virtual void getROBData(const EventContext &ctx, const std::vector< uint32_t > &robIds, VROBFRAG &robFragments, const std::string_view callerName="UNKNOWN") override
Retrieve ROBFragments for given ROB ids from cache.
bool filterRobWithStatus(const ROBF *rob)
method to filter ROBs with given Status code
virtual void setEventStatus(const EventContext &ctx, uint32_t status) override
Store the status for the event.
Gaudi::Property< std::vector< std::pair< int, int > > > m_filterRobWithStatus
OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment ROBF
ROB Fragment class.
SG::SlotSpecificObj< EventCache > m_eventsCache
std::unordered_map< eformat::SubDetector, std::vector< uint32_t > > m_filterSubDetMap
map of Sub Det Source ids and status words to be ignored for the ROB map
Maintain a set of objects, one per slot.
eformat::ROBFragment< PointerType > ROBFragment
Definition RawEvent.h:27
ROB fragment cache per slot.
std::unordered_map< uint32_t, std::unique_ptr< const ROBF > > robmap