DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType > Class Template Reference

#include <SNBDataHandlingModel.hpp>

Inheritance diagram for dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >:
[legend]
Collaboration diagram for dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >:
[legend]

Public Types

using RDT = ReadoutType
using RHT = RequestHandlerType
using LBT = LatencyBufferType
using RPT = RawDataProcessorType
using IDT = InputDataType
using timestamp_t = std::uint64_t
Public Types inherited from dunedaq::opmonlib::MonitorableObject
using NodePtr = std::weak_ptr<MonitorableObject>
using NewNodePtr = std::shared_ptr<MonitorableObject>
using ElementId = std::string

Public Member Functions

 SNBDataHandlingModel (std::atomic< bool > &run_marker)
virtual ~SNBDataHandlingModel ()=default
void init (const appmodel::DataHandlerModule *modconf)
 Forward calls from the appfwk.
void conf (const appfwk::DAQModule::CommandData_t &args)
void scrap (const appfwk::DAQModule::CommandData_t &args)
void start (const appfwk::DAQModule::CommandData_t &args)
void stop (const appfwk::DAQModule::CommandData_t &args)
void record (const appfwk::DAQModule::CommandData_t &args) override
Public Member Functions inherited from dunedaq::datahandlinglibs::DataHandlingConcept
 DataHandlingConcept ()
virtual ~DataHandlingConcept ()
 DataHandlingConcept (const DataHandlingConcept &)=delete
 DataHandlingConcept is not copy-constructible.
DataHandlingConceptoperator= (const DataHandlingConcept &)=delete
 DataHandlingConcept is not copy-assginable.
 DataHandlingConcept (DataHandlingConcept &&)=delete
 DataHandlingConcept is not move-constructible.
DataHandlingConceptoperator= (DataHandlingConcept &&)=delete
 DataHandlingConcept is not move-assignable.
Public Member Functions inherited from dunedaq::opmonlib::MonitorableObject
 MonitorableObject (const MonitorableObject &)=delete
MonitorableObjectoperator= (const MonitorableObject &)=delete
 MonitorableObject (MonitorableObject &&)=delete
MonitorableObjectoperator= (MonitorableObject &&)=delete
virtual ~MonitorableObject ()=default
auto get_opmon_id () const noexcept
auto get_opmon_level () const noexcept

Public Attributes

std::function< void(IDT &&)> m_consume_callback

Static Public Attributes

static constexpr timestamp_t ns = 1
static constexpr timestamp_t us = 1000 * ns
static constexpr timestamp_t ms = 1000 * us
static constexpr timestamp_t s = 1000 * ms

Protected Types

using metric_t = dunedaq::datahandlinglibs::opmon::DataHandlerInfo
using num_payload_t = std::remove_const<std::invoke_result<decltype(&metric_t::num_payloads), metric_t>::type>::type
using sum_payload_t = std::remove_const<std::invoke_result<decltype(&metric_t::sum_payloads), metric_t>::type>::type
using num_request_t = std::remove_const<std::invoke_result<decltype(&metric_t::num_requests), metric_t>::type>::type
using sum_request_t = std::remove_const<std::invoke_result<decltype(&metric_t::sum_requests), metric_t>::type>::type
using rawq_timeout_count_t
using num_lb_insert_failures_t
using num_post_processing_delay_max_waits_t
using request_receiver_ct = iomanager::ReceiverConcept<dfmessages::DataRequest>
using timesync_sender_ct = iomanager::SenderConcept<dfmessages::TimeSync>

Protected Member Functions

void process_item (RDT &&payload)
void transform_and_process (IDT &&payload)
void consume_callback (IDT &&payload)
void run_timesync ()
 Function that will be run in its own thread and sends periodic timesync messages by pushing them to the connection.
void run_consume ()
 Function that will be run in its own thread to read the raw packets from the connection and add them to the LB.
void run_postprocess_scheduler ()
folly::coro::Task< void > postprocess_schedule ()
void dispatch_requests (dfmessages::DataRequest &data_request)
virtual std::vector< RDTtransform_payload (IDT &original) const
virtual void generate_opmon_data () override
Protected Member Functions inherited from dunedaq::opmonlib::MonitorableObject
 MonitorableObject ()=default
void register_node (ElementId name, NewNodePtr)
void publish (google::protobuf::Message &&, CustomOrigin &&co={}, OpMonLevel l=to_level(EntryOpMonLevel::kDefault)) const noexcept

Protected Attributes

