DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
datahandlinglibs
include
datahandlinglibs
models
TaskRawDataProcessorModel.hpp
Go to the documentation of this file.
1
9
#ifndef DATAHANDLINGLIBS_INCLUDE_DATAHANDLINGLIBS_MODELS_TASKRAWDATAPROCESSORMODEL_HPP_
10
#define DATAHANDLINGLIBS_INCLUDE_DATAHANDLINGLIBS_MODELS_TASKRAWDATAPROCESSORMODEL_HPP_
11
12
#include "
daqdataformats/SourceID.hpp
"
13
#include "
logging/Logging.hpp
"
14
#include "
datahandlinglibs/FrameErrorRegistry.hpp
"
15
#include "
datahandlinglibs/DataHandlingIssues.hpp
"
16
#include "
datahandlinglibs/ReadoutLogging.hpp
"
17
#include "
datahandlinglibs/concepts/RawDataProcessorConcept.hpp
"
18
19
#include "
datahandlinglibs/opmon/datahandling_info.pb.h
"
20
21
#include "
confmodel/DaqModule.hpp
"
22
#include "
confmodel/Connection.hpp
"
23
#include "
appmodel/DataHandlerModule.hpp
"
24
#include "
appmodel/DataHandlerConf.hpp
"
25
#include "
appmodel/DataProcessor.hpp
"
26
27
#include "
utilities/ReusableThread.hpp
"
28
29
#include <folly/ProducerConsumerQueue.h>
30
31
#include <atomic>
32
#include <chrono>
33
#include <functional>
34
#include <future>
35
#include <memory>
36
#include <string>
37
#include <utility>
38
#include <vector>
39
40
using
dunedaq::datahandlinglibs::logging::TLVL_WORK_STEPS
;
41
42
namespace
dunedaq
{
43
namespace
datahandlinglibs
{
44
45
template
<
class
ReadoutType>
46
class
TaskRawDataProcessorModel
:
public
RawDataProcessorConcept
<ReadoutType>
47
{
48
public
:
49
// Excplicit constructor with error registry
50
explicit
TaskRawDataProcessorModel
(std::unique_ptr<FrameErrorRegistry>& error_registry,
bool
post_processing_enabled)
51
:
RawDataProcessorConcept
<ReadoutType>()
52
,
m_error_registry
(error_registry)
53
,
m_post_processing_enabled
(post_processing_enabled)
54
{}
55
56
// Destructor
57
~TaskRawDataProcessorModel
() {}
58
59
// Configures the element pointer queue for the post-processors, and the SourceID
60
void
conf
(
const
appmodel::DataHandlerModule
*
conf
)
override
;
61
62
// Clears elements to process, pre-proc pipeline, and post-proc functions
63
void
scrap
(
const
appfwk::DAQModule::CommandData_t&
/*cfg*/
)
override
;
64
65
// Starts the pre-processor pipeline and the parallel post-processor threads
66
void
start
(
const
appfwk::DAQModule::CommandData_t&
/*args*/
)
override
;
67
68
// Stops the pre-processor pipeline and the parallel post-processor threads
69
void
stop
(
const
appfwk::DAQModule::CommandData_t&
/*args*/
)
override
;
70
71
// Resets last known/processed DAQ timestamp
72
void
reset_last_daq_time
() {
m_last_processed_daq_ts
.store(0); }
73
74
// Returns last processed ReadoutTyped element's DAQ timestamp
75
std::uint64_t
get_last_daq_time
()
override
{
return
m_last_processed_daq_ts
.load(); }
// NOLINT(build/unsigned)
76
77
// Registers ReadoutType item pointer to the pre-processing pipeline
78
void
preprocess_item
(ReadoutType* item)
override
{
invoke_all_preprocess_functions
(item); }
79
80
// Registers ReadoutType item pointer to to the post-processing queue
81
void
postprocess_item
(
const
ReadoutType* item)
override
;
82
83
// Handle a timeout event
84
void
invoke_postprocess_schedule_timeout_policy
(std::uint64_t accumilated_timeout_ticks)
override
{}
85
86
// Registers a pre-processing task to the pre-processor pipeline
87
template
<
typename
Task>
88
void
add_preprocess_task
(Task&& task);
89
90
// Registers a post-processing task to the parallel post-processors
91
template
<
typename
Task>
92
void
add_postprocess_task
(Task&& task);
93
94
// Invokes all preprocessor functions as pipeline
95
void
invoke_all_preprocess_functions
(ReadoutType* item);
96
97
// Launches all preprocessor functions as async
98
void
launch_all_preprocess_functions
(ReadoutType* item);
99
100
protected
:
101
// Operational monitoring
102
virtual
void
generate_opmon_data
()
override
;
103
104
// Pre-processing pipeline functions
105
std::vector<std::function<void(ReadoutType*)>>
m_preprocess_functions
;
106
std::unique_ptr<FrameErrorRegistry>&
m_error_registry
;
107
108
// Post-processing thread runner
109
void
run_post_processing_thread
(std::function<
void
(
const
ReadoutType*)>& function,
110
folly::ProducerConsumerQueue<const ReadoutType*>& queue);
111
bool
m_post_processing_enabled
;
112
113
// Run marker
114
std::atomic<bool>
m_run_marker
{
false
};
115
116
// Post-processing functions and their corresponding threads
117
std::vector<std::function<void(
const
ReadoutType*)>>
m_post_process_functions
;
118
std::vector<std::unique_ptr<folly::ProducerConsumerQueue<const ReadoutType*>>>
m_items_to_postprocess_queues
;
119
std::vector<std::unique_ptr<utilities::ReusableThread>>
m_post_process_threads
;
120
121
// Internals
122
size_t
m_postprocess_queue_sizes
;
123
//uint32_t m_this_link_number; // NOLINT(build/unsigned)
124
daqdataformats::SourceID
m_sourceid
;
125
//bool m_emulator_mode{ false };
126
std::atomic<uint64_t>
m_last_processed_daq_ts
{ 0 };
// NOLINT(build/unsigned)
127
128
};
129
130
}
// namespace datahandlinglibs
131
}
// namespace dunedaq
132
133
// Declarations
134
#include "
detail/TaskRawDataProcessorModel.hxx
"
135
136
#endif
// DATAHANDLINGLIBS_INCLUDE_DATAHANDLINGLIBS_MODELS_TASKRAWDATAPROCESSORMODEL_HPP_
DataHandlingIssues.hpp
FrameErrorRegistry.hpp
RawDataProcessorConcept.hpp
ReadoutLogging.hpp
ReusableThread.hpp
SourceID.hpp
TaskRawDataProcessorModel.hxx
dunedaq::appmodel::DataHandlerModule
Definition
DataHandlerModule.hpp:36
dunedaq::datahandlinglibs::RawDataProcessorConcept::RawDataProcessorConcept
RawDataProcessorConcept()
Definition
RawDataProcessorConcept.hpp:25
dunedaq::datahandlinglibs::TaskRawDataProcessorModel::start
void start(const appfwk::DAQModule::CommandData_t &) override
Start operation.
Definition
TaskRawDataProcessorModel.hxx:34
dunedaq::datahandlinglibs::TaskRawDataProcessorModel::invoke_postprocess_schedule_timeout_policy
void invoke_postprocess_schedule_timeout_policy(std::uint64_t accumilated_timeout_ticks) override
Handle postprocess timeout event.
Definition
TaskRawDataProcessorModel.hpp:84
dunedaq::datahandlinglibs::TaskRawDataProcessorModel::postprocess_item
void postprocess_item(const ReadoutType *item) override
Postprocess one element.
Definition
TaskRawDataProcessorModel.hxx:61
dunedaq::datahandlinglibs::TaskRawDataProcessorModel::get_last_daq_time
std::uint64_t get_last_daq_time() override
Get newest timestamp of last seen packet.
Definition
TaskRawDataProcessorModel.hpp:75
dunedaq::datahandlinglibs::TaskRawDataProcessorModel::~TaskRawDataProcessorModel
~TaskRawDataProcessorModel()
Definition
TaskRawDataProcessorModel.hpp:57
dunedaq::datahandlinglibs::TaskRawDataProcessorModel::add_preprocess_task
void add_preprocess_task(Task &&task)
Definition
TaskRawDataProcessorModel.hxx:73
dunedaq::datahandlinglibs::TaskRawDataProcessorModel< TAWrapper >::m_postprocess_queue_sizes
size_t m_postprocess_queue_sizes
Definition
TaskRawDataProcessorModel.hpp:122
dunedaq::datahandlinglibs::TaskRawDataProcessorModel::add_postprocess_task
void add_postprocess_task(Task &&task)
Definition
TaskRawDataProcessorModel.hxx:81
dunedaq::datahandlinglibs::TaskRawDataProcessorModel< TAWrapper >::m_sourceid
daqdataformats::SourceID m_sourceid
Definition
TaskRawDataProcessorModel.hpp:124
dunedaq::datahandlinglibs::TaskRawDataProcessorModel::conf
void conf(const appmodel::DataHandlerModule *conf) override
Set the emulator mode, if active, timestamps of processed packets are overwritten with new ones.
Definition
TaskRawDataProcessorModel.hxx:8
dunedaq::datahandlinglibs::TaskRawDataProcessorModel< TAWrapper >::m_post_processing_enabled
bool m_post_processing_enabled
Definition
TaskRawDataProcessorModel.hpp:111
dunedaq::datahandlinglibs::TaskRawDataProcessorModel< TAWrapper >::m_preprocess_functions
std::vector< std::function< void(TAWrapper *)> > m_preprocess_functions
Definition
TaskRawDataProcessorModel.hpp:105
dunedaq::datahandlinglibs::TaskRawDataProcessorModel::stop
void stop(const appfwk::DAQModule::CommandData_t &) override
Stop operation.
Definition
TaskRawDataProcessorModel.hxx:49
dunedaq::datahandlinglibs::TaskRawDataProcessorModel::launch_all_preprocess_functions
void launch_all_preprocess_functions(ReadoutType *item)
Definition
TaskRawDataProcessorModel.hxx:98
dunedaq::datahandlinglibs::TaskRawDataProcessorModel< TAWrapper >::m_run_marker
std::atomic< bool > m_run_marker
Definition
TaskRawDataProcessorModel.hpp:114
dunedaq::datahandlinglibs::TaskRawDataProcessorModel::reset_last_daq_time
void reset_last_daq_time()
Definition
TaskRawDataProcessorModel.hpp:72
dunedaq::datahandlinglibs::TaskRawDataProcessorModel::run_post_processing_thread
void run_post_processing_thread(std::function< void(const ReadoutType *)> &function, folly::ProducerConsumerQueue< const ReadoutType * > &queue)
Definition
TaskRawDataProcessorModel.hxx:107
dunedaq::datahandlinglibs::TaskRawDataProcessorModel< TAWrapper >::m_post_process_threads
std::vector< std::unique_ptr< utilities::ReusableThread > > m_post_process_threads
Definition
TaskRawDataProcessorModel.hpp:119
dunedaq::datahandlinglibs::TaskRawDataProcessorModel::generate_opmon_data
virtual void generate_opmon_data() override
Definition
TaskRawDataProcessorModel.hxx:123
dunedaq::datahandlinglibs::TaskRawDataProcessorModel< TAWrapper >::m_post_process_functions
std::vector< std::function< void(const TAWrapper *)> > m_post_process_functions
Definition
TaskRawDataProcessorModel.hpp:117
dunedaq::datahandlinglibs::TaskRawDataProcessorModel::TaskRawDataProcessorModel
TaskRawDataProcessorModel(std::unique_ptr< FrameErrorRegistry > &error_registry, bool post_processing_enabled)
Definition
TaskRawDataProcessorModel.hpp:50
dunedaq::datahandlinglibs::TaskRawDataProcessorModel< TAWrapper >::m_items_to_postprocess_queues
std::vector< std::unique_ptr< folly::ProducerConsumerQueue< const TAWrapper * > > > m_items_to_postprocess_queues
Definition
TaskRawDataProcessorModel.hpp:118
dunedaq::datahandlinglibs::TaskRawDataProcessorModel< TAWrapper >::m_last_processed_daq_ts
std::atomic< uint64_t > m_last_processed_daq_ts
Definition
TaskRawDataProcessorModel.hpp:126
dunedaq::datahandlinglibs::TaskRawDataProcessorModel::scrap
void scrap(const appfwk::DAQModule::CommandData_t &) override
Unconfigure.
Definition
TaskRawDataProcessorModel.hxx:24
dunedaq::datahandlinglibs::TaskRawDataProcessorModel::preprocess_item
void preprocess_item(ReadoutType *item) override
Preprocess one element.
Definition
TaskRawDataProcessorModel.hpp:78
dunedaq::datahandlinglibs::TaskRawDataProcessorModel< TAWrapper >::m_error_registry
std::unique_ptr< FrameErrorRegistry > & m_error_registry
Definition
TaskRawDataProcessorModel.hpp:106
dunedaq::datahandlinglibs::TaskRawDataProcessorModel::invoke_all_preprocess_functions
void invoke_all_preprocess_functions(ReadoutType *item)
Definition
TaskRawDataProcessorModel.hxx:89
datahandling_info.pb.h
DataHandlerConf.hpp
DataHandlerModule.hpp
DataProcessor.hpp
Connection.hpp
DaqModule.hpp
Logging.hpp
dunedaq::datahandlinglibs::logging::TLVL_WORK_STEPS
@ TLVL_WORK_STEPS
Definition
ReadoutLogging.hpp:23
dunedaq::datahandlinglibs
Definition
DataHandlingConcept.hpp:16
dunedaq
Including Qt Headers.
Definition
module.cpp:16
dunedaq::daqdataformats::SourceID
SourceID is a generalized representation of the source of a piece of data in the DAQ....
Definition
SourceID.hpp:32
Generated on
for DUNE-DAQ by
1.17.0