ATLAS Offline Software
TrigByteStreamCnvSvc.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // Trigger includes
6 #include "TrigByteStreamCnvSvc.h"
8 
9 // Athena includes
12 #include "StoreGate/StoreGateSvc.h"
13 
14 // Gaudi includes
15 #include "GaudiKernel/ITHistSvc.h"
16 
17 // TDAQ includes
18 #include "eformat/FullEventFragmentNoTemplates.h"
19 #include "eformat/ROBFragmentNoTemplates.h"
20 #include "eformat/StreamTag.h"
21 #include "hltinterface/DataCollector.h"
22 
23 // System includes
24 #include <sstream>
25 #include <iomanip>
26 #include <chrono>
27 
28 // Local helper functions
29 namespace {
30  constexpr float wordsToKiloBytes = 0.001*sizeof(uint32_t);
31  template<typename T> inline bool contains(const std::vector<T>& vec, const T& val) {
32  return std::find(vec.cbegin(), vec.cend(), val)!=vec.cend();
33  }
34  template<typename T> inline int index(const std::vector<T>& vec, const T& val) {
35  typename std::vector<T>::const_iterator it = std::find(vec.cbegin(), vec.cend(), val);
36  return it==vec.cend() ? -1 : std::distance(vec.cbegin(), it);
37  }
38  template<typename T> struct printWordHex {
39  printWordHex(const T w) : word(w) {}
40  T word;
41  };
42  template<typename T> std::ostream& operator<<(std::ostream& str, const printWordHex<T>& pw) {
43  str << "0x" << std::hex << std::setfill('0') << std::setw(2*sizeof(T));
44  // Prevent printing char as ASCII character
45  if (sizeof(T)==1)
46  str << static_cast<int>(pw.word);
47  else
48  str << pw.word;
49  str << std::dec;
50  return str;
51  }
52  template<typename T> struct printNWordsHex {
53  printNWordsHex(const size_t n, const T* w, const std::string& s=" ") : nwords(n), words(w), sep(s) {}
54  size_t nwords;
55  const T* words;
56  std::string sep;
57  };
58  template<typename T> std::ostream& operator<<(std::ostream& str, const printNWordsHex<T>& pnw) {
59  for (size_t i=0; i<pnw.nwords; ++i) {
60  str << printWordHex<T>(pnw.words[i]);
61  if (i!=pnw.nwords-1) str << pnw.sep;
62  }
63  return str;
64  }
65  // StreamTag monitoring accessors
66  inline const std::string mon_streamTypeName(const eformat::helper::StreamTag& st){
67  return st.type+"_"+st.name;
68  }
69  inline const std::string& mon_streamType(const eformat::helper::StreamTag& st){
70  return st.type;
71  }
72  inline bool mon_streamIsPeb(const eformat::helper::StreamTag& st){
73  return st.robs.size()>0 || st.dets.size()>0;
74  }
75  inline size_t mon_streamPebRobsNum(const eformat::helper::StreamTag& st){
76  return st.robs.size();
77  }
78  inline size_t mon_streamPebSubDetsNum(const eformat::helper::StreamTag& st){
79  return st.dets.size();
80  }
81 }
82 
83 // =============================================================================
84 // Standard constructor
85 // =============================================================================
86 TrigByteStreamCnvSvc::TrigByteStreamCnvSvc(const std::string& name, ISvcLocator* svcLoc)
87 : ByteStreamCnvSvcBase(name, svcLoc) {}
88 
89 // =============================================================================
90 // Standard destructor
91 // =============================================================================
93 
94 // =============================================================================
95 // Implementation of Service::initialize
96 // =============================================================================
98  ATH_MSG_VERBOSE("start of " << __FUNCTION__);
100  ATH_CHECK(m_evtStore.retrieve());
101  ATH_CHECK(m_robDataProviderSvc.retrieve());
102  if (!m_monTool.empty()) ATH_CHECK(m_monTool.retrieve());
103  ATH_MSG_VERBOSE("end of " << __FUNCTION__);
104  return StatusCode::SUCCESS;
105 }
106 
107 // =============================================================================
108 // Implementation of Service::finalize
109 // =============================================================================
111  ATH_MSG_VERBOSE("start of " << __FUNCTION__);
112  if (m_robDataProviderSvc.release().isFailure())
113  ATH_MSG_WARNING("Failed to release service " << m_robDataProviderSvc.typeAndName());
114  if (m_evtStore.release().isFailure())
115  ATH_MSG_WARNING("Failed to release service " << m_evtStore.typeAndName());
116  ATH_MSG_VERBOSE("end of " << __FUNCTION__);
118  return StatusCode::SUCCESS;
119 }
120 
121 // =============================================================================
122 // Implementation of IConversionSvc::connectOutput
123 // The argument outputFile is not used
124 // =============================================================================
126  const EventContext* eventContext = currentContext();
127  if (eventContext == nullptr) return StatusCode::FAILURE;
128  return connectOutput(outputFile, *eventContext);
129 }
130 
131 StatusCode TrigByteStreamCnvSvc::connectOutput(const std::string& /*outputFile*/, const EventContext& eventContext) {
132  ATH_MSG_VERBOSE("start of " << __FUNCTION__);
133 
134  ATH_MSG_DEBUG("Creating new RawEventWrite for EventContext = " << eventContext);
135  // Create a new RawEventWrite and copy the header from the input RawEvent
136  RawEventWrite* re = setRawEvent(std::make_unique<RawEventWrite>(), eventContext);
137  const uint32_t* inputRawEvent = m_robDataProviderSvc->getEvent(eventContext)->start();
138  if (!inputRawEvent) {
139  ATH_MSG_ERROR("Input RawEvent is nullptr, cannot create output");
140  return StatusCode::FAILURE;
141  }
142  re->copy_header(inputRawEvent);
143 
144  ATH_MSG_VERBOSE("Created RawEventWrite pointer = " << re);
145 
146  ATH_MSG_VERBOSE("end of " << __FUNCTION__);
147  return StatusCode::SUCCESS;
148 }
149 
150 // =============================================================================
151 // Implementation of IConversionSvc::connectOutput
152 // The arguments are not used, this overload is implemented only for interface compatibility
153 // =============================================================================
154 StatusCode TrigByteStreamCnvSvc::connectOutput(const std::string& outputFile, const std::string& /*openMode*/) {
155  return connectOutput(outputFile);
156 }
157 
158 // =============================================================================
159 // Implementation of IConversionSvc::commitOutput
160 // The arguments outputFile and do_commit are not used
161 // NOTE: In online HLT, m_rawEventWrite is not a full event, it contains only the HLTResult ROBFragments
162 // =============================================================================
163 StatusCode TrigByteStreamCnvSvc::commitOutput(const std::string& outputFile, bool do_commit) {
164  const EventContext* eventContext = currentContext();
165  if (eventContext == nullptr) return StatusCode::FAILURE;
166  return commitOutput(outputFile, do_commit, *eventContext);
167 }
168 
169 StatusCode TrigByteStreamCnvSvc::commitOutput(const std::string& /*outputFile*/, bool /*do_commit*/, const EventContext& eventContext) {
170  ATH_MSG_VERBOSE("start of " << __FUNCTION__);
171 
172  if (msgLvl(MSG::DEBUG)) printRawEvent(eventContext);
173 
174  RawEventWrite* re = getRawEvent(eventContext);
175 
176  // Serialise the output FullEventFragment
177  std::unique_ptr<uint32_t[]> rawEventPtr;
178  try {
179  const eformat::write::node_t* top = re->bind();
180  uint32_t rawEventSize = re->size_word();
181  rawEventPtr = std::make_unique<uint32_t[]>(rawEventSize);
182  uint32_t copiedSize = eformat::write::copy(*top,rawEventPtr.get(),rawEventSize);
183  if(copiedSize!=rawEventSize) {
184  ATH_MSG_ERROR("FullEventFragment serialisation failed");
185  return StatusCode::FAILURE;
186  }
187  }
188  catch (const std::exception& e) {
189  ATH_MSG_ERROR("FullEventFragment serialisation failed, caught an unexpected std::exception " << e.what());
190  clearRawEvent(eventContext);
191  return StatusCode::FAILURE;
192  }
193  catch (...) {
194  ATH_MSG_ERROR("FullEventFragment serialisation failed, caught an unexpected exception");
195  clearRawEvent(eventContext);
196  return StatusCode::FAILURE;
197  }
198 
199  {
200  auto t_mon = Monitored::Timer("TIME_monitorRawEvent");
201  monitorRawEvent(rawEventPtr);
202  Monitored::Group(m_monTool, t_mon);
203  }
204 
205  // Send output to the DataCollector
206  StatusCode result = StatusCode::SUCCESS;
207  try {
208  auto t_eventDone = Monitored::Timer<std::chrono::duration<float, std::milli>>("TIME_eventDone");
209  hltinterface::DataCollector::instance()->eventDone(std::move(rawEventPtr));
210  Monitored::Group(m_monTool, t_eventDone);
211  ATH_MSG_DEBUG("Serialised FullEventFragment with HLT result was returned to DataCollector successfully, "
212  << "the eventDone call took " << (double)t_eventDone << " milliseconds");
213  }
214  catch (const std::exception& e) {
215  ATH_MSG_ERROR("Sending output to DataCollector failed, caught an unexpected std::exception " << e.what());
216  result = StatusCode::FAILURE;
217  }
218  catch (...) {
219  ATH_MSG_ERROR("Sending output to DataCollector failed, caught an unexpected exception");
220  result = StatusCode::FAILURE;
221  }
222 
223  clearRawEvent(eventContext);
224 
225  ATH_MSG_VERBOSE("end of " << __FUNCTION__);
226  return result;
227 }
228 
229 // =============================================================================
230 const EventContext* TrigByteStreamCnvSvc::currentContext() const {
231  // Get the EventContext via event store because the base class doesn't allow passing it explicitly as an argument
232  // and we don't want to use ThreadLocalContext. Don't use ReadHandle here because it calls ThreadLocalContext if
233  // not given a context (which we want to retrieve). This relies on IHiveWhiteBoard::selectStore being called on the
234  // current thread before we arrive here (it is done in HltEventLoopMgr).
235  const EventContext* eventContext = nullptr;
236  if (m_evtStore->retrieve(eventContext).isFailure()) {
237  ATH_MSG_ERROR("Failed to retrieve EventContext from the event store");
238  }
239  return eventContext;
240 }
241 
242 // =============================================================================
244  const EventContext* eventContext = currentContext();
245  if (eventContext == nullptr) return nullptr;
246  return getRawEvent(*eventContext);
247 }
248 
249 // =============================================================================
250 RawEventWrite* TrigByteStreamCnvSvc::getRawEvent(const EventContext& eventContext) const {
251  return m_rawEventWriteCache.get(eventContext)->get();
252 }
253 
254 // =============================================================================
255 RawEventWrite* TrigByteStreamCnvSvc::setRawEvent(std::unique_ptr<RawEventWrite>&& rawEventWrite, const EventContext& eventContext) {
256  *(m_rawEventWriteCache.get(eventContext)) = std::move(rawEventWrite);
257  return getRawEvent(eventContext);
258 }
259 
260 // =============================================================================
261 void TrigByteStreamCnvSvc::clearRawEvent(const EventContext& eventContext) {
262  m_rawEventWriteCache.get(eventContext)->reset();
263 }
264 
265 // =============================================================================
266 void TrigByteStreamCnvSvc::monitorRawEvent(const std::unique_ptr<uint32_t[]>& rawEventPtr) const {
267  // Create a read fragment from the pointer
268  eformat::read::FullEventFragment rawEvent(rawEventPtr.get());
269 
270  // Monitor error code
271  if (rawEvent.nstatus() > 1) {
272  HLT::OnlineErrorCode errorCode = static_cast<HLT::OnlineErrorCode>(rawEvent.status()[1]);
273  std::ostringstream ss;
274  ss << errorCode;
275  auto monOnlineErrorCode = Monitored::Scalar<std::string>("OnlineErrorCode", ss.str());
276  Monitored::Group(m_monTool, monOnlineErrorCode);
277  }
278 
279  // Decode stream tags
280  std::vector<eformat::helper::StreamTag> streamTags;
281  try {
282  eformat::helper::decode(rawEvent.nstream_tag(), rawEvent.stream_tag(), streamTags);
283  }
284  catch (const std::exception& ex) {
285  ATH_MSG_ERROR("StreamTag decoding failed, caught an unexpected std::exception " << ex.what());
286  return;
287  }
288  catch (...) {
289  ATH_MSG_ERROR("StreamTag decoding failed, caught an unexpected exception");
290  return;
291  }
292 
293  // Get HLT result sizes
294  std::vector<eformat::read::ROBFragment> robs;
295  rawEvent.robs(robs);
296  std::vector<uint16_t> resultSizeMap_moduleID;
297  std::vector<uint32_t> resultSizeMap_size;
298  uint32_t totalSizeWords = 0;
299  try {
300  for (const eformat::read::ROBFragment& rob : robs) {
301  eformat::helper::SourceIdentifier sid(rob.rob_source_id());
302  if (sid.subdetector_id() != eformat::SubDetector::TDAQ_HLT)
303  continue;
304  const uint16_t module_id = sid.module_id();
305  const uint32_t size = rob.fragment_size_word();
306  totalSizeWords += size;
307  if (!contains(resultSizeMap_moduleID, module_id)) {
308  resultSizeMap_moduleID.push_back(module_id);
309  resultSizeMap_size.push_back(size);
310  }
311  else {
312  ATH_MSG_ERROR("HLT result ROB monitoring found multiple HLT ROBs with the same module ID " << module_id);
313  }
314  }
315  }
316  catch (const std::exception& ex) {
317  ATH_MSG_ERROR("HLT result ROB monitoring failed, caught an unexpected std::exception " << ex.what());
318  return;
319  }
320  catch (...) {
321  ATH_MSG_ERROR("HLT result ROB monitoring failed, caught an unexpected exception");
322  return;
323  }
324 
325  // Fill helper containers for monitoring
326  std::vector<std::string> sdFromRobList;
327  std::vector<std::string> sdFromSubDetList;
328  std::vector<std::string> streamTagCorrA;
329  std::vector<std::string> streamTagCorrB;
330  std::vector<float> streamResultSize; // Correlated with streamTags vector
331  streamTagCorrA.reserve(streamTags.size() * streamTags.size());
332  streamTagCorrB.reserve(streamTags.size() * streamTags.size());
333  streamResultSize.reserve(streamTags.size());
334  for (const eformat::helper::StreamTag& st : streamTags) {
335  bool hasHLTSubDet = st.dets.find(eformat::SubDetector::TDAQ_HLT) != st.dets.end();
336  bool includeAll = st.robs.empty() && (st.dets.empty() || hasHLTSubDet);
337  // includeAll means a stream with full event building or all HLT results included
338  uint32_t sizeWords = includeAll ? totalSizeWords : 0;
339  for (const eformat::SubDetector sd : st.dets) {
340  const std::string& detName = eformat::helper::SubDetectorDictionary.string(sd);
341  if (!contains(sdFromSubDetList, detName)) sdFromSubDetList.push_back(detName);
342  }
343  for (const uint32_t robid : st.robs) {
344  eformat::helper::SourceIdentifier sid(robid);
345  const std::string& detName = sid.human_detector();
346  if (!contains(sdFromRobList, detName)) sdFromRobList.push_back(detName);
347  if (!includeAll && sid.subdetector_id() == eformat::SubDetector::TDAQ_HLT) {
348  if (const int ix = index(resultSizeMap_moduleID, sid.module_id()); ix >= 0) {
349  sizeWords += resultSizeMap_size[ix];
350  }
351  else {
352  ATH_MSG_WARNING("Stream tag " << st.type << "_" << st.name << " declares " << sid.human()
353  << " in ROB list, but the ROBFragment is missing");
354  }
355  }
356  }
357  streamResultSize.push_back(sizeWords*wordsToKiloBytes);
358  for (const eformat::helper::StreamTag& st2 : streamTags) {
359  streamTagCorrA.push_back(mon_streamTypeName(st));
360  streamTagCorrB.push_back(mon_streamTypeName(st2));
361  }
362  }
363 
364  // General stream tag monitoring
365  auto monStreamTagsNum = Monitored::Scalar<size_t>("StreamTagsNum", streamTags.size());
366  auto monStreamTags = Monitored::Collection("StreamTags", streamTags, mon_streamTypeName);
367  auto monStreamTagsType = Monitored::Collection("StreamTagsType", streamTags, mon_streamType);
368  auto monStreamTagCorrA = Monitored::Collection("StreamTagCorrA", streamTagCorrA);
369  auto monStreamTagCorrB = Monitored::Collection("StreamTagCorrB", streamTagCorrB);
370  // PEB stream tag monitoring
371  auto monStreamIsPeb = Monitored::Collection("StreamTagIsPeb", streamTags, mon_streamIsPeb);
372  auto monPebRobsNum = Monitored::Collection("StreamTagsPebRobsNum", streamTags, mon_streamPebRobsNum);
373  auto monPebSubDetsNum = Monitored::Collection("StreamTagsPebSubDetsNum", streamTags, mon_streamPebSubDetsNum);
374  auto monSubDetsFromRobList = Monitored::Collection("StreamTagsPebSubDetsFromRobList", sdFromRobList);
375  auto monSubDetsFromSubDetList = Monitored::Collection("StreamTagsPebSubDetsFromSubDetList", sdFromSubDetList);
376  // Result size monitoring
377  auto monResultSizeTotal = Monitored::Scalar<float>("ResultSizeTotal", totalSizeWords*wordsToKiloBytes);
378  auto monResultSizeFullEvFrag = Monitored::Scalar<float>("ResultSizeFullEvFrag", rawEvent.fragment_size_word()*wordsToKiloBytes);
379  auto monResultCollModuleID = Monitored::Collection("ResultModuleID", resultSizeMap_moduleID);
380  auto monResultCollModuleSize = Monitored::Collection("ResultModuleSize", resultSizeMap_size, [](uint32_t sw){return sw*wordsToKiloBytes;});
381  auto monResultSizeByStream = Monitored::Collection("ResultSizeStream", streamResultSize);
382  // Collect all variables
383  Monitored::Group(m_monTool, monStreamTagsNum, monStreamTags, monStreamTagsType, monStreamTagCorrA,
384  monStreamTagCorrB, monStreamIsPeb, monPebRobsNum, monPebSubDetsNum, monSubDetsFromRobList,
385  monSubDetsFromSubDetList, monResultSizeTotal, monResultSizeFullEvFrag, monResultCollModuleID,
386  monResultCollModuleSize, monResultSizeByStream);
387 }
388 
389 // =============================================================================
390 void TrigByteStreamCnvSvc::printRawEvent(const EventContext& eventContext) const {
391  RawEventWrite* re = getRawEvent(eventContext);
392 
393  if (!re) {
394  ATH_MSG_WARNING("RawEventWrite pointer is null");
395  return;
396  }
397  std::ostringstream ss;
398  ss << "Dumping header of the FullEventFragment with HLT result:" << std::endl;
399  ss << "--> status = "
400  << printNWordsHex<uint32_t>(re->nstatus(), re->status())
401  << std::endl;
402  ss << "--> source_id = " << printWordHex<uint32_t>(re->source_id()) << std::endl;
403  ss << "--> checksum_type = " << printWordHex<uint32_t>(re->checksum_type()) << std::endl;
404  ss << "--> compression_type = " << printWordHex<uint32_t>(re->compression_type()) << std::endl;
405  ss << "--> compression_level = " << re->compression_level() << std::endl;
406  ss << "--> bc_time_seconds = " << re->bc_time_seconds() << std::endl;
407  ss << "--> bc_time_nanoseconds = " << re->bc_time_nanoseconds() << std::endl;
408  ss << "--> global_id = " << re->global_id() << std::endl;
409  ss << "--> run_type = " << re->run_type() << std::endl;
410  ss << "--> run_no = " << re->run_no() << std::endl;
411  ss << "--> lumi_block = " << re->lumi_block() << std::endl;
412  ss << "--> lvl1_id = " << re->lvl1_id() << std::endl;
413  ss << "--> bc_id = " << re->bc_id() << std::endl;
414  ss << "--> lvl1_trigger_type = " << printWordHex<uint8_t>(re->lvl1_trigger_type()) << std::endl;
415  ss << "--> lvl1_trigger_info = "
416  << printNWordsHex<uint32_t>(re->nlvl1_trigger_info(), re->lvl1_trigger_info())
417  << std::endl;
418  ss << "--> lvl2_trigger_info = "
419  << printNWordsHex<uint32_t>(re->nlvl2_trigger_info(), re->lvl2_trigger_info())
420  << std::endl;
421  ss << "--> event_filter_info = "
422  << printNWordsHex<uint32_t>(re->nevent_filter_info(), re->event_filter_info())
423  << std::endl;
424  ss << "--> hlt_info = "
425  << printNWordsHex<uint32_t>(re->nhlt_info(), re->hlt_info())
426  << std::endl;
427 
428  std::vector<eformat::helper::StreamTag> stream_tags;
429  try {
430  eformat::helper::decode(re->nstream_tag(), re->stream_tag(), stream_tags);
431  }
432  catch (const std::exception& ex) {
433  ATH_MSG_ERROR("StreamTag decoding failed, caught an unexpected std::exception " << ex.what());
434  return;
435  }
436  catch (...) {
437  ATH_MSG_ERROR("StreamTag decoding failed, caught an unexpected exception");
438  return;
439  }
440  ss << "--> stream_tags = ";
441  bool first = true;
442  for (const auto& st : stream_tags) {
443  if (first) first=false;
444  else ss << " ";
445  ss << "{" << st.name << ", " << st.type << ", obeysLB=" << st.obeys_lumiblock << ", robs=[";
446  for (const auto& robid : st.robs) ss << printWordHex<uint32_t>(robid) << ", ";
447  ss << "], dets = [";
448  for (const auto& detid : st.dets) ss << printWordHex<uint8_t>(detid) << ", ";
449  ss << "]}" << std::endl;
450  }
451 
452  ATH_MSG_DEBUG(ss.str());
453 }
RawEventWrite
OFFLINE_FRAGMENTS_NAMESPACE_WRITE::FullEventFragment RawEventWrite
data type for writing raw event
Definition: RawEvent.h:39
AthCnvSvc::finalize
virtual StatusCode finalize()
Definition: AthCnvSvc.cxx:116
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
get_generator_info.result
result
Definition: get_generator_info.py:21
top
TopConfig A simple configuration that is NOT a singleton.
Definition: AnalysisTrackingHelper.cxx:58
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
TrigByteStreamCnvSvc::commitOutput
virtual StatusCode commitOutput(const std::string &outputFile, bool do_commit) override
In the case of online BS data, this method binds and sends out the output FullEventFragment.
Definition: TrigByteStreamCnvSvc.cxx:163
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
TrigByteStreamCnvSvc::monitorRawEvent
void monitorRawEvent(const std::unique_ptr< uint32_t[]> &rawEventPtr) const
Fill histograms from contents of a FullEventFragment.
Definition: TrigByteStreamCnvSvc.cxx:266
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
trigbs_dumpHLTContentInBS_run3.stream_tags
def stream_tags(event)
Definition: trigbs_dumpHLTContentInBS_run3.py:172
SG::SlotSpecificObj::get
T * get(const EventContext &ctx)
Return pointer to the object for slot given by ctx.
skel.it
it
Definition: skel.GENtoEVGEN.py:423
AthCommonMsg< Service >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
vec
std::vector< size_t > vec
Definition: CombinationsGeneratorTest.cxx:12
TrigByteStreamCnvSvc.h
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
OFFLINE_FRAGMENTS_NAMESPACE::FullEventFragment
eformat::FullEventFragment< PointerType > FullEventFragment
Definition: RawEvent.h:26
TrigByteStreamCnvSvc::m_rawEventWriteCache
SG::SlotSpecificObj< std::unique_ptr< RawEventWrite > > m_rawEventWriteCache
Definition: TrigByteStreamCnvSvc.h:70
EventContextClid.h
Assign a CLID to EventContext.
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
python.selector.AtlRunQuerySelectorLhcOlc.sd
sd
Definition: AtlRunQuerySelectorLhcOlc.py:612
TrigByteStreamCnvSvc::connectOutput
virtual StatusCode connectOutput(const std::string &outputFile) override
In the case of online BS data, this method creates the output FullEventFragment and fills its header.
Definition: TrigByteStreamCnvSvc.cxx:125
instance
std::map< std::string, double > instance
Definition: Run_To_Get_Tags.h:8
compareGeometries.outputFile
string outputFile
Definition: compareGeometries.py:25
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
TrigByteStreamCnvSvc::~TrigByteStreamCnvSvc
virtual ~TrigByteStreamCnvSvc()
Standard destructor.
Definition: TrigByteStreamCnvSvc.cxx:92
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:88
TrigByteStreamCnvSvc::setRawEvent
RawEventWrite * setRawEvent(std::unique_ptr< RawEventWrite > &&rawEventWrite, const EventContext &eventContext)
Store new raw event in the cache.
Definition: TrigByteStreamCnvSvc.cxx:255
TrigByteStreamCnvSvc::m_robDataProviderSvc
ServiceHandle< IROBDataProviderSvc > m_robDataProviderSvc
Definition: TrigByteStreamCnvSvc.h:66
lumiFormat.i
int i
Definition: lumiFormat.py:92
beamspotman.n
n
Definition: beamspotman.py:731
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
python.HLT.CommonSequences.EventBuildingSequences.robs
robs
Definition: EventBuildingSequences.py:400
contains
bool contains(const std::string &s, const std::string &regx)
does a string contain the substring
Definition: hcg.cxx:111
calibdata.exception
exception
Definition: calibdata.py:496
TrigByteStreamCnvSvc::finalize
virtual StatusCode finalize() override
Definition: TrigByteStreamCnvSvc.cxx:110
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
TrigByteStreamCnvSvc::TrigByteStreamCnvSvc
TrigByteStreamCnvSvc(const std::string &name, ISvcLocator *svcLoc)
Standard constructor.
Definition: TrigByteStreamCnvSvc.cxx:86
grepfile.sep
sep
Definition: grepfile.py:38
OnlineErrorCode.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
python.PerfMonSerializer.decode
def decode(s)
Definition: PerfMonSerializer.py:388
operator<<
std::ostream & operator<<(std::ostream &lhs, const TestGaudiProperty &rhs)
Definition: TestGaudiProperty.cxx:69
OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment
eformat::ROBFragment< PointerType > ROBFragment
Definition: RawEvent.h:27
HLT::OnlineErrorCode
OnlineErrorCode
Definition: OnlineErrorCode.h:15
DeMoScan.index
string index
Definition: DeMoScan.py:362
TrigByteStreamCnvSvc::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: TrigByteStreamCnvSvc.h:67
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
TrigByteStreamCnvSvc::m_evtStore
ServiceHandle< StoreGateSvc > m_evtStore
Definition: TrigByteStreamCnvSvc.h:65
ByteStreamCnvSvcBase
The base class for offline and HLT ByteStream conversion services.
Definition: ByteStreamCnvSvcBase.h:19
python.CaloScaleNoiseConfig.str
str
Definition: CaloScaleNoiseConfig.py:78
TrigByteStreamCnvSvc::printRawEvent
void printRawEvent(const EventContext &eventContext) const
Print contents of the raw event.
Definition: TrigByteStreamCnvSvc.cxx:390
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
DeMoScan.first
bool first
Definition: DeMoScan.py:534
re
const boost::regex re(r_e)
DEBUG
#define DEBUG
Definition: page_access.h:11
TrigByteStreamCnvSvc::currentContext
const EventContext * currentContext() const
Hack used in HLT to avoid using ThreadLocalContext, see explanation in the implementation.
Definition: TrigByteStreamCnvSvc.cxx:230
str
Definition: BTagTrackIpAccessor.cxx:11
calibdata.copy
bool copy
Definition: calibdata.py:27
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
python.IoTestsLib.w
def w
Definition: IoTestsLib.py:200
checkFileSG.words
words
Definition: checkFileSG.py:76
TrigByteStreamCnvSvc::clearRawEvent
void clearRawEvent(const EventContext &eventContext)
Delete raw event from the cache.
Definition: TrigByteStreamCnvSvc.cxx:261
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
StoreGateSvc.h
python.LArCondContChannels.detName
detName
Definition: LArCondContChannels.py:665
Monitored::Timer
A monitored timer.
Definition: MonitoredTimer.h:32
IROBDataProviderSvc.h
TSU::T
unsigned long long T
Definition: L1TopoDataTypes.h:35
TrigByteStreamCnvSvc::getRawEvent
virtual RawEventWrite * getRawEvent() override
Return a pointer to the raw event for the current event context.
Definition: TrigByteStreamCnvSvc.cxx:243
ByteStreamCnvSvcBase::initialize
virtual StatusCode initialize() override
Required of all Gaudi Services.
Definition: ByteStreamCnvSvcBase.cxx:27
TrigByteStreamCnvSvc::initialize
virtual StatusCode initialize() override
Required of all Gaudi Services.
Definition: TrigByteStreamCnvSvc.cxx:97