std::atomic< bool > & m_run_marker
bool m_fake_trigger
bool m_generate_timesync = false
int m_current_fake_trigger_id
daqdataformats::SourceID m_sourceid
daqdataformats::run_number_t m_run_number
uint64_t m_processing_delay_ticks
uint64_t m_post_processing_delay_min_wait
uint64_t m_post_processing_delay_max_wait
std::atomic< num_payload_tm_num_payloads { 0 }
std::atomic< sum_payload_tm_sum_payloads { 0 }
std::atomic< num_request_tm_num_requests { 0 }
std::atomic< sum_request_tm_sum_requests { 0 }
std::atomic< rawq_timeout_count_tm_rawq_timeout_count { 0 }
std::atomic< num_lb_insert_failures_tm_num_lb_insert_failures { 0 }
std::atomic< num_post_processing_delay_max_waits_tm_num_post_processing_delay_max_waits { 0 }
std::atomic< int > m_stats_packet_count { 0 }
const appmodel::DataMoveCallbackConfm_raw_data_callback_conf
std::shared_ptr< request_receiver_ctm_data_request_receiver
std::shared_ptr< timesync_sender_ctm_timesync_sender
utilities::ReusableThread m_timesync_thread
std::string m_timesync_connection_name
utilities::ReusableThread m_postprocess_scheduler_thread
folly::coro::Baton m_baton
std::unique_ptr< folly::ThreadWheelTimekeeper > m_timekeeper
std::shared_ptr< LatencyBufferType > m_latency_buffer_impl
std::shared_ptr< RawDataProcessorType > m_raw_processor_impl
std::shared_ptr< RequestHandlerType > m_request_handler_impl
bool m_request_handler_supports_cutoff_timestamp
std::unique_ptr< datahandlinglibs::FrameErrorRegistrym_error_registry
std::chrono::time_point< std::chrono::high_resolution_clock > m_t0

Additional Inherited Members

Static Public Member Functions inherited from dunedaq::opmonlib::MonitorableObject
static bool publishable_metric (OpMonLevel entry, OpMonLevel system) noexcept

Detailed Description

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
class dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >

Definition at line 71 of file SNBDataHandlingModel.hpp.

Member Typedef Documentation

◆ IDT

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
using dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::IDT = InputDataType

Definition at line 79 of file SNBDataHandlingModel.hpp.

◆ LBT

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
using dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::LBT = LatencyBufferType

Definition at line 77 of file SNBDataHandlingModel.hpp.

◆ metric_t

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
using dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::metric_t = dunedaq::datahandlinglibs::opmon::DataHandlerInfo
protected

Definition at line 176 of file SNBDataHandlingModel.hpp.

◆ num_lb_insert_failures_t

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
using dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::num_lb_insert_failures_t
protected
Initial value:
std::remove_const<std::invoke_result<decltype(&metric_t::num_lb_insert_failures), metric_t>::type>::type
dunedaq::datahandlinglibs::opmon::DataHandlerInfo metric_t

Definition at line 183 of file SNBDataHandlingModel.hpp.

◆ num_payload_t

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
using dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::num_payload_t = std::remove_const<std::invoke_result<decltype(&metric_t::num_payloads), metric_t>::type>::type
protected

Definition at line 177 of file SNBDataHandlingModel.hpp.

◆ num_post_processing_delay_max_waits_t

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
using dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::num_post_processing_delay_max_waits_t
protected
Initial value:
std::remove_const<

Definition at line 185 of file SNBDataHandlingModel.hpp.

◆ num_request_t

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
using dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::num_request_t = std::remove_const<std::invoke_result<decltype(&metric_t::num_requests), metric_t>::type>::type
protected

Definition at line 179 of file SNBDataHandlingModel.hpp.

◆ rawq_timeout_count_t

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
using dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::rawq_timeout_count_t
protected
Initial value:
std::remove_const<std::invoke_result<decltype(&metric_t::num_data_input_timeouts), metric_t>::type>::type

Definition at line 181 of file SNBDataHandlingModel.hpp.

◆ RDT

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
using dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::RDT = ReadoutType

Definition at line 75 of file SNBDataHandlingModel.hpp.

◆ request_receiver_ct

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
using dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::request_receiver_ct = iomanager::ReceiverConcept<dfmessages::DataRequest>
protected

Definition at line 201 of file SNBDataHandlingModel.hpp.

◆ RHT

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
using dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::RHT = RequestHandlerType

Definition at line 76 of file SNBDataHandlingModel.hpp.

◆ RPT

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
using dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::RPT = RawDataProcessorType

Definition at line 78 of file SNBDataHandlingModel.hpp.

