63 fmt.options.en_chip_id =
true;
64 fmt.options.en_eos =
true;
65 int container_list_size = 2;
67 auto cont_coll = std::make_unique< PhaseIIPixelRawDataContainerMT>(
m_idHelper->wafer_hash_max(), container_list_size);
74 DecCore<PixelCallbacksPhaseIIRDO::PhaseIIRDOCallback> core(
fmt, cb);
78 std::vector<const eformat::ROBFragment<const uint32_t*>*> ROBs;
87 std::vector<const eformat::ROBFragment<const uint32_t*>*> ROBs_sorted;
88 unsigned int ROBIndex = 0;
89 std::vector<std::pair<uint32_t, uint32_t> > rob_ind_offlineID;
90 for (
const auto& ROB : ROBs){
92 rob_ind_offlineID.emplace_back(std::pair<uint32_t, uint32_t> (ROBIndex, mi.
id.get_identifier32().get_compact()));
96 std::sort(rob_ind_offlineID.begin(), rob_ind_offlineID.end(), [](
auto &left,
auto &right) {
97 return left.second < right.second;
100 for (
const auto& robID : rob_ind_offlineID){
101 ROBs_sorted.emplace_back(ROBs[robID.first]);
109 std::vector<uint64_t> payload64;
110 std::array<std::vector<uint64_t>, 4> split_streams;
112 for (
const auto& ROB : ROBs_sorted){
113 const uint32_t* payload = ROB->rod_data();
114 uint32_t
length = ROB->rod_ndata();
120 payload64.resize(
length / 2);
121 for (uint32_t word = 0; word <
length; word += 2){
122 payload64[word / 2] = ((uint64_t)(payload[word]) << 32) | payload[word + 1];
139 core.decode(payload64);
143 for (
auto &v : split_streams) v.clear();
144 for (
const uint64_t& word64: payload64) split_streams[(word64 >> 61) & 0b11].push_back(word64);
145 for (uint8_t chipID = 0; chipID < 4; chipID++){
146 if (!split_streams[chipID].
empty()){
148 core.decode(split_streams[chipID]);
160 return StatusCode::SUCCESS;