DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
datahandlinglibs
include
datahandlinglibs
models
SourceEmulatorModel.hpp
Go to the documentation of this file.
1
8
#ifndef DATAHANDLINGLIBS_INCLUDE_DATAHANDLINGLIBS_MODELS_SOURCEEMULATORMODEL_HPP_
9
#define DATAHANDLINGLIBS_INCLUDE_DATAHANDLINGLIBS_MODELS_SOURCEEMULATORMODEL_HPP_
10
11
#include "
iomanager/IOManager.hpp
"
12
#include "
iomanager/Sender.hpp
"
13
14
#include "
logging/Logging.hpp
"
15
16
#include "
confmodel/DetectorStream.hpp
"
17
#include "
confmodel/GeoId.hpp
"
18
19
#include "
datahandlinglibs/DataHandlingIssues.hpp
"
20
#include "
datahandlinglibs/DataMoveCallbackRegistry.hpp
"
21
#include "
datahandlinglibs/concepts/SourceEmulatorConcept.hpp
"
22
#include "
datahandlinglibs/utils/ErrorBitGenerator.hpp
"
23
#include "
datahandlinglibs/utils/FileSourceBuffer.hpp
"
24
#include "
datahandlinglibs/utils/RateLimiter.hpp
"
25
#include "
utilities/ReusableThread.hpp
"
26
27
#include "
datahandlinglibs/opmon/datahandling_info.pb.h
"
28
29
#include "unistd.h"
30
#include <chrono>
31
#include <functional>
32
#include <memory>
33
#include <random>
34
#include <stdexcept>
35
#include <string>
36
#include <utility>
37
#include <vector>
38
39
using
dunedaq::datahandlinglibs::logging::TLVL_TAKE_NOTE
;
40
using
dunedaq::datahandlinglibs::logging::TLVL_WORK_STEPS
;
41
42
namespace
dunedaq
{
43
namespace
datahandlinglibs
{
44
45
// Pattern generator class for creating different types of TP patterns
46
// AAA: at the moment the pattern generator is very simple: random source id and random channel
47
class
SourceEmulatorPatternGenerator
48
{
49
50
public
:
51
SourceEmulatorPatternGenerator
() {};
52
~SourceEmulatorPatternGenerator
() {};
53
54
void
generate
(
int
,
int
);
55
56
int
get_channel_number
()
57
{
58
if
(
m_index
==
m_channel
.size())
59
m_index
= 0;
60
return
m_channel
[
m_index
++];
61
}
62
63
private
:
64
std::vector<int>
m_channel
;
65
int
m_index
= 0;
66
};
67
68
template
<
class
ReadoutType>
69
class
SourceEmulatorModel
:
public
SourceEmulatorConcept
70
{
71
public
:
72
explicit
SourceEmulatorModel
(std::string name,
73
std::atomic<bool>&
run_marker
,
74
uint64_t time_tick_diff,
// NOLINT(build/unsigned)
75
double
dropout_rate,
76
double
frame_error_rate,
77
double
rate_khz,
78
uint16_t frames_per_tick = 1)
79
:
m_run_marker
(
run_marker
)
80
,
m_time_tick_diff
(time_tick_diff)
81
,
m_dropout_rate
(dropout_rate)
82
,
m_frame_error_rate
(frame_error_rate)
83
,
m_packet_count
{ 0 }
84
,
m_producer_thread
(0)
85
,
m_name
(name)
86
,
m_rate_khz
(rate_khz)
87
,
m_frames_per_tick
(frames_per_tick)
88
{
89
}
90
91
// void init(const appfwk::DAQModule::CommandData_t& /*args*/) {}
92
void
acquire_callback
()
override
;
93
94
void
conf
(
const
confmodel::DetectorStream
* stream_conf,
const
appmodel::StreamEmulationParameters
* emu_conf);
95
void
scrap
(
const
appfwk::DAQModule::CommandData_t&
/*args*/
)
96
{
97
m_file_source
.reset();
98
m_is_configured
=
false
;
99
}
100
bool
is_configured
()
override
{
return
m_is_configured
; }
101
102
void
start
(
const
appfwk::DAQModule::CommandData_t&
/*args*/
);
103
void
stop
(
const
appfwk::DAQModule::CommandData_t&
/*args*/
);
104
// void get_info(opmonlib::InfoCollector& ci, int /*level*/);
105
106
protected
:
107
// The data emulator function that the worker thread runs
108
void
run_produce
();
109
virtual
void
generate_opmon_data
()
override
;
110
111
private
:
112
// Constuctor params
113
std::atomic<bool>&
m_run_marker
;
114
115
// CONFIGURATION
116
uint32_t
m_this_apa_number
;
// NOLINT(build/unsigned)
117
uint32_t
m_this_link_number
;
// NOLINT(build/unsigned)
118
119
uint64_t
m_time_tick_diff
;
// NOLINT(build/unsigned)
120
double
m_dropout_rate
;
121
double
m_frame_error_rate
;
122
123
// STATS
124
std::atomic<int>
m_packet_count
{ 0 };
125
std::atomic<int>
m_packet_count_tot
{ 0 };
126
127
// sourceemulatorconfig::Conf m_cfg;
128
129
bool
m_sender_is_set
=
false
;
130
std::shared_ptr<std::function<void(ReadoutType&&)>>
m_raw_data_callback
;
131
// using module_conf_t = dunedaq::datahandlinglibs::sourceemulatorconfig::Conf;
132
// module_conf_t m_conf;
133
// using link_conf_t = dunedaq::datahandlinglibs::sourceemulatorconfig::LinkConfiguration;
134
// link_conf_t m_link_conf;
135
136
std::unique_ptr<RateLimiter>
m_rate_limiter
;
137
std::unique_ptr<FileSourceBuffer>
m_file_source
;
138
ErrorBitGenerator
m_error_bit_generator
;
139
140
utilities::ReusableThread
m_producer_thread
;
141
142
std::string
m_name
;
143
bool
m_is_configured
=
false
;
144
double
m_rate_khz
;
145
uint16_t
m_frames_per_tick
;
146
147
std::vector<bool>
m_dropouts
;
// Random population
148
std::vector<bool>
m_frame_errors
;
149
150
uint
m_dropouts_length
;
// NOLINT(build/unsigned) Random population size
151
uint
m_frame_errors_length
;
152
daqdataformats::SourceID
m_sourceid
;
153
int
m_crateid
;
154
int
m_slotid
;
155
int
m_linkid
;
156
157
bool
m_t0_now
;
158
// Pattern generator configs
159
bool
m_generate_periodic_adc_pattern
;
160
SourceEmulatorPatternGenerator
m_pattern_generator
;
161
// Adding a hit every 9768 gives a TP rate of approx 100 Hz/wire using WIBEthernet
162
uint32_t
m_time_to_wait
= 9768;
163
};
164
165
}
// namespace datahandlinglibs
166
}
// namespace dunedaq
167
168
// Declarations
169
#include "
detail/SourceEmulatorModel.hxx
"
170
171
#endif
// DATAHANDLINGLIBS_INCLUDE_DATAHANDLINGLIBS_MODELS_SOURCEEMULATORMODEL_HPP_
DataHandlingIssues.hpp
DataMoveCallbackRegistry.hpp
ErrorBitGenerator.hpp
FileSourceBuffer.hpp
IOManager.hpp
RateLimiter.hpp
ReusableThread.hpp
SourceEmulatorConcept.hpp
SourceEmulatorModel.hxx
dunedaq::appmodel::StreamEmulationParameters
Definition
StreamEmulationParameters.hpp:20
dunedaq::confmodel::DetectorStream
Definition
DetectorStream.hpp:32
dunedaq::datahandlinglibs::ErrorBitGenerator
Definition
ErrorBitGenerator.hpp:26
dunedaq::datahandlinglibs::SourceEmulatorConcept::SourceEmulatorConcept
SourceEmulatorConcept()
Definition
SourceEmulatorConcept.hpp:28
dunedaq::datahandlinglibs::SourceEmulatorModel::m_frame_errors_length
uint m_frame_errors_length
Definition
SourceEmulatorModel.hpp:151
dunedaq::datahandlinglibs::SourceEmulatorModel::m_t0_now
bool m_t0_now
Definition
SourceEmulatorModel.hpp:157
dunedaq::datahandlinglibs::SourceEmulatorModel::m_slotid
int m_slotid
Definition
SourceEmulatorModel.hpp:154
dunedaq::datahandlinglibs::SourceEmulatorModel::m_this_link_number
uint32_t m_this_link_number
Definition
SourceEmulatorModel.hpp:117
dunedaq::datahandlinglibs::SourceEmulatorModel::is_configured
bool is_configured() override
Definition
SourceEmulatorModel.hpp:100
dunedaq::datahandlinglibs::SourceEmulatorModel::m_rate_khz
double m_rate_khz
Definition
SourceEmulatorModel.hpp:144
dunedaq::datahandlinglibs::SourceEmulatorModel::generate_opmon_data
virtual void generate_opmon_data() override
Definition
SourceEmulatorModel.hxx:123
dunedaq::datahandlinglibs::SourceEmulatorModel::m_producer_thread
utilities::ReusableThread m_producer_thread
Definition
SourceEmulatorModel.hpp:140
dunedaq::datahandlinglibs::SourceEmulatorModel::m_is_configured
bool m_is_configured
Definition
SourceEmulatorModel.hpp:143
dunedaq::datahandlinglibs::SourceEmulatorModel::m_this_apa_number
uint32_t m_this_apa_number
Definition
SourceEmulatorModel.hpp:116
dunedaq::datahandlinglibs::SourceEmulatorModel::m_rate_limiter
std::unique_ptr< RateLimiter > m_rate_limiter
Definition
SourceEmulatorModel.hpp:136
dunedaq::datahandlinglibs::SourceEmulatorModel::m_crateid
int m_crateid
Definition
SourceEmulatorModel.hpp:153
dunedaq::datahandlinglibs::SourceEmulatorModel::SourceEmulatorModel
SourceEmulatorModel(std::string name, std::atomic< bool > &run_marker, uint64_t time_tick_diff, double dropout_rate, double frame_error_rate, double rate_khz, uint16_t frames_per_tick=1)
Definition
SourceEmulatorModel.hpp:72
dunedaq::datahandlinglibs::SourceEmulatorModel::m_dropout_rate
double m_dropout_rate
Definition
SourceEmulatorModel.hpp:120
dunedaq::datahandlinglibs::SourceEmulatorModel::stop
void stop(const appfwk::DAQModule::CommandData_t &)
Definition
SourceEmulatorModel.hxx:114
dunedaq::datahandlinglibs::SourceEmulatorModel::m_dropouts
std::vector< bool > m_dropouts
Definition
SourceEmulatorModel.hpp:147
dunedaq::datahandlinglibs::SourceEmulatorModel::m_sourceid
daqdataformats::SourceID m_sourceid
Definition
SourceEmulatorModel.hpp:152
dunedaq::datahandlinglibs::SourceEmulatorModel::run_produce
void run_produce()
Definition
SourceEmulatorModel.hxx:134
dunedaq::datahandlinglibs::SourceEmulatorModel::m_pattern_generator
SourceEmulatorPatternGenerator m_pattern_generator
Definition
SourceEmulatorModel.hpp:160
dunedaq::datahandlinglibs::SourceEmulatorModel::m_frame_errors
std::vector< bool > m_frame_errors
Definition
SourceEmulatorModel.hpp:148
dunedaq::datahandlinglibs::SourceEmulatorModel::m_linkid
int m_linkid
Definition
SourceEmulatorModel.hpp:155
dunedaq::datahandlinglibs::SourceEmulatorModel::m_run_marker
std::atomic< bool > & m_run_marker
Definition
SourceEmulatorModel.hpp:113
dunedaq::datahandlinglibs::SourceEmulatorModel::m_error_bit_generator
ErrorBitGenerator m_error_bit_generator
Definition
SourceEmulatorModel.hpp:138
dunedaq::datahandlinglibs::SourceEmulatorModel::conf
void conf(const confmodel::DetectorStream *stream_conf, const appmodel::StreamEmulationParameters *emu_conf)
Definition
SourceEmulatorModel.hxx:36
dunedaq::datahandlinglibs::SourceEmulatorModel::m_time_to_wait
uint32_t m_time_to_wait
Definition
SourceEmulatorModel.hpp:162
dunedaq::datahandlinglibs::SourceEmulatorModel::start
void start(const appfwk::DAQModule::CommandData_t &)
Definition
SourceEmulatorModel.hxx:101
dunedaq::datahandlinglibs::SourceEmulatorModel::m_frames_per_tick
uint16_t m_frames_per_tick
Definition
SourceEmulatorModel.hpp:145
dunedaq::datahandlinglibs::SourceEmulatorModel::m_packet_count_tot
std::atomic< int > m_packet_count_tot
Definition
SourceEmulatorModel.hpp:125
dunedaq::datahandlinglibs::SourceEmulatorModel::m_raw_data_callback
std::shared_ptr< std::function< void(ReadoutType &&)> > m_raw_data_callback
Definition
SourceEmulatorModel.hpp:130
dunedaq::datahandlinglibs::SourceEmulatorModel::scrap
void scrap(const appfwk::DAQModule::CommandData_t &)
Definition
SourceEmulatorModel.hpp:95
dunedaq::datahandlinglibs::SourceEmulatorModel::m_name
std::string m_name
Definition
SourceEmulatorModel.hpp:142
dunedaq::datahandlinglibs::SourceEmulatorModel::m_packet_count
std::atomic< int > m_packet_count
Definition
SourceEmulatorModel.hpp:124
dunedaq::datahandlinglibs::SourceEmulatorModel::m_sender_is_set
bool m_sender_is_set
Definition
SourceEmulatorModel.hpp:129
dunedaq::datahandlinglibs::SourceEmulatorModel::acquire_callback
void acquire_callback() override
Definition
SourceEmulatorModel.hxx:23
dunedaq::datahandlinglibs::SourceEmulatorModel::m_dropouts_length
uint m_dropouts_length
Definition
SourceEmulatorModel.hpp:150
dunedaq::datahandlinglibs::SourceEmulatorModel::m_time_tick_diff
uint64_t m_time_tick_diff
Definition
SourceEmulatorModel.hpp:119
dunedaq::datahandlinglibs::SourceEmulatorModel::m_generate_periodic_adc_pattern
bool m_generate_periodic_adc_pattern
Definition
SourceEmulatorModel.hpp:159
dunedaq::datahandlinglibs::SourceEmulatorModel::m_frame_error_rate
double m_frame_error_rate
Definition
SourceEmulatorModel.hpp:121
dunedaq::datahandlinglibs::SourceEmulatorModel::m_file_source
std::unique_ptr< FileSourceBuffer > m_file_source
Definition
SourceEmulatorModel.hpp:137
dunedaq::datahandlinglibs::SourceEmulatorPatternGenerator
Definition
SourceEmulatorModel.hpp:48
dunedaq::datahandlinglibs::SourceEmulatorPatternGenerator::m_channel
std::vector< int > m_channel
Definition
SourceEmulatorModel.hpp:64
dunedaq::datahandlinglibs::SourceEmulatorPatternGenerator::get_channel_number
int get_channel_number()
Definition
SourceEmulatorModel.hpp:56
dunedaq::datahandlinglibs::SourceEmulatorPatternGenerator::SourceEmulatorPatternGenerator
SourceEmulatorPatternGenerator()
Definition
SourceEmulatorModel.hpp:51
dunedaq::datahandlinglibs::SourceEmulatorPatternGenerator::m_index
int m_index
Definition
SourceEmulatorModel.hpp:65
dunedaq::datahandlinglibs::SourceEmulatorPatternGenerator::~SourceEmulatorPatternGenerator
~SourceEmulatorPatternGenerator()
Definition
SourceEmulatorModel.hpp:52
dunedaq::utilities::ReusableThread
Definition
ReusableThread.hpp:25
run_marker
std::atomic< bool > run_marker
Global atomic for process lifetime.
Definition
daq_application.cxx:26
datahandling_info.pb.h
DetectorStream.hpp
GeoId.hpp
Sender.hpp
Logging.hpp
dunedaq::datahandlinglibs::logging::TLVL_TAKE_NOTE
@ TLVL_TAKE_NOTE
Definition
ReadoutLogging.hpp:21
dunedaq::datahandlinglibs::logging::TLVL_WORK_STEPS
@ TLVL_WORK_STEPS
Definition
ReadoutLogging.hpp:23
dunedaq::datahandlinglibs
Definition
DataHandlingConcept.hpp:16
dunedaq
The DUNE-DAQ namespace.
Definition
cib_utilities.cpp:5
generate
Definition
generate.py:1
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.18.0