DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType > Class Template Reference

#include <SourceEmulatorModel.hpp>

Inheritance diagram for dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >:
[legend]
Collaboration diagram for dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >:
[legend]

Public Member Functions

 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)
 
void set_sender (const std::string &conn_name)
 
void conf (const confmodel::DetectorStream *stream_conf, const appmodel::StreamEmulationParameters *emu_conf)
 
void scrap (const nlohmann::json &)
 
bool is_configured () override
 
void start (const nlohmann::json &)
 
void stop (const nlohmann::json &)
 
- Public Member Functions inherited from dunedaq::datahandlinglibs::SourceEmulatorConcept
 SourceEmulatorConcept ()
 
virtual ~SourceEmulatorConcept ()
 
 SourceEmulatorConcept (const SourceEmulatorConcept &)=delete
 SourceEmulatorConcept is not copy-constructible.
 
SourceEmulatorConceptoperator= (const SourceEmulatorConcept &)=delete
 SourceEmulatorConcept is not copy-assginable.
 
 SourceEmulatorConcept (SourceEmulatorConcept &&)=delete
 SourceEmulatorConcept is not move-constructible.
 
SourceEmulatorConceptoperator= (SourceEmulatorConcept &&)=delete
 SourceEmulatorConcept 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
 

Protected Member Functions

void run_produce ()
 
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
 

Private Types

using raw_sender_ct = iomanager::SenderConcept<ReadoutType>
 

Private Attributes

std::atomic< bool > & m_run_marker
 
uint32_t m_this_apa_number
 
uint32_t m_this_link_number
 
uint64_t m_time_tick_diff
 
double m_dropout_rate
 
double m_frame_error_rate
 
std::atomic< int > m_packet_count { 0 }
 
std::atomic< int > m_packet_count_tot { 0 }
 
std::chrono::milliseconds m_raw_sender_timeout_ms
 
std::shared_ptr< raw_sender_ctm_raw_data_sender
 
bool m_sender_is_set = false
 
std::unique_ptr< RateLimiterm_rate_limiter
 
std::unique_ptr< FileSourceBufferm_file_source
 
ErrorBitGenerator m_error_bit_generator
 
utilities::ReusableThread m_producer_thread
 
std::string m_name
 
bool m_is_configured = false
 
double m_rate_khz
 
uint16_t m_frames_per_tick
 
std::vector< bool > m_dropouts
 
std::vector< bool > m_frame_errors
 
uint m_dropouts_length
 
uint m_frame_errors_length
 
daqdataformats::SourceID m_sourceid
 
int m_crateid
 
int m_slotid
 
int m_linkid
 
bool m_t0_now
 
bool m_generate_periodic_adc_pattern
 
SourceEmulatorPatternGenerator m_pattern_generator
 
uint64_t m_pattern_generator_previous_ts
 
uint32_t m_time_to_wait = 9768
 

Additional Inherited Members

- Public Types inherited from dunedaq::opmonlib::MonitorableObject
using NodePtr = std::weak_ptr<MonitorableObject>
 
using NewNodePtr = std::shared_ptr<MonitorableObject>
 
using ElementId = std::string
 
- Static Public Member Functions inherited from dunedaq::opmonlib::MonitorableObject
static bool publishable_metric (OpMonLevel entry, OpMonLevel system) noexcept
 

Detailed Description

template<class ReadoutType>
class dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >

Definition at line 67 of file SourceEmulatorModel.hpp.

Member Typedef Documentation

◆ raw_sender_ct

template<class ReadoutType >
using dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::raw_sender_ct = iomanager::SenderConcept<ReadoutType>
private

Definition at line 130 of file SourceEmulatorModel.hpp.

Constructor & Destructor Documentation

◆ SourceEmulatorModel()

template<class ReadoutType >
dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::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 )
inlineexplicit

Definition at line 70 of file SourceEmulatorModel.hpp.

78 , m_time_tick_diff(time_tick_diff)
79 , m_dropout_rate(dropout_rate)
80 , m_frame_error_rate(frame_error_rate)
81 , m_packet_count{ 0 }
83 , m_raw_data_sender(nullptr)
85 , m_name(name)
86 , m_rate_khz(rate_khz)
87 ,m_frames_per_tick(frames_per_tick)
88 {}
std::atomic< bool > run_marker
Global atomic for process lifetime.

