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 CommandData_t &startobj)
void do_stop (const CommandData_t &)
void do_configure (const CommandData_t &obj)
void do_scrap (const CommandData_t &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.

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 {
69 }
dunedaq::utilities::WorkerThread m_thread
std::atomic< metric_counter_type > m_received_count
std::atomic< metric_counter_type > m_sent_count
TriggerGenericWorker< IN, OUT, MAKER > worker

◆ ~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 CommandData_t & 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 CommandData_t & 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 CommandData_t & 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());
153 }
virtual std::unique_ptr< MAKER > make_maker(const nlohmann::json &obj)=0

◆ do_stop()

template<class IN, class OUT, class MAKER>
void dunedaq::trigger::TriggerGenericMaker< IN, OUT, MAKER >::do_stop ( const CommandData_t & )
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 {
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);
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 {
228 return false;
229 }
230 ++m_sent_count;
231 return true;
232 }
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.

◆ 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 {
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.

◆ 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: