DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER > Class Template Referenceabstract

#include <TriggerGenericMaker.hpp>

Inheritance diagram for dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >:
[legend]
Collaboration diagram for dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >:
[legend]

Public Member Functions

 TriggerGenericMaker (const std::string &name)
 
virtual ~TriggerGenericMaker ()
 
 TriggerGenericMaker (const TriggerGenericMaker &)=delete
 
TriggerGenericMakeroperator= (const TriggerGenericMaker &)=delete
 
 TriggerGenericMaker (TriggerGenericMaker &&)=delete
 
TriggerGenericMakeroperator= (TriggerGenericMaker &&)=delete
 
void get_info (opmonlib::InfoCollector &ci, int) override
 

Protected Member Functions

void set_algorithm_name (const std::string &name)
 
void set_sourceid (uint32_t element_id)
 
void set_windowing (daqdataformats::timestamp_t window_time, daqdataformats::timestamp_t buffer_time)
 

Private Types

using metric_counter_type = decltype(triggergenericmakerinfo::Info::received_count)
 
using source_t = dunedaq::iomanager::ReceiverConcept<IN>
 
using sink_t = dunedaq::iomanager::SenderConcept<OUT>
 

Private Member Functions

virtual std::unique_ptr< MAKER > make_maker (const nlohmann::json &obj)=0
 
void do_start (const nlohmann::json &startobj)
 
void do_stop (const nlohmann::json &)
 
void do_configure (const nlohmann::json &obj)
 
void do_scrap (const nlohmann::json &obj)
 
void do_work (std::atomic< bool > &m_running_flag)
 
bool receive (IN &in)
 
bool send (OUT &&out)
 

Private Attributes

dunedaq::utilities::WorkerThread m_thread
 
std::atomic< metric_counter_typem_received_count
 
std::atomic< metric_counter_typem_sent_count
 
dfmessages::run_number_t m_run_number
 
std::shared_ptr< source_tm_input_queue
 
std::shared_ptr< sink_tm_output_queue
 
std::chrono::milliseconds m_queue_timeout
 
std::string m_algorithm_name
 
uint32_t m_sourceid
 
daqdataformats::timestamp_t m_buffer_time
 
daqdataformats::timestamp_t m_window_time
 
std::unique_ptr< MAKER > m_maker
 
nlohmann::json m_maker_conf
 
TriggerGenericWorker< IN, OUT, MAKER > worker
 

Friends

class TriggerGenericWorker< IN, OUT, MAKER >
 

Detailed Description

template<class IN, class OUT, class MAKER>
class dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >

Definition at line 45 of file TriggerGenericMaker.hpp.

Member Typedef Documentation

◆ metric_counter_type

template<class IN , class OUT , class MAKER >
using dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::metric_counter_type = decltype(triggergenericmakerinfo::Info::received_count)
private

Definition at line 116 of file TriggerGenericMaker.hpp.

◆ sink_t

template<class IN , class OUT , class MAKER >
using dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::sink_t = dunedaq::iomanager::SenderConcept<OUT>
private

Definition at line 124 of file TriggerGenericMaker.hpp.

◆ source_t

template<class IN , class OUT , class MAKER >
using dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::source_t = dunedaq::iomanager::ReceiverConcept<IN>
private

Definition at line 121 of file TriggerGenericMaker.hpp.

Constructor & Destructor Documentation

◆ TriggerGenericMaker() [1/3]

template<class IN , class OUT , class MAKER >
dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::TriggerGenericMaker ( const std::string & name)
inlineexplicit

Definition at line 50 of file TriggerGenericMaker.hpp.

51 : DAQModule(name)
52 , m_thread(std::bind(&TriggerGenericMaker::do_work, this, std::placeholders::_1))
54 , m_sent_count(0)
55 , m_run_number(0)
56 , m_input_queue(nullptr)
57 , m_output_queue(nullptr)
58 , m_queue_timeout(100)
59 , m_algorithm_name("[uninitialized]")
61 , m_buffer_time(0)
62 , m_window_time(625000)
63 , worker(*this) // should be last; may use other members
64 {
65 register_command("start", &TriggerGenericMaker::do_start);
66 register_command("stop", &TriggerGenericMaker::do_stop);
67 register_command("conf", &TriggerGenericMaker::do_configure);
68 register_command("scrap", &TriggerGenericMaker::do_scrap);
69 }
void do_work(std::atomic< bool > &m_running_flag)
dunedaq::utilities::WorkerThread m_thread
std::atomic< metric_counter_type > m_received_count
void do_start(const nlohmann::json &startobj)
std::atomic< metric_counter_type > m_sent_count
void do_scrap(const nlohmann::json &obj)
void do_configure(const nlohmann::json &obj)
TriggerGenericWorker< IN, OUT, MAKER > worker
static constexpr ID_t s_invalid_id
A value for the id meant to convey that it doesn't identify a data source and shouldn't be worked wit...
Definition SourceID.hpp:60

◆ ~TriggerGenericMaker()