◆ sum_payload_t

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
using dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::sum_payload_t = std::remove_const<std::invoke_result<decltype(&metric_t::sum_payloads), metric_t>::type>::type
protected

Definition at line 178 of file SNBDataHandlingModel.hpp.

◆ sum_request_t

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
using dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::sum_request_t = std::remove_const<std::invoke_result<decltype(&metric_t::sum_requests), metric_t>::type>::type
protected

Definition at line 180 of file SNBDataHandlingModel.hpp.

◆ timestamp_t

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
using dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::timestamp_t = std::uint64_t

Definition at line 82 of file SNBDataHandlingModel.hpp.

◆ timesync_sender_ct

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
using dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::timesync_sender_ct = iomanager::SenderConcept<dfmessages::TimeSync>
protected

Definition at line 210 of file SNBDataHandlingModel.hpp.

Constructor & Destructor Documentation

◆ SNBDataHandlingModel()

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::SNBDataHandlingModel ( std::atomic< bool > & run_marker)
inlineexplicit

◆ ~SNBDataHandlingModel()

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
virtual dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::~SNBDataHandlingModel ( )
virtualdefault

Member Function Documentation

◆ conf()

template<class RDT, class RHT, class LBT, class RPT, class IDT>
void dunedaq::snbmodules::SNBDataHandlingModel< RDT, RHT, LBT, RPT, IDT >::conf ( const appfwk::DAQModule::CommandData_t & args)
virtual

Implements dunedaq::datahandlinglibs::DataHandlingConcept.

Definition at line 83 of file SNBDataHandlingModel.hxx.

84{
85 // Configure and register consume callback
88
89 // Register callback
92
93 // Configure threads:
95 m_timesync_thread.set_name("timesync", m_sourceid.id);
96 }
98 m_postprocess_scheduler_thread.set_name("pprocsched", m_sourceid.id);
100 }
101}
static std::shared_ptr< DataMoveCallbackRegistry > get()
const appmodel::DataMoveCallbackConf * m_raw_data_callback_conf
std::unique_ptr< folly::ThreadWheelTimekeeper > m_timekeeper

◆ consume_callback()

template<class RDT, class RHT, class LBT, class RPT, class IDT>
void dunedaq::snbmodules::SNBDataHandlingModel< RDT, RHT, LBT, RPT, IDT >::consume_callback ( IDT && payload)
protected

Definition at line 213 of file SNBDataHandlingModel.hxx.

◆ dispatch_requests()

template<class RDT, class RHT, class LBT, class RPT, class IDT>
void dunedaq::snbmodules::SNBDataHandlingModel< RDT, RHT, LBT, RPT, IDT >::dispatch_requests ( dfmessages::DataRequest & data_request)
protected

Definition at line 428 of file SNBDataHandlingModel.hxx.

429{
430 if (data_request.request_information.component != m_sourceid) {
433 return;
434 }
435 TLOG_DEBUG(TLVL_QUEUE_POP) << "Received DataRequest" << " for trig/seq_number " << data_request.trigger_number << "."
436 << data_request.sequence_number << ", runno " << data_request.run_number
437 << ", trig timestamp " << data_request.trigger_timestamp
438 << ", SourceID: " << data_request.request_information.component << ", window begin/end "
439 << data_request.request_information.window_begin << "/"
440 << data_request.request_information.window_end
441 << ", dest: " << data_request.data_destination;
442 m_request_handler_impl->issue_request(data_request);
445}
std::shared_ptr< RequestHandlerType > m_request_handler_impl
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:112
void error(const Issue &issue)
Definition ers.hpp:92

◆ generate_opmon_data()

template<class RDT, class RHT, class LBT, class RPT, class IDT>
void dunedaq::snbmodules::SNBDataHandlingModel< RDT, RHT, LBT, RPT, IDT >::generate_opmon_data ( )
overrideprotectedvirtual

Hook for customisable pubblication. The function can throw, exception will be caught by the monitoring thread

Reimplemented from dunedaq::opmonlib::MonitorableObject.

Definition at line 165 of file SNBDataHandlingModel.hxx.