Member Function Documentation

◆ conf()

template<class ReadoutType >
void dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::conf ( const confmodel::DetectorStream * stream_conf,
const appmodel::StreamEmulationParameters * emu_conf )
virtual

Implements dunedaq::datahandlinglibs::SourceEmulatorConcept.

Definition at line 35 of file SourceEmulatorModel.hxx.

36{
37 if (m_is_configured) {
38 TLOG_DEBUG(TLVL_WORK_STEPS) << "This emulator is already configured!";
39 } else {
40 //m_conf = args.get<module_conf_t>();
41 //m_link_conf = link_conf.get<link_conf_t>();
42 m_raw_sender_timeout_ms = std::chrono::milliseconds(1);
43
44 std::mt19937 mt(rand()); // NOLINT(runtime/threadsafe_fn)
45 std::uniform_real_distribution<double> dis(0.0, 1.0);
46
47 m_sourceid.id = link_conf->get_source_id();
48 m_sourceid.subsystem = ReadoutType::subsystem;
49
50 m_crateid = link_conf->get_geo_id()->get_crate_id();
51 m_slotid = link_conf->get_geo_id()->get_slot_id();
52 m_linkid = link_conf->get_geo_id()->get_stream_id();
53
54 m_t0_now = emu_params->get_set_t0();
55 m_file_source = std::make_unique<FileSourceBuffer>(emu_params->get_input_file_size_limit(), sizeof(ReadoutType));
56 try {
57 m_file_source->read(emu_params->get_data_file_name());
58 } catch (const ers::Issue& ex) {
59 ers::fatal(ex);
61 }
62 m_dropouts_length = emu_params->get_random_population_size();
63 if (m_dropout_rate == 0.0) {
64 m_dropouts = std::vector<bool>(1);
65 } else {
66 m_dropouts = std::vector<bool>(m_dropouts_length);
67 }
68 for (size_t i = 0; i < m_dropouts.size(); ++i) {
69 m_dropouts[i] = dis(mt) >= m_dropout_rate;
70 }
71
72 m_frame_errors_length = emu_params->get_random_population_size();
73 m_frame_error_rate = emu_params->get_frame_error_rate_hz();
74 m_error_bit_generator = ErrorBitGenerator(m_frame_error_rate);
76
77 // Generate random ADC pattern
78 m_generate_periodic_adc_pattern = emu_params->get_generate_periodic_adc_pattern();
79 auto vec_size = emu_params->get_random_population_size();
81 TLOG() << "Generated pattern.";
83
84 if (emu_params->get_TP_rate_per_channel() != 0) {
85 TLOG() << "TP rate per channel multiplier (base of 100 Hz/ch): " << emu_params->get_TP_rate_per_channel();
86 // Define time to wait when adding an ADC above threshold
87 // Adding a hit every 9768 gives a total Sent TP rate of approx 100 Hz/wire with WIBEth
88 m_time_to_wait = m_time_to_wait / emu_params->get_TP_rate_per_channel();
89 }
90 }
91
92 m_is_configured = true;
93 }
94 // Configure thread:
96}
#define ERS_HERE
std::unique_ptr< FileSourceBuffer > m_file_source
void set_name(const std::string &name, int tid)
Base class for any user define issue.
Definition Issue.hpp:69
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:112
#define TLOG(...)
Definition macro.hpp:22
ConfigurationError
Definition util.hpp:27
void fatal(const Issue &issue)
Definition ers.hpp:88
Subsystem subsystem
The general subsystem of the source of the data.
Definition SourceID.hpp:69
ID_t id
Unique identifier of the source of the data.
Definition SourceID.hpp:74

◆ generate_opmon_data()

template<class ReadoutType >
void dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::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 121 of file SourceEmulatorModel.hxx.

122{
123 opmon::DataSourceInfo info;
124 info.set_sum_packets(m_packet_count_tot.load());
125 info.set_num_packets(m_packet_count.exchange(0));
126
127 this->publish(std::move(info));
128}
void publish(google::protobuf::Message &&, CustomOrigin &&co={}, OpMonLevel l=to_level(EntryOpMonLevel::kDefault)) const noexcept

