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;
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()) {
80 }
catch (std::exception
const& ex) {
85 if (rob->check_rod()) {
88 }
catch (std::exception
const& ex) {
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);
141 for (uint32_t i = 0; i < ndata; ++i, ++it_data) {
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;