41 output_buffer.insert(output_buffer.end(), temp_buffer.begin(), temp_buffer.end());
45 int last_tp_in_ta = (output_buffer_size == output_buffer.size()) ? 0 : 1;
48 if (m_timing_file_name.empty())
50 time_diffs.push_back(time_diff);
53 if (!std::is_same<T, dunedaq::trgdataformats::TriggerPrimitive>::value)
56 tp_time_start.push_back(input.time_start);
57 tp_adc_integral.push_back(input.adc_integral);
58 is_last_tp_in_ta.push_back(last_tp_in_ta);
62 if (!m_timing_file_name.empty()) {
64 timings.open(m_timing_file_name, std::ios::out | std::ios::app);
65 for (
size_t i = 0; i < time_diffs.size(); i++) {
66 if (std::is_same<T, dunedaq::trgdataformats::TriggerPrimitive>::value) {
67 timings << tp_time_start[i] <<
"," << tp_adc_integral[i] <<
","
68 << time_diffs[i] <<
"," << is_last_tp_in_ta[i] <<
"\n";
71 timings << time_diffs[i] <<
"\n";
78 size_t payload_size(0);
79 for (
const U& output : output_buffer) {
85 if (payload_size == 0)
89 char*
payload =
static_cast<char*
>(malloc(payload_size));
90 size_t payload_offset(0);
91 for (
const U& output : output_buffer) {
97 std::unique_ptr<daqdataformats::Fragment> frag
98 = std::make_unique<daqdataformats::Fragment>(
static_cast<void*
>(payload), payload_size);
100 free(
static_cast<void*
>(payload));
102 m_last_output_buffer = output_buffer;
106template <
typename T,
typename U,
typename V>
109 auto time_start = std::chrono::steady_clock::now();
110 (*m_maker)(input, outputs);
111 auto time_end = std::chrono::steady_clock::now();
117template <
typename T,
typename U,
typename V>
120 return m_last_output_buffer;