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

A ByteStreamCnvSvc implementation for online use. More...

#include <TrigByteStreamCnvSvc.h>

Inheritance diagram for TrigByteStreamCnvSvc:
Collaboration diagram for TrigByteStreamCnvSvc:

Public Member Functions

 TrigByteStreamCnvSvc (const std::string &name, ISvcLocator *svcLoc)
 Standard constructor.
virtual ~TrigByteStreamCnvSvc ()
 Standard destructor.
virtual StatusCode initialize () override
virtual StatusCode finalize () override
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.
StatusCode connectOutput (const std::string &outputFile, const EventContext &eventContext)
 In the case of online BS data, this method creates the output FullEventFragment and fills its header.
virtual StatusCode connectOutput (const std::string &outputFile, const std::string &openMode) override
 This overload is kept only for interface compatibility.
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.
StatusCode commitOutput (const std::string &outputFile, bool do_commit, const EventContext &eventContext)
 In the case of online BS data, this method binds and sends out the output FullEventFragment.
virtual RawEventWritegetRawEvent () override
 Return a pointer to the raw event for the current event context.
RawEventWritegetRawEvent (const EventContext &eventContext) const
 Return a pointer to the raw event for the given event context.

Protected Member Functions

virtual FullEventAssemblerBasefindFullEventAssembler (const std::string &name) const override
virtual StatusCode storeFullEventAssembler (std::unique_ptr< FullEventAssemblerBase > fea, const std::string &name) override

Private Member Functions

RawEventWritesetRawEvent (std::unique_ptr< RawEventWrite > &&rawEventWrite, const EventContext &eventContext)
 Store new raw event in the cache.
void clearRawEvent (const EventContext &eventContext)
 Delete raw event from the cache.
void printRawEvent (const EventContext &eventContext) const
 Print contents of the raw event.
void monitorRawEvent (const std::unique_ptr< uint32_t[]> &rawEventPtr) const
 Fill histograms from contents of a FullEventFragment.
const EventContext * currentContext () const
 Hack used in HLT to avoid using ThreadLocalContext, see explanation in the implementation.

Private Attributes

ServiceHandle< StoreGateSvcm_evtStore {this, "EventStore", "StoreGateSvc"}
ServiceHandle< IROBDataProviderSvcm_robDataProviderSvc {this, "ROBDataProvider", "ROBDataProviderSvc"}
ToolHandle< GenericMonitoringToolm_monTool {this, "MonTool", "" , "Monitoring tool"}
SG::SlotSpecificObj< std::unique_ptr< RawEventWrite > > m_rawEventWriteCache

Detailed Description

A ByteStreamCnvSvc implementation for online use.

It overrides the connectOutput and commitOutput methods of the base class. In this implementation, they create the specific online HLT output and send it out directly to the TDAQ infrastructure without using an output service.

Definition at line 23 of file TrigByteStreamCnvSvc.h.

Constructor & Destructor Documentation

◆ TrigByteStreamCnvSvc()

TrigByteStreamCnvSvc::TrigByteStreamCnvSvc ( const std::string & name,
ISvcLocator * svcLoc )

Standard constructor.

Definition at line 86 of file TrigByteStreamCnvSvc.cxx.

87 : base_class(name, svcLoc) {}

◆ ~TrigByteStreamCnvSvc()

TrigByteStreamCnvSvc::~TrigByteStreamCnvSvc ( )
virtual

Standard destructor.

Definition at line 92 of file TrigByteStreamCnvSvc.cxx.

92{}

Member Function Documentation

◆ clearRawEvent()

void TrigByteStreamCnvSvc::clearRawEvent ( const EventContext & eventContext)
private

Delete raw event from the cache.

Definition at line 275 of file TrigByteStreamCnvSvc.cxx.

275 {
276 m_rawEventWriteCache.get(eventContext)->reset();
277}
SG::SlotSpecificObj< std::unique_ptr< RawEventWrite > > m_rawEventWriteCache

