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);
85 const typename T::word_t (*words_ptr)[T::s_bits_per_adc] = frame->adc_words;
86 const uint64_t timestamp = frame->get_timestamp();
90 for (
int t = 0; t < T::s_time_samples_per_frame; t++) {
91 const typename T::word_t *time_sample = *(words_ptr + t);
92 char* cursor = (
char*) time_sample;
99 __m256i regi = _mm256_lddqu_si256((__m256i*)cursor);
102 regi = _mm256_permutevar8x32_epi32(regi, _mm256_setr_epi32(1, 2, 3, 4, 5, 6, 7, 0));
105 std::vector<dunedaq::trgdataformats::TriggerPrimitive> tps =
m_tpg_pipelines[p].process(expanded_subframe);
107 for (
auto tp : tps) {
109 tp_aggr.push_back(tp);
111 cursor += register_alignment / 8;