166{
168 ri.set_sum_payloads(m_sum_payloads.load());
169 ri.set_num_payloads(m_num_payloads.exchange(0));
170
171 ri.set_num_data_input_timeouts(m_rawq_timeout_count.exchange(0));
172
174 int new_packets = m_stats_packet_count.exchange(0);
176 m_t0 = now;
177
178 // 08-May-2025, KAB: added a message to warn users when latency buffer inserts are failing.
183 }
184
185 ri.set_rate_payloads_consumed(new_packets / seconds / 1000.);
186 ri.set_num_lb_insert_failures(local_num_lb_insert_failures);
187 ri.set_sum_requests(m_sum_requests.load());
188 ri.set_num_requests(m_num_requests.exchange(0));
189 ri.set_num_post_processing_delay_max_waits(m_num_post_processing_delay_max_waits.exchange(0));
190 ri.set_last_daq_timestamp(m_raw_processor_impl->get_last_daq_time());
191 ri.set_newest_timestamp(m_raw_processor_impl->get_last_daq_time());
192 ri.set_oldest_timestamp(m_request_handler_impl->get_oldest_time());
193
194 this->publish(std::move(ri));
195}
void publish(google::protobuf::Message &&, CustomOrigin &&co={}, OpMonLevel l=to_level(EntryOpMonLevel::kDefault)) const noexcept
std::atomic< num_lb_insert_failures_t > m_num_lb_insert_failures
std::atomic< rawq_timeout_count_t > m_rawq_timeout_count
std::chrono::time_point< std::chrono::high_resolution_clock > m_t0
std::atomic< num_post_processing_delay_max_waits_t > m_num_post_processing_delay_max_waits
void warning(const Issue &issue)
Definition ers.hpp:126

◆ init()

template<class RDT, class RHT, class LBT, class RPT, class IDT>
void dunedaq::snbmodules::SNBDataHandlingModel< RDT, RHT, LBT, RPT, IDT >::init ( const appmodel::DataHandlerModule * mcfg)
virtual

Forward calls from the appfwk.

Implements dunedaq::datahandlinglibs::DataHandlingConcept.

Definition at line 13 of file SNBDataHandlingModel.hxx.

14{
15 // Setup request queues
16 // setup_request_queues(mcfg);
17 try {
18 for (auto input : mcfg->get_inputs()) {
19 if (input->get_data_type() == "DataRequest") {
21 }
22 }
23 for (auto output : mcfg->get_outputs()) {
24 if (output->get_data_type() == "TimeSync") {
28 break;
29 }
30 }
31 } catch (const ers::Issue& excpt) {
32 throw datahandlinglibs::ResourceQueueError(ERS_HERE, "raw_input or frag_output", "SNBDataHandlingModel", excpt);
33 }
34
35 m_raw_data_callback_conf = mcfg->get_raw_data_callback();
36
37 // Instantiate functionalities
39 m_error_registry->set_ers_metadata("DLH of SourceID[" + std::to_string(mcfg->get_source_id()) + "] ");
40 m_latency_buffer_impl.reset(new LBT());
41 m_raw_processor_impl.reset(new RPT(m_error_registry, mcfg->get_post_processing_enabled()));
43
44 register_node(mcfg->get_module_configuration()->get_latency_buffer()->UID(), m_latency_buffer_impl);
45 register_node(mcfg->get_module_configuration()->get_data_processor()->UID(), m_raw_processor_impl);
46 register_node(mcfg->get_module_configuration()->get_request_handler()->UID(), m_request_handler_impl);
47
48 // m_request_handler_impl->init(args);
49 // m_raw_processor_impl->init(args);
51 m_fake_trigger = false;
52 m_sourceid.id = mcfg->get_source_id();
53 m_sourceid.subsystem = RDT::subsystem;
54 m_processing_delay_ticks = mcfg->get_module_configuration()->get_post_processing_delay_ticks();
55 m_post_processing_delay_min_wait = mcfg->get_module_configuration()->get_post_processing_delay_min_wait();
56 m_post_processing_delay_max_wait = mcfg->get_module_configuration()->get_post_processing_delay_max_wait();
57
63 "Queue buffers (FixedRateQueue, BinarySearchQueue) expect in-order data and must use "
64 "post_processing_delay_ticks = 0."));
65 }
66 }
67
68 // Configure implementations:
70 // Configure the latency buffer before the request handler so the request handler can check for alignment
71 // restrictions
72 try {
73 m_latency_buffer_impl->conf(mcfg->get_module_configuration()->get_latency_buffer());
74 } catch (const std::bad_alloc& be) {
76 datahandlinglibs::ConfigurationError(ERS_HERE, m_sourceid, "Latency Buffer can't be allocated with size!"));
77 }
79}
void register_node(ElementId name, NewNodePtr)
std::shared_ptr< timesync_sender_ct > m_timesync_sender
std::shared_ptr< request_receiver_ct > m_data_request_receiver
std::unique_ptr< datahandlinglibs::FrameErrorRegistry > m_error_registry
static std::shared_ptr< iomanager::SenderConcept< Datatype > > get_iom_sender(iomanager::ConnectionId const &id)
static std::shared_ptr< iomanager::ReceiverConcept< Datatype > > get_iom_receiver(iomanager::ConnectionId const &id)