◆ commitOutput() [1/2]

StatusCode TrigByteStreamCnvSvc::commitOutput ( const std::string & outputFile,
bool do_commit )
overridevirtual

In the case of online BS data, this method binds and sends out the output FullEventFragment.

Definition at line 177 of file TrigByteStreamCnvSvc.cxx.

177 {
178 const EventContext* eventContext = currentContext();
179 if (eventContext == nullptr) return StatusCode::FAILURE;
180 return commitOutput(outputFile, do_commit, *eventContext);
181}
const EventContext * currentContext() const
Hack used in HLT to avoid using ThreadLocalContext, see explanation in the implementation.
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.

◆ commitOutput() [2/2]

StatusCode TrigByteStreamCnvSvc::commitOutput ( const std::string & outputFile,
bool do_commit,
const EventContext & eventContext )

In the case of online BS data, this method binds and sends out the output FullEventFragment.

Definition at line 183 of file TrigByteStreamCnvSvc.cxx.

183 {
184 ATH_MSG_VERBOSE("start of " << __FUNCTION__);
185
186 if (msgLvl(MSG::DEBUG)) printRawEvent(eventContext);
187
188 RawEventWrite* re = getRawEvent(eventContext);
189
190 // Serialise the output FullEventFragment
191 std::unique_ptr<uint32_t[]> rawEventPtr;
192 try {
193 const eformat::write::node_t* top = re->bind();
194 uint32_t rawEventSize = re->size_word();
195 rawEventPtr = std::make_unique<uint32_t[]>(rawEventSize);
196 uint32_t copiedSize = eformat::write::copy(*top,rawEventPtr.get(),rawEventSize);
197 if(copiedSize!=rawEventSize) {
198 ATH_MSG_ERROR("FullEventFragment serialisation failed");
199 return StatusCode::FAILURE;
200 }
201 }
202 catch (const std::exception& e) {
203 ATH_MSG_ERROR("FullEventFragment serialisation failed, caught an unexpected std::exception " << e.what());
204 clearRawEvent(eventContext);
205 return StatusCode::FAILURE;
206 }
207 catch (...) {
208 ATH_MSG_ERROR("FullEventFragment serialisation failed, caught an unexpected exception");
209 clearRawEvent(eventContext);
210 return StatusCode::FAILURE;
211 }
212
213 {
214 auto t_mon = Monitored::Timer("TIME_monitorRawEvent");
215 monitorRawEvent(rawEventPtr);
216 Monitored::Group(m_monTool, t_mon);
217 }
218
219 // Send output to the DataCollector
220 StatusCode result = StatusCode::SUCCESS;
221 try {
222 auto t_eventDone = Monitored::Timer<std::chrono::duration<float, std::milli>>("TIME_eventDone");
223 hltinterface::DataCollector::instance()->eventDone(std::move(rawEventPtr));
224 Monitored::Group(m_monTool, t_eventDone);
225 ATH_MSG_DEBUG("Serialised FullEventFragment with HLT result was returned to DataCollector successfully, "
226 << "the eventDone call took " << (double)t_eventDone << " milliseconds");
227 }
228 catch (const std::exception& e) {
229 ATH_MSG_ERROR("Sending output to DataCollector failed, caught an unexpected std::exception " << e.what());
230 result = StatusCode::FAILURE;
231 }
232 catch (...) {
233 ATH_MSG_ERROR("Sending output to DataCollector failed, caught an unexpected exception");
234 result = StatusCode::FAILURE;
235 }
236
237 clearRawEvent(eventContext);
238
239 ATH_MSG_VERBOSE("end of " << __FUNCTION__);
240 return result;
241}
const boost::regex re(r_e)
#define ATH_MSG_ERROR(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_DEBUG(x)
OFFLINE_FRAGMENTS_NAMESPACE_WRITE::FullEventFragment RawEventWrite
data type for writing raw event
Definition RawEvent.h:39
@ top
void monitorRawEvent(const std::unique_ptr< uint32_t[]> &rawEventPtr) const
Fill histograms from contents of a FullEventFragment.
virtual RawEventWrite * getRawEvent() override
Return a pointer to the raw event for the current event context.
void printRawEvent(const EventContext &eventContext) const
Print contents of the raw event.
ToolHandle< GenericMonitoringTool > m_monTool
void clearRawEvent(const EventContext &eventContext)
Delete raw event from the cache.
::StatusCode StatusCode
StatusCode definition for legacy code.
setEventNumber uint32_t