template<class IN , class OUT , class MAKER >
virtual dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::~TriggerGenericMaker ( )
inlinevirtual

Definition at line 71 of file TriggerGenericMaker.hpp.

71{}

◆ TriggerGenericMaker() [2/3]

template<class IN , class OUT , class MAKER >
dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::TriggerGenericMaker ( const TriggerGenericMaker< IN, OUT, MAKER > & )
delete

◆ TriggerGenericMaker() [3/3]

template<class IN , class OUT , class MAKER >
dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::TriggerGenericMaker ( TriggerGenericMaker< IN, OUT, MAKER > && )
delete

Member Function Documentation

◆ do_configure()

template<class IN , class OUT , class MAKER >
void dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::do_configure ( const nlohmann::json & obj)
inlineprivate

Definition at line 160 of file TriggerGenericMaker.hpp.

161 {
162 // P. Rodrigues 2022-07-13
163 // We stash the config here and don't actually create the maker
164 // algorithm until start time, so that the algorithm doesn't
165 // persist between runs and hold onto its state from the previous
166 // run
168
169 // worker should be notified that configuration potentially changed
170 worker.reconfigure();
171 }

◆ do_scrap()

template<class IN , class OUT , class MAKER >
void dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::do_scrap ( const nlohmann::json & obj)
inlineprivate

Definition at line 173 of file TriggerGenericMaker.hpp.

174 {
175 m_input_queue.reset();
176 m_output_queue.reset();
177 m_maker.reset();
178 m_maker_conf.clear();
179 }

◆ do_start()

template<class IN , class OUT , class MAKER >
void dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::do_start ( const nlohmann::json & startobj)
inlineprivate

Definition at line 145 of file TriggerGenericMaker.hpp.

146 {
148 m_sent_count = 0;
150 worker.reconfigure();
151 m_thread.start_working_thread(get_name());
152 m_run_number = startobj.value<dunedaq::daqdataformats::run_number_t>("run", 0);
153 }
virtual std::unique_ptr< MAKER > make_maker(const nlohmann::json &obj)=0
uint32_t run_number_t
Type used to represent run number.
Definition Types.hpp:20

◆ do_stop()

template<class IN , class OUT , class MAKER >
void dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::do_stop ( const nlohmann::json & )
inlineprivate

Definition at line 155 of file TriggerGenericMaker.hpp.

156 {
157 m_thread.stop_working_thread();
158 }

◆ do_work()

template<class IN , class OUT , class MAKER >
void dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::do_work ( std::atomic< bool > & m_running_flag)
inlineprivate

Definition at line 181 of file TriggerGenericMaker.hpp.

182 {
183 // Loop until a stop is received
184 while (m_running_flag.load()) {
185 // While there are items in the input queue, continue draining even if
186 // the running_flag is false, but stop _immediately_ when input is empty
187 IN in;
188 while (receive(in)) {
189 if (m_running_flag.load()) {
190 worker.process(in);
191 }
192 }
193 }
194 // P. Rodrigues 2022-06-01. The argument here is whether to drop
195 // buffered outputs. We choose 'true' because some significant
196 // time can pass between the last input sent by readout and when
197 // we receive a stop. (This happens because stop is sent serially
198 // to readout units before trigger, and each RU takes ~1s to
199 // stop). So by the time we receive a stop command, our buffered
200 // outputs are stale and will cause tardy warnings from the zipper
201 // downstream
202 worker.drain(true);
203 TLOG() << get_name() << ": Exiting do_work() method for run " << m_run_number << ", received " << m_received_count
204 << " inputs (" << worker.get_low_level_input_count() << " sub-inputs) and successfully sent " << m_sent_count
205 << " outputs. ";
206 worker.reset();
207 }
#define TLOG(...)
Definition macro.hpp:22

◆ get_info()

template<class IN , class OUT , class MAKER >
void dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::get_info ( opmonlib::InfoCollector & ci,
int  )
inlineoverride

Definition at line 85 of file TriggerGenericMaker.hpp.

86 {
87 triggergenericmakerinfo::Info i;
88
89 i.received_count = m_received_count.load();
90 i.sent_count = m_sent_count.load();
91 if (m_maker) { i.data_vs_system_ms = m_maker->m_data_vs_system_time; }
92 else i.data_vs_system_ms = 0;
93
94 ci.add(i);
95 }

◆ make_maker()

template<class IN , class OUT , class MAKER >
virtual std::unique_ptr< MAKER > dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::make_maker ( const nlohmann::json & obj)
privatepure virtual

◆ operator=() [1/2]

template<class IN , class OUT , class MAKER >
TriggerGenericMaker & dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::operator= ( const TriggerGenericMaker< IN, OUT, MAKER > & )
delete

◆ operator=() [2/2]

template<class IN , class OUT , class MAKER >
TriggerGenericMaker & dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::operator= ( TriggerGenericMaker< IN, OUT, MAKER > && )
delete

◆ receive()