◆ is_configured()

template<class ReadoutType >
bool dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::is_configured ( )
inlineoverridevirtual

Implements dunedaq::datahandlinglibs::SourceEmulatorConcept.

Definition at line 99 of file SourceEmulatorModel.hpp.

99{ return m_is_configured; }

◆ run_produce()

template<class ReadoutType >
void dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::run_produce ( )
protected

Definition at line 132 of file SourceEmulatorModel.hxx.

133{
134 TLOG_DEBUG(TLVL_WORK_STEPS) << "Data generation thread " << m_this_link_number << " started";
135
136 // pthread_setname_np(pthread_self(), get_name().c_str());
137
138 uint offset = 0; // NOLINT(build/unsigned)
139 auto& source = m_file_source->get();
140
141 uint num_elem = m_file_source->num_elements();
142 if (num_elem == 0) {
143 TLOG_DEBUG(TLVL_WORK_STEPS) << "No elements to read from buffer! Sleeping...";
144 std::this_thread::sleep_for(std::chrono::milliseconds(100));
145 num_elem = m_file_source->num_elements();
146 }
147
148 auto rptr = reinterpret_cast<ReadoutType*>(source.data()); // NOLINT
149
150 // set the initial timestamp to a configured value, otherwise just use the timestamp from the header
151 uint64_t ts_0 = rptr->get_timestamp(); // NOLINT(build/unsigned)
152 if (m_t0_now) {
153 auto time_now = std::chrono::system_clock::now().time_since_epoch();
154 uint64_t current_time = // NOLINT (build/unsigned)
155 std::chrono::duration_cast<std::chrono::microseconds>(time_now).count();
156 // FIXME: where do I get the clockspeed from?
157 // ts_0 = (m_conf.clock_speed_hz / 100000) * current_time;
158 ts_0 = 625 * current_time / 10;
159
160 }
161 TLOG_DEBUG(TLVL_BOOKKEEPING) << "Using first timestamp: " << ts_0;
162 uint64_t timestamp = ts_0; // NOLINT(build/unsigned)
163 int dropout_index = 0;
164
165 while (m_run_marker.load()) {
166 // TLOG() << "Generating " << m_frames_per_tick << " for TS " << timestamp;
167 for (uint16_t i = 0; i < m_frames_per_tick; i++) {
168 // Which element to push to the buffer
169 if (offset == num_elem || (offset + 1) * sizeof(ReadoutType) > source.size()) {
170 offset = 0;
171 }
172
173 bool create_frame = m_dropouts[dropout_index]; // NOLINT(runtime/threadsafe_fn)
174 dropout_index = (dropout_index + 1) % m_dropouts.size();
175 if (create_frame) {
177 // Memcpy from file buffer to flat char array
178 ::memcpy(static_cast<void*>(&payload),
179 static_cast<void*>(source.data() + offset * sizeof(ReadoutType)),
180 sizeof(ReadoutType));
181
182 // Fake timestamp
183 payload.fake_timestamps(timestamp, m_time_tick_diff);
184
185 // Fake geoid
186 payload.fake_geoid(m_crateid, m_slotid, m_linkid);
187
188 // Introducing frame errors
189 std::vector<uint16_t> frame_errs; // NOLINT(build/unsigned)
190 for (size_t i = 0; i < rptr->get_num_frames(); ++i) {
191 frame_errs.push_back(m_error_bit_generator.next());
192 }
193 payload.fake_frame_errors(&frame_errs);
194
197
198 /* Reset the pattern from the beginning if it reaches the maximum
199 m_pattern_index++;
200 if (m_pattern_index == m_pattern_generator.get_total_size()) {
201 m_pattern_index = 0;
202 }
203 */
204 // Set the ADC to the uint16 maximum value
205 try {
207 }
208 catch (std::exception & ex) {
209 //FIXME: should not happen
210 }
211
212 //TLOG() << "Lift channel " << channel;
213
214 // Update the previous timestamp of the pattern generator
216
217 } // timestamp difference
218 }
219
220 // send it
221 try {
222 m_raw_data_sender->send(std::move(payload), m_raw_sender_timeout_ms);
223 } catch (ers::Issue& excpt) {
224 ers::warning(CannotWriteToQueue(ERS_HERE, m_sourceid, "raw data input queue", excpt));
225 // std::runtime_error("Queue timed out...");
226 }
227
228 // Count packet and limit rate if needed.
229 ++offset;
232
233
234 }
235 }
236 timestamp += m_time_tick_diff * rptr->get_num_frames();
237
238
239
240 m_rate_limiter->limit();
241 }
242 TLOG_DEBUG(TLVL_WORK_STEPS) << "Data generation thread " << m_sourceid.to_string() << " finished";
243}
double offset
ReadoutType
Which type of readout to use for TriggerDecision and DataRequest.
Definition Types.hpp:51
void warning(const Issue &issue)
Definition ers.hpp:115
std::string to_string() const
Definition SourceID.hpp:83