◆ connectOutput() [1/3]

StatusCode TrigByteStreamCnvSvc::connectOutput ( const std::string & outputFile)
overridevirtual

In the case of online BS data, this method creates the output FullEventFragment and fills its header.

Definition at line 139 of file TrigByteStreamCnvSvc.cxx.

139 {
140 const EventContext* eventContext = currentContext();
141 if (eventContext == nullptr) return StatusCode::FAILURE;
142 return connectOutput(outputFile, *eventContext);
143}
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.

◆ connectOutput() [2/3]

StatusCode TrigByteStreamCnvSvc::connectOutput ( const std::string & outputFile,
const EventContext & eventContext )

In the case of online BS data, this method creates the output FullEventFragment and fills its header.

Definition at line 145 of file TrigByteStreamCnvSvc.cxx.

145 {
146 ATH_MSG_VERBOSE("start of " << __FUNCTION__);
147
148 ATH_MSG_DEBUG("Creating new RawEventWrite for EventContext = " << eventContext);
149 // Create a new RawEventWrite and copy the header from the input RawEvent
150 RawEventWrite* re = setRawEvent(std::make_unique<RawEventWrite>(), eventContext);
151 const uint32_t* inputRawEvent = m_robDataProviderSvc->getEvent(eventContext)->start();
152 if (!inputRawEvent) {
153 ATH_MSG_ERROR("Input RawEvent is nullptr, cannot create output");
154 return StatusCode::FAILURE;
155 }
156 re->copy_header(inputRawEvent);
157
158 ATH_MSG_VERBOSE("Created RawEventWrite pointer = " << re);
159
160 ATH_MSG_VERBOSE("end of " << __FUNCTION__);
161 return StatusCode::SUCCESS;
162}
RawEventWrite * setRawEvent(std::unique_ptr< RawEventWrite > &&rawEventWrite, const EventContext &eventContext)
Store new raw event in the cache.
ServiceHandle< IROBDataProviderSvc > m_robDataProviderSvc

◆ connectOutput() [3/3]

StatusCode TrigByteStreamCnvSvc::connectOutput ( const std::string & outputFile,
const std::string & openMode )
overridevirtual

This overload is kept only for interface compatibility.

Definition at line 168 of file TrigByteStreamCnvSvc.cxx.

168 {
169 return connectOutput(outputFile);
170}

◆ currentContext()

const EventContext * TrigByteStreamCnvSvc::currentContext ( ) const
private

Hack used in HLT to avoid using ThreadLocalContext, see explanation in the implementation.

Definition at line 244 of file TrigByteStreamCnvSvc.cxx.

244 {
245 // Get the EventContext via event store because the base class doesn't allow passing it explicitly as an argument
246 // and we don't want to use ThreadLocalContext. Don't use ReadHandle here because it calls ThreadLocalContext if
247 // not given a context (which we want to retrieve). This relies on IHiveWhiteBoard::selectStore being called on the
248 // current thread before we arrive here (it is done in HltEventLoopMgr).
249 const EventContext* eventContext = nullptr;
250 if (m_evtStore->retrieve(eventContext).isFailure()) {
251 ATH_MSG_ERROR("Failed to retrieve EventContext from the event store");
252 }
253 return eventContext;
254}
ServiceHandle< StoreGateSvc > m_evtStore

◆ finalize()

StatusCode TrigByteStreamCnvSvc::finalize ( )
overridevirtual

