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/concepts/SourceEmulatorConcept.hpp
"
21
#include "
datahandlinglibs/utils/ErrorBitGenerator.hpp
"
22
#include "
datahandlinglibs/utils/FileSourceBuffer.hpp
"
23
#include "
datahandlinglibs/DataMoveCallbackRegistry.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 <string>
35
#include <utility>
36
#include <vector>
37
38
using
dunedaq::datahandlinglibs::logging::TLVL_TAKE_NOTE
;
39
using
dunedaq::datahandlinglibs::logging::TLVL_WORK_STEPS
;
40
41
namespace
dunedaq
{
42
namespace
datahandlinglibs
{
43
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
public
:
50
SourceEmulatorPatternGenerator
() {
51
};
52
~SourceEmulatorPatternGenerator
() {};
53
54
void
generate
(
int
,
int
);
55
56
int
get_channel_number
() {
57
if
(
m_index
==
m_channel
.size())
m_index
= 0;
58
return
m_channel
[
m_index
++];
59
}
60
61
private
:
62
std::vector<int>
m_channel
;
63
int
m_index
= 0;
64
};
65
66
67
template
<
class
ReadoutType>
68
class
SourceEmulatorModel
:
public
SourceEmulatorConcept
69
{
70
public
:
71
explicit
SourceEmulatorModel
(std::string name,
72
std::atomic<bool>&
run_marker
,
73
uint64_t time_tick_diff,
// NOLINT(build/unsigned)
74
double
dropout_rate,
75
double
frame_error_rate,
76
double
rate_khz,
77
uint16_t frames_per_tick=1)
78
:
m_run_marker
(
run_marker
)
79
,
m_time_tick_diff
(time_tick_diff)
80
,
m_dropout_rate
(dropout_rate)
81
,
m_frame_error_rate
(frame_error_rate)
82
,
m_packet_count
{ 0 }
83
,
m_producer_thread
(0)
84
,
m_name
(name)
85
,
m_rate_khz
(rate_khz)
86
,
m_frames_per_tick
(frames_per_tick)
87
{}
88
89
//void init(const appfwk::DAQModule::CommandData_t& /*args*/) {}
90
void
acquire_callback
()
override
;
91
92
void
conf
(
const
confmodel::DetectorStream
* stream_conf,
const
appmodel::StreamEmulationParameters
* emu_conf);
93
void
scrap
(
const
appfwk::DAQModule::CommandData_t&
/*args*/
)
94
{
95
m_file_source
.reset();
96
m_is_configured
=
false
;
97
}
98
bool
is_configured
()
override
{
return
m_is_configured
; }
99
100
void
start
(
const
appfwk::DAQModule::CommandData_t&
/*args*/
);
101
void
stop
(
const
appfwk::DAQModule::CommandData_t&
/*args*/
);
102
// void get_info(opmonlib::InfoCollector& ci, int /*level*/);
103
104
protected
:
105
// The data emulator function that the worker thread runs
106
void
run_produce
();
107
virtual
void
generate_opmon_data
()
override
;
108
109
private
:
110
// Constuctor params
111
std::atomic<bool>&
m_run_marker
;
112
113
// CONFIGURATION
114
uint32_t
m_this_apa_number
;
// NOLINT(build/unsigned)
115
uint32_t
m_this_link_number
;
// NOLINT(build/unsigned)
116
117
uint64_t
m_time_tick_diff
;
// NOLINT(build/unsigned)
118
double
m_dropout_rate
;
119
double
m_frame_error_rate
;
120
121
// STATS
122
std::atomic<int>
m_packet_count
{ 0 };
123
std::atomic<int>
m_packet_count_tot
{ 0 };
124
125
//sourceemulatorconfig::Conf m_cfg;
126
127
bool
m_sender_is_set
=
false
;
128
std::shared_ptr<std::function<void(ReadoutType&&)>>
m_raw_data_callback
;
129
//using module_conf_t = dunedaq::datahandlinglibs::sourceemulatorconfig::Conf;
130
//module_conf_t m_conf;
131
//using link_conf_t = dunedaq::datahandlinglibs::sourceemulatorconfig::LinkConfiguration;
132
//link_conf_t m_link_conf;
133
134
std::unique_ptr<RateLimiter>
m_rate_limiter
;
135
std::unique_ptr<FileSourceBuffer>
m_file_source
;
136
ErrorBitGenerator
m_error_bit_generator
;
137
138
utilities::ReusableThread
m_producer_thread
;
139
140
std::string
m_name
;
141
bool
m_is_configured
=
false
;
142
double
m_rate_khz
;
143
uint16_t
m_frames_per_tick
;
144
145
std::vector<bool>
m_dropouts
;
// Random population
146
std::vector<bool>
m_frame_errors
;
147
148
uint
m_dropouts_length
;
// NOLINT(build/unsigned) Random population size
149
uint
m_frame_errors_length
;
150
daqdataformats::SourceID
m_sourceid
;
151
int
m_crateid
;
152
int
m_slotid
;
153
int
m_linkid
;
154
155
bool
m_t0_now
;
156
// Pattern generator configs
157
bool
m_generate_periodic_adc_pattern
;
158
SourceEmulatorPatternGenerator
m_pattern_generator
;
159
uint64_t
m_pattern_generator_previous_ts
;
160
// Adding a hit every 9768 gives a TP rate of approx 100 Hz/wire using WIBEthernet
161
uint32_t
m_time_to_wait
= 9768;
162
};
163
164
}
// namespace datahandlinglibs
165
}
// namespace dunedaq
166
167
// Declarations
168
#include "
detail/SourceEmulatorModel.hxx
"
169
170
#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:149
dunedaq::datahandlinglibs::SourceEmulatorModel::m_pattern_generator_previous_ts
uint64_t m_pattern_generator_previous_ts
Definition
SourceEmulatorModel.hpp:159
dunedaq::datahandlinglibs::SourceEmulatorModel::m_t0_now
bool m_t0_now
Definition
SourceEmulatorModel.hpp:155
dunedaq::datahandlinglibs::SourceEmulatorModel::m_slotid
int m_slotid
Definition
SourceEmulatorModel.hpp:152
dunedaq::datahandlinglibs::SourceEmulatorModel::m_this_link_number
uint32_t m_this_link_number
Definition
SourceEmulatorModel.hpp:115
dunedaq::datahandlinglibs::SourceEmulatorModel::is_configured
bool is_configured() override
Definition
SourceEmulatorModel.hpp:98
dunedaq::datahandlinglibs::SourceEmulatorModel::m_rate_khz
double m_rate_khz
Definition
SourceEmulatorModel.hpp:142
dunedaq::datahandlinglibs::SourceEmulatorModel::generate_opmon_data
virtual void generate_opmon_data() override
Definition
SourceEmulatorModel.hxx:120
dunedaq::datahandlinglibs::SourceEmulatorModel::m_producer_thread
utilities::ReusableThread m_producer_thread
Definition
SourceEmulatorModel.hpp:138
dunedaq::datahandlinglibs::SourceEmulatorModel::m_is_configured
bool m_is_configured
Definition
SourceEmulatorModel.hpp:141
dunedaq::datahandlinglibs::SourceEmulatorModel::m_this_apa_number
uint32_t m_this_apa_number
Definition
SourceEmulatorModel.hpp:114
dunedaq::datahandlinglibs::SourceEmulatorModel::m_rate_limiter
std::unique_ptr< RateLimiter > m_rate_limiter
Definition
SourceEmulatorModel.hpp:134
dunedaq::datahandlinglibs::SourceEmulatorModel::m_crateid
int m_crateid
Definition
SourceEmulatorModel.hpp:151
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:71
dunedaq::datahandlinglibs::SourceEmulatorModel::m_dropout_rate
double m_dropout_rate
Definition
SourceEmulatorModel.hpp:118
dunedaq::datahandlinglibs::SourceEmulatorModel::stop
void stop(const appfwk::DAQModule::CommandData_t &)
Definition
SourceEmulatorModel.hxx:111
dunedaq::datahandlinglibs::SourceEmulatorModel::m_dropouts
std::vector< bool > m_dropouts
Definition
SourceEmulatorModel.hpp:145
dunedaq::datahandlinglibs::SourceEmulatorModel::m_sourceid
daqdataformats::SourceID m_sourceid
Definition
SourceEmulatorModel.hpp:150
dunedaq::datahandlinglibs::SourceEmulatorModel::run_produce
void run_produce()
Definition
SourceEmulatorModel.hxx:131
dunedaq::datahandlinglibs::SourceEmulatorModel::m_pattern_generator
SourceEmulatorPatternGenerator m_pattern_generator
Definition
SourceEmulatorModel.hpp:158
dunedaq::datahandlinglibs::SourceEmulatorModel::m_frame_errors
std::vector< bool > m_frame_errors
Definition
SourceEmulatorModel.hpp:146
dunedaq::datahandlinglibs::SourceEmulatorModel::m_linkid
int m_linkid
Definition
SourceEmulatorModel.hpp:153
dunedaq::datahandlinglibs::SourceEmulatorModel::m_run_marker
std::atomic< bool > & m_run_marker
Definition
SourceEmulatorModel.hpp:111
dunedaq::datahandlinglibs::SourceEmulatorModel::m_error_bit_generator
ErrorBitGenerator m_error_bit_generator
Definition
SourceEmulatorModel.hpp:136
dunedaq::datahandlinglibs::SourceEmulatorModel::conf
void conf(const confmodel::DetectorStream *stream_conf, const appmodel::StreamEmulationParameters *emu_conf)
Definition
SourceEmulatorModel.hxx:35
dunedaq::datahandlinglibs::SourceEmulatorModel::m_time_to_wait
uint32_t m_time_to_wait
Definition
SourceEmulatorModel.hpp:161
dunedaq::datahandlinglibs::SourceEmulatorModel::start
void start(const appfwk::DAQModule::CommandData_t &)
Definition
SourceEmulatorModel.hxx:99
dunedaq::datahandlinglibs::SourceEmulatorModel::m_frames_per_tick
uint16_t m_frames_per_tick
Definition
SourceEmulatorModel.hpp:143
dunedaq::datahandlinglibs::SourceEmulatorModel::m_packet_count_tot
std::atomic< int > m_packet_count_tot
Definition
SourceEmulatorModel.hpp:123
dunedaq::datahandlinglibs::SourceEmulatorModel::m_raw_data_callback
std::shared_ptr< std::function< void(ReadoutType &&)> > m_raw_data_callback
Definition
SourceEmulatorModel.hpp:128
dunedaq::datahandlinglibs::SourceEmulatorModel::scrap
void scrap(const appfwk::DAQModule::CommandData_t &)
Definition
SourceEmulatorModel.hpp:93
dunedaq::datahandlinglibs::SourceEmulatorModel::m_name
std::string m_name
Definition
SourceEmulatorModel.hpp:140
dunedaq::datahandlinglibs::SourceEmulatorModel::m_packet_count
std::atomic< int > m_packet_count
Definition
SourceEmulatorModel.hpp:122
dunedaq::datahandlinglibs::SourceEmulatorModel::m_sender_is_set
bool m_sender_is_set
Definition
SourceEmulatorModel.hpp:127
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:148
dunedaq::datahandlinglibs::SourceEmulatorModel::m_time_tick_diff
uint64_t m_time_tick_diff
Definition
SourceEmulatorModel.hpp:117
dunedaq::datahandlinglibs::SourceEmulatorModel::m_generate_periodic_adc_pattern
bool m_generate_periodic_adc_pattern
Definition
SourceEmulatorModel.hpp:157
dunedaq::datahandlinglibs::SourceEmulatorModel::m_frame_error_rate
double m_frame_error_rate
Definition
SourceEmulatorModel.hpp:119
dunedaq::datahandlinglibs::SourceEmulatorModel::m_file_source
std::unique_ptr< FileSourceBuffer > m_file_source
Definition
SourceEmulatorModel.hpp:135
dunedaq::datahandlinglibs::SourceEmulatorPatternGenerator
Definition
SourceEmulatorModel.hpp:47
dunedaq::datahandlinglibs::SourceEmulatorPatternGenerator::m_channel
std::vector< int > m_channel
Definition
SourceEmulatorModel.hpp:62
dunedaq::datahandlinglibs::SourceEmulatorPatternGenerator::get_channel_number
int get_channel_number()
Definition
SourceEmulatorModel.hpp:56
dunedaq::datahandlinglibs::SourceEmulatorPatternGenerator::SourceEmulatorPatternGenerator
SourceEmulatorPatternGenerator()
Definition
SourceEmulatorModel.hpp:50
dunedaq::datahandlinglibs::SourceEmulatorPatternGenerator::m_index
int m_index
Definition
SourceEmulatorModel.hpp:63
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
Including Qt Headers.
Definition
module.cpp:16
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.17.0