8#ifndef TRIGGER_PLUGINS_HSISOURCEMODEL_HPP_
9#define TRIGGER_PLUGINS_HSISOURCEMODEL_HPP_
64 throw datahandlinglibs::InitializationError(
ERS_HERE,
"Only 1 output supported for subscribers");
69 throw datahandlinglibs::InitializationError(
ERS_HERE,
"Only 1 input supported for subscribers");
73 if (data_reader ==
nullptr) {
74 throw datahandlinglibs::InitializationError(
ERS_HERE,
"DAQ module is not a DataReader");
77 if (hsi_conf ==
nullptr) {
78 throw datahandlinglibs::InitializationError(
ERS_HERE,
"Missing HSI2TCTranslatorConf");
82 for (
auto win : hsi_conf->get_signals()) {
89 throw datahandlinglibs::InitializationError(
ERS_HERE,
"Provided an unknown TC type output to HSISourceModel");
93 uint32_t signal = win->get_signal_type();
95 throw datahandlinglibs::InitializationError(
ERS_HERE,
"Provided more than one of the same HSI signal ID input to HSISourceModel");
100 win->get_time_before(),
101 win->get_time_after() };
103 TLOG() <<
"Will cover HSI signal id: " << signal <<
" to TC type: " << win->get_tc_type_name()
104 <<
" window before: " << win->get_time_before() <<
" window after: " << win->get_time_after();
139 TLOG_DEBUG(1) <<
"Received HSIEvent with signal map " << data.signal_map <<
" and timestamp " << data.timestamp;
142 uint32_t signal_map = data.signal_map;
145 int bit_index = __builtin_ctzll(signal_map);
146 uint32_t signal = 1 << bit_index;
150 throw dunedaq::trigger::SignalTypeError(
ERS_HERE,
"HSI subscriber" , data.signal_map);
175 signal_map &= signal_map - 1;
190 this->
publish(std::move(info));
198 this->
publish(std::move(lat_info));
204 TLOG() <<
"HSI Source Model opmon counters summary:";
205 TLOG() <<
"------------------------------";
const dunedaq::appmodel::DataReaderConf * get_configuration() const
Get "configuration" relationship value.
uint32_t get_prescale() const
Get "prescale" attribute value. Prescale factor to apply to HSIEvent input.
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
~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
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,...)
static std::shared_ptr< iomanager::SenderConcept< Datatype > > get_iom_sender(iomanager::ConnectionId const &id)
static std::shared_ptr< iomanager::ReceiverConcept< Datatype > > get_iom_receiver(iomanager::ConnectionId const &id)
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