Definition at line 110 of file TrigByteStreamCnvSvc.cxx.

110 {
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__);
117 ATH_CHECK(ByteStreamCnvSvcBase::finalize());
118 return StatusCode::SUCCESS;
119}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)

◆ findFullEventAssembler()

FullEventAssemblerBase * TrigByteStreamCnvSvc::findFullEventAssembler ( const std::string & name) const
overrideprotectedvirtual

Definition at line 124 of file TrigByteStreamCnvSvc.cxx.

124 {
125 ATH_MSG_ERROR("Bytestream creation is not supported by TrigByteStreamCnvSvc");
126 return nullptr;
127}

◆ getRawEvent() [1/2]

RawEventWrite * TrigByteStreamCnvSvc::getRawEvent ( )
overridevirtual

Return a pointer to the raw event for the current event context.

Definition at line 257 of file TrigByteStreamCnvSvc.cxx.

257 {
258 const EventContext* eventContext = currentContext();
259 if (eventContext == nullptr) return nullptr;
260 return getRawEvent(*eventContext);
261}

◆ getRawEvent() [2/2]

RawEventWrite * TrigByteStreamCnvSvc::getRawEvent ( const EventContext & eventContext) const

Return a pointer to the raw event for the given event context.

Definition at line 264 of file TrigByteStreamCnvSvc.cxx.

264 {
265 return m_rawEventWriteCache.get(eventContext)->get();
266}

◆ initialize()

StatusCode TrigByteStreamCnvSvc::initialize ( )
overridevirtual

Definition at line 97 of file TrigByteStreamCnvSvc.cxx.

97 {
98 ATH_MSG_VERBOSE("start of " << __FUNCTION__);
100 ATH_CHECK(m_evtStore.retrieve());
102 if (!m_monTool.empty()) ATH_CHECK(m_monTool.retrieve());
103 ATH_MSG_VERBOSE("end of " << __FUNCTION__);
104 return StatusCode::SUCCESS;
105}
virtual StatusCode initialize() override
Required of all Gaudi Services.

◆ monitorRawEvent()

void TrigByteStreamCnvSvc::monitorRawEvent ( const std::unique_ptr< uint32_t[]> & rawEventPtr) const
private

Fill histograms from contents of a FullEventFragment.

Definition at line 280 of file TrigByteStreamCnvSvc.cxx.