template<class IN , class OUT , class MAKER >
bool dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::receive ( IN & in)
inlineprivate

Definition at line 209 of file TriggerGenericMaker.hpp.

210 {
211 try {
212 in = m_input_queue->receive(m_queue_timeout);
213 } catch (const dunedaq::iomanager::TimeoutExpired& excpt) {
214 // it is perfectly reasonable that there might be no data in the queue
215 // some fraction of the times that we check, so we just continue on and try again
216 return false;
217 }
219 return true;
220 }

◆ send()

template<class IN , class OUT , class MAKER >
bool dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::send ( OUT && out)
inlineprivate

Definition at line 222 of file TriggerGenericMaker.hpp.

223 {
224 try {
225 m_output_queue->send(std::move(out), m_queue_timeout);
226 } catch (const dunedaq::iomanager::TimeoutExpired& excpt) {
227 ers::warning(excpt);
228 return false;
229 }
230 ++m_sent_count;
231 return true;
232 }
FELIX Initialization std::string initerror FELIX queue timed out
void warning(const Issue &issue)
Definition ers.hpp:115

◆ set_algorithm_name()

template<class IN , class OUT , class MAKER >
void dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::set_algorithm_name ( const std::string & name)
inlineprotected

Definition at line 98 of file TriggerGenericMaker.hpp.

98{ m_algorithm_name = name; }

◆ set_sourceid()

template<class IN , class OUT , class MAKER >
void dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::set_sourceid ( uint32_t element_id)
inlineprotected

Definition at line 101 of file TriggerGenericMaker.hpp.

102 {
103 m_sourceid = element_id;
104 }

◆ set_windowing()

template<class IN , class OUT , class MAKER >
void dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::set_windowing ( daqdataformats::timestamp_t window_time,
daqdataformats::timestamp_t buffer_time )
inlineprotected

Definition at line 107 of file TriggerGenericMaker.hpp.

108 {
109 m_window_time = window_time;
110 m_buffer_time = buffer_time;
111 }

Friends And Related Symbol Documentation

◆ TriggerGenericWorker< IN, OUT, MAKER >

template<class IN , class OUT , class MAKER >
friend class TriggerGenericWorker< IN, OUT, MAKER >
friend

Definition at line 1 of file TriggerGenericMaker.hpp.

Member Data Documentation

◆ m_algorithm_name

template<class IN , class OUT , class MAKER >
std::string dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::m_algorithm_name
private

Definition at line 129 of file TriggerGenericMaker.hpp.

◆ m_buffer_time

template<class IN , class OUT , class MAKER >
daqdataformats::timestamp_t dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::m_buffer_time
private

Definition at line 133 of file TriggerGenericMaker.hpp.

◆ m_input_queue

template<class IN , class OUT , class MAKER >
std::shared_ptr<source_t> dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::m_input_queue
private

Definition at line 122 of file TriggerGenericMaker.hpp.

◆ m_maker

template<class IN , class OUT , class MAKER >
std::unique_ptr<MAKER> dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::m_maker
private

Definition at line 136 of file TriggerGenericMaker.hpp.

◆ m_maker_conf

template<class IN , class OUT , class MAKER >
nlohmann::json dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::m_maker_conf
private

Definition at line 137 of file TriggerGenericMaker.hpp.

◆ m_output_queue

template<class IN , class OUT , class MAKER >
std::shared_ptr<sink_t> dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::m_output_queue
private

Definition at line 125 of file TriggerGenericMaker.hpp.

◆ m_queue_timeout

template<class IN , class OUT , class MAKER >
std::chrono::milliseconds dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::m_queue_timeout
private

Definition at line 127 of file TriggerGenericMaker.hpp.

◆ m_received_count

template<class IN , class OUT , class MAKER >
std::atomic<metric_counter_type> dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::m_received_count
private

Definition at line 117 of file TriggerGenericMaker.hpp.

◆ m_run_number

template<class IN , class OUT , class MAKER >
dfmessages::run_number_t dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::m_run_number
private

Definition at line 119 of file TriggerGenericMaker.hpp.

◆ m_sent_count

template<class IN , class OUT , class MAKER >
std::atomic<metric_counter_type> dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::m_sent_count
private

Definition at line 118 of file TriggerGenericMaker.hpp.

◆ m_sourceid

template<class IN , class OUT , class MAKER >
uint32_t dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::m_sourceid
private

Definition at line 131 of file TriggerGenericMaker.hpp.

◆ m_thread

template<class IN , class OUT , class MAKER >
dunedaq::utilities::WorkerThread dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::m_thread
private

Definition at line 114 of file TriggerGenericMaker.hpp.

◆ m_window_time

template<class IN , class OUT , class MAKER >
daqdataformats::timestamp_t dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::m_window_time
private

Definition at line 134 of file TriggerGenericMaker.hpp.

◆ worker

template<class IN , class OUT , class MAKER >
TriggerGenericWorker<IN, OUT, MAKER> dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::worker
private

Definition at line 139 of file TriggerGenericMaker.hpp.


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