52 const eformat::helper::SourceIdentifier sid(
m_robIds.value().at(0));
53 auto it = std::find_if(vrobf.begin(), vrobf.end(), [&sid](
const ROBF* rob){return rob->rob_source_id() == sid.code();});
54 if (
it == vrobf.end()) {
55 ATH_MSG_ERROR(
"No CTP ROB fragment with ID 0x" << std::hex << sid.code() << std::dec <<
" was found!");
56 return StatusCode::FAILURE;
58 ATH_MSG_VERBOSE(
"Found CTP ROD with source ID 0x" << MSG::hex << sid.code() << MSG::dec);
65 rob->rod_data( it_data );
66 const uint32_t ndata = rob->rod_ndata();
71 uint32_t headerMarker = eformat::ROD;
72 uint32_t formatVersion = rob->rod_version();
74 uint32_t sourceID = rob->rod_source_id();
79 DataStatus dataStatus;
80 dataStatus.rob_error =
false;
81 dataStatus.rod_error =
false;
82 dataStatus.status_word = 0;
83 dataStatus.status_info = 0;
90 dataStatus.rob_error =
true;
98 dataStatus.rod_error =
true;
104 uint32_t nstatus = rob->rod_nstatus();
113 if(nstatus > 0) dataStatus.status_word =
static_cast<uint32_t>(*status);
116 dataStatus.status_info =
static_cast<uint32_t>(*status);
119 uint32_t errStatus = dataStatus.status_word;
120 uint32_t statInfo = dataStatus.status_info;
125 std::vector<uint32_t> vDataWords;
126 vDataWords.reserve(ndata);
130 ATH_MSG_VERBOSE(
" 0x" << MSG::hex << std::setfill(
'0') << std::setw(8) << word << MSG::dec);
142 auto result = std::make_unique<xAOD::CTPResult>();
143 auto resultAux = std::make_unique<xAOD::CTPResultAuxInfo>();
144 result->setStore(resultAux.get());
150 result->setHeader(headerMarker, formatVersion, sourceID, L1ID);
151 result->setTrailer(ndata, errStatus, statInfo);
153 result->setTurnCounter(CTPfragment::turnCounter(rob));
160 return StatusCode::SUCCESS;