280 {
281 // Create a read fragment from the pointer
282 eformat::read::FullEventFragment rawEvent(rawEventPtr.get());
283
284 // Monitor error code
285 if (rawEvent.nstatus() > 1) {
286 HLT::OnlineErrorCode errorCode = static_cast<HLT::OnlineErrorCode>(rawEvent.status()[1]);
287 std::ostringstream ss;
288 ss << errorCode;
289 auto monOnlineErrorCode = Monitored::Scalar<std::string>("OnlineErrorCode", ss.str());
290 Monitored::Group(m_monTool, monOnlineErrorCode);
291 }
292
293 // Decode stream tags
294 std::vector<eformat::helper::StreamTag> streamTags;
295 try {
296 eformat::helper::decode(rawEvent.nstream_tag(), rawEvent.stream_tag(), streamTags);
297 }
298 catch (const std::exception& ex) {
299 ATH_MSG_ERROR("StreamTag decoding failed, caught an unexpected std::exception " << ex.what());
300 return;
301 }
302 catch (...) {
303 ATH_MSG_ERROR("StreamTag decoding failed, caught an unexpected exception");
304 return;
305 }
306
307 // Get HLT result sizes
308 std::vector<eformat::read::ROBFragment> robs;
309 rawEvent.robs(robs);
310 std::vector<uint16_t> resultSizeMap_moduleID;
311 std::vector<uint32_t> resultSizeMap_size;
312 uint32_t totalSizeWords = 0;
313 try {
314 for (const eformat::read::ROBFragment& rob : robs) {
315 eformat::helper::SourceIdentifier sid(rob.rob_source_id());
316 if (sid.subdetector_id() != eformat::SubDetector::TDAQ_HLT)
317 continue;
318 const uint16_t module_id = sid.module_id();
319 const uint32_t size = rob.fragment_size_word();
320 totalSizeWords += size;
321 if (!contains(resultSizeMap_moduleID, module_id)) {
322 resultSizeMap_moduleID.push_back(module_id);
323 resultSizeMap_size.push_back(size);
324 }
325 else {
326 ATH_MSG_ERROR("HLT result ROB monitoring found multiple HLT ROBs with the same module ID " << module_id);
327 }
328 }
329 }
330 catch (const std::exception& ex) {
331 ATH_MSG_ERROR("HLT result ROB monitoring failed, caught an unexpected std::exception " << ex.what());
332 return;
333 }
334 catch (...) {
335 ATH_MSG_ERROR("HLT result ROB monitoring failed, caught an unexpected exception");
336 return;
337 }
338
339 // Fill helper containers for monitoring
340 std::vector<std::string> sdFromRobList;
341 std::vector<std::string> sdFromSubDetList;
342 std::vector<std::string> streamTagCorrA;
343 std::vector<std::string> streamTagCorrB;
344 std::vector<float> streamResultSize; // Correlated with streamTags vector
345 streamTagCorrA.reserve(streamTags.size() * streamTags.size());
346 streamTagCorrB.reserve(streamTags.size() * streamTags.size());
347 streamResultSize.reserve(streamTags.size());
348 for (const eformat::helper::StreamTag& st : streamTags) {
349 bool hasHLTSubDet = st.dets.find(eformat::SubDetector::TDAQ_HLT) != st.dets.end();
350 bool includeAll = st.robs.empty() && (st.dets.empty() || hasHLTSubDet);
351 // includeAll means a stream with full event building or all HLT results included
352 uint32_t sizeWords = includeAll ? totalSizeWords : 0;
353 for (const eformat::SubDetector sd : st.dets) {
354 const std::string& detName = eformat::helper::SubDetectorDictionary.string(sd);
355 if (!contains(sdFromSubDetList, detName)) sdFromSubDetList.push_back(detName);
356 }
357 for (const uint32_t robid : st.robs) {
358 eformat::helper::SourceIdentifier sid(robid);
359 const std::string& detName = sid.human_detector();
360 if (!contains(sdFromRobList, detName)) sdFromRobList.push_back(detName);
361 if (!includeAll && sid.subdetector_id() == eformat::SubDetector::TDAQ_HLT) {
362 if (const int ix = index(resultSizeMap_moduleID, sid.module_id()); ix >= 0) {
363 sizeWords += resultSizeMap_size[ix];
364 }
365 else {
366 ATH_MSG_WARNING("Stream tag " << st.type << "_" << st.name << " declares " << sid.human()
367 << " in ROB list, but the ROBFragment is missing");
368 }
369 }
370 }
371 streamResultSize.push_back(sizeWords*wordsToKiloBytes);
372 for (const eformat::helper::StreamTag& st2 : streamTags) {
373 streamTagCorrA.push_back(mon_streamTypeName(st));
374 streamTagCorrB.push_back(mon_streamTypeName(st2));
375 }
376 }
377
378 // General stream tag monitoring
379 auto monStreamTagsNum = Monitored::Scalar<size_t>("StreamTagsNum", streamTags.size());
380 auto monStreamTags = Monitored::Collection("StreamTags", streamTags, mon_streamTypeName);
381 auto monStreamTagsType = Monitored::Collection("StreamTagsType", streamTags, mon_streamType);
382 auto monStreamTagCorrA = Monitored::Collection("StreamTagCorrA", streamTagCorrA);
383 auto monStreamTagCorrB = Monitored::Collection("StreamTagCorrB", streamTagCorrB);
384 // PEB stream tag monitoring
385 auto monStreamIsPeb = Monitored::Collection("StreamTagIsPeb", streamTags, mon_streamIsPeb);
386 auto monPebRobsNum = Monitored::Collection("StreamTagsPebRobsNum", streamTags, mon_streamPebRobsNum);
387 auto monPebSubDetsNum = Monitored::Collection("StreamTagsPebSubDetsNum", streamTags, mon_streamPebSubDetsNum);
388 auto monSubDetsFromRobList = Monitored::Collection("StreamTagsPebSubDetsFromRobList", sdFromRobList);
389 auto monSubDetsFromSubDetList = Monitored::Collection("StreamTagsPebSubDetsFromSubDetList", sdFromSubDetList);
390 // Result size monitoring
391 auto monResultSizeTotal = Monitored::Scalar<float>("ResultSizeTotal", totalSizeWords*wordsToKiloBytes);
392 auto monResultSizeFullEvFrag = Monitored::Scalar<float>("ResultSizeFullEvFrag", rawEvent.fragment_size_word()*wordsToKiloBytes);
393 auto monResultCollModuleID = Monitored::Collection("ResultModuleID", resultSizeMap_moduleID);
394 auto monResultCollModuleSize = Monitored::Collection("ResultModuleSize", resultSizeMap_size, [](uint32_t sw){return sw*wordsToKiloBytes;});
395 auto monResultSizeByStream = Monitored::Collection("ResultSizeStream", streamResultSize);
396 // Collect all variables
397 Monitored::Group(m_monTool, monStreamTagsNum, monStreamTags, monStreamTagsType, monStreamTagCorrA,
398 monStreamTagCorrB, monStreamIsPeb, monPebRobsNum, monPebSubDetsNum, monSubDetsFromRobList,
399 monSubDetsFromSubDetList, monResultSizeTotal, monResultSizeFullEvFrag, monResultCollModuleID,
400 monResultCollModuleSize, monResultSizeByStream);
401}
static Double_t ss
bool contains(const std::string &s, const std::string &regx)
does a string contain the substring
Definition hcg.cxx:114
str index
Definition DeMoScan.py:362
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
setWord1 uint16_t

