8 #include "GaudiKernel/GenericAddress.h"
9 #include "GaudiKernel/MsgStream.h"
10 #include "GaudiKernel/ISvcLocator.h"
12 #include "eformat/SourceIdentifier.h"
17 typedef std::map<uint32_t, ROBF*>
ROBMAP;
21 base_class(
name,svcloc),
22 m_bsOutputStreamName(
name)
35 return(StatusCode::SUCCESS);
42 eformat::helper::SourceIdentifier
id = eformat::helper::SourceIdentifier(source_id);
43 if (
id.subdetector_id() == eformat::TDAQ_LVL2 ||
id.subdetector_id() == eformat::TDAQ_EVENT_FILTER) {
44 return(eformat::helper::SourceIdentifier(
id.subdetector_id(), 0).
code());
55 ATH_MSG_DEBUG(
"original BS size = " << 4 * orgEvent->fragment_size_word());
56 ATH_MSG_DEBUG(
"athena BS size = " << 4 * newEvent->fragment_size_word());
60 const size_t MAX_ROBFRAGMENTS = 2048;
63 size_t orgrobcount = orgEvent->children(orgRobF, MAX_ROBFRAGMENTS);
64 if (orgrobcount == MAX_ROBFRAGMENTS) {
68 size_t newrobcount = newEvent->children(newRobF,MAX_ROBFRAGMENTS);
69 if (newrobcount == MAX_ROBFRAGMENTS) {
76 for (
size_t irob = 0; irob < orgrobcount; ++irob) {
79 ATH_MSG_DEBUG(
"original ROBFragment, src ID = " << std::hex << rob->source_id());
82 for (
size_t irob = 0; irob < newrobcount; ++irob) {
84 ROBMAP::const_iterator
it = robsToAdd.find(
reducedROBid(rob->source_id()));
85 if (
it != robsToAdd.end()) {
87 ATH_MSG_DEBUG(
"overwriting ROBFragment with src ID = " << std::hex << rob->source_id());
90 ATH_MSG_DEBUG(
"new ROBFragment, src ID = " << std::hex << rob->source_id());
98 mergedEventWrite->source_id(
event->source_id());
99 mergedEventWrite->bc_time_seconds(
event->bc_time_seconds());
100 mergedEventWrite->bc_time_nanoseconds(
event->bc_time_nanoseconds());
101 mergedEventWrite->global_id(
event->global_id());
102 mergedEventWrite->run_type(
event->run_type());
103 mergedEventWrite->run_no(
event->run_no());
104 mergedEventWrite->lumi_block(
event->lumi_block());
105 mergedEventWrite->lvl1_id(
event->lvl1_id());
106 mergedEventWrite->bc_id(
event->bc_id());
107 mergedEventWrite->lvl1_trigger_type(
event->lvl1_trigger_type());
110 mergedEventWrite->status(
event->nstatus(),
tmp);
111 event->lvl1_trigger_info(
tmp);
112 mergedEventWrite->lvl1_trigger_info(
event->nlvl1_trigger_info(),
tmp);
113 event->lvl2_trigger_info(
tmp);
114 mergedEventWrite->lvl2_trigger_info(
event->nlvl2_trigger_info(),
tmp);
115 event->event_filter_info(
tmp);
116 mergedEventWrite->event_filter_info(
event->nevent_filter_info(),
tmp);
117 event->stream_tag(
tmp);
118 mergedEventWrite->stream_tag(
event->nstream_tag(),
tmp);
119 mergedEventWrite->checksum_type(
event->checksum_type());
122 mergedEventWrite->append(
it->second);
125 uint32_t rawSize = mergedEventWrite->size_word();
128 if (
count != rawSize) {
135 delete it->second;
it->second = 0;
137 delete mergedEventWrite; mergedEventWrite = 0;
139 if (
sc != StatusCode::SUCCESS) {
146 ATH_MSG_FATAL(
name() <<
" does not implement the context-aware putEvent method");