21 const std::string&
name,
32 ATH_MSG_DEBUG((topoRawMode==ConversionMode::Encoding ?
"Encoding" :
"Decoding") <<
" topoRaw ROB IDs: "
33 << std::hex << std::showbase <<
m_robIds.value() << std::dec);
36 return StatusCode::SUCCESS;
44 auto l1topoContainer = std::make_unique<xAOD::L1TopoRawDataContainer> ();
45 auto l1topoAuxContainer = std::make_unique<xAOD::L1TopoRawDataAuxContainer> ();
46 l1topoContainer->setStore(l1topoAuxContainer.get());
49 for (
const ROBF* rob : vrobf) {
54 ATH_CHECK(l1topo_cont.
record(std::move(l1topoContainer),std::move(l1topoAuxContainer)));
55 ATH_MSG_DEBUG(
"Recorded L1TopoRawDataContainer with key " << l1topo_cont.
key());
57 return StatusCode::SUCCESS;
63 return StatusCode::FAILURE;
67 ATH_MSG_DEBUG(
"executing convert() from ROBFragment to xAOD::L1TopoRawData");
69 uint32_t rodId = rob->rob_source_id();
71 ATH_MSG_DEBUG(
"ROD sub-detector ID: 0x" << MSG::hex << rodId << MSG::dec);
74 bool error_rob(
false);
75 bool error_rod(
false);
77 if (rob->check_rob()) {
85 if (rob->check_rod()) {
96 <<
" rod_version 0x" << rob->rod_version() <<
" \n"
97 <<
" rod_run_no 0x" << MSG::dec
98 << rob->rod_run_no() <<
" \n"
99 <<
" rod_lvl1_id 0x" << MSG::hex
100 << rob->rod_lvl1_id() <<
" \n"
101 <<
" rod_bc_id 0x" << rob->rod_bc_id() <<
" \n"
102 <<
" rod_lvl1_trigger_type 0x" << rob->rod_lvl1_trigger_type()
104 <<
" nchildren 0x" << rob->nchildren() <<
" \n"
109 const uint32_t nstatus = rob->rod_nstatus();
111 std::vector<uint32_t> vStatusWords;
112 vStatusWords.reserve(nstatus);
114 for (
uint32_t i = 0;
i < nstatus; ++
i, ++it_status) {
115 vStatusWords.push_back(
static_cast<uint32_t>(*it_status));
117 << *it_status << MSG::dec);
124 bool error_status(
false);
125 if (vStatusWords.size() == 0) {
128 if (vStatusWords.size() > 0 && vStatusWords.at(0) != 0) {
129 ATH_MSG_WARNING(
"Non-zero first status word, payload may not be valid");
135 const uint32_t ndata = rob->rod_ndata();
139 std::vector<uint32_t> vDataWords;
140 vDataWords.reserve(ndata);
142 vDataWords.push_back(
static_cast<uint32_t>(*it_data));
144 << *it_data << MSG::dec);
160 container->
push_back(std::make_unique<xAOD::L1TopoRawData>());
161 container->
back()->initialize(vDataWords,vStatusWords,
error,rodId);
163 return StatusCode::SUCCESS;