◆ printRawEvent()

void TrigByteStreamCnvSvc::printRawEvent ( const EventContext & eventContext) const
private

Print contents of the raw event.

Definition at line 404 of file TrigByteStreamCnvSvc.cxx.

404 {
405 RawEventWrite* re = getRawEvent(eventContext);
406
407 if (!re) {
408 ATH_MSG_WARNING("RawEventWrite pointer is null");
409 return;
410 }
411 std::ostringstream ss;
412 ss << "Dumping header of the FullEventFragment with HLT result:" << std::endl;
413 ss << "--> status = "
414 << printNWordsHex<uint32_t>(re->nstatus(), re->status())
415 << std::endl;
416 ss << "--> source_id = " << printWordHex<uint32_t>(re->source_id()) << std::endl;
417 ss << "--> checksum_type = " << printWordHex<uint32_t>(re->checksum_type()) << std::endl;
418 ss << "--> compression_type = " << printWordHex<uint32_t>(re->compression_type()) << std::endl;
419 ss << "--> compression_level = " << re->compression_level() << std::endl;
420 ss << "--> bc_time_seconds = " << re->bc_time_seconds() << std::endl;
421 ss << "--> bc_time_nanoseconds = " << re->bc_time_nanoseconds() << std::endl;
422 ss << "--> global_id = " << re->global_id() << std::endl;
423 ss << "--> run_type = " << re->run_type() << std::endl;
424 ss << "--> run_no = " << re->run_no() << std::endl;
425 ss << "--> lumi_block = " << re->lumi_block() << std::endl;
426 ss << "--> lvl1_id = " << re->lvl1_id() << std::endl;
427 ss << "--> bc_id = " << re->bc_id() << std::endl;
428 ss << "--> lvl1_trigger_type = " << printWordHex<uint8_t>(re->lvl1_trigger_type()) << std::endl;
429 ss << "--> lvl1_trigger_info = "
430 << printNWordsHex<uint32_t>(re->nlvl1_trigger_info(), re->lvl1_trigger_info())
431 << std::endl;
432 ss << "--> lvl2_trigger_info = "
433 << printNWordsHex<uint32_t>(re->nlvl2_trigger_info(), re->lvl2_trigger_info())
434 << std::endl;
435 ss << "--> event_filter_info = "
436 << printNWordsHex<uint32_t>(re->nevent_filter_info(), re->event_filter_info())
437 << std::endl;
438 ss << "--> hlt_info = "
439 << printNWordsHex<uint32_t>(re->nhlt_info(), re->hlt_info())
440 << std::endl;
441
442 std::vector<eformat::helper::StreamTag> stream_tags;
443 try {
444 eformat::helper::decode(re->nstream_tag(), re->stream_tag(), stream_tags);
445 }
446 catch (const std::exception& ex) {
447 ATH_MSG_ERROR("StreamTag decoding failed, caught an unexpected std::exception " << ex.what());
448 return;
449 }
450 catch (...) {
451 ATH_MSG_ERROR("StreamTag decoding failed, caught an unexpected exception");
452 return;
453 }
454 ss << "--> stream_tags = ";
455 bool first = true;
456 for (const auto& st : stream_tags) {
457 if (first) first=false;
458 else ss << " ";
459 ss << "{" << st.name << ", " << st.type << ", obeysLB=" << st.obeys_lumiblock << ", robs=[";
460 for (const auto& robid : st.robs) ss << printWordHex<uint32_t>(robid) << ", ";
461 ss << "], dets = [";
462 for (const auto& detid : st.dets) ss << printWordHex<uint8_t>(detid) << ", ";
463 ss << "]}" << std::endl;
464 }
465
466 ATH_MSG_DEBUG(ss.str());
467}
bool first
Definition DeMoScan.py:534