◆ scrap()

template<class ReadoutType >
void dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::scrap ( const nlohmann::json & )
inlinevirtual

Implements dunedaq::datahandlinglibs::SourceEmulatorConcept.

Definition at line 94 of file SourceEmulatorModel.hpp.

95 {
96 m_file_source.reset();
97 m_is_configured = false;
98 }

◆ set_sender()

template<class ReadoutType >
void dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::set_sender ( const std::string & conn_name)
virtual

Implements dunedaq::datahandlinglibs::SourceEmulatorConcept.

Definition at line 23 of file SourceEmulatorModel.hxx.

24{
25 if (!m_sender_is_set) {
27 m_sender_is_set = true;
28 } else {
29 // ers::error();
30 }
31}
static std::shared_ptr< iomanager::SenderConcept< Datatype > > get_iom_sender(iomanager::ConnectionId const &id)

◆ start()

template<class ReadoutType >
void dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::start ( const nlohmann::json & )
virtual

Implements dunedaq::datahandlinglibs::SourceEmulatorConcept.

Definition at line 100 of file SourceEmulatorModel.hxx.

101{
103 TLOG_DEBUG(TLVL_WORK_STEPS) << "Starting threads...";
104 // FIXME: don't know where to take the slowdown from... m_rate_limiter = std::make_unique<RateLimiter>(m_rate_khz / m_link_conf.slowdown);
105 m_rate_limiter = std::make_unique<RateLimiter>(m_rate_khz);
106 // m_stats_thread.set_work(&SourceEmulatorModel<ReadoutType>::run_stats, this);
108}
bool set_work(Function &&f, Args &&... args)

◆ stop()

template<class ReadoutType >
void dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::stop ( const nlohmann::json & )
virtual

Implements dunedaq::datahandlinglibs::SourceEmulatorConcept.

Definition at line 112 of file SourceEmulatorModel.hxx.

113{
115 std::this_thread::sleep_for(std::chrono::milliseconds(100));
116 }
117}

Member Data Documentation

◆ m_crateid

template<class ReadoutType >
int dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_crateid
private

Definition at line 156 of file SourceEmulatorModel.hpp.

◆ m_dropout_rate

template<class ReadoutType >
double dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_dropout_rate
private

Definition at line 119 of file SourceEmulatorModel.hpp.

◆ m_dropouts

template<class ReadoutType >
std::vector<bool> dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_dropouts
private

Definition at line 150 of file SourceEmulatorModel.hpp.

◆ m_dropouts_length

template<class ReadoutType >
uint dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_dropouts_length
private

Definition at line 153 of file SourceEmulatorModel.hpp.

◆ m_error_bit_generator

template<class ReadoutType >
ErrorBitGenerator dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_error_bit_generator
private

Definition at line 141 of file SourceEmulatorModel.hpp.

◆ m_file_source

template<class ReadoutType >
std::unique_ptr<FileSourceBuffer> dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_file_source
private

Definition at line 140 of file SourceEmulatorModel.hpp.

◆ m_frame_error_rate

template<class ReadoutType >
double dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_frame_error_rate
private

Definition at line 120 of file SourceEmulatorModel.hpp.

◆ m_frame_errors

template<class ReadoutType >
std::vector<bool> dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_frame_errors
private

Definition at line 151 of file SourceEmulatorModel.hpp.

◆ m_frame_errors_length

