80 std::vector<dunedaq::trgdataformats::TriggerPrimitive>
operator()(
const T* frame) {
82 std::vector<dunedaq::trgdataformats::TriggerPrimitive> tp_aggr;
83 tp_aggr.reserve(T::s_num_channels * T::s_time_samples_per_frame / 2);
86 const typename T::word_t*
const words_base = &frame->adc_words[0][0];
87 constexpr int row_stride = T::s_bits_per_adc;
88 const uint64_t timestamp = frame->get_timestamp();
92 for (
int t = 0; t < T::s_time_samples_per_frame; t++) {
94 const typename T::word_t *time_sample = words_base + t * row_stride;
95 const char* cursor =
reinterpret_cast<const char*
>(time_sample);
105 __m256i regi = _mm256_lddqu_si256(
reinterpret_cast<const __m256i*
>(cursor));
108 regi = _mm256_permutevar8x32_epi32(regi, _mm256_setr_epi32(1, 2, 3, 4, 5, 6, 7, 0));
111 std::vector<dunedaq::trgdataformats::TriggerPrimitive> tps =
m_tpg_pipelines[p].process(expanded_subframe);
113 for (
auto tp : tps) {
114 const auto offset_samples =
static_cast<float>(t - tp.samples_over_threshold);
117 tp_aggr.push_back(tp);
120 cursor += register_alignment / 8;