◆ postprocess_schedule()

template<class RDT, class RHT, class LBT, class RPT, class IDT>
folly::coro::Task< void > dunedaq::snbmodules::SNBDataHandlingModel< RDT, RHT, LBT, RPT, IDT >::postprocess_schedule ( )
protected

Definition at line 277 of file SNBDataHandlingModel.hxx.

278{
279
280 // TLOG_DEBUG(TLVL_WORK_STEPS) << "Postprocess schedule coroutine started...";
283 bool first_cycle = true;
288
289 // Deferral of the post processing, to allow elements being reordered in the LB
290 // Basically, find data older than a certain timestamp and process all data since the last post-processed element up
291 // to that value
292 while (m_run_marker.load()) {
293 try {
294 co_await folly::coro::timeout(
295 m_baton.operator co_await(), std::chrono::milliseconds{ m_post_processing_delay_max_wait }, m_timekeeper.get());
296 m_baton.reset();
297 } catch (const folly::FutureTimeout&) {
299 }
300
301 if (m_latency_buffer_impl->occupancy() == 0) {
302 continue;
303 }
304
307
308 if (static_cast<uint64_t>(milliseconds.count()) <= m_post_processing_delay_min_wait) {
309 continue;
310 }
311
313
314 // Get the LB boundaries
315 auto tail = m_latency_buffer_impl->back();
316 newest_ts = tail->get_timestamp();
317
318 if (first_cycle) {
319 auto head = m_latency_buffer_impl->front();
320 processed_element.set_timestamp(head->get_timestamp());
321 first_cycle = false;
322 // TLOG() << "***** First pass post processing *****";
323 }
324
325 if (newest_ts - processed_element.get_timestamp() > m_processing_delay_ticks) {
327 auto start_iter = m_latency_buffer_impl->lower_bound(processed_element, false);
328 processed_element.set_timestamp(end_win_ts);
329 auto end_iter = m_latency_buffer_impl->lower_bound(processed_element, false);
330
331 for (auto it = start_iter; it != end_iter; ++it) {
332 m_raw_processor_impl->postprocess_item(&(*it));
336 }
337 }
338 }
339}

◆ process_item()

template<class RDT, class RHT, class LBT, class RPT, class IDT>
void dunedaq::snbmodules::SNBDataHandlingModel< RDT, RHT, LBT, RPT, IDT >::process_item ( RDT && payload)
protected

Definition at line 220 of file SNBDataHandlingModel.hxx.

221{
222 m_raw_processor_impl->preprocess_item(&payload);
224 int64_t diff1 = payload.get_timestamp() - m_request_handler_impl->get_cutoff_timestamp();
225 if (diff1 <= 0) {
226 // m_request_handler_impl->increment_tardy_tp_count();
230 payload.get_timestamp(),
231 m_request_handler_impl->get_cutoff_timestamp(),
232 diff1,
233 (static_cast<double>(diff1) / 62500.0)));
234 }
235 }
236 while (m_latency_buffer_impl->isFull()) {
238 }
239
240 const RDT* written = nullptr;
243 // TLOG_DEBUG(TLVL_TAKE_NOTE) << "***ERROR: Latency buffer insert failed! (Payload timestamp=" << payload.get_timestamp() << ")";
245 return;
246 }
248 } else {
249 const auto [returned, result] = m_latency_buffer_impl->write_and_return(std::move(payload));
250 if (!result) {
251 // TLOG_DEBUG(TLVL_TAKE_NOTE) << "***ERROR: Latency buffer insert failed! (Payload timestamp=" << payload.get_timestamp() << ")";
253 return;
254 }
256 }
257
258 if (m_processing_delay_ticks == 0) {
259 m_raw_processor_impl->postprocess_item(written);
263 } else {
264 m_baton.post();
265 }
266}

◆ record()

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
void dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::record ( const appfwk::DAQModule::CommandData_t & args)
inlineoverridevirtual

◆ run_consume()

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
void dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::run_consume ( )
inlineprotectedvirtual

Function that will be run in its own thread to read the raw packets from the connection and add them to the LB.

Implements dunedaq::datahandlinglibs::DataHandlingConcept.

Definition at line 144 of file SNBDataHandlingModel.hpp.

144{}