template<class ReadoutType >
uint dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_frame_errors_length
private

Definition at line 154 of file SourceEmulatorModel.hpp.

◆ m_frames_per_tick

template<class ReadoutType >
uint16_t dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_frames_per_tick
private

Definition at line 148 of file SourceEmulatorModel.hpp.

◆ m_generate_periodic_adc_pattern

template<class ReadoutType >
bool dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_generate_periodic_adc_pattern
private

Definition at line 162 of file SourceEmulatorModel.hpp.

◆ m_is_configured

template<class ReadoutType >
bool dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_is_configured = false
private

Definition at line 146 of file SourceEmulatorModel.hpp.

◆ m_linkid

template<class ReadoutType >
int dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_linkid
private

Definition at line 158 of file SourceEmulatorModel.hpp.

◆ m_name

template<class ReadoutType >
std::string dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_name
private

Definition at line 145 of file SourceEmulatorModel.hpp.

◆ m_packet_count

template<class ReadoutType >
std::atomic<int> dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_packet_count { 0 }
private

Definition at line 123 of file SourceEmulatorModel.hpp.

123{ 0 };

◆ m_packet_count_tot

template<class ReadoutType >
std::atomic<int> dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_packet_count_tot { 0 }
private

Definition at line 124 of file SourceEmulatorModel.hpp.

124{ 0 };

◆ m_pattern_generator

template<class ReadoutType >
SourceEmulatorPatternGenerator dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_pattern_generator
private

Definition at line 163 of file SourceEmulatorModel.hpp.

◆ m_pattern_generator_previous_ts

template<class ReadoutType >
uint64_t dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_pattern_generator_previous_ts
private

Definition at line 164 of file SourceEmulatorModel.hpp.

◆ m_producer_thread

template<class ReadoutType >
utilities::ReusableThread dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_producer_thread
private

Definition at line 143 of file SourceEmulatorModel.hpp.

◆ m_rate_khz

template<class ReadoutType >
double dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_rate_khz
private

Definition at line 147 of file SourceEmulatorModel.hpp.

◆ m_rate_limiter

template<class ReadoutType >
std::unique_ptr<RateLimiter> dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_rate_limiter
private

Definition at line 139 of file SourceEmulatorModel.hpp.

◆ m_raw_data_sender

template<class ReadoutType >
std::shared_ptr<raw_sender_ct> dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_raw_data_sender
private

Definition at line 131 of file SourceEmulatorModel.hpp.

◆ m_raw_sender_timeout_ms

template<class ReadoutType >
std::chrono::milliseconds dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_raw_sender_timeout_ms
private

Definition at line 129 of file SourceEmulatorModel.hpp.

◆ m_run_marker

template<class ReadoutType >
std::atomic<bool>& dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_run_marker
private

Definition at line 112 of file SourceEmulatorModel.hpp.

◆ m_sender_is_set

template<class ReadoutType >
bool dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_sender_is_set = false
private

Definition at line 133 of file SourceEmulatorModel.hpp.

◆ m_slotid

template<class ReadoutType >
int dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_slotid
private

Definition at line 157 of file SourceEmulatorModel.hpp.

◆ m_sourceid

template<class ReadoutType >
daqdataformats::SourceID dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_sourceid
private

Definition at line 155 of file SourceEmulatorModel.hpp.

◆ m_t0_now

template<class ReadoutType >
bool dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_t0_now
private

Definition at line 160 of file SourceEmulatorModel.hpp.

◆ m_this_apa_number

template<class ReadoutType >
uint32_t dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_this_apa_number
private

Definition at line 115 of file SourceEmulatorModel.hpp.

◆ m_this_link_number

template<class ReadoutType >
uint32_t dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_this_link_number
private

Definition at line 116 of file SourceEmulatorModel.hpp.

◆ m_time_tick_diff

template<class ReadoutType >
uint64_t dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_time_tick_diff
private

Definition at line 118 of file SourceEmulatorModel.hpp.

◆ m_time_to_wait

template<class ReadoutType >
uint32_t dunedaq::datahandlinglibs::SourceEmulatorModel< ReadoutType >::m_time_to_wait = 9768
private

Definition at line 166 of file SourceEmulatorModel.hpp.


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