◆ setRawEvent()

RawEventWrite * TrigByteStreamCnvSvc::setRawEvent ( std::unique_ptr< RawEventWrite > && rawEventWrite,
const EventContext & eventContext )
private

Store new raw event in the cache.

Definition at line 269 of file TrigByteStreamCnvSvc.cxx.

269 {
270 *(m_rawEventWriteCache.get(eventContext)) = std::move(rawEventWrite);
271 return getRawEvent(eventContext);
272}

◆ storeFullEventAssembler()

StatusCode TrigByteStreamCnvSvc::storeFullEventAssembler ( std::unique_ptr< FullEventAssemblerBase > fea,
const std::string & name )
overrideprotectedvirtual

Definition at line 129 of file TrigByteStreamCnvSvc.cxx.

130 {
131 ATH_MSG_ERROR("Bytestream creation is not supported by TrigByteStreamCnvSvc");
132 return StatusCode::FAILURE;
133}

Member Data Documentation

◆ m_evtStore

ServiceHandle<StoreGateSvc> TrigByteStreamCnvSvc::m_evtStore {this, "EventStore", "StoreGateSvc"}
private

Definition at line 72 of file TrigByteStreamCnvSvc.h.

72{this, "EventStore", "StoreGateSvc"};

◆ m_monTool

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

Definition at line 74 of file TrigByteStreamCnvSvc.h.

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

◆ m_rawEventWriteCache

SG::SlotSpecificObj<std::unique_ptr<RawEventWrite> > TrigByteStreamCnvSvc::m_rawEventWriteCache
private

Definition at line 77 of file TrigByteStreamCnvSvc.h.

◆ m_robDataProviderSvc

ServiceHandle<IROBDataProviderSvc> TrigByteStreamCnvSvc::m_robDataProviderSvc {this, "ROBDataProvider", "ROBDataProviderSvc"}
private

Definition at line 73 of file TrigByteStreamCnvSvc.h.

73{this, "ROBDataProvider", "ROBDataProviderSvc"};

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