◆ run_postprocess_scheduler()

template<class RDT, class RHT, class LBT, class RPT, class IDT>
void dunedaq::snbmodules::SNBDataHandlingModel< RDT, RHT, LBT, RPT, IDT >::run_postprocess_scheduler ( )
protected

Definition at line 270 of file SNBDataHandlingModel.hxx.

◆ run_timesync()

template<class RDT, class RHT, class LBT, class RPT, class IDT>
void dunedaq::snbmodules::SNBDataHandlingModel< RDT, RHT, LBT, RPT, IDT >::run_timesync ( )
protectedvirtual

Function that will be run in its own thread and sends periodic timesync messages by pushing them to the connection.

Implements dunedaq::datahandlinglibs::DataHandlingConcept.

Definition at line 343 of file SNBDataHandlingModel.hxx.

344{
345 TLOG_DEBUG(TLVL_WORK_STEPS) << "TimeSync thread started...";
346 m_num_requests = 0;
347 m_sum_requests = 0;
350 auto once_per_run = true;
351 size_t zero_timestamp_count = 0;
352 size_t duplicate_timestamp_count = 0;
353 size_t total_timestamp_count = 0;
354 while (m_run_marker.load()) {
355 try {
356 auto timesyncmsg = dfmessages::TimeSync(m_raw_processor_impl->get_last_daq_time());
358 // daq_time is zero for the first received timesync, and may
359 // be the same as the previous daq_time if the data has
360 // stopped flowing. In both cases we don't send the TimeSync
361 if (timesyncmsg.daq_time != 0 && timesyncmsg.daq_time != prev_timestamp) {
362 prev_timestamp = timesyncmsg.daq_time;
363 timesyncmsg.run_number = m_run_number;
364 timesyncmsg.sequence_number = ++msg_seqno;
365 timesyncmsg.source_id = m_sourceid.id;
366 TLOG_DEBUG(TLVL_TIME_SYNCS) << "New timesync: daq=" << timesyncmsg.daq_time
367 << " wall=" << timesyncmsg.system_time << " run=" << timesyncmsg.run_number
368 << " seqno=" << timesyncmsg.sequence_number
369 << " source_id=" << timesyncmsg.source_id;
370 try {
373 } catch (ers::Issue& excpt) {
376 }
377
378 if (m_fake_trigger) {
381 dr.trigger_number = m_current_fake_trigger_id;
382 dr.trigger_timestamp = timesyncmsg.daq_time > 500 * us ? timesyncmsg.daq_time - 500 * us : 0;
383 auto width = 300000;
384 uint offset = 100;
385 dr.request_information.window_begin = dr.trigger_timestamp > offset ? dr.trigger_timestamp - offset : 0;
386 dr.request_information.window_end = dr.request_information.window_begin + width;
387 dr.request_information.component = m_sourceid;
388 dr.data_destination = "data_fragments_q";
389 TLOG_DEBUG(TLVL_WORK_STEPS) << "Issuing fake trigger based on timesync. " << " ts=" << dr.trigger_timestamp
390 << " window_begin=" << dr.request_information.window_begin
391 << " window_end=" << dr.request_information.window_end;
392 m_request_handler_impl->issue_request(dr);
393
396 }
397 } else {
398 if (timesyncmsg.daq_time == 0) {
400 }
401 if (timesyncmsg.daq_time == prev_timestamp) {
403 }
404 if (once_per_run) {
405 TLOG() << "Timesync with DAQ time 0 won't be sent out as it's an invalid sync.";
406 once_per_run = false;
407 }
408 }
409 } catch (const iomanager::TimeoutExpired& excpt) {
410 // ++m_timesyncqueue_timeout;
411 }
412 // Split up the 100ms sleep into 10 sleeps of 10ms, so we respond to "stop" quicker
413 for (size_t i = 0; i < 10; ++i) {
415 if (!m_run_marker.load()) {
416 break;
417 }
418 }
419 }
420 once_per_run = true;
421 TLOG_DEBUG(TLVL_WORK_STEPS) << "TimeSync thread joins... (timestamp count, zero/same/total = "
423 << total_timestamp_count << ")";
424}
#define TLOG(...)
Definition macro.hpp:22

◆ scrap()

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
void dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::scrap ( const appfwk::DAQModule::CommandData_t & args)
inlinevirtual

Implements dunedaq::datahandlinglibs::DataHandlingConcept.

Definition at line 108 of file SNBDataHandlingModel.hpp.

109 {
113 }

◆ start()

