From 6edf947967593099a6def5b83706eb8ebbe7a44f Mon Sep 17 00:00:00 2001 From: Deniz Tuana Ergonul Uzun Date: Fri, 25 Oct 2024 10:00:17 +0200 Subject: [PATCH 1/8] TriggerDataHandlingModel overrides transform --- include/trigger/TriggerDataHandlingModel.hpp | 46 ++++++++ .../detail/TriggerDataHandlingModel.hxx | 40 +++++++ plugins/DataSubscriberModule.cpp | 9 +- plugins/TriggerDataHandlerModule.cpp | 16 ++- src/trigger/TPSetSourceModel.hpp | 105 ------------------ src/trigger/TriggerSourceModel.hpp | 103 ----------------- 6 files changed, 100 insertions(+), 219 deletions(-) create mode 100644 include/trigger/TriggerDataHandlingModel.hpp create mode 100644 include/trigger/detail/TriggerDataHandlingModel.hxx delete mode 100644 src/trigger/TPSetSourceModel.hpp delete mode 100644 src/trigger/TriggerSourceModel.hpp diff --git a/include/trigger/TriggerDataHandlingModel.hpp b/include/trigger/TriggerDataHandlingModel.hpp new file mode 100644 index 00000000..2a11297f --- /dev/null +++ b/include/trigger/TriggerDataHandlingModel.hpp @@ -0,0 +1,46 @@ +/** + * @file TriggerDataHandlingModel.hpp Glue between data source, payload raw processor, + * latency buffer and request handler. + * + * This is part of the DUNE DAQ, copyright 2024. + * Licensing/copyright details are in the COPYING file that you should have + * received with this code. + */ +#ifndef TRIGGER_INCLUDE_TRIGGER_TRIGGERDATAHANDLINGMODEL_HPP_ +#define TRIGGER_INCLUDE_TRIGGER_TRIGGERDATAHANDLINGMODEL_HPP_ + +#include "datahandlinglibs/models/DataHandlingModel.hpp" +#include + +namespace dunedaq::trigger { + +template +class TriggerDataHandlingModel + : public datahandlinglibs:: + DataHandlingModel +{ +public: + using Base = datahandlinglibs:: + DataHandlingModel; + using RDT = typename Base::RDT; + using RHT = typename Base::RHT; + using LBT = typename Base::LBT; + using RPT = typename Base::RPT; + using IDT = typename Base::IDT; + + explicit TriggerDataHandlingModel(std::atomic& run_marker); + + // Transform input data type to readout + std::unique_ptr transform_payload(IDT& original, std::size_t& size) const override; +}; + +} // namespace dunedaq::trigger + +// Declarations +#include "detail/TriggerDataHandlingModel.hxx" + +#endif // TRIGGER_INCLUDE_TRIGGER_TRIGGERDATAHANDLINGMODEL_HPP_ diff --git a/include/trigger/detail/TriggerDataHandlingModel.hxx b/include/trigger/detail/TriggerDataHandlingModel.hxx new file mode 100644 index 00000000..07f2c201 --- /dev/null +++ b/include/trigger/detail/TriggerDataHandlingModel.hxx @@ -0,0 +1,40 @@ +/** + * @file TriggerDataHandlingModel.hxx Glue between data source, payload raw processor, + * latency buffer and request handler. + * + * This is part of the DUNE DAQ, copyright 2024. + * Licensing/copyright details are in the COPYING file that you should have + * received with this code. + */ +#include "triggeralgs/TriggerActivity.hpp" +#include "triggeralgs/TriggerCandidate.hpp" + +namespace dunedaq::trigger { + +template +TriggerDataHandlingModel::TriggerDataHandlingModel(std::atomic& run_marker) + : Base(run_marker) +{ +} + +template +std::unique_ptr TriggerDataHandlingModel::transform_payload(IDT& original, std::size_t& size) const +{ + if constexpr (std::is_same_v) { + size = original.objects.size(); + auto transformed = std::make_unique_for_overwrite(size); + for (auto i = 0; i < size; ++i) { + transformed[i].tp = original.objects[i]; + } + return transformed; + } else if constexpr (std::is_same_v || std::is_same_v) { + size = 1; + auto transformed = std::make_unique_for_overwrite(size); + transformed[0] = RDT(original); + return transformed; + } else { + return Base::transform_payload(original, size); + } +} + +} // namespace dunedaq::trigger diff --git a/plugins/DataSubscriberModule.cpp b/plugins/DataSubscriberModule.cpp index c570b900..16333fdd 100644 --- a/plugins/DataSubscriberModule.cpp +++ b/plugins/DataSubscriberModule.cpp @@ -12,14 +12,13 @@ #include "datahandlinglibs/DataHandlingIssues.hpp" #include "datahandlinglibs/models/DataSubscriberModel.hpp" #include "trigger/HSISourceModel.hpp" -#include "trigger/TPSetSourceModel.hpp" -#include "trigger/TriggerSourceModel.hpp" #include "appmodel/DataSubscriberModule.hpp" #include "trigger/TriggerPrimitiveTypeAdapter.hpp" #include "trigger/TAWrapper.hpp" #include "trigger/TCWrapper.hpp" +#include "trigger/TPSet.hpp" #include "trgdataformats/TriggerPrimitive.hpp" #include "triggeralgs/TriggerActivity.hpp" #include "triggeralgs/TriggerCandidate.hpp" @@ -81,21 +80,21 @@ DataSubscriberModule::create_data_subscriber(const confmodel::DaqModule* cfg) if (raw_dt == "TPSet") { TLOG_DEBUG(1) << "Creating trigger primitives subscriber"; auto source_model = - std::make_shared(); + std::make_shared>(); return source_model; } if (raw_dt == "TriggerActivity") { TLOG_DEBUG(1) << "Creating trigger activities subscriber"; auto source_model = - std::make_shared>(); + std::make_shared>(); return source_model; } if (raw_dt == "TriggerCandidate") { TLOG_DEBUG(1) << "Creating trigger candidates subscriber"; auto source_model = - std::make_shared>(); + std::make_shared>(); return source_model; } diff --git a/plugins/TriggerDataHandlerModule.cpp b/plugins/TriggerDataHandlerModule.cpp index 407c08ea..51bac7ae 100644 --- a/plugins/TriggerDataHandlerModule.cpp +++ b/plugins/TriggerDataHandlerModule.cpp @@ -17,6 +17,7 @@ #include "datahandlinglibs/models/DefaultSkipListRequestHandler.hpp" #include "trigger/TPRequestHandler.hpp" +#include "trigger/TriggerDataHandlingModel.hpp" #include "trigger/TriggerPrimitiveTypeAdapter.hpp" #include "trigger/TPProcessor.hpp" #include "trigger/TAProcessor.hpp" @@ -72,11 +73,12 @@ TriggerDataHandlerModule::create_readout(const appmodel::DataHandlerModule* modc // IF TriggerPrimitive (TP) if (raw_dt.find("TriggerPrimitive") != std::string::npos) { TLOG(TLVL_WORK_STEPS) << "Creating readout for TriggerPrimitive"; - auto readout_model = std::make_shared, - TPProcessor>>(run_marker); + TPProcessor, + trigger::TPSet>>(run_marker); register_node("TPProcessor", readout_model); readout_model->init(modconf); return readout_model; @@ -85,11 +87,12 @@ TriggerDataHandlerModule::create_readout(const appmodel::DataHandlerModule* modc // IF TriggerActivity (TA) if (raw_dt.find("TriggerActivity") != std::string::npos) { TLOG(TLVL_WORK_STEPS) << "Creating readout for TriggerActivity"; - auto readout_model = std::make_shared, rol::SkipListLatencyBufferModel, - TAProcessor>>(run_marker); + TAProcessor, + triggeralgs::TriggerActivity>>(run_marker); register_node("TAProcessor", readout_model); readout_model->init(modconf); @@ -99,11 +102,12 @@ TriggerDataHandlerModule::create_readout(const appmodel::DataHandlerModule* modc // No processing, only buffering to respond to data requests if (raw_dt.find("TriggerCandidate") != std::string::npos) { TLOG(TLVL_WORK_STEPS) << "Creating readout for TriggerCandidate"; - auto readout_model = std::make_shared, rol::SkipListLatencyBufferModel, - TCProcessor>>(run_marker); + TCProcessor, + triggeralgs::TriggerCandidate>>(run_marker); register_node("TCProcessor", readout_model); readout_model->init(modconf); diff --git a/src/trigger/TPSetSourceModel.hpp b/src/trigger/TPSetSourceModel.hpp deleted file mode 100644 index 40998d50..00000000 --- a/src/trigger/TPSetSourceModel.hpp +++ /dev/null @@ -1,105 +0,0 @@ -/** - * @file TPSetSourceModel.hpp - * - * This is part of the DUNE DAQ , copyright 2020. - * Licensing/copyright details are in the COPYING file that you should have - * received with this code. - */ -#ifndef TRIGGER_SRC_TRIGGER_TPSETSOURCEMODEL_HPP_ -#define TRIGGER_SRC_TRIGGER_TPSETSOURCEMODEL_HPP_ - -#include -#include "datahandlinglibs/concepts/SourceConcept.hpp" -#include "detdataformats/DetID.hpp" -#include "dfmessages/HSIEvent.hpp" -#include "triggeralgs/TriggerCandidate.hpp" -#include "trigger/TCWrapper.hpp" - - -#include "iomanager/IOManager.hpp" -#include "iomanager/Sender.hpp" -#include "iomanager/Receiver.hpp" -#include "logging/Logging.hpp" -#include "confmodel/DaqModule.hpp" -#include "appmodel/DataSubscriberModule.hpp" -#include "trigger/TPSet.hpp" -#include "trigger/TriggerPrimitiveTypeAdapter.hpp" - -//#include "appmodel/HSI2TCTranslatorConf.hpp" -//#include "appmodel/HSISignalWindow.hpp" - -namespace dunedaq::trigger { - - -class TPSetSourceModel : public datahandlinglibs::SourceConcept -{ -public: - using inherited = datahandlinglibs::SourceConcept; - - /** - * @brief SourceModel Constructor - * @param name Instance name for this SourceModel instance - */ - - TPSetSourceModel(): datahandlinglibs::SourceConcept() {} - ~TPSetSourceModel() {} - - void init(const confmodel::DaqModule* cfg) override { - if (cfg->get_outputs().size() != 1) { - throw datahandlinglibs::InitializationError(ERS_HERE, "Only 1 output supported for subscribers"); - } - m_data_sender = get_iom_sender(cfg->get_outputs()[0]->UID()); - - if (cfg->get_inputs().size() != 1) { - throw datahandlinglibs::InitializationError(ERS_HERE, "Only 1 input supported for subscribers"); - } - m_data_receiver = get_iom_receiver(cfg->get_inputs()[0]->UID()); -/* - auto data_reader = cfg->cast(); - if (data_reader == nullptr) { - throw datahandlinglibs::InitializationError(ERS_HERE, "DAQ module is not a DataReader"); - } - auto hsi_conf = data_reader->get_configuration()->cast(); - if (hsi_conf == nullptr) { - throw datahandlinglibs::InitializationError(ERS_HERE, "Missing HSI2TCTranslatorConf"); - } - for (auto win : hsi_conf->get_signals()) { - m_signals[win->get_signal_type()] = std::pair(win->get_time_before(), win->get_time_after()); - } - */ - } - - void start() { - m_data_receiver->add_callback(std::bind(&TPSetSourceModel::handle_payload, this, std::placeholders::_1)); - } - - void stop() { - m_data_receiver->remove_callback(); - } - - bool handle_payload(trigger::TPSet& data) // NOLINT(build/unsigned) - { - for (auto tpraw : data.objects) { - TriggerPrimitiveTypeAdapter tp; - tp.tp = tpraw; - if (!m_data_sender->try_send(std::move(tp), iomanager::Sender::s_no_block)) { - ++m_dropped_packets; - } - } - return true; - } - -private: - using source_t = dunedaq::iomanager::ReceiverConcept; - std::shared_ptr m_data_receiver; - - using sink_t = dunedaq::iomanager::SenderConcept; - std::shared_ptr m_data_sender; - - //Stats - std::atomic m_dropped_packets{0}; -}; - -} // namespace dunedaq::trigger - -#endif // TRIGGER_SRC_TRIGGER_TPSETSOURCEMODEL_HPP_ diff --git a/src/trigger/TriggerSourceModel.hpp b/src/trigger/TriggerSourceModel.hpp deleted file mode 100644 index 4fdadc86..00000000 --- a/src/trigger/TriggerSourceModel.hpp +++ /dev/null @@ -1,103 +0,0 @@ -/** - * @file TriggerSourceModel.hpp - * - * This is part of the DUNE DAQ , copyright 2020. - * Licensing/copyright details are in the COPYING file that you should have - * received with this code. - */ -#ifndef TRIGGER_SRC_TRIGGER_TRIGGERSOURCEMODEL_HPP_ -#define TRIGGER_SRC_TRIGGER_TRIGGERSOURCEMODEL_HPP_ - -#include -#include "datahandlinglibs/concepts/SourceConcept.hpp" -#include "detdataformats/DetID.hpp" -#include "dfmessages/HSIEvent.hpp" -#include "triggeralgs/TriggerCandidate.hpp" -#include "trigger/TCWrapper.hpp" - - -#include "iomanager/IOManager.hpp" -#include "iomanager/Sender.hpp" -#include "iomanager/Receiver.hpp" -#include "logging/Logging.hpp" -#include "confmodel/DaqModule.hpp" -#include "appmodel/DataSubscriberModule.hpp" -#include "trigger/TAWrapper.hpp" -#include "trigger/TCWrapper.hpp" - -//#include "appmodel/HSI2TCTranslatorConf.hpp" -//#include "appmodel/HSISignalWindow.hpp" - -namespace dunedaq::trigger { - - -template -class TriggerSourceModel : public datahandlinglibs::SourceConcept -{ -public: - using inherited = datahandlinglibs::SourceConcept; - - /** - * @brief SourceModel Constructor - * @param name Instance name for this SourceModel instance - */ - - TriggerSourceModel(): datahandlinglibs::SourceConcept() {} - ~TriggerSourceModel() {} - - void init(const confmodel::DaqModule* cfg) override { - if (cfg->get_outputs().size() != 1) { - throw datahandlinglibs::InitializationError(ERS_HERE, "Only 1 output supported for subscribers"); - } - m_data_sender = get_iom_sender(cfg->get_outputs()[0]->UID()); - - if (cfg->get_inputs().size() != 1) { - throw datahandlinglibs::InitializationError(ERS_HERE, "Only 1 input supported for subscribers"); - } - m_data_receiver = get_iom_receiver(cfg->get_inputs()[0]->UID()); -/* - auto data_reader = cfg->cast(); - if (data_reader == nullptr) { - throw datahandlinglibs::InitializationError(ERS_HERE, "DAQ module is not a DataReader"); - } - auto hsi_conf = data_reader->get_configuration()->cast(); - if (hsi_conf == nullptr) { - throw datahandlinglibs::InitializationError(ERS_HERE, "Missing HSI2TCTranslatorConf"); - } - for (auto win : hsi_conf->get_signals()) { - m_signals[win->get_signal_type()] = std::pair(win->get_time_before(), win->get_time_after()); - } - */ - } - - void start() { - m_data_receiver->add_callback(std::bind(&TriggerSourceModel::handle_payload, this, std::placeholders::_1)); - } - - void stop() { - m_data_receiver->remove_callback(); - } - - bool handle_payload(TriggerXObject& data) // NOLINT(build/unsigned) - { - TXWrapper tx(data); - if (!m_data_sender->try_send(std::move(tx), iomanager::Sender::s_no_block)) { - ++m_dropped_packets; - } - return true; - } - -private: - using source_t = dunedaq::iomanager::ReceiverConcept; - std::shared_ptr m_data_receiver; - - using sink_t = dunedaq::iomanager::SenderConcept; - std::shared_ptr m_data_sender; - - //Stats - std::atomic m_dropped_packets{0}; -}; - -} // namespace dunedaq::trigger - -#endif // TRIGGER_SRC_TRIGGER_TRIGGERSOURCEMODEL_HPP_ From 2c3b97138599e68d5fca71e9d5bf844651568ee3 Mon Sep 17 00:00:00 2001 From: Deniz Tuana Ergonul Uzun Date: Mon, 28 Oct 2024 09:56:54 +0100 Subject: [PATCH 2/8] TP is not ready yet --- plugins/TriggerDataHandlerModule.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/TriggerDataHandlerModule.cpp b/plugins/TriggerDataHandlerModule.cpp index 51bac7ae..e960fd8f 100644 --- a/plugins/TriggerDataHandlerModule.cpp +++ b/plugins/TriggerDataHandlerModule.cpp @@ -78,7 +78,7 @@ TriggerDataHandlerModule::create_readout(const appmodel::DataHandlerModule* modc TPRequestHandler, rol::SkipListLatencyBufferModel, TPProcessor, - trigger::TPSet>>(run_marker); + TriggerPrimitiveTypeAdapter>>(run_marker); register_node("TPProcessor", readout_model); readout_model->init(modconf); return readout_model; From 3773e4666eb92225eda2a24d68b1fbb8dbb2e1dd Mon Sep 17 00:00:00 2001 From: Deniz Tuana Ergonul Uzun Date: Wed, 30 Oct 2024 08:52:18 +0100 Subject: [PATCH 3/8] Receive TPAs at once --- include/trigger/TriggerPrimitiveTypeAdapter.hpp | 2 ++ include/trigger/detail/TriggerDataHandlingModel.hxx | 9 ++++++--- plugins/DataSubscriberModule.cpp | 2 +- plugins/TriggerDataHandlerModule.cpp | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/include/trigger/TriggerPrimitiveTypeAdapter.hpp b/include/trigger/TriggerPrimitiveTypeAdapter.hpp index 90260fb3..a9af5695 100644 --- a/include/trigger/TriggerPrimitiveTypeAdapter.hpp +++ b/include/trigger/TriggerPrimitiveTypeAdapter.hpp @@ -20,6 +20,8 @@ const constexpr std::size_t kTriggerPrimitiveSize = sizeof(trgdataformats::Trigg struct TriggerPrimitiveTypeAdapter { using FrameType = TriggerPrimitiveTypeAdapter; + using TPAArrayPair = std::pair, std::size_t>; + // data trgdataformats::TriggerPrimitive tp; // comparable based on start timestamp diff --git a/include/trigger/detail/TriggerDataHandlingModel.hxx b/include/trigger/detail/TriggerDataHandlingModel.hxx index 07f2c201..c3cd4124 100644 --- a/include/trigger/detail/TriggerDataHandlingModel.hxx +++ b/include/trigger/detail/TriggerDataHandlingModel.hxx @@ -23,14 +23,17 @@ std::unique_ptr TriggerDataHandlingModel::transf if constexpr (std::is_same_v) { size = original.objects.size(); auto transformed = std::make_unique_for_overwrite(size); - for (auto i = 0; i < size; ++i) { - transformed[i].tp = original.objects[i]; + for (std::size_t i = 0; i < size; ++i) { + transformed[i].tp = std::move(original.objects[i]); } return transformed; + } else if constexpr (std::is_same_v) { + size = original.second; + return std::move(original.first); } else if constexpr (std::is_same_v || std::is_same_v) { size = 1; auto transformed = std::make_unique_for_overwrite(size); - transformed[0] = RDT(original); + transformed[0] = RDT(std::move(original)); return transformed; } else { return Base::transform_payload(original, size); diff --git a/plugins/DataSubscriberModule.cpp b/plugins/DataSubscriberModule.cpp index 16333fdd..a3a12b73 100644 --- a/plugins/DataSubscriberModule.cpp +++ b/plugins/DataSubscriberModule.cpp @@ -80,7 +80,7 @@ DataSubscriberModule::create_data_subscriber(const confmodel::DaqModule* cfg) if (raw_dt == "TPSet") { TLOG_DEBUG(1) << "Creating trigger primitives subscriber"; auto source_model = - std::make_shared>(); + std::make_shared>(); return source_model; } diff --git a/plugins/TriggerDataHandlerModule.cpp b/plugins/TriggerDataHandlerModule.cpp index e960fd8f..79632970 100644 --- a/plugins/TriggerDataHandlerModule.cpp +++ b/plugins/TriggerDataHandlerModule.cpp @@ -78,7 +78,7 @@ TriggerDataHandlerModule::create_readout(const appmodel::DataHandlerModule* modc TPRequestHandler, rol::SkipListLatencyBufferModel, TPProcessor, - TriggerPrimitiveTypeAdapter>>(run_marker); + TriggerPrimitiveTypeAdapter::TPAArrayPair>>(run_marker); register_node("TPProcessor", readout_model); readout_model->init(modconf); return readout_model; From 75797f65586991b3b9235853b097884b4762f916 Mon Sep 17 00:00:00 2001 From: Deniz Tuana Ergonul Uzun Date: Wed, 30 Oct 2024 11:23:18 +0100 Subject: [PATCH 4/8] Vector instead of unique_ptr --- include/trigger/TriggerDataHandlingModel.hpp | 2 +- .../trigger/TriggerPrimitiveTypeAdapter.hpp | 2 +- .../detail/TriggerDataHandlingModel.hxx | 20 ++++++++----------- plugins/DataSubscriberModule.cpp | 3 ++- plugins/TriggerDataHandlerModule.cpp | 3 ++- src/TPProcessor.cpp | 1 + 6 files changed, 15 insertions(+), 16 deletions(-) diff --git a/include/trigger/TriggerDataHandlingModel.hpp b/include/trigger/TriggerDataHandlingModel.hpp index 2a11297f..89d43c3c 100644 --- a/include/trigger/TriggerDataHandlingModel.hpp +++ b/include/trigger/TriggerDataHandlingModel.hpp @@ -35,7 +35,7 @@ class TriggerDataHandlingModel explicit TriggerDataHandlingModel(std::atomic& run_marker); // Transform input data type to readout - std::unique_ptr transform_payload(IDT& original, std::size_t& size) const override; + std::vector transform_payload(IDT& original) const override; }; } // namespace dunedaq::trigger diff --git a/include/trigger/TriggerPrimitiveTypeAdapter.hpp b/include/trigger/TriggerPrimitiveTypeAdapter.hpp index a9af5695..3040314c 100644 --- a/include/trigger/TriggerPrimitiveTypeAdapter.hpp +++ b/include/trigger/TriggerPrimitiveTypeAdapter.hpp @@ -20,7 +20,7 @@ const constexpr std::size_t kTriggerPrimitiveSize = sizeof(trgdataformats::Trigg struct TriggerPrimitiveTypeAdapter { using FrameType = TriggerPrimitiveTypeAdapter; - using TPAArrayPair = std::pair, std::size_t>; + using TPAVector = std::vector; // data trgdataformats::TriggerPrimitive tp; diff --git a/include/trigger/detail/TriggerDataHandlingModel.hxx b/include/trigger/detail/TriggerDataHandlingModel.hxx index c3cd4124..65dfc14a 100644 --- a/include/trigger/detail/TriggerDataHandlingModel.hxx +++ b/include/trigger/detail/TriggerDataHandlingModel.hxx @@ -18,25 +18,21 @@ TriggerDataHandlingModel::TriggerDataHandlingModel(std: } template -std::unique_ptr TriggerDataHandlingModel::transform_payload(IDT& original, std::size_t& size) const +std::vector TriggerDataHandlingModel::transform_payload(IDT& original) const { if constexpr (std::is_same_v) { - size = original.objects.size(); - auto transformed = std::make_unique_for_overwrite(size); - for (std::size_t i = 0; i < size; ++i) { + std::vector transformed(original.objects.size()); + for (std::size_t i = 0; i < transformed.size(); ++i) { transformed[i].tp = std::move(original.objects[i]); } return transformed; - } else if constexpr (std::is_same_v) { - size = original.second; - return std::move(original.first); + } else if constexpr (std::is_same_v) { + return std::move(original); } else if constexpr (std::is_same_v || std::is_same_v) { - size = 1; - auto transformed = std::make_unique_for_overwrite(size); - transformed[0] = RDT(std::move(original)); - return transformed; + return { RDT(std::move(original)) }; + } else { - return Base::transform_payload(original, size); + return Base::transform_payload(original); } } diff --git a/plugins/DataSubscriberModule.cpp b/plugins/DataSubscriberModule.cpp index a3a12b73..30480191 100644 --- a/plugins/DataSubscriberModule.cpp +++ b/plugins/DataSubscriberModule.cpp @@ -30,6 +30,7 @@ namespace dunedaq { //DUNE_DAQ_TYPESTRING(dunedaq::trigger::TPSet, "TPSet") DUNE_DAQ_TYPESTRING(dunedaq::trigger::TriggerPrimitiveTypeAdapter, "TriggerPrimitive") +DUNE_DAQ_TYPESTRING(std::vector, "TriggerPrimitiveVector") DUNE_DAQ_TYPESTRING(dunedaq::trigger::TAWrapper, "TriggerActivity") DUNE_DAQ_TYPESTRING(dunedaq::trigger::TCWrapper, "TriggerCandidate") @@ -80,7 +81,7 @@ DataSubscriberModule::create_data_subscriber(const confmodel::DaqModule* cfg) if (raw_dt == "TPSet") { TLOG_DEBUG(1) << "Creating trigger primitives subscriber"; auto source_model = - std::make_shared>(); + std::make_shared>(); return source_model; } diff --git a/plugins/TriggerDataHandlerModule.cpp b/plugins/TriggerDataHandlerModule.cpp index 79632970..1eb7e267 100644 --- a/plugins/TriggerDataHandlerModule.cpp +++ b/plugins/TriggerDataHandlerModule.cpp @@ -34,6 +34,7 @@ using namespace dunedaq::datahandlinglibs::logging; namespace dunedaq { DUNE_DAQ_TYPESTRING(dunedaq::trigger::TriggerPrimitiveTypeAdapter, "TriggerPrimitive") +DUNE_DAQ_TYPESTRING(std::vector, "TriggerPrimitiveVector") DUNE_DAQ_TYPESTRING(dunedaq::trigger::TAWrapper, "TriggerActivity") DUNE_DAQ_TYPESTRING(dunedaq::trigger::TCWrapper, "TriggerCandidate") @@ -78,7 +79,7 @@ TriggerDataHandlerModule::create_readout(const appmodel::DataHandlerModule* modc TPRequestHandler, rol::SkipListLatencyBufferModel, TPProcessor, - TriggerPrimitiveTypeAdapter::TPAArrayPair>>(run_marker); + TriggerPrimitiveTypeAdapter::TPAVector>>(run_marker); register_node("TPProcessor", readout_model); readout_model->init(modconf); return readout_model; diff --git a/src/TPProcessor.cpp b/src/TPProcessor.cpp index a4b2b3eb..662fb80b 100644 --- a/src/TPProcessor.cpp +++ b/src/TPProcessor.cpp @@ -30,6 +30,7 @@ using dunedaq::datahandlinglibs::logging::TLVL_TAKE_NOTE; // THIS SHOULDN'T BE HERE!!!!! But it is necessary..... DUNE_DAQ_TYPESTRING(dunedaq::trigger::TriggerPrimitiveTypeAdapter, "TriggerPrimitive") +DUNE_DAQ_TYPESTRING(std::vector, "TriggerPrimitiveVector") namespace dunedaq { namespace trigger { From 2a91c41d018a59441adb1ce0385e8e492525a47e Mon Sep 17 00:00:00 2001 From: Deniz Tuana Ergonul Uzun Date: Thu, 31 Oct 2024 10:42:24 +0100 Subject: [PATCH 5/8] TriggerPrimitiveVector readout --- include/trigger/TriggerDataHandlingModel.hpp | 2 +- plugins/TriggerDataHandlerModule.cpp | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/include/trigger/TriggerDataHandlingModel.hpp b/include/trigger/TriggerDataHandlingModel.hpp index 89d43c3c..edb6ad07 100644 --- a/include/trigger/TriggerDataHandlingModel.hpp +++ b/include/trigger/TriggerDataHandlingModel.hpp @@ -18,7 +18,7 @@ template + class InputDataType = ReadoutType> class TriggerDataHandlingModel : public datahandlinglibs:: DataHandlingModel diff --git a/plugins/TriggerDataHandlerModule.cpp b/plugins/TriggerDataHandlerModule.cpp index 1eb7e267..9f0b4ede 100644 --- a/plugins/TriggerDataHandlerModule.cpp +++ b/plugins/TriggerDataHandlerModule.cpp @@ -71,6 +71,20 @@ TriggerDataHandlerModule::create_readout(const appmodel::DataHandlerModule* modc std::string raw_dt = modconf->get_module_configuration()->get_input_data_type(); TLOG() << "Choosing specializations for DataHandlingModel with data_type:" << raw_dt << ']'; + // IF TriggerPrimitiveVector (TP vector) + if (raw_dt.find("TriggerPrimitiveVector") != std::string::npos) { + TLOG(TLVL_WORK_STEPS) << "Creating readout for TriggerPrimitiveVector"; + auto readout_model = std::make_shared, + TPProcessor, + TriggerPrimitiveTypeAdapter::TPAVector>>(run_marker); + register_node("TPProcessor", readout_model); + readout_model->init(modconf); + return readout_model; + } + // IF TriggerPrimitive (TP) if (raw_dt.find("TriggerPrimitive") != std::string::npos) { TLOG(TLVL_WORK_STEPS) << "Creating readout for TriggerPrimitive"; @@ -78,8 +92,7 @@ TriggerDataHandlerModule::create_readout(const appmodel::DataHandlerModule* modc TriggerPrimitiveTypeAdapter, TPRequestHandler, rol::SkipListLatencyBufferModel, - TPProcessor, - TriggerPrimitiveTypeAdapter::TPAVector>>(run_marker); + TPProcessor>>(run_marker); register_node("TPProcessor", readout_model); readout_model->init(modconf); return readout_model; From cc440485534d439044d5389a2983fc5268017fcc Mon Sep 17 00:00:00 2001 From: Deniz Tuana Ergonul Uzun Date: Thu, 31 Oct 2024 10:57:53 +0100 Subject: [PATCH 6/8] Use alias --- plugins/DataSubscriberModule.cpp | 2 +- plugins/TriggerDataHandlerModule.cpp | 2 +- src/TPProcessor.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/DataSubscriberModule.cpp b/plugins/DataSubscriberModule.cpp index 30480191..753a5fcf 100644 --- a/plugins/DataSubscriberModule.cpp +++ b/plugins/DataSubscriberModule.cpp @@ -30,7 +30,7 @@ namespace dunedaq { //DUNE_DAQ_TYPESTRING(dunedaq::trigger::TPSet, "TPSet") DUNE_DAQ_TYPESTRING(dunedaq::trigger::TriggerPrimitiveTypeAdapter, "TriggerPrimitive") -DUNE_DAQ_TYPESTRING(std::vector, "TriggerPrimitiveVector") +DUNE_DAQ_TYPESTRING(dunedaq::trigger::TriggerPrimitiveTypeAdapter::TPAVector, "TriggerPrimitiveVector") DUNE_DAQ_TYPESTRING(dunedaq::trigger::TAWrapper, "TriggerActivity") DUNE_DAQ_TYPESTRING(dunedaq::trigger::TCWrapper, "TriggerCandidate") diff --git a/plugins/TriggerDataHandlerModule.cpp b/plugins/TriggerDataHandlerModule.cpp index 9f0b4ede..7e4ff761 100644 --- a/plugins/TriggerDataHandlerModule.cpp +++ b/plugins/TriggerDataHandlerModule.cpp @@ -34,7 +34,7 @@ using namespace dunedaq::datahandlinglibs::logging; namespace dunedaq { DUNE_DAQ_TYPESTRING(dunedaq::trigger::TriggerPrimitiveTypeAdapter, "TriggerPrimitive") -DUNE_DAQ_TYPESTRING(std::vector, "TriggerPrimitiveVector") +DUNE_DAQ_TYPESTRING(dunedaq::trigger::TriggerPrimitiveTypeAdapter::TPAVector, "TriggerPrimitiveVector") DUNE_DAQ_TYPESTRING(dunedaq::trigger::TAWrapper, "TriggerActivity") DUNE_DAQ_TYPESTRING(dunedaq::trigger::TCWrapper, "TriggerCandidate") diff --git a/src/TPProcessor.cpp b/src/TPProcessor.cpp index 662fb80b..c5220961 100644 --- a/src/TPProcessor.cpp +++ b/src/TPProcessor.cpp @@ -30,7 +30,7 @@ using dunedaq::datahandlinglibs::logging::TLVL_TAKE_NOTE; // THIS SHOULDN'T BE HERE!!!!! But it is necessary..... DUNE_DAQ_TYPESTRING(dunedaq::trigger::TriggerPrimitiveTypeAdapter, "TriggerPrimitive") -DUNE_DAQ_TYPESTRING(std::vector, "TriggerPrimitiveVector") +DUNE_DAQ_TYPESTRING(dunedaq::trigger::TriggerPrimitiveTypeAdapter::TPAVector, "TriggerPrimitiveVector") namespace dunedaq { namespace trigger { From e27b1c478c0f9e8fd36bf435621b465c4fd7d202 Mon Sep 17 00:00:00 2001 From: Deniz Tuana Ergonul Uzun Date: Fri, 8 Nov 2024 11:47:06 +0100 Subject: [PATCH 7/8] Remove alias --- include/trigger/TriggerPrimitiveTypeAdapter.hpp | 1 - include/trigger/detail/TriggerDataHandlingModel.hxx | 8 +++++--- plugins/DataSubscriberModule.cpp | 4 ++-- plugins/TriggerDataHandlerModule.cpp | 4 ++-- src/TPProcessor.cpp | 2 +- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/include/trigger/TriggerPrimitiveTypeAdapter.hpp b/include/trigger/TriggerPrimitiveTypeAdapter.hpp index 3f1ea59f..70aae23f 100644 --- a/include/trigger/TriggerPrimitiveTypeAdapter.hpp +++ b/include/trigger/TriggerPrimitiveTypeAdapter.hpp @@ -20,7 +20,6 @@ const constexpr std::size_t kTriggerPrimitiveSize = sizeof(trgdataformats::Trigg struct TriggerPrimitiveTypeAdapter { using FrameType = TriggerPrimitiveTypeAdapter; - using TPAVector = std::vector; // data trgdataformats::TriggerPrimitive tp; diff --git a/include/trigger/detail/TriggerDataHandlingModel.hxx b/include/trigger/detail/TriggerDataHandlingModel.hxx index 65dfc14a..7f7bf142 100644 --- a/include/trigger/detail/TriggerDataHandlingModel.hxx +++ b/include/trigger/detail/TriggerDataHandlingModel.hxx @@ -18,7 +18,8 @@ TriggerDataHandlingModel::TriggerDataHandlingModel(std: } template -std::vector TriggerDataHandlingModel::transform_payload(IDT& original) const +std::vector +TriggerDataHandlingModel::transform_payload(IDT& original) const { if constexpr (std::is_same_v) { std::vector transformed(original.objects.size()); @@ -26,9 +27,10 @@ std::vector TriggerDataHandlingModel::transform_pa transformed[i].tp = std::move(original.objects[i]); } return transformed; - } else if constexpr (std::is_same_v) { + } else if constexpr (std::is_same_v>) { return std::move(original); - } else if constexpr (std::is_same_v || std::is_same_v) { + } else if constexpr (std::is_same_v || + std::is_same_v) { return { RDT(std::move(original)) }; } else { diff --git a/plugins/DataSubscriberModule.cpp b/plugins/DataSubscriberModule.cpp index 753a5fcf..094d59f8 100644 --- a/plugins/DataSubscriberModule.cpp +++ b/plugins/DataSubscriberModule.cpp @@ -30,7 +30,7 @@ namespace dunedaq { //DUNE_DAQ_TYPESTRING(dunedaq::trigger::TPSet, "TPSet") DUNE_DAQ_TYPESTRING(dunedaq::trigger::TriggerPrimitiveTypeAdapter, "TriggerPrimitive") -DUNE_DAQ_TYPESTRING(dunedaq::trigger::TriggerPrimitiveTypeAdapter::TPAVector, "TriggerPrimitiveVector") +DUNE_DAQ_TYPESTRING(std::vector, "TriggerPrimitiveVector") DUNE_DAQ_TYPESTRING(dunedaq::trigger::TAWrapper, "TriggerActivity") DUNE_DAQ_TYPESTRING(dunedaq::trigger::TCWrapper, "TriggerCandidate") @@ -81,7 +81,7 @@ DataSubscriberModule::create_data_subscriber(const confmodel::DaqModule* cfg) if (raw_dt == "TPSet") { TLOG_DEBUG(1) << "Creating trigger primitives subscriber"; auto source_model = - std::make_shared>(); + std::make_shared>>(); return source_model; } diff --git a/plugins/TriggerDataHandlerModule.cpp b/plugins/TriggerDataHandlerModule.cpp index 7e4ff761..f385faa8 100644 --- a/plugins/TriggerDataHandlerModule.cpp +++ b/plugins/TriggerDataHandlerModule.cpp @@ -34,7 +34,7 @@ using namespace dunedaq::datahandlinglibs::logging; namespace dunedaq { DUNE_DAQ_TYPESTRING(dunedaq::trigger::TriggerPrimitiveTypeAdapter, "TriggerPrimitive") -DUNE_DAQ_TYPESTRING(dunedaq::trigger::TriggerPrimitiveTypeAdapter::TPAVector, "TriggerPrimitiveVector") +DUNE_DAQ_TYPESTRING(std::vector, "TriggerPrimitiveVector") DUNE_DAQ_TYPESTRING(dunedaq::trigger::TAWrapper, "TriggerActivity") DUNE_DAQ_TYPESTRING(dunedaq::trigger::TCWrapper, "TriggerCandidate") @@ -79,7 +79,7 @@ TriggerDataHandlerModule::create_readout(const appmodel::DataHandlerModule* modc TPRequestHandler, rol::SkipListLatencyBufferModel, TPProcessor, - TriggerPrimitiveTypeAdapter::TPAVector>>(run_marker); + std::vector>>(run_marker); register_node("TPProcessor", readout_model); readout_model->init(modconf); return readout_model; diff --git a/src/TPProcessor.cpp b/src/TPProcessor.cpp index c5220961..662fb80b 100644 --- a/src/TPProcessor.cpp +++ b/src/TPProcessor.cpp @@ -30,7 +30,7 @@ using dunedaq::datahandlinglibs::logging::TLVL_TAKE_NOTE; // THIS SHOULDN'T BE HERE!!!!! But it is necessary..... DUNE_DAQ_TYPESTRING(dunedaq::trigger::TriggerPrimitiveTypeAdapter, "TriggerPrimitive") -DUNE_DAQ_TYPESTRING(dunedaq::trigger::TriggerPrimitiveTypeAdapter::TPAVector, "TriggerPrimitiveVector") +DUNE_DAQ_TYPESTRING(std::vector, "TriggerPrimitiveVector") namespace dunedaq { namespace trigger { From 835186d46e63188d4f3d13a91e6070c54b9a6c63 Mon Sep 17 00:00:00 2001 From: Deniz Tuana Ergonul Uzun Date: Fri, 8 Nov 2024 11:50:00 +0100 Subject: [PATCH 8/8] Remove empty line --- include/trigger/TriggerPrimitiveTypeAdapter.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/include/trigger/TriggerPrimitiveTypeAdapter.hpp b/include/trigger/TriggerPrimitiveTypeAdapter.hpp index 70aae23f..0119c57e 100644 --- a/include/trigger/TriggerPrimitiveTypeAdapter.hpp +++ b/include/trigger/TriggerPrimitiveTypeAdapter.hpp @@ -20,7 +20,6 @@ const constexpr std::size_t kTriggerPrimitiveSize = sizeof(trgdataformats::Trigg struct TriggerPrimitiveTypeAdapter { using FrameType = TriggerPrimitiveTypeAdapter; - // data trgdataformats::TriggerPrimitive tp; // comparable based on start timestamp