8#ifndef TRIGGER_PLUGINS_HSISOURCEMODEL_HPP_
9#define TRIGGER_PLUGINS_HSISOURCEMODEL_HPP_
67 throw datahandlinglibs::InitializationError(
ERS_HERE,
"Only 1 output supported for subscribers");
72 throw datahandlinglibs::InitializationError(
ERS_HERE,
"Only 1 input supported for subscribers");
76 if (data_reader ==
nullptr) {
77 throw datahandlinglibs::InitializationError(
ERS_HERE,
"DAQ module is not a DataReader");
80 if (hsi_conf ==
nullptr) {
81 throw datahandlinglibs::InitializationError(
ERS_HERE,
"Missing HSI2TCTranslatorConf");
85 for (
auto win : hsi_conf->get_signals()) {
92 throw datahandlinglibs::InitializationError(
ERS_HERE,
"Provided an unknown TC type output to HSISourceModel");
96 uint32_t signal = win->get_signal_type();
98 throw datahandlinglibs::InitializationError(
99 ERS_HERE,
"Provided more than one of the same HSI signal ID input to HSISourceModel");
103 m_signals[signal] = { tc_type, win->get_time_before(), win->get_time_after() };
105 TLOG() <<
"Will cover HSI signal id: " << signal <<
" to TC type: " << win->get_tc_type_name()
106 <<
" window before: " << win->get_time_before() <<
" window after: " << win->get_time_after();
143 TLOG_DEBUG(1) <<
"Received HSIEvent with signal map " << data.signal_map <<
" and timestamp " << data.timestamp;
146 uint32_t signal_map = data.signal_map;
149 int bit_index = __builtin_ctzll(signal_map);
150 uint32_t signal = 1 << bit_index;
154 throw dunedaq::trigger::SignalTypeError(
ERS_HERE,
"HSI subscriber", data.signal_map);
179 signal_map &= signal_map - 1;
194 this->
publish(std::move(info));
202 this->
publish(std::move(lat_info));
208 TLOG() <<
"HSI Source Model opmon counters summary:";
209 TLOG() <<
"------------------------------";
const dunedaq::appmodel::DataReaderConf * get_configuration() const
Get "configuration" relationship value.
const TARGET * cast() const noexcept
Casts object to different class.
const std::vector< const dunedaq::confmodel::Connection * > & get_inputs() const
Get "inputs" relationship value. List of connections to/from this module.
const std::vector< const dunedaq::confmodel::Connection * > & get_outputs() const
Get "outputs" relationship value. Output connections from this module.
static constexpr timeout_t s_no_block
void publish(google::protobuf::Message &&, CustomOrigin &&co={}, OpMonLevel l=to_level(EntryOpMonLevel::kDefault)) const noexcept
uint64_t metric_counter_type
std::atomic< metric_counter_type > m_tcs_made_count
std::atomic< metric_counter_type > m_latency_out
dunedaq::iomanager::ReceiverConcept< dfmessages::HSIEvent > source_t
dunedaq::iomanager::SenderConcept< triggeralgs::TriggerCandidate > sink_t
~HSISourceModel() override
uint64_t m_prescale
{rescale for the input HSIEvents, default 1
std::atomic< bool > m_latency_monitoring
std::atomic< metric_counter_type > m_received_events_count
std::atomic< bool > m_running_flag
dunedaq::trigger::Latency m_latency_instance
void generate_opmon_data() override
void init(const confmodel::DaqModule *cfg) override
std::shared_ptr< sink_t > m_data_sender
std::map< uint32_t, HSISignal > m_signals
map of HSI signal ID bits to TC output configurations
bool handle_payload(dfmessages::HSIEvent &data)
std::atomic< metric_counter_type > m_latency_in
datahandlinglibs::SourceConcept inherited
std::shared_ptr< source_t > m_data_receiver
HSISourceModel()
SourceModel Constructor.
std::atomic< metric_counter_type > m_tcs_sent_count
std::atomic< metric_counter_type > m_tcs_dropped_count
void update_latency_out(uint64_t latency)
latency get_latency_in() const
latency get_latency_out() const
void update_latency_in(uint64_t latency)
void set_latency_out(::uint32_t value)
void set_latency_in(::uint32_t value)
#define TLOG_DEBUG(lvl,...)
dunedaq::trgdataformats::timestamp_t timestamp_t
A message used to convey an HSI event.
Struct holding configuration for one HSI signal bit.
triggeralgs::TriggerCandidate::Type type
triggeralgs::timestamp_t time_before
triggeralgs::timestamp_t time_after
std::vector< dunedaq::trgdataformats::TriggerActivityData > inputs