template<class RDT, class RHT, class LBT, class RPT, class IDT>
void dunedaq::snbmodules::SNBDataHandlingModel< RDT, RHT, LBT, RPT, IDT >::start ( const appfwk::DAQModule::CommandData_t & args)
virtual

◆ stop()

template<class RDT, class RHT, class LBT, class RPT, class IDT>
void dunedaq::snbmodules::SNBDataHandlingModel< RDT, RHT, LBT, RPT, IDT >::stop ( const appfwk::DAQModule::CommandData_t & args)
virtual

Implements dunedaq::datahandlinglibs::DataHandlingConcept.

Definition at line 138 of file SNBDataHandlingModel.hxx.

139{
140 TLOG_DEBUG(TLVL_WORK_STEPS) << "Stoppping threads...";
141
142 // Stop receiving data requests as first thing
143 m_data_request_receiver->remove_callback();
144 // Stop the other threads
147 while (!m_timesync_thread.get_readiness()) {
149 }
150 }
152 m_baton.post(); // In case the coroutine is still waiting when the consumer has stopped
153 while (!m_postprocess_scheduler_thread.get_readiness()) {
155 }
156 }
157 TLOG_DEBUG(TLVL_WORK_STEPS) << "Flushing latency buffer with occupancy: " << m_latency_buffer_impl->occupancy();
158 m_latency_buffer_impl->flush();
160 m_raw_processor_impl->reset_last_daq_time();
161}

◆ transform_and_process()

template<class RDT, class RHT, class LBT, class RPT, class IDT>
void dunedaq::snbmodules::SNBDataHandlingModel< RDT, RHT, LBT, RPT, IDT >::transform_and_process ( IDT && payload)
protected

Definition at line 199 of file SNBDataHandlingModel.hxx.

200{
201 if constexpr (std::is_same_v<IDT, RDT>) {
203 } else {
205 for (auto& i : transformed) {
207 }
208 }
209}
virtual std::vector< RDT > transform_payload(IDT &original) const

◆ transform_payload()

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
virtual std::vector< RDT > dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::transform_payload ( IDT & original) const
inlineprotectedvirtual

Definition at line 156 of file SNBDataHandlingModel.hpp.

156{ return { reinterpret_cast<RDT&>(original) }; }

Member Data Documentation

◆ m_baton

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
folly::coro::Baton dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_baton
protected

Definition at line 217 of file SNBDataHandlingModel.hpp.

◆ m_consume_callback

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
std::function<void(IDT&&)> dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_consume_callback

Definition at line 128 of file SNBDataHandlingModel.hpp.

◆ m_current_fake_trigger_id

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
int dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_current_fake_trigger_id
protected

Definition at line 168 of file SNBDataHandlingModel.hpp.

◆ m_data_request_receiver

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
std::shared_ptr<request_receiver_ct> dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_data_request_receiver
protected

Definition at line 202 of file SNBDataHandlingModel.hpp.

◆ m_error_registry

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
std::unique_ptr<datahandlinglibs::FrameErrorRegistry> dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_error_registry
protected

Definition at line 231 of file SNBDataHandlingModel.hpp.

◆ m_fake_trigger

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
bool dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_fake_trigger
protected

Definition at line 166 of file SNBDataHandlingModel.hpp.

◆ m_generate_timesync

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
bool dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_generate_timesync = false
protected

Definition at line 167 of file SNBDataHandlingModel.hpp.

◆ m_latency_buffer_impl

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
std::shared_ptr<LatencyBufferType> dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_latency_buffer_impl
protected

Definition at line 221 of file SNBDataHandlingModel.hpp.

◆ m_num_lb_insert_failures

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
std::atomic<num_lb_insert_failures_t> dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_num_lb_insert_failures { 0 }
protected

Definition at line 193 of file SNBDataHandlingModel.hpp.

193{ 0 };

◆ m_num_payloads

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
std::atomic<num_payload_t> dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_num_payloads { 0 }
protected

Definition at line 188 of file SNBDataHandlingModel.hpp.

188{ 0 };

◆ m_num_post_processing_delay_max_waits

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
std::atomic<num_post_processing_delay_max_waits_t> dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_num_post_processing_delay_max_waits { 0 }
protected

Definition at line 194 of file SNBDataHandlingModel.hpp.

194{ 0 };

◆ m_num_requests

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
std::atomic<num_request_t> dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_num_requests { 0 }
protected

Definition at line 190 of file SNBDataHandlingModel.hpp.

190{ 0 };

◆ m_post_processing_delay_max_wait

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
uint64_t dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_post_processing_delay_max_wait
protected

