104 xpu::scoped_timer t_(fles::to_string(subsystem));
111 auto& digisOut = std::get<0>(out);
112 auto& monitorOut = std::get<1>(out);
113 auto& auxOut = std::get<2>(out);
117 std::vector<std::vector<Digi>> msDigis(numMs);
118 monitorOut.msMonitor.resize(numMs);
119 auxOut.msAux.resize(numMs);
121 xpu::t_add_bytes(msData.monitor.sizeBytesIn);
123 xpu::push_timer(
"Unpack");
124 xpu::t_add_bytes(msData.monitor.sizeBytesIn);
126 for (
size_t i = 0; i < numMs; i++) {
127 auto& msDesc = msData.msDesc[i];
131 if (!
Contains(legalEqIds, msDesc.eq_id)) {
132 L_(error) <<
"Invalid equip id " << std::hex <<
int{msDesc.eq_id} << std::dec <<
" for subsystem "
134 monitorOut.errInvalidEqId++;
137 L_(error) <<
"Invalid system version " << std::hex <<
int{msDesc.sys_ver} << std::dec <<
" for subsystem "
139 monitorOut.errInvalidSysVer++;
144 auto result = (*
algo->second)(msData.msContent[i], msData.msDesc[i], ts.start_time());
145 msDigis[i] = std::move(std::get<0>(result));
146 monitorOut.msMonitor[i] = std::move(std::get<1>(result));
147 auxOut.msAux[i] = std::move(std::get<2>(result));
151 xpu::push_timer(
"Resize");
152 size_t nDigisTotal = 0;
153 for (
const auto& digis : msDigis) {
154 nDigisTotal += digis.size();
156 digisOut.resize(nDigisTotal);
157 monitorOut.sizeBytesOut = nDigisTotal *
sizeof(Digi);
160 xpu::push_timer(
"Merge");
161 xpu::t_add_bytes(monitorOut.sizeBytesOut);
163 for (
size_t i = 0; i < numMs; i++) {
165 for (
size_t x = 0;
x < i;
x++)
166 offset += msDigis[
x].
size();
167 std::copy(msDigis[i].begin(), msDigis[i].end(), digisOut.begin() + offset);
171 xpu::push_timer(
"Sort");
172 xpu::t_add_bytes(monitorOut.sizeBytesOut);