ATLAS Offline Software
ROBDataProviderSvc.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 //===================================================================
6 // Implementation of ROBDataProviderSvc
7 // Revision: November 2017
8 // MT readiness
9 // Revision: July 11, 2002
10 // Modified for eformat
11 // Revision: Aug 18, 2003
12 // Modified to use ROBFragments directly and include methods
13 // for online
14 // Revision: Apr 21, 2005
15 // Remove dependency on Level-2 Data Collector, create special
16 // version for online
17 // Revision: Oct 29, 2006
18 // Increase MAX_ROBFRAGMENTS to 2048 to cover the special case
19 // when in a "localhost" partition the complete event is given
20 // to the Event Filter as one single ROS fragment (this case
21 // should not happen for normal running when several ROSes are
22 // used and the ROB fragments are grouped under different ROS
23 // fragments)
24 // Revision: Nov 10, 2008
25 // Mask off the module ID from the ROB source identifier of the
26 // L2 and EF result when storing it in the ROB map. This is necessary
27 // when the L2/PT node ID is stored in the source identifier as
28 // module ID. With this modification the L2 and EF result can still be
29 // found as 0x7b0000 and 0x7c0000
30 // Revision: Jan 12, 2009
31 // Allow removal of individual ROBs and ROBs from given subdetectors
32 // from the internal ROB map according to a given status code.
33 // This may be necessary when corrupted and incomplete ROB fragments
34 // are forwarded to the algorithms and the converters are not yet
35 // prepared to handle the specific cases.
36 // The filtering can be configured with job options as:
37 //
38 // for individual ROBs as :
39 // ------------------------
40 // ROBDataProviderSvc.filterRobWithStatus = [ (ROB SourceId, StatusCode to remove),
41 // (ROB SourceId 2, StatusCode to remove 2), ... ]
42 // and:
43 // ROBDataProviderSvc.filterRobWithStatus += [ (ROB SourceId n, StatusCode to remove n) ]
44 //
45 // Example:
46 // ROBDataProviderSvc.filterRobWithStatus = [ (0x42002a,0x0000000f), (0x42002e,0x00000008) ]
47 // ROBDataProviderSvc.filterRobWithStatus += [ (0x42002b,0x00000000) ]
48 //
49 // for all ROBs of a given sub detector as :
50 // -----------------------------------------
51 // ROBDataProviderSvc.filterSubDetWithStatus = [ (Sub Det Id, StatusCode to remove),
52 // (Sub Det Id 2, StatusCode to remove 2), ... ]
53 // and:
54 // ROBDataProviderSvc.filterSubDetWithStatus += [ (Sub Det Id n, StatusCode to remove n) ]
55 //
56 // Example:
57 // ROBDataProviderSvc.filterSubDetWithStatus = [ (0x41,0x00000000), (0x42,0x00000000) ]
58 // ROBDataProviderSvc.filterSubDetWithStatus += [ (0x41,0xcb0002) ]
59 //
60 // For valid ROB Source Ids, Sub Det Ids and ROB Status elements see the event format
61 // document ATL-D-ES-0019 (EDMS)
62 // Revision: Jan 28, 2014
63 // For Run 1 the module ID from the ROB source identifier of the
64 // L2 and EF result needed to be masked off before storing the ROB fragment
65 // in the ROB map. The module ID for these fragments contained an identifier
66 // of the machine on which they were produced. This produced as many different ROB IDs
67 // for these fragments as HLT processors were used. The module IDs were not useful
68 // for analysis and needed to be masked off from these fragments in the ROB map in order
69 // to allow the access to the L2 or the EF result with the generic identifiers
70 // 0x7b0000 and 0x7c0000. Also an event contained only one L2 and EF result.
71 // From Run 2 on (eformat version 5) the HLT processor identifier is not anymore
72 // stored in the module ID of the HLT result. Further there can be in one event several HLT result
73 // records with the source identifier 0x7c. The different HLT results are distinguished
74 // now with the module ID. A module ID 0 indicates a physiscs HLT result as before, while
75 // HLT results with module IDs different from zero are produced by data scouting chains.
76 // In Run 2 the module ID should be therefore not any more masked.
77 // The masking of the moduleID is switched on when a L2 result is found in the event or the
78 // event header contains L2 trigger info words. This means the data were produced with run 1 HLT system.
79 //
80 //===================================================================
81 
82 // Include files.
84 #include "eformat/Status.h"
85 
86 // Constructor.
87 ROBDataProviderSvc::ROBDataProviderSvc(const std::string& name, ISvcLocator* svcloc)
88  : base_class(name, svcloc) {
89 
90  declareProperty("filterRobWithStatus", m_filterRobWithStatus);
91  declareProperty("filterSubDetWithStatus", m_filterSubDetWithStatus);
92  declareProperty("filterEmptyROB", m_filterEmptyROB = false);
93 }
94 
95 
96 // Initialization
98  ATH_MSG_INFO("Initializing");
100 
101  for (unsigned int i = 0; i < m_filterRobWithStatus.value().size(); i++) {
102  eformat::helper::SourceIdentifier tmpsrc(m_filterRobWithStatus.value()[i].first);
103  if (tmpsrc.human_detector() != "UNKNOWN") {
104  m_filterRobMap[tmpsrc.code()].push_back(m_filterRobWithStatus.value()[i].second);
105  }
106  }
107  for (unsigned int i = 0; i < m_filterSubDetWithStatus.value().size(); i++) {
108  eformat::helper::SourceIdentifier tmpsrc((eformat::SubDetector)m_filterSubDetWithStatus.value()[i].first, 0);
109  if (tmpsrc.human_detector() != "UNKNOWN") {
110  m_filterSubDetMap[tmpsrc.subdetector_id()].push_back(m_filterSubDetWithStatus.value()[i].second);
111  }
112  }
113  ATH_MSG_INFO(" ---> Filter out empty ROB fragments = " << m_filterEmptyROB);
114  ATH_MSG_INFO(" ---> Filter out specific ROBs by Status Code: # ROBs = " << m_filterRobMap.size());
115  for (const auto& p : m_filterRobMap) {
116  eformat::helper::SourceIdentifier tmpsrc(p.first);
117  ATH_MSG_INFO(" RobId=0x" << MSG::hex << p.first << " -> in Sub Det = " << tmpsrc.human_detector());
118  for (uint32_t status : p.second) {
119  eformat::helper::Status tmpstatus(status);
120  ATH_MSG_INFO(" Status Code=0x"
121  << MSG::hex << std::setfill( '0' ) << std::setw(8) << tmpstatus.code()
122  << " Generic Part=0x" << std::setw(4) << tmpstatus.generic()
123  << " Specific Part=0x" << std::setw(4) << tmpstatus.specific());
124  }
125  }
126 
127  ATH_MSG_INFO(" ---> Filter out Sub Detector ROBs by Status Code: # Sub Detectors = " << m_filterSubDetMap.size());
128  for (const auto& p : m_filterSubDetMap) {
129  eformat::helper::SourceIdentifier tmpsrc(p.first, 0);
130  ATH_MSG_INFO(" SubDetId=0x" << MSG::hex << p.first << " -> " << tmpsrc.human_detector());
131  for (uint32_t status : p.second) {
132  eformat::helper::Status tmpstatus(status);
133  ATH_MSG_INFO(" Status Code=0x"
134  << MSG::hex << std::setfill( '0' ) << std::setw(8) << tmpstatus.code()
135  << " Generic Part=0x" << std::setw(4) << tmpstatus.generic()
136  << " Specific Part=0x" << std::setw(4) << tmpstatus.specific());
137  }
138  }
139  return(StatusCode::SUCCESS);
140 }
141 
142 
147 void ROBDataProviderSvc::addROBData(const std::vector<uint32_t>& robIds, const std::string_view callerName) {
148  const EventContext context{ Gaudi::Hive::currentContext() };
149  return addROBData( context, robIds, callerName );
150 }
151 
152 void ROBDataProviderSvc::addROBData(const EventContext& context, const std::vector<uint32_t>& robIds, const std::string_view callerName) {
153  EventCache* cache = m_eventsCache.get( context );
154 
155  // Copy missing ROB ids to vector with pthread allocator
156  ATH_MSG_DEBUG(" ---> Number of ROB Id s requested : " << robIds.size() << ", Caller Name = " << callerName);
157  // for offline running all requested ROBs should be found in cache
158  // if not issue error
159  for (uint32_t id : robIds) {
160  // mask off the module ID for L2 and EF result for Run 1 data
161  if ( (eformat::helper::SourceIdentifier(id).module_id() != 0) &&
162  (eformat::helper::SourceIdentifier(id).subdetector_id() == eformat::TDAQ_LVL2) ) {
163  id = eformat::helper::SourceIdentifier(eformat::helper::SourceIdentifier(id).subdetector_id(),0).code();
164  // TB if it is inconsistent we should not continue like this?
165  if ( !m_maskL2EFModuleID ) {
166  ATH_MSG_ERROR("Inconsistent flag for masking L2/EF module IDs");
167  m_maskL2EFModuleID=true;
168  }
169  } else if ( (eformat::helper::SourceIdentifier(id).module_id() != 0) &&
170  (eformat::helper::SourceIdentifier(id).subdetector_id() == eformat::TDAQ_EVENT_FILTER) &&
171  ( m_maskL2EFModuleID ) ) {
172  id = eformat::helper::SourceIdentifier(eformat::helper::SourceIdentifier(id).subdetector_id(),0).code();
173  }
174  ROBMAP& robmap( cache->robmap );
175  ROBMAP::iterator map_it = robmap.find(id) ;
176  if (map_it != robmap.end()) {
177  ATH_MSG_DEBUG(" ---> Found ROB Id : 0x" << MSG::hex << (*map_it).second->source_id()
178  << MSG::dec << " in cache");
179  } else {
180  ATH_MSG_DEBUG(" ---> ROB Id : 0x" << MSG::hex << id
181  << MSG::dec << " not found in cache for running mode OFFLINE (method addROBData),");
182  ATH_MSG_DEBUG(" Lvl1 id = " << cache->currentLvl1ID);
183  }
184  }
185  return;
186 }
191 void ROBDataProviderSvc::setNextEvent(const std::vector<ROBF>& result) {
192  const EventContext context{ Gaudi::Hive::currentContext() };
193  return setNextEvent( context, result );
194 }
195 void ROBDataProviderSvc::setNextEvent(const EventContext& /*context*/, const std::vector<ROBF>& result) {
196  // clear the old map
197  // TB honestly, why do any action if this is FATAL mistake
198  // robmapClear( m_eventsCache.get(context)->robmap );
199 
200  // This method should never be used by offline
201  ATH_MSG_FATAL(" +-----------------------------------------------------------------+ ");
202  ATH_MSG_FATAL(" | The method ROBDataProviderSvc::setNextEvent(const ROBF* result) | ");
203  ATH_MSG_FATAL(" | is not implemented for this version of ROBDataProviderSvc | ");
204  ATH_MSG_FATAL(" | Use the version from the HLT repository if you need it. | ");
205  ATH_MSG_FATAL(" +-----------------------------------------------------------------+ ");
206  ATH_MSG_FATAL(" ---> The " << result.size() << " ROB fragments in the call will not be used.");
207  return;
208 }
209 
210 
211 
212 
217  // obtain context and redirect to the real implementation
218  const EventContext context{ Gaudi::Hive::currentContext() };
219  return setNextEvent( context, re );
220 }
221 
222 void ROBDataProviderSvc::setNextEvent( const EventContext& context, const RawEvent* re ) {
223  EventCache* cache = m_eventsCache.get( context );
224 
225  cache->event=re;
226  // clear the old map
227  robmapClear( cache->robmap );
228  // set the LVL1 id
229  cache->currentLvl1ID = re->lvl1_id();
230  // set flag for masking L2/EF module ID, this is only necessary for the separate L2 and EF systems from Run 1
231  m_maskL2EFModuleID = (re->nlvl2_trigger_info() != 0);
232 
233  // get all the ROBFragments
234  const size_t MAX_ROBFRAGMENTS = 4096;
235  OFFLINE_FRAGMENTS_NAMESPACE::PointerType robF[MAX_ROBFRAGMENTS];
237  re->start(rePointer);
238  size_t robcount = re->children(robF, MAX_ROBFRAGMENTS);
239  if (robcount == MAX_ROBFRAGMENTS) {
240  ATH_MSG_ERROR("ROB buffer overflow");
241  }
242  // loop over all ROBs
243  for (size_t irob = 0; irob < robcount; irob++) {
244  // add to the map
245  //const ROBF* rob = new ROBF(robF[irob]);
246  std::unique_ptr<const ROBF> rob=std::make_unique<const ROBF>(robF[irob]);
247  uint32_t id = rob->source_id();
248  // mask off the module ID for L2 and EF result for Run 1 data
249  if ( (eformat::helper::SourceIdentifier(id).module_id() != 0) &&
250  (eformat::helper::SourceIdentifier(id).subdetector_id() == eformat::TDAQ_LVL2) ) {
251  id = eformat::helper::SourceIdentifier(eformat::helper::SourceIdentifier(id).subdetector_id(),0).code();
252  if (!m_maskL2EFModuleID) {
253  ATH_MSG_ERROR("Inconsistent flag for masking L2/EF module IDs");
254  m_maskL2EFModuleID=true;
255  }
256  } else if ( (eformat::helper::SourceIdentifier(id).module_id() != 0) &&
257  (eformat::helper::SourceIdentifier(id).subdetector_id() == eformat::TDAQ_EVENT_FILTER) &&
258  (m_maskL2EFModuleID) ) {
259  id = eformat::helper::SourceIdentifier(eformat::helper::SourceIdentifier(id).subdetector_id(),0).code();
260  }
261  if (filterRobWithStatus(rob.get())) {
262  if (rob->nstatus() > 0) {
263  const uint32_t* it_status;
264  rob->status(it_status);
265  eformat::helper::Status tmpstatus(*it_status);
266  ATH_MSG_DEBUG(" ---> ROB Id = 0x" << MSG::hex << id << std::setfill('0')
267  << " with Generic Status Code = 0x" << std::setw(4) << tmpstatus.generic()
268  << " and Specific Status Code = 0x" << std::setw(4) << tmpstatus.specific() << MSG::dec
269  << " removed for L1 Id = " << cache->currentLvl1ID);
270  }
271  rob.reset();
272  } else if ((rob->rod_ndata() == 0) && (m_filterEmptyROB)) {
273  ATH_MSG_DEBUG( " ---> Empty ROB Id = 0x" << MSG::hex << id << MSG::dec
274  << " removed for L1 Id = " << cache->currentLvl1ID);
275  rob.reset();
276  } else {
277  ROBMAP::const_iterator it = cache->robmap.find(id);
278  if (it != cache->robmap.end()) {
279  ATH_MSG_WARNING(" ROBDataProviderSvc:: Duplicate ROBID 0x" << MSG::hex << id
280  << " found. " << MSG::dec << " Overwriting the previous one ");
281  }
282  cache->robmap[id]=std::move(rob);
283 
284  }
285  }
286  ATH_MSG_DEBUG(" ---> setNextEvent offline for " << name() );
287  ATH_MSG_DEBUG(" current LVL1 id = " << cache->currentLvl1ID );
288  ATH_MSG_DEBUG(" size of ROB cache = " << cache->robmap.size() );
289  return;
290 }
293 void ROBDataProviderSvc::getROBData(const std::vector<uint32_t>& ids, std::vector<const ROBF*>& v, const std::string_view callerName) {
294  const EventContext context{ Gaudi::Hive::currentContext() };
295  return getROBData( context, ids, v, callerName );
296 }
297 
298 void ROBDataProviderSvc::getROBData(const EventContext& context, const std::vector<uint32_t>& ids, std::vector<const ROBF*>& v,
299  const std::string_view callerName) {
300  EventCache* cache = m_eventsCache.get( context );
301 
302  for (uint32_t id : ids) {
303  // mask off the module ID for L2 and EF result for Run 1 data
304  if ( (eformat::helper::SourceIdentifier(id).module_id() != 0) &&
305  (eformat::helper::SourceIdentifier(id).subdetector_id() == eformat::TDAQ_LVL2) ) {
306  id = eformat::helper::SourceIdentifier(eformat::helper::SourceIdentifier(id).subdetector_id(),0).code();
307  if (!m_maskL2EFModuleID) {
308  ATH_MSG_ERROR("Inconsistent flag for masking L2/EF module IDs");
309  m_maskL2EFModuleID=true;
310  }
311  } else if ( (eformat::helper::SourceIdentifier(id).module_id() != 0) &&
312  (eformat::helper::SourceIdentifier(id).subdetector_id() == eformat::TDAQ_EVENT_FILTER) &&
313  (m_maskL2EFModuleID) ) {
314  id = eformat::helper::SourceIdentifier(eformat::helper::SourceIdentifier(id).subdetector_id(),0).code();
315  }
316  ROBMAP::iterator map_it = cache->robmap.find(id);
317  if (map_it != cache->robmap.end()) {
318  v.push_back((*map_it).second.get());
319  } else {
320  ATH_MSG_DEBUG("Failed to find ROB for id 0x" << MSG::hex << id << MSG::dec << ", Caller Name = " << callerName);
321 #ifndef NDEBUG
322  int nrob = 0;
323  ATH_MSG_VERBOSE(" --- Dump of ROB cache ids --- total size = " << cache->robmap.size());
324  for (const auto& p : cache->robmap) {
325  ++nrob;
326  ATH_MSG_VERBOSE(" # = " << nrob << " id = 0x" << MSG::hex << p.second->source_id() << MSG::dec);
327  }
328 #endif
329  }
330  }
331  return;
332 }
336  for (auto& it : toclear) {
337  it.second.reset();
338  }
339  toclear.clear();
340 }
343  const EventContext context{ Gaudi::Hive::currentContext() };
344  return getEvent( context );
345 }
346 const RawEvent* ROBDataProviderSvc::getEvent( const EventContext& context ) {
347 
348  return m_eventsCache.get( context )->event;
349 }
350 
351 
354  const EventContext context{ Gaudi::Hive::currentContext() };
355  setEventStatus( context, status );
356 }
357 
358 void ROBDataProviderSvc::setEventStatus(const EventContext& context, uint32_t status) {
359  m_eventsCache.get(context)->eventStatus = status;
360 }
363  const EventContext context{ Gaudi::Hive::currentContext() };
364  return getEventStatus( context );
365 }
366 
367 uint32_t ROBDataProviderSvc::getEventStatus( const EventContext& context ) {
368  return m_eventsCache.get( context )->eventStatus;
369 }
370 
371 void ROBDataProviderSvc::processCachedROBs(const EventContext& context,
372  const std::function< void(const ROBF* )>& fn ) const {
373  for ( const auto& el : m_eventsCache.get( context )->robmap ) {
374  fn( el.second.get() );
375  }
376 }
377 
378 
379 
383  // No filter criteria defined
384  if ((m_filterRobMap.size() == 0) && (m_filterSubDetMap.size() == 0)) {
385  return(false);
386  }
387  // There should be at least one status element if there was an error
388  // in case there are 0 status elements then there was no known error
389  // (see event format document ATL-D-ES-0019 (EDMS))
390  if (rob->nstatus() == 0) {
391  return(false);
392  }
393  // The ROB has at least one status element, access it via an iterator
394  const uint32_t* rob_it_status;
395  rob->status(rob_it_status);
396  // Build the full ROB Sourceidentifier
397  eformat::helper::SourceIdentifier tmpsrc(rob->rob_source_id());
398  // Check if there is a ROB specific filter rule defined for this ROB Id and match the status code
399  FilterRobMap::iterator map_it_rob = m_filterRobMap.find(tmpsrc.code());
400  if (map_it_rob != m_filterRobMap.end()) {
401  for (uint32_t status : map_it_rob->second) {
402  if (*rob_it_status == status) {
403  return(true);
404  }
405  }
406  }
407  // Check if there is a sub detector specific filter rule defined for this ROB Id and match the status code
408  FilterSubDetMap::iterator map_it_subdet = m_filterSubDetMap.find(tmpsrc.subdetector_id());
409  if (map_it_subdet != m_filterSubDetMap.end()) {
410  for (uint32_t status : map_it_subdet->second) {
411  if (*rob_it_status == status) {
412  return(true);
413  }
414  }
415  }
416  return(false);
417 }
ROBDataProviderSvc::getEvent
virtual const RawEvent * getEvent() override
Retrieve the whole event.
Definition: ROBDataProviderSvc.cxx:342
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
ROBDataProviderSvc::setEventStatus
virtual void setEventStatus(uint32_t status) override
Store the status for the event.
Definition: ROBDataProviderSvc.cxx:353
ROBDataProviderSvc::getEventStatus
virtual uint32_t getEventStatus() override
Retrieve the status for the event.
Definition: ROBDataProviderSvc.cxx:362
get_generator_info.result
result
Definition: get_generator_info.py:21
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
ROBDataProviderSvc::addROBData
virtual void addROBData(const std::vector< uint32_t > &robIds, const std::string_view callerName="UNKNOWN") override
Add ROBFragments to cache for given ROB ids, ROB fragments may be retrieved with DataCollector.
Definition: ROBDataProviderSvc.cxx:147
RawEvent
OFFLINE_FRAGMENTS_NAMESPACE::FullEventFragment RawEvent
data type for reading raw event
Definition: RawEvent.h:37
skel.it
it
Definition: skel.GENtoEVGEN.py:423
ROBDataProviderSvc::EventCache::event
const RawEvent * event
Definition: ROBDataProviderSvc.h:95
ROBDataProviderSvc::EventCache::robmap
ROBMAP robmap
Definition: ROBDataProviderSvc.h:98
ROBDataProviderSvc.h
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
ROBDataProviderSvc::m_filterRobWithStatus
ArrayPairIntProperty m_filterRobWithStatus
Definition: ROBDataProviderSvc.h:106
ROBDataProviderSvc::getROBData
virtual void getROBData(const std::vector< uint32_t > &robIds, std::vector< const ROBF * > &robFragments, const std::string_view callerName="UNKNOWN") override
Retrieve ROBFragments for given ROB ids from cache.
Definition: ROBDataProviderSvc.cxx:293
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
ROBDataProviderSvc::m_maskL2EFModuleID
bool m_maskL2EFModuleID
Definition: ROBDataProviderSvc.h:120
OFFLINE_FRAGMENTS_NAMESPACE::PointerType
const DataType * PointerType
Definition: RawEvent.h:25
ROBDataProviderSvc::initialize
virtual StatusCode initialize() override
initialize the service
Definition: ROBDataProviderSvc.cxx:97
SG::SlotSpecificObj
Maintain a set of objects, one per slot.
Definition: AthenaKernel/AthenaKernel/SlotSpecificObj.h:70
python.getCurrentFolderTag.fn
fn
Definition: getCurrentFolderTag.py:65
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
eformat::ROBFragment
Definition: L1CaloBsDecoderUtil.h:12
lumiFormat.i
int i
Definition: lumiFormat.py:92
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ROBDataProviderSvc::ROBMAP
std::map< uint32_t, std::unique_ptr< const ROBF >, std::less< uint32_t > > ROBMAP
vector of ROBFragment class
Definition: ROBDataProviderSvc.h:92
plotIsoValidation.el
el
Definition: plotIsoValidation.py:197
ROBDataProviderSvc::ROBDataProviderSvc
ROBDataProviderSvc(const std::string &name, ISvcLocator *svcloc)
Constructor.
Definition: ROBDataProviderSvc.cxx:87
ROBDataProviderSvc::EventCache
Definition: ROBDataProviderSvc.h:94
ROBDataProviderSvc::setNextEvent
virtual void setNextEvent(const std::vector< ROBF > &result) override
Add a given LVL1/LVL2 ROBFragment to cache.
Definition: ROBDataProviderSvc.cxx:191
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:194
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
python.subdetectors.mmg.ids
ids
Definition: mmg.py:8
ROBDataProviderSvc::m_filterEmptyROB
BooleanProperty m_filterEmptyROB
Filter out empty ROB fragments which are send by the ROS.
Definition: ROBDataProviderSvc.h:119
python.PyAthena.v
v
Definition: PyAthena.py:157
ROBDataProviderSvc::m_filterSubDetMap
FilterSubDetMap m_filterSubDetMap
Definition: ROBDataProviderSvc.h:114
Athena::Status
Status
Athena specific StatusCode values.
Definition: AthStatusCode.h:22
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
SG::getNSlots
size_t getNSlots()
Return the number of event slots.
Definition: SlotSpecificObj.cxx:64
re
const boost::regex re(r_e)
ROBDataProviderSvc::robmapClear
static void robmapClear(ROBMAP &toclear)
Definition: ROBDataProviderSvc.cxx:335
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
merge.status
status
Definition: merge.py:17
ROBDataProviderSvc::m_filterRobMap
FilterRobMap m_filterRobMap
Definition: ROBDataProviderSvc.h:111
ROBDataProviderSvc::processCachedROBs
virtual void processCachedROBs(const EventContext &context, const std::function< void(const ROBF *)> &fn) const override
Definition: ROBDataProviderSvc.cxx:371
ROBDataProviderSvc::m_eventsCache
SG::SlotSpecificObj< EventCache > m_eventsCache
Definition: ROBDataProviderSvc.h:101
ROBDataProviderSvc::filterRobWithStatus
bool filterRobWithStatus(const ROBF *rob)
method to filter ROBs with given Status code
Definition: ROBDataProviderSvc.cxx:382
ROBDataProviderSvc::EventCache::currentLvl1ID
uint32_t currentLvl1ID
Definition: ROBDataProviderSvc.h:97
ROBDataProviderSvc::m_filterSubDetWithStatus
ArrayPairIntProperty m_filterSubDetWithStatus
Definition: ROBDataProviderSvc.h:107