Definition at line 173 of file SNBDataHandlingModel.hpp.

◆ m_post_processing_delay_min_wait

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
uint64_t dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_post_processing_delay_min_wait
protected

Definition at line 172 of file SNBDataHandlingModel.hpp.

◆ m_postprocess_scheduler_thread

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
utilities::ReusableThread dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_postprocess_scheduler_thread
protected

Definition at line 216 of file SNBDataHandlingModel.hpp.

◆ m_processing_delay_ticks

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
uint64_t dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_processing_delay_ticks
protected

Definition at line 171 of file SNBDataHandlingModel.hpp.

◆ m_raw_data_callback_conf

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
const appmodel::DataMoveCallbackConf* dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_raw_data_callback_conf
protected

Definition at line 198 of file SNBDataHandlingModel.hpp.

◆ m_raw_processor_impl

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
std::shared_ptr<RawDataProcessorType> dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_raw_processor_impl
protected

Definition at line 224 of file SNBDataHandlingModel.hpp.

◆ m_rawq_timeout_count

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
std::atomic<rawq_timeout_count_t> dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_rawq_timeout_count { 0 }
protected

Definition at line 192 of file SNBDataHandlingModel.hpp.

192{ 0 };

◆ m_request_handler_impl

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
std::shared_ptr<RequestHandlerType> dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_request_handler_impl
protected

Definition at line 227 of file SNBDataHandlingModel.hpp.

◆ m_request_handler_supports_cutoff_timestamp

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
bool dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_request_handler_supports_cutoff_timestamp
protected

Definition at line 228 of file SNBDataHandlingModel.hpp.

◆ m_run_marker

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
std::atomic<bool>& dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_run_marker
protected

Definition at line 162 of file SNBDataHandlingModel.hpp.

◆ m_run_number

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
daqdataformats::run_number_t dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_run_number
protected

Definition at line 170 of file SNBDataHandlingModel.hpp.

◆ m_sourceid

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
daqdataformats::SourceID dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_sourceid
protected

Definition at line 169 of file SNBDataHandlingModel.hpp.

◆ m_stats_packet_count

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
std::atomic<int> dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_stats_packet_count { 0 }
protected

Definition at line 195 of file SNBDataHandlingModel.hpp.

195{ 0 };

◆ m_sum_payloads

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
std::atomic<sum_payload_t> dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_sum_payloads { 0 }
protected

Definition at line 189 of file SNBDataHandlingModel.hpp.

189{ 0 };

◆ m_sum_requests

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
std::atomic<sum_request_t> dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_sum_requests { 0 }
protected

Definition at line 191 of file SNBDataHandlingModel.hpp.

191{ 0 };

◆ m_t0

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
std::chrono::time_point<std::chrono::high_resolution_clock> dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_t0
protected

Definition at line 234 of file SNBDataHandlingModel.hpp.

◆ m_timekeeper

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
std::unique_ptr<folly::ThreadWheelTimekeeper> dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_timekeeper
protected

Definition at line 218 of file SNBDataHandlingModel.hpp.

◆ m_timesync_connection_name

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
std::string dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_timesync_connection_name
protected

Definition at line 213 of file SNBDataHandlingModel.hpp.

◆ m_timesync_sender

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
std::shared_ptr<timesync_sender_ct> dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_timesync_sender
protected

Definition at line 211 of file SNBDataHandlingModel.hpp.

◆ m_timesync_thread

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
utilities::ReusableThread dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::m_timesync_thread
protected

Definition at line 212 of file SNBDataHandlingModel.hpp.

◆ ms

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
timestamp_t dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::ms = 1000 * us
inlinestaticconstexpr

Definition at line 85 of file SNBDataHandlingModel.hpp.

◆ ns

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
timestamp_t dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::ns = 1
inlinestaticconstexpr

Definition at line 83 of file SNBDataHandlingModel.hpp.

◆ s

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
timestamp_t dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::s = 1000 * ms
inlinestaticconstexpr

Definition at line 86 of file SNBDataHandlingModel.hpp.

◆ us

template<class ReadoutType, class RequestHandlerType, class LatencyBufferType, class RawDataProcessorType, class InputDataType = ReadoutType>
timestamp_t dunedaq::snbmodules::SNBDataHandlingModel< ReadoutType, RequestHandlerType, LatencyBufferType, RawDataProcessorType, InputDataType >::us = 1000 * ns
inlinestaticconstexpr

Definition at line 84 of file SNBDataHandlingModel.hpp.


The documentation for this class was generated from the following files: