62 fmt.options.en_chip_id =
true;
63 fmt.options.en_eos =
true;
64 int container_list_size = 2;
65 auto cont_coll = std::make_unique< PhaseIIPixelRawDataContainerMT>(
m_idHelper->wafer_hash_max(), container_list_size);
72 DecCore<PixelCallbacksPhaseIIRDO::PhaseIIRDOCallback> core(
fmt, cb);
76 std::vector<const eformat::ROBFragment<const uint32_t*>*> ROBs;
85 std::vector<const eformat::ROBFragment<const uint32_t*>*> ROBs_sorted;
86 unsigned int ROBIndex = 0;
87 std::vector<std::pair<uint32_t, uint32_t> > rob_ind_offlineID;
88 for (
const auto& ROB : ROBs){
90 rob_ind_offlineID.emplace_back(std::pair<uint32_t, uint32_t> (ROBIndex, mi.
id.get_identifier32().get_compact()));
94 std::sort(rob_ind_offlineID.begin(), rob_ind_offlineID.end(), [](
auto &left,
auto &right) {
95 return left.second < right.second;
98 for (
const auto& robID : rob_ind_offlineID){
99 ROBs_sorted.emplace_back(ROBs[robID.first]);
107 std::vector<uint64_t> payload64;
108 std::array<std::vector<uint64_t>, 4> split_streams;
110 for (
const auto& ROB : ROBs_sorted){
111 const uint32_t* payload = ROB->rod_data();
112 uint32_t
length = ROB->rod_ndata();
119 payload64.resize(
length / 2);
120 for (uint32_t word = 0; word <
length; word += 2){
121 payload64[word / 2] = ((uint64_t)(payload[word]) << 32) | payload[word + 1];
138 core.decode(payload64);
142 for (
auto &v : split_streams) v.clear();
143 for (
const uint64_t& word64: payload64) split_streams[(word64 >> 61) & 0b11].push_back(word64);
144 for (uint8_t chipID = 0; chipID < 4; chipID++){
145 if (!split_streams[chipID].
empty()){
147 core.decode(split_streams[chipID]);
159 return StatusCode::SUCCESS;