diff --git a/include/appmodel/ConfigurationHelper.hpp b/include/appmodel/ConfigurationHelper.hpp index 1342a17..b5f7c7c 100644 --- a/include/appmodel/ConfigurationHelper.hpp +++ b/include/appmodel/ConfigurationHelper.hpp @@ -7,8 +7,14 @@ * Licensing/copyright details are in the COPYING file that you should have * received with this code. */ -#ifndef APPMODEL_INCLUDE_CONFIGURATIONHELPER_HPP_ -#define APPMODEL_INCLUDE_CONFIGURATIONHELPER_HPP_ +#ifndef APPMODEL_INCLUDE_APPMODEL_CONFIGURATIONHELPER_HPP_ +#define APPMODEL_INCLUDE_APPMODEL_CONFIGURATIONHELPER_HPP_ + +#include "appmodel/NetworkConnectionDescriptor.hpp" +#include "appmodel/SourceIDConf.hpp" +#include "conffwk/DalObject.hpp" +#include "confmodel/Service.hpp" +#include "confmodel/Session.hpp" #include #include @@ -16,17 +22,7 @@ #include #include -namespace dunedaq::confmodel { -class Session; -class Service; -} // namespace dunedaq::confmodel -namespace dunedaq::conffwk { -class DalObject; -} // namespace dunedaq::conffwk - namespace dunedaq::appmodel { -class NetworkConnectionDescriptor; -class SourceIDConf; /// Helper class to extract information from Session object without /// exposing the Session to user code @@ -68,7 +64,7 @@ class ConfigurationHelper /// /// @returns A map of application uids to vectors of streams that /// they contain - std::map> get_stream_source_ids(); + std::map> get_stream_source_ids(); // NOLINT(build/unsigned) /// @brief Get the source ids of all the TP streams in all /// ReadoutApplications and TriggerApplications @@ -134,4 +130,4 @@ class ConfigurationHelper } // namespace dunedaq::appmodel -#endif // APPMODEL_INCLUDE_CONFIGURATIONHELPER_HPP_ +#endif // APPMODEL_INCLUDE_APPMODEL_CONFIGURATIONHELPER_HPP_ diff --git a/include/appmodel/appmodelIssues.hpp b/include/appmodel/appmodelIssues.hpp index 9c9c97a..1b04b82 100644 --- a/include/appmodel/appmodelIssues.hpp +++ b/include/appmodel/appmodelIssues.hpp @@ -1,10 +1,20 @@ - -#ifndef APPDALISSUES_HPP -#define APPDALISSUES_HPP +/** + * @file appmodelIssues.hpp + * + * Define common ERS issues for the appmodel package + * + * This is part of the DUNE DAQ Software Suite, copyright 2023. + * Licensing/copyright details are in the COPYING file that you should have + * received with this code. + */ +#ifndef APPMODEL_INCLUDE_APPMODEL_APPMODELISSUES_HPP_ +#define APPMODEL_INCLUDE_APPMODEL_APPMODELISSUES_HPP_ #include "ers/Issue.hpp" #include "logging/Logging.hpp" // NOTE: if ISSUES ARE DECLARED BEFORE include logging/Logging.hpp, TLOG_DEBUG< + namespace dunedaq { ERS_DECLARE_ISSUE(appmodel, BadConf, what, ((std::string)what)) ERS_DECLARE_ISSUE(appmodel, @@ -30,4 +40,4 @@ ERS_DECLARE_ISSUE(appmodel, BadD2d, "Contained object is not a DetectorToDaqConn } // namespace dunedaq -#endif // APPDALISSUES_HPP +#endif // APPMODEL_INCLUDE_APPMODEL_APPMODELISSUES_HPP_ diff --git a/pybindsrc/dal_methods.cpp b/pybindsrc/dal_methods.cpp index 208e06b..44ad3b7 100644 --- a/pybindsrc/dal_methods.cpp +++ b/pybindsrc/dal_methods.cpp @@ -15,7 +15,10 @@ #include "appmodel/SmartDaqApplication.hpp" +#include #include +#include +#include namespace py = pybind11; @@ -37,14 +40,14 @@ smart_daq_application_generate_modules(const conffwk::Configuration& confdb, const std::string& app_id, const std::string& session_id) { - auto app = const_cast(confdb).get(app_id); - auto session = const_cast(confdb).get(session_id); + auto app = const_cast(confdb).get(app_id); // NOLINT + auto session = const_cast(confdb).get(session_id); // NOLINT auto helper = std::make_shared(session); app->generate_modules(helper); std::vector mods; for (auto mod : app->get_modules()) { - mods.push_back({ mod->UID(), mod->class_name() }); + mods.emplace_back(mod->UID(), mod->class_name()); } return mods; } diff --git a/schema/appmodel/application.schema.xml b/schema/appmodel/application.schema.xml index ead2472..a4a8a98 100644 --- a/schema/appmodel/application.schema.xml +++ b/schema/appmodel/application.schema.xml @@ -80,7 +80,7 @@ - + @@ -105,6 +105,7 @@ + @@ -119,6 +120,7 @@ + @@ -126,11 +128,14 @@ - - + + + - - + + + + @@ -239,6 +244,22 @@ + + + + + + + + + + + + + + + + @@ -591,6 +612,7 @@ + @@ -599,7 +621,6 @@ - diff --git a/src/CIBApplication.cpp b/src/CIBApplication.cpp index 2f437ef..136d0fb 100644 --- a/src/CIBApplication.cpp +++ b/src/CIBApplication.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -106,14 +107,14 @@ CIBApplication::generate_modules(std::shared_ptr // Process special Network rules! // Looking for Fragment rules from DFAppplications in current Session std::vector fragOutObjs; - for (auto [uid, descriptor] : helper->get_netdescriptors("Fragment", "DFApplication")) { + for (auto const& [uid, descriptor] : helper->get_netdescriptors("Fragment", "DFApplication")) { fragOutObjs.emplace_back(obj_fac.create_net_obj(descriptor, uid)); } // start building the list of outputs std::vector fh_output_objs; for (auto& fNet : fragOutObjs) { - fh_output_objs.push_back(&fNet); + fh_output_objs.push_back(&fNet); // NOLINT(performance-inefficient-vector-operation) } std::vector CIB_module_outputs; @@ -124,8 +125,7 @@ CIBApplication::generate_modules(std::shared_ptr // ---------------------------- // create DLH // ---------------------------- - int det_id = 1; // TODO Eric Flumerfelt , 08-Feb-2024: This is a magic number corresponding to kDAQ - // // NOLINT(readability/todo) + int det_id = 1; // This is a magic number corresponding to kDAQ TLOG() << "creating OKS configuration object for CIB Data Link Handler class " << dlhClass << ", id " << id; std::string uid("DLH-CIB"); conffwk::ConfigObject dlhObj = obj_fac.create(dlhClass, uid); @@ -171,7 +171,7 @@ CIBApplication::generate_modules(std::shared_ptr std::vector CIB_module_output_ptrs; for (const auto& o : CIB_module_outputs) { - CIB_module_output_ptrs.push_back(&o); + CIB_module_output_ptrs.push_back(&o); // NOLINT(performance-inefficient-vector-operation) } module_obj.set_objs("outputs", CIB_module_output_ptrs); @@ -187,7 +187,7 @@ CIBApplication::generate_modules(std::shared_ptr nlohmann::json CIBoardConf::get_cib_json(const dunedaq::confmodel::Session& session, std::optional socket_host, - std::optional socket_port) const + std::optional socket_port) const // NOLINT(build/unsigned) { // shut up compiler! diff --git a/src/CTBApplication.cpp b/src/CTBApplication.cpp index 558d3d3..3c4d2a7 100644 --- a/src/CTBApplication.cpp +++ b/src/CTBApplication.cpp @@ -49,6 +49,8 @@ #include #include #include +#include +#include #include #include #include @@ -60,7 +62,7 @@ std::vector CTBApplication::contained_excludable_entities() const { std::vector resources; - resources.push_back(dynamic_cast(get_board())); + resources.push_back(dynamic_cast(get_board())); // NOLINT(runtime/rtti) return resources; } @@ -122,14 +124,15 @@ CTBApplication::generate_modules(std::shared_ptr // Process special Network rules! // Looking for Fragment rules from DFAppplications in current Session std::vector fragOutObjs; - for (auto [uid, descriptor] : helper->get_netdescriptors("Fragment", "DFApplication")) { - fragOutObjs.emplace_back(obj_fac.create_net_obj(descriptor, uid)); + for (auto const& [uid, descriptor] : helper->get_netdescriptors("Fragment", "DFApplication")) { + fragOutObjs.emplace_back( + obj_fac.create_net_obj(descriptor, uid)); // NOLINT(performance-inefficient-vector-operation) } // start building the list of outputs std::vector fh_output_objs; for (auto& fNet : fragOutObjs) { - fh_output_objs.push_back(&fNet); + fh_output_objs.push_back(&fNet); // NOLINT(performance-inefficient-vector-operation) } std::vector ctb_module_outputs; @@ -144,14 +147,13 @@ CTBApplication::generate_modules(std::shared_ptr // ---------------------------- // create DLH // ---------------------------- - auto det_id = - 1; // TODO Eric Flumerfelt , 08-Feb-2024: This is a magic number corresponding to kDAQ + auto det_id = 1; // This is a magic number corresponding to kDAQ TLOG() << "creating OKS configuration object for " + s.first + " Data Link Handler class " << dlhClass << ", id " << id; std::string uid("DLH-" + s.first); conffwk::ConfigObject dlhObj = obj_fac.create(dlhClass, uid); - dlhObj.set_by_val("source_id", id); - dlhObj.set_by_val("detector_id", det_id); + dlhObj.set_by_val("source_id", id); // NOLINT(build/unsigned) + dlhObj.set_by_val("detector_id", det_id); // NOLINT(build/unsigned) dlhObj.set_by_val("post_processing_enabled", false); dlhObj.set_obj("module_configuration", &dlhConf->config_object()); @@ -193,7 +195,7 @@ CTBApplication::generate_modules(std::shared_ptr std::vector ctb_module_output_ptrs; for (const auto& o : ctb_module_outputs) { - ctb_module_output_ptrs.push_back(&o); + ctb_module_output_ptrs.push_back(&o); // NOLINT(performance-inefficient-vector-operation) } module_obj.set_objs("outputs", ctb_module_output_ptrs); @@ -203,7 +205,7 @@ CTBApplication::generate_modules(std::shared_ptr modules.push_back(module); obj_fac.update_modules(modules); -} +} // NOLINT(readability/fn_size) std::vector CTBoardConf::contained_excludable_entities() const diff --git a/src/ConfigObjectFactory.cpp b/src/ConfigObjectFactory.cpp index 8f90795..3378de1 100644 --- a/src/ConfigObjectFactory.cpp +++ b/src/ConfigObjectFactory.cpp @@ -1,12 +1,20 @@ - +/** + * @file ConfigObjectFactory.cpp + * + * Imeplement a helper class for SmartDaqApplication module generators + * + * This is part of the DUNE DAQ Software Suite, copyright 2023. + * Licensing/copyright details are in the COPYING file that you should have + * received with this code. + */ #include "ConfigObjectFactory.hpp" #include "confmodel/Service.hpp" #include "oks/file.hpp" #include // Replace with std::format when we switch to a newer compiler? +#include -namespace dunedaq { -namespace appmodel { +namespace dunedaq::appmodel { ConfigObjectFactory::ConfigObjectFactory(const SmartDaqApplication* parent) : m_config(&parent->configuration()) @@ -41,22 +49,22 @@ ConfigObjectFactory::create_queue_obj(const QueueDescriptor* qdesc, std::string auto queue_obj = create("Queue", queue_uid); queue_obj.set_by_val("data_type", qdesc->get_data_type()); queue_obj.set_by_val("queue_type", qdesc->get_queue_type()); - queue_obj.set_by_val("capacity", qdesc->get_capacity()); + queue_obj.set_by_val("capacity", qdesc->get_capacity()); // NOLINT(build/unsigned) return queue_obj; } //--- conffwk::ConfigObject -ConfigObjectFactory::create_queue_sid_obj(const QueueDescriptor* qdesc, uint32_t src_id) const +ConfigObjectFactory::create_queue_sid_obj(const QueueDescriptor* qdesc, uint32_t src_id) const // NOLINT(build/unsigned) { std::string queue_uid(fmt::format("{}{}", qdesc->get_uid_base(), src_id)); auto queue_obj = create("QueueWithSourceId", queue_uid); queue_obj.set_by_val("data_type", qdesc->get_data_type()); queue_obj.set_by_val("queue_type", qdesc->get_queue_type()); - queue_obj.set_by_val("capacity", qdesc->get_capacity()); - queue_obj.set_by_val("source_id", src_id); + queue_obj.set_by_val("capacity", qdesc->get_capacity()); // NOLINT(build/unsigned) + queue_obj.set_by_val("source_id", src_id); // NOLINT(build/unsigned) return queue_obj; } @@ -70,13 +78,14 @@ ConfigObjectFactory::create_queue_sid_obj(const QueueDescriptor* qdesc, const co //--- conffwk::ConfigObject -ConfigObjectFactory::create_callback_sid_obj(const DataMoveCallbackDescriptor* cdesc, uint32_t src_id) const +ConfigObjectFactory::create_callback_sid_obj(const DataMoveCallbackDescriptor* cdesc, + uint32_t src_id) const // NOLINT(build/unsigned) { std::string rdc_uid(fmt::format("{}{}", cdesc->get_uid_base(), src_id)); auto rdc_obj = create("DataMoveCallbackConf", rdc_uid); rdc_obj.set_by_val("data_type", cdesc->get_data_type()); - rdc_obj.set_by_val("source_id", src_id); + rdc_obj.set_by_val("source_id", src_id); // NOLINT(build/unsigned) return rdc_obj; } @@ -100,7 +109,7 @@ ConfigObjectFactory::create_net_obj(const NetworkConnectionDescriptor* ndesc, st net_obj.set_by_val("data_type", ndesc->get_data_type()); net_obj.set_by_val("connection_type", ndesc->get_connection_type()); - net_obj.set_by_val("capacity", ndesc->get_capacity()); + net_obj.set_by_val("capacity", ndesc->get_capacity()); // NOLINT(build/unsigned) net_obj.set_obj("associated_service", &svc_obj); return net_obj; @@ -112,5 +121,4 @@ ConfigObjectFactory::create_net_obj(const NetworkConnectionDescriptor* ndesc) co return create_net_obj(ndesc, this->m_app_uid); } -} // namespace appmodel -} // namespace dunedaq +} // namespace dunedaq::appmodel diff --git a/src/ConfigObjectFactory.hpp b/src/ConfigObjectFactory.hpp index 8de56fe..6f5ac83 100644 --- a/src/ConfigObjectFactory.hpp +++ b/src/ConfigObjectFactory.hpp @@ -7,8 +7,8 @@ * Licensing/copyright details are in the COPYING file that you should have * received with this code. */ -#ifndef APPMODEL_INCLUDE_OBJECTFACTORY_HPP_ -#define APPMODEL_INCLUDE_OBJECTFACTORY_HPP_ +#ifndef APPMODEL_SRC_CONFIGOBJECTFACTORY_HPP_ +#define APPMODEL_SRC_CONFIGOBJECTFACTORY_HPP_ #include "appmodel/DataMoveCallbackDescriptor.hpp" #include "appmodel/NetworkConnectionDescriptor.hpp" @@ -46,7 +46,8 @@ class ConfigObjectFactory [[nodiscard]] conffwk::ConfigObject create_queue_obj(const QueueDescriptor* qdesc, std::string uid = "") const; //--- - [[nodiscard]] conffwk::ConfigObject create_queue_sid_obj(const QueueDescriptor* qdesc, uint32_t src_id) const; + [[nodiscard]] conffwk::ConfigObject create_queue_sid_obj(const QueueDescriptor* qdesc, + uint32_t src_id) const; // NOLINT(build/unsigned) //--- [[nodiscard]] conffwk::ConfigObject create_queue_sid_obj(const QueueDescriptor* qdesc, @@ -54,7 +55,7 @@ class ConfigObjectFactory //--- [[nodiscard]] conffwk::ConfigObject create_callback_sid_obj(const DataMoveCallbackDescriptor* cdesc, - uint32_t src_id) const; + uint32_t src_id) const; // NOLINT(build/unsigned) /** * \brief Helper function that gets a network connection config @@ -88,7 +89,7 @@ class ConfigObjectFactory "SmartDaqApplication contains DaqModules which would be overwritten by generated DaqModules")); } if (!modules.empty()) { - const_cast(app)->set_modules(modules); + const_cast(app)->set_modules(modules); // NOLINT m_config->update({ m_app_uid }, {}, {}); } } @@ -96,4 +97,4 @@ class ConfigObjectFactory } // namespace dunedaq::appmodel -#endif // APPMODEL_INCLUDE_OBJECTFACTORY_HPP_ +#endif // APPMODEL_SRC_CONFIGOBJECTFACTORY_HPP_ diff --git a/src/ConfigurationHelper.cpp b/src/ConfigurationHelper.cpp index c51702b..451b755 100644 --- a/src/ConfigurationHelper.cpp +++ b/src/ConfigurationHelper.cpp @@ -28,6 +28,11 @@ #include "confmodel/Service.hpp" #include "confmodel/Session.hpp" +#include +#include +#include +#include + using namespace dunedaq; using namespace dunedaq::appmodel; @@ -45,7 +50,7 @@ ConfigurationHelper::get_netdescriptors(const std::string& data_type, const std: for (auto rule : smart_app->get_network_rules()) { auto desc = rule->get_descriptor(); if (desc->get_data_type() == data_type) { - result.emplace_back(std::pair{ app->UID(), desc }); + result.emplace_back(app->UID(), desc); } } } @@ -73,14 +78,14 @@ ConfigurationHelper::get_services(std::string app_class, std::string data_type) return result; } -std::map> +std::map> // NOLINT(build/unsigned) ConfigurationHelper::get_stream_source_ids() { - std::map> result; + std::map> result; // NOLINT(build/unsigned) for (auto app : m_session->included_applications()) { auto ro_app = app->cast(); if (ro_app != nullptr) { - std::vector streams; + std::vector streams; // NOLINT(build/unsigned) for (auto res : ro_app->contained_excludable_entities()) { if (!res->is_excluded(*m_session)) { auto d2d = res->cast(); @@ -98,7 +103,7 @@ ConfigurationHelper::get_stream_source_ids() } else { auto fake_app = app->cast(); if (fake_app != nullptr) { - std::vector streams; + std::vector streams; // NOLINT(build/unsigned) for (auto res : fake_app->contained_excludable_entities()) { if (!res->is_excluded(*m_session)) { auto fdpc = res->cast(); @@ -170,7 +175,7 @@ ConfigurationHelper::get_all_app_source_ids(std::string app_class) if (app_class.empty() || app->castable(app_class)) { auto class_info = app->configuration().get_class_info(app->class_name()); auto obj = app->config_object(); - for (auto rel : class_info.p_relationships) { + for (auto const& rel : class_info.p_relationships) { if (rel.p_type == "SourceIDConf") { if (rel.p_cardinality == dunedaq::conffwk::cardinality_t::zero_or_one || rel.p_cardinality == dunedaq::conffwk::cardinality_t::only_one) { diff --git a/src/DFApplication.cpp b/src/DFApplication.cpp index 9b7ed4c..bb2cfc1 100644 --- a/src/DFApplication.cpp +++ b/src/DFApplication.cpp @@ -14,6 +14,8 @@ #include "appmodel/DataStoreConf.hpp" #include "appmodel/DataWriterConf.hpp" #include "appmodel/DataWriterModule.hpp" +#include "appmodel/DataflowStatusModule.hpp" +#include "appmodel/DataflowStatusModuleConf.hpp" #include "appmodel/FilenameParams.hpp" #include "appmodel/NetworkConnectionDescriptor.hpp" #include "appmodel/NetworkConnectionRule.hpp" @@ -31,17 +33,18 @@ #include "oks/kernel.hpp" #include +#include +#include #include #include -namespace dunedaq { -namespace appmodel { +namespace dunedaq::appmodel { static inline void fill_sourceid_object(const ConfigObjectFactory& obj_fac, const conffwk::ConfigObject* netConn, const std::string& uid, - const std::vector& stream_source_ids, + const std::vector& stream_source_ids, // NOLINT(build/unsigned) const std::vector& tp_source_ids, conffwk::ConfigObject& sidNetObj, std::vector> sidObjs) @@ -53,7 +56,7 @@ fill_sourceid_object(const ConfigObjectFactory& obj_fac, for (auto& source_id : stream_source_ids) { std::string streamSidUid(uid + "SourceIDConf" + std::to_string(source_id)); auto stream_sid_obj = std::make_shared(obj_fac.create("SourceIDConf", streamSidUid)); - stream_sid_obj->set_by_val("sid", source_id); + stream_sid_obj->set_by_val("sid", source_id); // NOLINT(build/unsigned) stream_sid_obj->set_by_val("subsystem", "Detector_Readout"); sidObjs.push_back(stream_sid_obj); source_id_objs.push_back(sidObjs.back().get()); @@ -63,13 +66,6 @@ fill_sourceid_object(const ConfigObjectFactory& obj_fac, sidObjs.push_back(std::make_shared(tp_sid->config_object())); source_id_objs.push_back(sidObjs.back().get()); } - /* - std::string trgSidUid(roapp->UID() + "TRGSourceIDConf" + std::to_string(roapp->get_tp_source_id())); - auto trig_sid_obj = std::make_shared(obj_fac.create("SourceIDConf", trgSidUid)); - trig_sid_obj->set_by_val("sid", roapp->get_tp_source_id()); - trig_sid_obj->set_by_val("subsystem", "Trigger"); - source_id_objs.push_back(sidObjs.back().get()); - */ sidNetObj.set_objs("source_ids", source_id_objs); } @@ -125,31 +121,60 @@ DFApplication::generate_modules(std::shared_ptr h // Prepare TRB output objects std::vector trbInputObjs; std::vector trbOutputObjs; + std::vector dfsInputObjs; + std::vector dfsOutputObjs; std::vector trbSidNetObjs; // -- First, we process expected Queue and Network connections and create their objects. // Process the queue rules looking for the TriggerRecord queue between TRB and DataWriterModule const QueueDescriptor* trQDesc = nullptr; + const QueueDescriptor* tdQDesc = nullptr; + const QueueDescriptor* trbcQDesc = nullptr; + const QueueDescriptor* tokenQDesc = nullptr; for (auto rule : get_queue_rules()) { auto destination_class = rule->get_destination_class(); + if (destination_class == "TRBModule") { + tdQDesc = rule->get_descriptor(); + } if (destination_class == "DataWriterModule") { trQDesc = rule->get_descriptor(); } + if (destination_class == "DataflowStatusModule") { + auto descriptor = rule->get_descriptor(); + if (descriptor->get_data_type() == "TriggerDecisionToken") { + tokenQDesc = descriptor; + } else if (descriptor->get_data_type() == "TRBCompletion") { + trbcQDesc = descriptor; + } + } + } + if (tdQDesc == nullptr) { // BadConf if no descriptor between DataflowStatus and TRB + throw(BadConf(ERS_HERE, "Could not find queue descriptor rule for TriggerDecisions!")); } if (trQDesc == nullptr) { // BadConf if no descriptor between TRB and DataWriterModule throw(BadConf(ERS_HERE, "Could not find queue descriptor rule for TriggerRecords!")); } + if (tokenQDesc == nullptr) { // BadConf if no descriptor between DataWriterModule and DataflowStatus + throw(BadConf(ERS_HERE, "Could not find queue descriptor rule for TriggerDecisionTokens!")); + } + if (trbcQDesc == nullptr) { // BadConf if no descriptor between TRB and DataflowStatus + throw(BadConf(ERS_HERE, "Could not find queue descriptor rule for TRBCompletions!")); + } // Create queue connection config object auto trQueueObj = obj_fac.create_queue_obj(trQDesc, UID()); + auto tdQueueObj = obj_fac.create_queue_obj(tdQDesc, UID()); + auto trbcQueueObj = obj_fac.create_queue_obj(trbcQDesc, UID()); + auto tokenQueueObj = obj_fac.create_queue_obj(tokenQDesc, UID()); // Place trigger record queue object into vector of output objs of TRB module trbOutputObjs.push_back(&trQueueObj); + trbOutputObjs.push_back(&trbcQueueObj); // Process the network rules looking for the Fragments and TriggerDecision inputs for TRB const NetworkConnectionDescriptor* fragNetDesc = nullptr; const NetworkConnectionDescriptor* trigdecNetDesc = nullptr; - const NetworkConnectionDescriptor* tokenNetDesc = nullptr; + const NetworkConnectionDescriptor* statusReqNetDesc = nullptr; const NetworkConnectionDescriptor* trmonReqNetDesc = nullptr; const NetworkConnectionDescriptor* trmonTRNetDesc = nullptr; for (auto rule : get_network_rules()) { @@ -159,22 +184,22 @@ DFApplication::generate_modules(std::shared_ptr h fragNetDesc = rule->get_descriptor(); } else if (data_type == "TriggerDecision") { trigdecNetDesc = rule->get_descriptor(); - } else if (data_type == "TriggerDecisionToken") { - tokenNetDesc = rule->get_descriptor(); } else if (data_type == "TRMonRequest") { trmonReqNetDesc = rule->get_descriptor(); } else if (data_type == "TriggerRecord") { trmonTRNetDesc = rule->get_descriptor(); + } else if (data_type == "DataflowStatusRequest") { + statusReqNetDesc = rule->get_descriptor(); } } if (fragNetDesc == nullptr) { // BadConf if no descriptor for Fragments into TRB throw(BadConf(ERS_HERE, "Could not find network descriptor rule for input Fragments!")); } - if (trigdecNetDesc == nullptr) { // BadCond if no descriptor for TriggerDecisions into TRB + if (trigdecNetDesc == nullptr) { // BadConf if no descriptor for TriggerDecisions into TRB throw(BadConf(ERS_HERE, "Could not find network descriptor rule for input TriggerDecisions!")); } - if (tokenNetDesc == nullptr) { // BadCond if no descriptor for Tokens out of DataWriterModule - throw(BadConf(ERS_HERE, "Could not find network descriptor rule for output TriggerDecisionTokens!")); + if (statusReqNetDesc == nullptr) { // BadConf if no descriptor for DataflowStatusRequest input + throw(BadConf(ERS_HERE, "Could not find network descriptor rule for input DataflowStatusRequests!")); } if (get_source_id() == nullptr) { throw(BadConf(ERS_HERE, "Could not retrieve SourceIDConf")); @@ -182,7 +207,7 @@ DFApplication::generate_modules(std::shared_ptr h // Create network connection config object auto fragNetObj = obj_fac.create_net_obj(fragNetDesc, UID()); auto trigdecNetObj = obj_fac.create_net_obj(trigdecNetDesc, UID()); - auto tokenNetObj = obj_fac.create_net_obj(tokenNetDesc, ""); + auto statusReqNetObj = obj_fac.create_net_obj(statusReqNetDesc, UID()); conffwk::ConfigObject trmonReqNetObj; conffwk::ConfigObject trmonTRNetObj; if (trmonReqNetDesc != nullptr) { @@ -198,13 +223,13 @@ DFApplication::generate_modules(std::shared_ptr h std::vector sidNetObjs; std::vector> sidObjs; std::set processed_apps; - for (auto uid : helper->get_app_uids("DFApplication")) { + for (auto const& uid : helper->get_app_uids("DFApplication")) { processed_apps.insert(uid); } auto stream_src_ids = helper->get_stream_source_ids(); auto tp_src_ids = helper->get_tp_source_ids(); - for (auto [uid, descriptor] : helper->get_netdescriptors("DataRequest", "ReadoutApplication")) { + for (auto const& [uid, descriptor] : helper->get_netdescriptors("DataRequest", "ReadoutApplication")) { dreqNetObjs.emplace_back(obj_fac.create_net_obj(descriptor, uid)); std::string sidToNetUid(descriptor->get_uid_base() + uid + "-sids"); @@ -215,12 +240,12 @@ DFApplication::generate_modules(std::shared_ptr h processed_apps.insert(uid); } - for (auto [uid, descriptor] : helper->get_netdescriptors("DataRequest", "TPReplayApplication")) { + for (auto const& [uid, descriptor] : helper->get_netdescriptors("DataRequest", "TPReplayApplication")) { fill_replay_sourceid_object(obj_fac, uid, tp_src_ids.at(uid), &dreqNetObjs, &sidNetObjs, descriptor, sidObjs); processed_apps.insert(uid); } - for (auto [uid, descriptor] : helper->get_netdescriptors("DataRequest", "FakeDataApplication")) { + for (auto const& [uid, descriptor] : helper->get_netdescriptors("DataRequest", "FakeDataApplication")) { dreqNetObjs.emplace_back(obj_fac.create_net_obj(descriptor, uid)); std::string sidToNetUid(descriptor->get_uid_base() + uid + "-sids"); @@ -238,14 +263,14 @@ DFApplication::generate_modules(std::shared_ptr h // now we treat the CTB which has 2 connections related to source IDs const auto ctb_type = "CTBApplication"; - for (auto [uid, descriptor] : helper->get_netdescriptors("DataRequest", ctb_type)) { + for (auto const& [uid, descriptor] : helper->get_netdescriptors("DataRequest", ctb_type)) { if (processed_apps.contains(uid)) { continue; } - for (const auto& [uid, rel_sources] : helper->get_all_app_source_ids(ctb_type)) { - for (auto [rel, id] : rel_sources) { + for (auto const& [uid, rel_sources] : helper->get_all_app_source_ids(ctb_type)) { + for (auto const& [rel, id] : rel_sources) { std::string local_uid = uid; local_uid += rel.find("LLT") != std::string::npos ? "_LLT" : "_HLT"; @@ -265,7 +290,7 @@ DFApplication::generate_modules(std::shared_ptr h auto app_sources = helper->get_app_source_ids(); // Now look at all Smart apps that are not Readout, FakeData or DF - for (auto [uid, descriptor] : helper->get_netdescriptors("DataRequest")) { + for (auto const& [uid, descriptor] : helper->get_netdescriptors("DataRequest")) { if (processed_apps.contains(uid)) { continue; @@ -286,10 +311,10 @@ DFApplication::generate_modules(std::shared_ptr h // Get pointers to objects here, after vector has been filled so they don't move on us for (auto& obj : dreqNetObjs) { - trbOutputObjs.push_back(&obj); + trbOutputObjs.push_back(&obj); // NOLINT(performance-inefficient-vector-operation) } for (auto& obj : sidNetObjs) { - trbSidNetObjs.push_back(&obj); + trbSidNetObjs.push_back(&obj); // NOLINT(performance-inefficient-vector-operation) } // -- Second, we create the Module objects and assign their configs, with the precreated @@ -301,8 +326,8 @@ DFApplication::generate_modules(std::shared_ptr h throw(BadConf(ERS_HERE, "No DataWriterModule or TRB configuration given")); } auto trbConfObj = trbConf->config_object(); - trbConfObj.set_by_val("source_id", get_source_id()->get_sid()); - trbInputObjs = { &trigdecNetObj, &fragNetObj }; + trbConfObj.set_by_val("source_id", get_source_id()->get_sid()); // NOLINT(build/unsigned) + trbInputObjs = { &tdQueueObj, &fragNetObj }; if (trmonReqNetDesc != nullptr) { trbInputObjs.push_back(&trmonReqNetObj); } @@ -315,7 +340,6 @@ DFApplication::generate_modules(std::shared_ptr h trbObj.set_obj("configuration", &trbConfObj); trbObj.set_objs("inputs", trbInputObjs); trbObj.set_objs("outputs", trbOutputObjs); - trbObj.set_obj("trigger_record_output", &trQueueObj); trbObj.set_objs("request_connections", trbSidNetObjs); // Push TRB Module Object from confdb modules.push_back(obj_fac.get_dal(trbUid)); @@ -337,14 +361,41 @@ DFApplication::generate_modules(std::shared_ptr h dwrObj.set_by_val("writer_identifier", fmt::format("{}_dw_{}", UID(), dw_idx)); dwrObj.set_obj("configuration", &dwrConfObj); dwrObj.set_objs("inputs", { &trQueueObj }); - dwrObj.set_objs("outputs", { &tokenNetObj }); + dwrObj.set_objs("outputs", { &tokenQueueObj }); // Push DataWriterModule Module Object from confdb modules.push_back(obj_fac.get_dal(dwrUid)); ++dw_idx; } + // Get DataflowStatusModule Config Object + auto dfsConf = get_dfs(); + if (dfsConf == nullptr) { + throw(BadConf(ERS_HERE, "No DataflowStatusModule configuration given")); + } + + std::vector dfsOutputs; + for (auto const& [uid, descriptor] : helper->get_netdescriptors("DataflowStatus", "DFOApplication")) { + dfsOutputs.push_back(obj_fac.create_net_obj(descriptor, uid)); + } + + for (auto& dfsOut : dfsOutputs) { + // NOLINTNEXTLINE(performance-inefficient-vector-operation) + dfsOutputObjs.push_back(&dfsOut); + } + + auto dfsConfObj = dfsConf->config_object(); + dfsInputObjs = { &trigdecNetObj, &statusReqNetObj, &trbcQueueObj, &tokenQueueObj }; + dfsOutputObjs.push_back(&tdQueueObj); + // Prepare TRB Module Object and assign its Config Object. + std::string dfsUid(UID() + "-dfs"); + conffwk::ConfigObject dfsObj = obj_fac.create("DataflowStatusModule", dfsUid); + dfsObj.set_obj("configuration", &dfsConfObj); + dfsObj.set_objs("inputs", dfsInputObjs); + dfsObj.set_objs("outputs", dfsOutputObjs); + // Push TRB Module Object from confdb + modules.push_back(obj_fac.get_dal(dfsUid)); + obj_fac.update_modules(modules); -} +} // NOLINT(readability/fn_size) -} // namespace appmodel -} // namespace dunedaq +} // namespace dunedaq::appmodel diff --git a/src/DFOApplication.cpp b/src/DFOApplication.cpp index 420b856..852547e 100644 --- a/src/DFOApplication.cpp +++ b/src/DFOApplication.cpp @@ -25,11 +25,11 @@ #include "logging/Logging.hpp" #include "oks/kernel.hpp" +#include #include #include -namespace dunedaq { -namespace appmodel { +namespace dunedaq::appmodel { void DFOApplication::generate_modules(std::shared_ptr helper) const @@ -45,7 +45,7 @@ DFOApplication::generate_modules(std::shared_ptr auto dfoConf = get_dfo(); dfoObj.set_obj("configuration", &dfoConf->config_object()); - if (dfoConf == 0) { + if (dfoConf == nullptr) { throw(BadConf(ERS_HERE, "No DFOConf configuration given")); } @@ -53,27 +53,26 @@ DFOApplication::generate_modules(std::shared_ptr std::vector input_conns; conffwk::ConfigObject tdInObj; conffwk::ConfigObject busyOutObj; - conffwk::ConfigObject tokenInObj; + conffwk::ConfigObject statusInObj; + conffwk::ConfigObject statusReqOutObj; for (auto rule : get_network_rules()) { auto endpoint_class = rule->get_endpoint_class(); auto descriptor = rule->get_descriptor(); - auto connObj = obj_fac.create_net_obj(descriptor, ""); - if (descriptor->get_data_type() == "TriggerDecision") { if (endpoint_class == "DFOModule") { - tdInObj = connObj; + tdInObj = obj_fac.create_net_obj(descriptor, UID()); input_conns.push_back(&tdInObj); } - } else if (descriptor->get_data_type() == "TriggerDecisionToken") { - tokenInObj = connObj; - input_conns.push_back(&tokenInObj); - } - - else if (descriptor->get_data_type() == "TriggerInhibit") { - busyOutObj = connObj; + } else if (descriptor->get_data_type() == "TriggerInhibit") { + busyOutObj = obj_fac.create_net_obj(descriptor, ""); output_conns.push_back(&busyOutObj); + } else if (descriptor->get_data_type() == "DataflowStatus") { + if (endpoint_class == "DFOModule") { + statusInObj = obj_fac.create_net_obj(descriptor, UID()); + input_conns.push_back(&statusInObj); + } } } @@ -83,13 +82,16 @@ DFOApplication::generate_modules(std::shared_ptr if (busyOutObj == nullptr) { throw(BadConf(ERS_HERE, "No TriggerInhibit output connection descriptor given")); } - if (tokenInObj == nullptr) { - throw(BadConf(ERS_HERE, "No TriggerDecisionToken input connection descriptor given")); + if (statusInObj == nullptr) { + throw(BadConf(ERS_HERE, "No DataflowStatus input connection descriptor given")); } // Process special Network rules! std::vector tdOutObjs; - for (auto [uid, descriptor] : helper->get_netdescriptors("TriggerDecision", "DFApplication")) { + for (auto const& [uid, descriptor] : helper->get_netdescriptors("TriggerDecision", "DFApplication")) { + tdOutObjs.emplace_back(obj_fac.create_net_obj(descriptor, uid)); + } + for (auto const& [uid, descriptor] : helper->get_netdescriptors("DataflowStatusRequest", "DFApplication")) { tdOutObjs.emplace_back(obj_fac.create_net_obj(descriptor, uid)); } @@ -106,5 +108,4 @@ DFOApplication::generate_modules(std::shared_ptr obj_fac.update_modules(modules); } -} // namespace appmodel -} // namespace dunedaq +} // namespace dunedaq::appmodel diff --git a/src/DTSHSIApplication.cpp b/src/DTSHSIApplication.cpp index 902a193..20a53c8 100644 --- a/src/DTSHSIApplication.cpp +++ b/src/DTSHSIApplication.cpp @@ -28,11 +28,11 @@ #include "logging/Logging.hpp" #include +#include #include #include -namespace dunedaq { -namespace appmodel { +namespace dunedaq::appmodel { void DTSHSIApplication::generate_modules(std::shared_ptr /*helper*/) const @@ -76,7 +76,7 @@ DTSHSIApplication::generate_modules(std::shared_ptrget_sid(); - auto det_id = - 1; // TODO Eric Flumerfelt , 08-Feb-2024: This is a magic number corresponding to kDAQ + auto det_id = 1; // This is a magic number corresponding to kDAQ std::string uid("DLH-" + std::to_string(id)); TLOG_DEBUG(7) << "creating OKS configuration object for Data Link Handler class " << dlhClass << ", id " << id; conffwk::ConfigObject dlhObj = obj_fac.create(dlhClass, uid); - dlhObj.set_by_val("source_id", id); - dlhObj.set_by_val("detector_id", det_id); + dlhObj.set_by_val("source_id", id); // NOLINT(build/unsigned) + dlhObj.set_by_val("detector_id", det_id); // NOLINT(build/unsigned) dlhObj.set_by_val("post_processing_enabled", false); dlhObj.set_obj("module_configuration", &dlhConf->config_object()); @@ -133,5 +132,4 @@ DTSHSIApplication::generate_modules(std::shared_ptr #include #include +#include #include #include #include @@ -278,7 +279,7 @@ DaphneV2BoardConf::get_afe(size_t ch) const throw appmodel::MissingAFE(ERS_HERE, UID(), ch); } -uint16_t +uint16_t // NOLINT(build/unsigned) DaphneV2ADC::get_reg4() const { @@ -291,7 +292,7 @@ DaphneV2ADC::get_reg4() const return reg4.to_ulong(); } -uint16_t +uint16_t // NOLINT(build/unsigned) DaphneV2PGA::get_reg51() const { @@ -304,7 +305,7 @@ DaphneV2PGA::get_reg51() const return reg51.to_ulong(); } -uint16_t +uint16_t // NOLINT(build/unsigned) DaphneV2LNA::get_reg52() const { diff --git a/src/FakeDataApplication.cpp b/src/FakeDataApplication.cpp index 2d5b007..fa7f290 100644 --- a/src/FakeDataApplication.cpp +++ b/src/FakeDataApplication.cpp @@ -33,11 +33,11 @@ #include "logging/Logging.hpp" +#include #include #include -namespace dunedaq { -namespace appmodel { +namespace dunedaq::appmodel { //----------------------------------------------------------------------------- @@ -138,7 +138,7 @@ FakeDataApplication::generate_modules(std::shared_ptr qObjs; for (auto q : faOutputQueues) { - qObjs.push_back(&q->config_object()); + qObjs.push_back(&q->config_object()); // NOLINT(performance-inefficient-vector-operation) } faObj.set_obj("configuration", &aggregator_conf->config_object()); faObj.set_objs("inputs", { &faNetObj, &faQueueObj }); @@ -162,5 +162,4 @@ FakeDataApplication::generate_modules(std::shared_ptr +#include #include #include -namespace dunedaq { -namespace appmodel { +namespace dunedaq::appmodel { void FakeHSIApplication::generate_modules(std::shared_ptr helper) const @@ -84,7 +84,7 @@ FakeHSIApplication::generate_modules(std::shared_ptrget_sid(); - auto det_id = - 1; // TODO Eric Flumerfelt , 08-Feb-2024: This is a magic number corresponding to kDAQ + auto det_id = 1; // This is a magic number corresponding to kDAQ std::string uid("DLH-" + std::to_string(id)); TLOG_DEBUG(7) << "creating OKS configuration object for Data Link Handler class " << dlhClass << ", id " << id; conffwk::ConfigObject dlhObj = obj_fac.create(dlhClass, uid); - dlhObj.set_by_val("source_id", id); - dlhObj.set_by_val("detector_id", det_id); + dlhObj.set_by_val("source_id", id); // NOLINT(build/unsigned) + dlhObj.set_by_val("detector_id", det_id); // NOLINT(build/unsigned) dlhObj.set_by_val("post_processing_enabled", false); dlhObj.set_obj("module_configuration", &dlhConf->config_object()); // Process special Network rules! // Looking for Fragment rules from DFAppplications in current Session std::vector fragOutObjs; - for (auto [uid, descriptor] : helper->get_netdescriptors("Fragment", "DFApplication")) { + for (auto const& [uid, descriptor] : helper->get_netdescriptors("Fragment", "DFApplication")) { fragOutObjs.emplace_back(obj_fac.create_net_obj(descriptor, uid)); } // start building the list of outputs std::vector fh_output_objs; for (auto& fNet : fragOutObjs) { - fh_output_objs.push_back(&fNet); + fh_output_objs.push_back(&fNet); // NOLINT(performance-inefficient-vector-operation) } // Time Sync network connection @@ -155,7 +154,6 @@ FakeHSIApplication::generate_modules(std::shared_ptr(genuid)); obj_fac.update_modules(modules); -} +} // NOLINT(readability/fn_size) -} // namespace appmodel -} // namespace dunedaq +} // namespace dunedaq::appmodel diff --git a/src/FelixDetectorToDaqConnection.cpp b/src/FelixDetectorToDaqConnection.cpp index 4cfb739..1ec1d10 100644 --- a/src/FelixDetectorToDaqConnection.cpp +++ b/src/FelixDetectorToDaqConnection.cpp @@ -14,6 +14,8 @@ #include "confmodel/DetDataReceiver.hpp" #include "confmodel/DetDataSender.hpp" +#include + namespace dunedaq::appmodel { std::vector @@ -25,6 +27,7 @@ FelixDetectorToDaqConnection::senders() const check_init(); } for (auto sender : m_felix_senders) { + // NOLINTNEXTLINE(performance-inefficient-vector-operation, runtime/rtti) senders.push_back(dynamic_cast(sender)); } return senders; diff --git a/src/HSIEventToTCApplication.cpp b/src/HSIEventToTCApplication.cpp index 13a352b..e93eee8 100644 --- a/src/HSIEventToTCApplication.cpp +++ b/src/HSIEventToTCApplication.cpp @@ -24,11 +24,11 @@ #include "logging/Logging.hpp" #include "oks/kernel.hpp" +#include #include #include -namespace dunedaq { -namespace appmodel { +namespace dunedaq::appmodel { void HSIEventToTCApplication::generate_modules(std::shared_ptr /*helper*/) const @@ -45,7 +45,7 @@ HSIEventToTCApplication::generate_modules(std::shared_ptrconfig_object()); - if (hstcConf == 0) { + if (hstcConf == nullptr) { throw(BadConf(ERS_HERE, "No HSI2TCTranslatorConf configuration given")); } @@ -79,5 +79,4 @@ HSIEventToTCApplication::generate_modules(std::shared_ptr #include #include -namespace dunedaq { -namespace appmodel { +namespace dunedaq::appmodel { void MLTApplication::generate_modules(std::shared_ptr helper) const @@ -99,7 +99,6 @@ MLTApplication::generate_modules(std::shared_ptr const NetworkConnectionDescriptor* req_net_desc = nullptr; const NetworkConnectionDescriptor* tc_net_desc = nullptr; const NetworkConnectionDescriptor* ti_net_desc = nullptr; - const NetworkConnectionDescriptor* td_net_desc = nullptr; const NetworkConnectionDescriptor* timesync_net_desc = nullptr; for (auto rule : get_network_rules()) { @@ -109,9 +108,6 @@ MLTApplication::generate_modules(std::shared_ptr if (data_type == "TriggerInhibit") { ti_net_desc = rule->get_descriptor(); } - if (data_type == "TriggerDecision") { - td_net_desc = rule->get_descriptor(); - } if (data_type == "TriggerCandidate") { tc_net_desc = rule->get_descriptor(); } @@ -125,9 +121,6 @@ MLTApplication::generate_modules(std::shared_ptr TLOG_DEBUG(3) << "Endpoint class (currently not used in for networkconnections): data_type: " << data_type; } - if (!td_net_desc) { - throw(BadConf(ERS_HERE, "No MLT network connection for the output TriggerDecision given")); - } if (!ti_net_desc) { throw(BadConf(ERS_HERE, "No MLT network connection for the output TriggerInhibit given")); } @@ -143,9 +136,6 @@ MLTApplication::generate_modules(std::shared_ptr conffwk::ConfigObject tc_net_obj = obj_fac.create_net_obj(tc_net_desc, ".*"); - // Network connection for output TriggerDecision - conffwk::ConfigObject td_net_obj = obj_fac.create_net_obj(td_net_desc, ""); - // Network conection for the input Data Requests conffwk::ConfigObject dr_net_obj = obj_fac.create_net_obj(req_net_desc, UID()); @@ -198,18 +188,18 @@ MLTApplication::generate_modules(std::shared_ptr **************************************************************/ std::vector sourceIds; - for (auto [uid, source_ids] : helper->get_stream_source_ids()) { + for (auto const& [uid, source_ids] : helper->get_stream_source_ids()) { for (auto src_id : source_ids) { // Create SourceIDConf object for the MLT std::string sourceIdConfUID = "dro-mlt-stream-config-" + std::to_string(src_id); - conffwk::ConfigObject* sourceIdConf = new conffwk::ConfigObject(obj_fac.create("SourceIDConf", sourceIdConfUID)); - sourceIdConf->set_by_val("sid", src_id); + auto* sourceIdConf = new conffwk::ConfigObject(obj_fac.create("SourceIDConf", sourceIdConfUID)); + sourceIdConf->set_by_val("sid", src_id); // NOLINT(build/unsigned) // https://github.com/DUNE-DAQ/daqdataformats/blob/5b99506675a586c8a09123900e224f2371d96df9/include/daqdataformats/detail/SourceID.hxx#L108 sourceIdConf->set_by_val("subsystem", "Detector_Readout"); sourceIds.push_back(sourceIdConf); } } - for (auto [uid, source_ids] : helper->get_tp_source_ids()) { + for (auto const& [uid, source_ids] : helper->get_tp_source_ids()) { for (auto src_id : source_ids) { sourceIds.push_back(&(src_id->config_object())); } @@ -221,17 +211,17 @@ MLTApplication::generate_modules(std::shared_ptr auto final_name = uid; final_name += source_name.find("LLT") != std::string::npos ? "_LLT" : "_HLT"; auto tcSourceIdConf = new conffwk::ConfigObject(obj_fac.create("SourceIDConf", final_name)); - tcSourceIdConf->set_by_val("sid", source_conf->get_sid()); + tcSourceIdConf->set_by_val("sid", source_conf->get_sid()); // NOLINT(build/unsigned) tcSourceIdConf->set_by_val("subsystem", source_conf->get_subsystem()); sourceIds.push_back(tcSourceIdConf); } } for (auto app_class : { "TriggerApplication", "FakeHSIApplication", "DTSHSIApplication", "CIBApplication" }) { - for (auto [uid, src_id] : helper->get_app_source_ids(app_class)) { + for (auto const& [uid, src_id] : helper->get_app_source_ids(app_class)) { auto tcSourceIdConf = new conffwk::ConfigObject(obj_fac.create("SourceIDConf", uid + "-" + std::to_string(src_id->get_sid()))); - tcSourceIdConf->set_by_val("sid", src_id->get_sid()); + tcSourceIdConf->set_by_val("sid", src_id->get_sid()); // NOLINT(build/unsigned) tcSourceIdConf->set_by_val("subsystem", src_id->get_subsystem()); sourceIds.push_back(tcSourceIdConf); } @@ -280,13 +270,15 @@ MLTApplication::generate_modules(std::shared_ptr // } // loop over Session specific Apps std::vector fragOutObjs; - for (auto [uid, descriptor] : helper->get_netdescriptors("Fragment", "DFApplication")) { + for (auto const& [uid, descriptor] : helper->get_netdescriptors("Fragment", "DFApplication")) { + // NOLINTNEXTLINE(performance-inefficient-vector-operation) fragOutObjs.emplace_back(obj_fac.create_net_obj(descriptor, uid)); } // build up the full list of outputs std::vector ti_output_objs; for (auto& fNet : fragOutObjs) { + // NOLINTNEXTLINE(performance-inefficient-vector-operation) ti_output_objs.push_back(&fNet); } ti_output_objs.push_back(&output_queue_obj); @@ -295,11 +287,11 @@ MLTApplication::generate_modules(std::shared_ptr if (get_source_id() == nullptr) { throw(BadConf(ERS_HERE, "No source_id associated with this TriggerApplication!")); } - uint32_t source_id = get_source_id()->get_sid(); + uint32_t source_id = get_source_id()->get_sid(); // NOLINT(build/unsigned) std::string ti_uid(handler_name + "-" + std::to_string(source_id)); conffwk::ConfigObject ti_obj = obj_fac.create(tch_class, ti_uid); - ti_obj.set_by_val("source_id", source_id); - ti_obj.set_by_val("detector_id", 1); // 1 == kDAQ + ti_obj.set_by_val("source_id", source_id); // NOLINT(build/unsigned) + ti_obj.set_by_val("detector_id", 1); // 1 == kDAQ // NOLINT(build/unsigned) ti_obj.set_obj("module_configuration", &tch_conf_obj); ti_obj.set_objs("enabled_source_ids", sourceIds); ti_obj.set_objs("mandatory_source_ids", mandatory_sids); @@ -313,14 +305,23 @@ MLTApplication::generate_modules(std::shared_ptr * Instantiate the MLTModule module **************************************************************/ + std::vector tdOutObjs; + for (auto const& [uid, descriptor] : helper->get_netdescriptors("TriggerDecision", "DFOApplication")) { + tdOutObjs.emplace_back(obj_fac.create_net_obj(descriptor, uid)); + } + + std::vector output_conns; + for (auto& tdOut : tdOutObjs) { + // NOLINTNEXTLINE(performance-inefficient-vector-operation) + output_conns.push_back(&tdOut); + } conffwk::ConfigObject mlt_obj = obj_fac.create(mlt_conf->get_template_for(), mlt_conf->UID()); mlt_obj.set_obj("configuration", &(mlt_conf->config_object())); mlt_obj.set_objs("inputs", { &output_queue_obj, &ti_net_obj }); - mlt_obj.set_objs("outputs", { &td_net_obj }); + mlt_obj.set_objs("outputs", output_conns); modules.push_back(obj_fac.get_dal(mlt_conf->UID())); obj_fac.update_modules(modules); -} +} // NOLINT(readability/fn_size) -} // namespace appmodel -} // namespace dunedaq +} // namespace dunedaq::appmodel diff --git a/src/NP02ReadoutApplication.cpp b/src/NP02ReadoutApplication.cpp index 5bad956..0361ee2 100644 --- a/src/NP02ReadoutApplication.cpp +++ b/src/NP02ReadoutApplication.cpp @@ -58,14 +58,17 @@ #include "logging/Logging.hpp" #include +#include +#include +#include #include +#include #include // using namespace dunedaq; // using namespace dunedaq::appmodel; -namespace dunedaq { -namespace appmodel { +namespace dunedaq::appmodel { //----------------------------------------------------------------------------- void @@ -82,7 +85,7 @@ NP02ReadoutApplication::generate_modules(std::shared_ptrget_template_for(); @@ -176,14 +179,14 @@ NP02ReadoutApplication::generate_modules(std::shared_ptr> all_enabled_det_streams; - std::map callback_confs_by_sid; + std::map callback_confs_by_sid; // NOLINT(build/unsigned) std::vector d2d_conn_objs; - uint16_t conn_idx = 0; + uint16_t conn_idx = 0; // NOLINT(build/unsigned) std::set numas; for (auto d2d_conn : get_detector_connections()) { - uint16_t receiver_numa = 0; + uint16_t receiver_numa = 0; // NOLINT(build/unsigned) // Are we sure? if (helper->is_excluded(d2d_conn)) { @@ -234,7 +237,7 @@ NP02ReadoutApplication::generate_modules(std::shared_ptrcast(); - receiver_numa = (int16_t)dpdk_reciever->get_uses()->get_numa_id(); + receiver_numa = static_cast(dpdk_reciever->get_uses()->get_numa_id()); TLOG_DEBUG(7) << "receiver numa: " << receiver_numa; } @@ -260,9 +263,9 @@ NP02ReadoutApplication::generate_modules(std::shared_ptr(receiver_numa)); } } @@ -277,7 +280,8 @@ NP02ReadoutApplication::generate_modules(std::shared_ptrUID(), std::to_string(conn_idx++))); + std::string reader_uid(fmt::format("datareader-{}-{}", this->UID(), std::to_string(conn_idx))); + conn_idx++; TLOG_DEBUG(6) << fmt::format( "creating OKS configuration object for Data reader class {} with id {}", reader_class, reader_uid); auto reader_obj = obj_fac.create(reader_class, reader_uid); @@ -305,7 +309,7 @@ NP02ReadoutApplication::generate_modules(std::shared_ptr> tp_queues; + std::vector> tp_queues; // NOLINT(build/unsigned) if (get_tp_generation_enabled()) { @@ -324,17 +328,17 @@ NP02ReadoutApplication::generate_modules(std::shared_ptrget_sid())); auto tph_obj = obj_fac.create(tph_class, tp_uid); - tph_obj.set_by_val("source_id", sid->get_sid()); - tph_obj.set_by_val("detector_id", 1); // 1 == kDAQ + tph_obj.set_by_val("source_id", sid->get_sid()); // NOLINT(build/unsigned) + tph_obj.set_by_val("detector_id", 1); // 1 == kDAQ // NOLINT(build/unsigned) tph_obj.set_by_val("post_processing_enabled", get_ta_generation_enabled()); tph_obj.set_obj("module_configuration", &tph_conf_obj); // Create the TPs aggregator queue (from RawData Handlers to TP handlers) tp_queue_obj = obj_fac.create_queue_sid_obj(tp_input_qdesc, sid->get_sid()); - tp_queue_obj.set_by_val("recv_timeout_ms", 50); - tp_queue_obj.set_by_val("send_timeout_ms", 1); + tp_queue_obj.set_by_val("recv_timeout_ms", 50); // NOLINT(build/unsigned) + tp_queue_obj.set_by_val("send_timeout_ms", 1); // NOLINT(build/unsigned) - tp_queues.push_back(std::make_pair(sid->get_sid(), obj_fac.get_dal(tp_queue_obj.UID()))); + tp_queues.emplace_back(sid->get_sid(), obj_fac.get_dal(tp_queue_obj.UID())); // Create tp data requests queue from Fragment Aggregator tpreq_queue_obj = obj_fac.create_queue_sid_obj(dlh_reqinput_qdesc, sid->get_sid()); req_queues.push_back(obj_fac.get_dal(tpreq_queue_obj.UID())); @@ -353,9 +357,10 @@ NP02ReadoutApplication::generate_modules(std::shared_ptr> tp_queue_objs; + std::vector> tp_queue_objs; // NOLINT(build/unsigned) for (auto q : tp_queues) { - tp_queue_objs.push_back(std::make_pair(q.first, &q.second->config_object())); + // NOLINTNEXTLINE(performance-inefficient-vector-operation) + tp_queue_objs.emplace_back(q.first, &q.second->config_object()); } //----------------------------------------------------------------- @@ -369,17 +374,18 @@ NP02ReadoutApplication::generate_modules(std::shared_ptr numa_dhlconf_map; for (int16_t numa : numas) { auto lb_confobj_numa = obj_fac.create(lb_conf->class_name(), fmt::format("{}-numa{}", lb_conf->UID(), numa)); - lb_confobj_numa.set_by_val("size", lb_conf->get_size()); + lb_confobj_numa.set_by_val("size", lb_conf->get_size()); // NOLINT(build/unsigned) lb_confobj_numa.set_by_val("numa_aware", lb_conf->get_numa_aware()); lb_confobj_numa.set_by_val("numa_node", numa); lb_confobj_numa.set_by_val("intrinsic_allocator", lb_conf->get_intrinsic_allocator()); - lb_confobj_numa.set_by_val("alignment_size", lb_conf->get_alignment_size()); + lb_confobj_numa.set_by_val("alignment_size", lb_conf->get_alignment_size()); // NOLINT(build/unsigned) lb_confobj_numa.set_by_val("preallocation", lb_conf->get_preallocation()); auto dhl_confobj_numa = obj_fac.create(dlh_conf->class_name(), fmt::format("{}-numa{}", dlh_conf->UID(), numa)); dhl_confobj_numa.set_by_val("template_for", dlh_conf->get_template_for()); dhl_confobj_numa.set_by_val("input_data_type", dlh_conf->get_input_data_type()); dhl_confobj_numa.set_by_val("generate_timesync", dlh_conf->get_generate_timesync()); + // NOLINTNEXTLINE(build/unsigned) dhl_confobj_numa.set_by_val("post_processing_delay_ticks", dlh_conf->get_post_processing_delay_ticks()); dhl_confobj_numa.set_by_val("input_data_type", dlh_conf->get_input_data_type()); dhl_confobj_numa.set_obj("request_handler", &dlh_conf->get_request_handler()->config_object()); @@ -391,22 +397,23 @@ NP02ReadoutApplication::generate_modules(std::shared_ptrget_emulation_mode(); for (auto& [numa, ds] : all_enabled_det_streams) { - uint32_t sid = ds->get_source_id(); + uint32_t sid = ds->get_source_id(); // NOLINT(build/unsigned) TLOG_DEBUG(6) << fmt::format( "Processing stream {}, id {}, det id {}", ds->UID(), ds->get_source_id(), ds->get_geo_id()->get_detector_id()); std::string uid(fmt::format("DLH-{}", sid)); TLOG_DEBUG(6) << fmt::format( "creating OKS configuration object for Data Link Handler class {}, if {}", dlh_class, sid); auto dlh_obj = obj_fac.create(dlh_class, uid); - dlh_obj.set_by_val("source_id", sid); - dlh_obj.set_by_val("detector_id", ds->get_geo_id()->get_detector_id()); + dlh_obj.set_by_val("source_id", sid); // NOLINT(build/unsigned) + dlh_obj.set_by_val("detector_id", ds->get_geo_id()->get_detector_id()); // NOLINT(build/unsigned) dlh_obj.set_by_val("post_processing_enabled", get_tp_generation_enabled()); dlh_obj.set_by_val("emulation_mode", emulation_mode); dlh_obj.set_obj("geo_id", &ds->get_geo_id()->config_object()); dlh_obj.set_obj("module_configuration", &numa_dhlconf_map[numa]); dlh_obj.set_obj("raw_data_callback", &callback_confs_by_sid[sid]->config_object()); - std::vector dlh_ins, dlh_outs; + std::vector dlh_ins; + std::vector dlh_outs; // Create request queue conffwk::ConfigObject req_queue_obj = obj_fac.create_queue_sid_obj(dlh_reqinput_qdesc, ds); @@ -437,7 +444,7 @@ NP02ReadoutApplication::generate_modules(std::shared_ptr fragOutObjs; - for (auto [uid, descriptor] : helper->get_netdescriptors("Fragment", "DFApplication")) { + for (auto const& [uid, descriptor] : helper->get_netdescriptors("Fragment", "DFApplication")) { std::string dreqNetUid(descriptor->get_uid_base() + uid); auto frag_conn = obj_fac.create("NetworkConnection", dreqNetUid); @@ -466,7 +473,7 @@ NP02ReadoutApplication::generate_modules(std::shared_ptr fa_output_objs; for (auto& fNet : fragOutObjs) { - fa_output_objs.push_back(&fNet); + fa_output_objs.push_back(&fNet); // NOLINT(performance-inefficient-vector-operation) } for (auto& q : req_queues) { @@ -482,5 +489,4 @@ NP02ReadoutApplication::generate_modules(std::shared_ptr + namespace dunedaq::appmodel { std::vector @@ -25,7 +27,7 @@ NetworkDetectorToDaqConnection::senders() const check_init(); } for (auto sender : m_net_senders) { - senders.push_back(dynamic_cast(sender)); + senders.push_back(dynamic_cast(sender)); // NOLINT } TLOG_DEBUG(6) << "Found " << senders.size() << " senders\n"; return senders; diff --git a/src/ReadoutApplication.cpp b/src/ReadoutApplication.cpp index 3895446..3e283c4 100644 --- a/src/ReadoutApplication.cpp +++ b/src/ReadoutApplication.cpp @@ -56,14 +56,15 @@ #include "logging/Logging.hpp" #include +#include +#include #include #include // using namespace dunedaq; // using namespace dunedaq::appmodel; -namespace dunedaq { -namespace appmodel { +namespace dunedaq::appmodel { //----------------------------------------------------------------------------- @@ -88,7 +89,7 @@ ReadoutApplication::generate_modules(std::shared_ptr helper // Data reader auto reader_conf = get_data_reader(); - if (reader_conf == 0) { + if (reader_conf == nullptr) { throw(BadConf(ERS_HERE, "No DataReaderModule configuration given")); } std::string reader_class = reader_conf->get_template_for(); @@ -194,10 +195,10 @@ ReadoutApplication::generate_modules(std::shared_ptr helper // Collect all streams std::vector all_enabled_det_streams; - std::map callback_confs_by_sid; + std::map callback_confs_by_sid; // NOLINT(build/unsigned) // std::vector d2d_conn_objs; - uint16_t conn_idx = 0; + uint16_t conn_idx = 0; // NOLINT(build/unsigned) for (auto d2d_conn : get_detector_connections()) { if (helper->is_excluded(d2d_conn)) { @@ -295,7 +296,8 @@ ReadoutApplication::generate_modules(std::shared_ptr helper // Create the Data reader object - std::string reader_uid(fmt::format("datareader-{}-{}", this->UID(), std::to_string(conn_idx++))); + std::string reader_uid(fmt::format("datareader-{}-{}", this->UID(), std::to_string(conn_idx))); + conn_idx++; TLOG_DEBUG(6) << fmt::format( "creating OKS configuration object for Data reader class {} with id {}", reader_class, reader_uid); auto reader_obj = obj_fac.create(reader_class, reader_uid); @@ -344,15 +346,15 @@ ReadoutApplication::generate_modules(std::shared_ptr helper conffwk::ConfigObject tpreq_queue_obj; std::string tp_uid("tphandler-" + std::to_string(sid->get_sid())); auto tph_obj = obj_fac.create(tph_class, tp_uid); - tph_obj.set_by_val("source_id", sid->get_sid()); - tph_obj.set_by_val("detector_id", 1); // 1 == kDAQ + tph_obj.set_by_val("source_id", sid->get_sid()); // NOLINT(build/unsigned) + tph_obj.set_by_val("detector_id", 1); // 1 == kDAQ // NOLINT(build/unsigned) tph_obj.set_by_val("post_processing_enabled", get_ta_generation_enabled()); tph_obj.set_obj("module_configuration", &tph_conf_obj); // Create the TPs aggregator queue (from RawData Handlers to TP handlers) tp_queue_obj = obj_fac.create_queue_sid_obj(tp_input_qdesc, sid->get_sid()); - tp_queue_obj.set_by_val("recv_timeout_ms", 50); - tp_queue_obj.set_by_val("send_timeout_ms", 1); + tp_queue_obj.set_by_val("recv_timeout_ms", 50); // NOLINT(build/unsigned) + tp_queue_obj.set_by_val("send_timeout_ms", 1); // NOLINT(build/unsigned) tp_queues.push_back(obj_fac.get_dal(tp_queue_obj.UID())); // Create tp data requests queue from Fragment Aggregator @@ -376,6 +378,7 @@ ReadoutApplication::generate_modules(std::shared_ptr helper // Add output queueus of tps std::vector tp_queue_objs; for (auto q : tp_queues) { + // NOLINTNEXTLINE(performance-inefficient-vector-operation) tp_queue_objs.push_back(&q->config_object()); } @@ -387,22 +390,23 @@ ReadoutApplication::generate_modules(std::shared_ptr helper auto emulation_mode = reader_conf->get_emulation_mode(); for (auto ds : all_enabled_det_streams) { - uint32_t sid = ds->get_source_id(); + uint32_t sid = ds->get_source_id(); // NOLINT(build/unsigned) TLOG_DEBUG(6) << fmt::format( "Processing stream {}, id {}, det id {}", ds->UID(), ds->get_source_id(), ds->get_geo_id()->get_detector_id()); std::string uid(fmt::format("DLH-{}", sid)); TLOG_DEBUG(6) << fmt::format( "creating OKS configuration object for Data Link Handler class {}, if {}", dlh_class, sid); auto dlh_obj = obj_fac.create(dlh_class, uid); - dlh_obj.set_by_val("source_id", sid); - dlh_obj.set_by_val("detector_id", ds->get_geo_id()->get_detector_id()); + dlh_obj.set_by_val("source_id", sid); // NOLINT(build/unsigned) + dlh_obj.set_by_val("detector_id", ds->get_geo_id()->get_detector_id()); // NOLINT(build/unsigned) dlh_obj.set_by_val("post_processing_enabled", get_tp_generation_enabled()); dlh_obj.set_by_val("emulation_mode", emulation_mode); dlh_obj.set_obj("geo_id", &ds->get_geo_id()->config_object()); dlh_obj.set_obj("module_configuration", &dlh_conf->config_object()); dlh_obj.set_obj("raw_data_callback", &callback_confs_by_sid[sid]->config_object()); - std::vector dlh_ins, dlh_outs; + std::vector dlh_ins; + std::vector dlh_outs; // Create request queue conffwk::ConfigObject req_queue_obj = obj_fac.create_queue_sid_obj(dlh_reqinput_qdesc, ds); @@ -430,7 +434,7 @@ ReadoutApplication::generate_modules(std::shared_ptr helper // Finally create Fragment Aggregator auto aggregator_conf = get_fragment_aggregator(); - if (aggregator_conf == 0) { + if (aggregator_conf == nullptr) { throw(BadConf(ERS_HERE, "No FragmentAggregatorModule configuration given")); } std::string faUid("fragmentaggregator-" + UID()); @@ -442,7 +446,7 @@ ReadoutApplication::generate_modules(std::shared_ptr helper // Process special Network rules! // Looking for Fragment rules from DFAppplications in current Session std::vector fragOutObjs; - for (auto [uid, descriptor] : helper->get_netdescriptors("Fragment", "DFApplication")) { + for (auto const& [uid, descriptor] : helper->get_netdescriptors("Fragment", "DFApplication")) { std::string dreqNetUid(descriptor->get_uid_base() + uid); auto frag_conn = obj_fac.create("NetworkConnection", dreqNetUid); @@ -459,6 +463,7 @@ ReadoutApplication::generate_modules(std::shared_ptr helper // Add output queueus of data requests and Fragments std::vector fa_output_objs; for (auto& fNet : fragOutObjs) { + // NOLINTNEXTLINE(performance-inefficient-vector-operation) fa_output_objs.push_back(&fNet); } @@ -472,7 +477,6 @@ ReadoutApplication::generate_modules(std::shared_ptr helper modules.push_back(obj_fac.get_dal(frag_aggr.UID())); obj_fac.update_modules(modules); -} +} // NOLINT(readability/fn_size) -} // namespace appmodel -} // namespace dunedaq +} // namespace dunedaq::appmodel diff --git a/src/SNBBookkeeperApplication.cpp b/src/SNBBookkeeperApplication.cpp index 6904b03..5338e45 100644 --- a/src/SNBBookkeeperApplication.cpp +++ b/src/SNBBookkeeperApplication.cpp @@ -24,11 +24,11 @@ #include "logging/Logging.hpp" #include "oks/kernel.hpp" +#include #include #include -namespace dunedaq { -namespace appmodel { +namespace dunedaq::appmodel { void SNBBookkeeperApplication::generate_modules(std::shared_ptr /*helper*/) const @@ -44,7 +44,7 @@ SNBBookkeeperApplication::generate_modules(std::shared_ptrconfig_object()); - if (snbBookkeeperConf == 0) { + if (snbBookkeeperConf == nullptr) { throw(BadConf(ERS_HERE, "No SNBBookkeeperConf configuration given")); } @@ -75,5 +75,4 @@ SNBBookkeeperApplication::generate_modules(std::shared_ptr #include #include -namespace dunedaq { -namespace appmodel { +namespace dunedaq::appmodel { void SNBTransferApplication::generate_modules(std::shared_ptr /*helper*/) const @@ -44,7 +44,7 @@ SNBTransferApplication::generate_modules(std::shared_ptrconfig_object()); - if (snbTransferConf == 0) { + if (snbTransferConf == nullptr) { throw(BadConf(ERS_HERE, "No SNBTransferConf configuration given")); } @@ -75,5 +75,4 @@ SNBTransferApplication::generate_modules(std::shared_ptr #include +#include +#include #include #include -namespace dunedaq { -namespace appmodel { +namespace dunedaq::appmodel { std::vector TDECrateApplication::contained_excludable_entities() const @@ -96,5 +97,4 @@ TDECrateApplication::generate_modules(std::shared_ptr +#include #include #include #include -namespace dunedaq { -namespace appmodel { +namespace dunedaq::appmodel { void TPReplayApplication::generate_modules(std::shared_ptr /*helper*/) const @@ -68,7 +68,7 @@ TPReplayApplication::generate_modules(std::shared_ptrget_total_planes(); + const int total_planes = static_cast(tprm_conf->get_total_planes()); /************************************************************** * Extract # of filtered planes @@ -106,8 +106,8 @@ TPReplayApplication::generate_modules(std::shared_ptr("source_id", tpsrc_ids[i]->get_sid()); - tph_obj.set_by_val("detector_id", 1); // 1 == kDAQ + tph_obj.set_by_val("source_id", tpsrc_ids[i]->get_sid()); // NOLINT(build/unsigned) + tph_obj.set_by_val("detector_id", 1); // 1 == kDAQ // NOLINT(build/unsigned) tph_obj.set_by_val("post_processing_enabled", true); tph_obj.set_obj("module_configuration", &tph_conf_obj); TPHs.push_back(tph_obj); @@ -120,7 +120,7 @@ TPReplayApplication::generate_modules(std::shared_ptrget_destination_class(); + auto const& destination_class = rule->get_destination_class(); auto data_type = rule->get_descriptor()->get_data_type(); if (destination_class == "TriggerDataHandlerModule" && data_type == "TriggerPrimitiveVector") { tp_inputq_desc = rule->get_descriptor(); @@ -145,7 +145,6 @@ TPReplayApplication::generate_modules(std::shared_ptrget_endpoint_class(); auto data_type = rule->get_descriptor()->get_data_type(); if (data_type == "TriggerActivity") { ta_net_desc = rule->get_descriptor(); @@ -189,7 +188,7 @@ TPReplayApplication::generate_modules(std::shared_ptr raw_tp_queues; for (const auto& tp_queue : TP_queues) { - raw_tp_queues.push_back(&tp_queue); + raw_tp_queues.push_back(&tp_queue); // NOLINT(performance-inefficient-vector-operation) } tpm_obj.set_objs("outputs", raw_tp_queues); @@ -208,7 +207,6 @@ TPReplayApplication::generate_modules(std::shared_ptr #include +#include #include #include -namespace dunedaq { -namespace appmodel { +namespace dunedaq::appmodel { void TPStreamWriterApplication::generate_modules(std::shared_ptr /*helper*/) const @@ -39,7 +39,7 @@ TPStreamWriterApplication::generate_modules(std::shared_ptrconfig_object(); @@ -66,7 +66,7 @@ TPStreamWriterApplication::generate_modules(std::shared_ptrget_sid())); conffwk::ConfigObject tpwrObj = obj_fac.create("TPStreamWriterModule", tpwrUid); - tpwrObj.set_by_val("source_id", source_id->get_sid()); + tpwrObj.set_by_val("source_id", source_id->get_sid()); // NOLINT(build/unsigned) tpwrObj.set_by_val("writer_identifier", fmt::format("{}_tpw_{}", UID(), tpw_idx)); tpwrObj.set_obj("configuration", &tpwriterConf->config_object()); tpwrObj.set_objs("inputs", { &tset_in_net_obj }); @@ -76,5 +76,4 @@ TPStreamWriterApplication::generate_modules(std::shared_ptr +#include #include #include -namespace dunedaq { -namespace appmodel { +namespace dunedaq::appmodel { void TRMonReqApplication::generate_modules(std::shared_ptr helper) const @@ -84,13 +84,13 @@ TRMonReqApplication::generate_modules(std::shared_ptr trmonreqNetObjs; - for (auto [uid, descriptor] : helper->get_netdescriptors("TRMonRequest", "DFApplication")) { + for (auto const& [uid, descriptor] : helper->get_netdescriptors("TRMonRequest", "DFApplication")) { trmonreqNetObjs.emplace_back(obj_fac.create_net_obj(descriptor, uid)); } // Get pointers to objects here, after vector has been filled so they don't move on us for (auto& obj : trmonreqNetObjs) { - trmrOutputObjs.push_back(&obj); + trmrOutputObjs.push_back(&obj); // NOLINT(performance-inefficient-vector-operation) } // -- Second, we create the Module objects and assign their configs, with the precreated @@ -133,5 +133,4 @@ TRMonReqApplication::generate_modules(std::shared_ptr #include #include -namespace dunedaq { -namespace appmodel { +namespace dunedaq::appmodel { /** * \brief Helper function that gets a network connection config @@ -134,7 +134,7 @@ TriggerApplication::generate_modules(std::shared_ptr fragOutObjs; - for (auto [uid, descriptor] : helper->get_netdescriptors("Fragment", "DFApplication")) { + for (auto const& [uid, descriptor] : helper->get_netdescriptors("Fragment", "DFApplication")) { fragOutObjs.push_back(obj_fac.create_net_obj(descriptor, uid)); } if (req_net_desc == nullptr) { @@ -165,6 +165,7 @@ TriggerApplication::generate_modules(std::shared_ptr ti_output_objs; for (auto& fNet : fragOutObjs) { + // NOLINTNEXTLINE(performance-inefficient-vector-operation) ti_output_objs.push_back(&fNet); } ti_output_objs.push_back(&tout_net_obj); @@ -175,12 +176,12 @@ TriggerApplication::generate_modules(std::shared_ptrget_sid(); + uint32_t source_id = get_source_id()->get_sid(); // NOLINT(build/unsigned) std::string ti_uid(handler_name + "-" + std::to_string(source_id)); auto ti_obj = obj_fac.create(ti_class, ti_uid); - ti_obj.set_by_val("source_id", source_id); - ti_obj.set_by_val("detector_id", 1); // 1 == kDAQ + ti_obj.set_by_val("source_id", source_id); // NOLINT(build/unsigned) + ti_obj.set_by_val("detector_id", 1); // 1 == kDAQ // NOLINT(build/unsigned) ti_obj.set_by_val("post_processing_enabled", !get_tx_generation_disabled()); auto ti_conf_obj = ti_conf->config_object(); @@ -209,7 +210,6 @@ TriggerApplication::generate_modules(std::shared_ptr(reader_uid)); obj_fac.update_modules(modules); -} +} // NOLINT(readability/fn_size) -} // namespace appmodel -} // namespace dunedaq +} // namespace dunedaq::appmodel diff --git a/src/WIECApplication.cpp b/src/WIECApplication.cpp index 065055b..0e44ade 100644 --- a/src/WIECApplication.cpp +++ b/src/WIECApplication.cpp @@ -31,11 +31,12 @@ #include #include +#include +#include #include #include -namespace dunedaq { -namespace appmodel { +namespace dunedaq::appmodel { //----------------------------------------------------------------------------- @@ -124,19 +125,19 @@ WIECApplication::generate_modules(std::shared_ptr // Create WIBModule if (this->get_wib_module_conf()) { - bool enable_fembs[4] = { false, false, false, false }; + std::array enable_fembs = { false, false, false, false }; for (const auto* sender : senders) { for (const auto* det_stream : sender->get_streams()) { // Loop over streams for this sender // Retrieve stream_id and calculate the femb_id - uint32_t stream_id = det_stream->get_geo_id()->get_stream_id(); - uint32_t femb_id = (stream_id & 0xf) / 2 + 2 * ((stream_id >> 6) & 0xf); + uint32_t stream_id = det_stream->get_geo_id()->get_stream_id(); // NOLINT(build/unsigned) + uint32_t femb_id = (stream_id & 0xf) / 2 + 2 * ((stream_id >> 6) & 0xf); // NOLINT(build/unsigned) // std::cout << std::format("stream {} -> femb {}", stream_id, femb_id) << std::endl; // Enable the femb if any of the associated streams is enabled - enable_fembs[femb_id] |= helper->is_included(det_stream); + enable_fembs.at(femb_id) |= helper->is_included(det_stream); } // loop over streams } // loop over senders for this control host @@ -148,7 +149,7 @@ WIECApplication::generate_modules(std::shared_ptr ctrlhost, this->get_wib_module_conf()->get_communication_port())); for (int i = 0; i < 4; ++i) { - wib_obj.set_by_val(fmt::format("enabled_femb{}", i), enable_fembs[i]); + wib_obj.set_by_val(fmt::format("enabled_femb{}", i), enable_fembs.at(i)); } wib_obj.set_obj("conf", &this->get_wib_module_conf()->get_settings()->config_object()); modules.push_back(config->get(wib_obj)); @@ -164,6 +165,7 @@ WIECApplication::generate_modules(std::shared_ptr this->get_hermes_module_conf()->get_ipbus_type(), ctrlhost, this->get_hermes_module_conf()->get_ipbus_port())); + // NOLINTNEXTLINE(build/unsigned) hermes_obj.set_by_val("timeout_ms", this->get_hermes_module_conf()->get_ipbus_timeout_ms()); hermes_obj.set_obj("destination", &nw_receiver->get_uses()->config_object()); @@ -183,7 +185,6 @@ WIECApplication::generate_modules(std::shared_ptr } // loop over detector to daq connections obj_fac.update_modules(modules); -} +} // NOLINT(readability/fn_size) -} // namespace appmodel -} // namespace dunedaq +} // namespace dunedaq::appmodel diff --git a/test/apps/generate_modules_test.cxx b/test/apps/generate_modules_test.cxx index bee54f3..97e9a95 100644 --- a/test/apps/generate_modules_test.cxx +++ b/test/apps/generate_modules_test.cxx @@ -33,7 +33,9 @@ #include "appmodel/appmodelIssues.hpp" +#include #include + using namespace dunedaq; using namespace dunedaq::appmodel; @@ -41,36 +43,37 @@ int main(int argc, char* argv[]) { if (argc < 4) { - std::cout << "Usage: " << argv[0] << " \n"; + std::cout << "Usage: " << argv[0] << " \n"; // NOLINT return 0; } - std::string sessionName(argv[1]); - std::string appName(argv[2]); - std::string dbfile(argv[3]); + std::string sessionName(argv[1]); // NOLINT + std::string appName(argv[2]); // NOLINT + std::string dbfile(argv[3]); // NOLINT - logging::Logging::setup("test", "generate_module"); + assert(sessionName != ""); + logging::Logging::setup(sessionName, "generate_module"); - conffwk::Configuration* confdb; + conffwk::Configuration* confdb = nullptr; try { confdb = new conffwk::Configuration("oksconflibs:" + dbfile); } catch (conffwk::Generic& exc) { - std::cout << "Failed to load OKS database: " << exc << std::endl; + std::cout << "Failed to load OKS database: " << exc << std::endl; // NOLINT(runtime/output_format) return 0; } auto session = confdb->get(sessionName); if (session == nullptr) { - std::cout << "Failed to get Session " << sessionName << " from database\n"; + std::cout << "Failed to get Session " << sessionName << " from database\n"; // NOLINT(runtime/output_format) return 0; } auto daqapp = confdb->get(appName); if (daqapp) { - std::cout << appName << " is of class " << daqapp->class_name() << std::endl; + std::cout << appName << " is of class " << daqapp->class_name() << std::endl; // NOLINT(runtime/output_format) auto res = daqapp->cast(); if (res && res->is_excluded(*session)) { - std::cout << "Application " << appName << " is excluded" << std::endl; + std::cout << "Application " << appName << " is excluded" << std::endl; // NOLINT(runtime/output_format) return 0; } @@ -78,33 +81,33 @@ main(int argc, char* argv[]) try { daqapp->generate_modules(helper); } catch (appmodel::BadConf& exc) { - std::cout << "Caught BadConf exception: " << exc << std::endl; + std::cout << "Caught BadConf exception: " << exc << std::endl; // NOLINT(runtime/output_format) exit(-1); } auto modules = daqapp->get_modules(); - std::cout << "Generated " << modules.size() << " modules" << std::endl; + std::cout << "Generated " << modules.size() << " modules" << std::endl; // NOLINT(runtime/output_format) for (auto daq_module : modules) { - std::cout << "module " << daq_module->UID() << std::endl; + std::cout << "module " << daq_module->UID() << std::endl; // NOLINT(runtime/output_format) daq_module->config_object().print_ref(std::cout, *confdb, " "); - std::cout << " input objects " << std::endl; + std::cout << " input objects " << std::endl; // NOLINT(runtime/output_format) for (auto input : daq_module->get_inputs()) { auto iObj = input->config_object(); - iObj.print_ref(std::cout, *confdb, " "); + iObj.print_ref(std::cout, *confdb, " "); // NOLINT(runtime/output_format) } - std::cout << " output objects " << std::endl; + std::cout << " output objects " << std::endl; // NOLINT(runtime/output_format) for (auto output : daq_module->get_outputs()) { auto oObj = output->config_object(); - oObj.print_ref(std::cout, *confdb, " "); + oObj.print_ref(std::cout, *confdb, " "); // NOLINT(runtime/output_format) } auto reader_module = daq_module->cast(); if (reader_module != nullptr) { auto callback_confs = reader_module->get_raw_data_callbacks(); - std::cout << " callback confs " << std::endl; + std::cout << " callback confs " << std::endl; // NOLINT(runtime/output_format) for (auto* callback_conf : callback_confs) { auto cbObj = callback_conf->config_object(); - cbObj.print_ref(std::cout, *confdb, " "); + cbObj.print_ref(std::cout, *confdb, " "); // NOLINT(runtime/output_format) } } @@ -113,14 +116,14 @@ main(int argc, char* argv[]) auto callback_conf = handler_module->get_raw_data_callback(); if (callback_conf != nullptr) { auto cbObj = callback_conf->config_object(); - cbObj.print_ref(std::cout, *confdb, " "); + cbObj.print_ref(std::cout, *confdb, " "); // NOLINT(runtime/output_format) } } - std::cout << std::endl; + std::cout << std::endl; // NOLINT(runtime/output_format) } } else { - std::cout << "Failed to get SmartDaqApplication " << appName << " from database\n"; + std::cout << "Failed to get SmartDaqApplication " << appName << " from database\n"; // NOLINT(runtime/output_format) return 0; } } diff --git a/test/apps/print_detailed_config_info.cxx b/test/apps/print_detailed_config_info.cxx index dd91215..085ed92 100644 --- a/test/apps/print_detailed_config_info.cxx +++ b/test/apps/print_detailed_config_info.cxx @@ -29,7 +29,10 @@ #include "appmodel/appmodelIssues.hpp" +#include #include +#include + using namespace dunedaq; using namespace dunedaq::appmodel; @@ -59,7 +62,7 @@ print_member_details_if_needed(conffwk::ConfigObject& parent_config_object, try { std::vector member_object_list; parent_config_object.get(member_name, member_object_list); - for (uint32_t idx = 0; idx < member_object_list.size(); ++idx) { + for (uint32_t idx = 0; idx < member_object_list.size(); ++idx) { // NOLINT(build/unsigned) if (!member_object_list[idx].is_null()) { if (member_name != "inputs" && member_name != "outputs") { std::ostringstream oss_name; @@ -82,8 +85,8 @@ print_object_details(conffwk::ConfigObject& config_object_to_print, std::vector& list_of_applications) { if (object_name != "") { - std::cout << spaces << "-----" << std::endl; - std::cout << spaces << "\"" << object_name << "\" "; + std::cout << spaces << "-----" << std::endl; // NOLINT(runtime/output_format) + std::cout << spaces << "\"" << object_name << "\" "; // NOLINT(runtime/output_format) } config_object_to_print.print_ref(std::cout, *confdb, spaces); dunedaq::conffwk::class_t cd = confdb->get_class_info(config_object_to_print.class_name()); @@ -94,8 +97,8 @@ print_object_details(conffwk::ConfigObject& config_object_to_print, std::string application_name; config_object_to_print.get(attr_name, application_name); if (application_name == "daq_application") { - std::cout << "Application name = " << application_name << std::endl; - std::cout << "Application UID = " << config_object_to_print.UID() << std::endl; + std::cout << "Application name = " << application_name << std::endl; // NOLINT(runtime/output_format) + std::cout << "Application UID = " << config_object_to_print.UID() << std::endl; // NOLINT(runtime/output_format) list_of_applications.push_back(config_object_to_print.UID()); } } @@ -110,27 +113,28 @@ int main(int argc, char* argv[]) { if (argc < 3) { - std::cout << "Usage: " << argv[0] << " \n"; + std::cout << "Usage: " << argv[0] << " \n"; // NOLINT return 0; } - std::string sessionName(argv[1]); + std::string sessionName(argv[1]); // NOLINT + assert(sessionName != "" && "Session name must be specified"); logging::Logging::setup(sessionName, "print_detailed_config_info"); - std::string dbfile(argv[2]); - conffwk::Configuration* confdb; + std::string dbfile(argv[2]); // NOLINT + conffwk::Configuration* confdb = nullptr; std::string blah = "oksconflibs:" + dbfile; try { confdb = new conffwk::Configuration(blah); } catch (conffwk::Generic& exc) { - std::cout << "Failed to load OKS database: " << exc << std::endl; + std::cout << "Failed to load OKS database: " << exc << std::endl; // NOLINT(runtime/output_format) return 0; } auto session = confdb->get(sessionName); if (session == nullptr) { - std::cout << "Failed to get Session " << sessionName << " from database\n"; + std::cout << "Failed to get Session " << sessionName << " from database\n"; // NOLINT(runtime/output_format) return 0; } @@ -138,72 +142,74 @@ main(int argc, char* argv[]) // session->print(0, true, std::cout); // std::cout << "=====" << std::endl; - std::cout << "++++++++++" << std::endl; - std::cout << "Full-system details without module generation" << std::endl; - std::cout << "++++++++++" << std::endl; - std::cout << std::endl; + std::cout << "++++++++++" << std::endl; // NOLINT(runtime/output_format) + std::cout << "Full-system details without module generation" << std::endl; // NOLINT(runtime/output_format) + std::cout << "++++++++++" << std::endl; // NOLINT(runtime/output_format) + std::cout << std::endl; // NOLINT(runtime/output_format) std::vector list_of_application_names; conffwk::ConfigObject session_config_object = session->config_object(); print_object_details(session_config_object, "", confdb, " ", list_of_application_names); - std::cout << std::endl; - std::cout << "++++++++++" << std::endl; + std::cout << std::endl; // NOLINT(runtime/output_format) + std::cout << "++++++++++" << std::endl; // NOLINT(runtime/output_format) + // NOLINTNEXTLINE(runtime/output_format) std::cout << "Individual application details including module generation" << std::endl; - std::cout << "++++++++++" << std::endl; + std::cout << "++++++++++" << std::endl; // NOLINT(runtime/output_format) for (size_t idx = 0; idx < list_of_application_names.size(); ++idx) { - std::cout << std::endl; + std::cout << std::endl; // NOLINT(runtime/output_format) confdb = nullptr; try { confdb = new conffwk::Configuration(blah); } catch (conffwk::Generic& exc) { - std::cout << "Failed to load OKS database: " << exc << std::endl; + std::cout << "Failed to load OKS database: " << exc << std::endl; // NOLINT(runtime/output_format) return 0; } session = confdb->get(sessionName); auto helper = std::make_shared(session); - std::string appName = list_of_application_names[idx]; + const std::string& appName = list_of_application_names[idx]; auto daqapp = confdb->get(appName); if (daqapp) { - std::cout << appName << " is of class " << daqapp->class_name() << std::endl; + std::cout << appName << " is of class " << daqapp->class_name() << std::endl; // NOLINT(runtime/output_format) auto res = daqapp->cast(); if (res && res->is_excluded(*session)) { - std::cout << "Application " << appName << " is excluded" << std::endl; + std::cout << "Application " << appName << " is excluded" << std::endl; // NOLINT(runtime/output_format) continue; } try { daqapp->generate_modules(helper); } catch (appmodel::BadConf& exc) { - std::cout << "Caught BadConf exception: " << exc << std::endl; + std::cout << "Caught BadConf exception: " << exc << std::endl; // NOLINT(runtime/output_format) exit(-1); } auto modules = daqapp->get_modules(); // std::cout << "Generated " << modules.size() << " modules" << std::endl; for (auto module : modules) { - std::cout << "module " << module->UID() << std::endl; + std::cout << "module " << module->UID() << std::endl; // NOLINT(runtime/output_format) conffwk::ConfigObject module_config_object = module->config_object(); std::vector dummy_list; print_object_details(module_config_object, "", confdb, " ", dummy_list); - std::cout << " input objects " << std::endl; + std::cout << " input objects " << std::endl; // NOLINT(runtime/output_format) for (auto input : module->get_inputs()) { auto iObj = input->config_object(); - iObj.print_ref(std::cout, *confdb, " "); + iObj.print_ref(std::cout, *confdb, " "); // NOLINT(runtime/output_format) } - std::cout << " output objects " << std::endl; + std::cout << " output objects " << std::endl; // NOLINT(runtime/output_format) for (auto output : module->get_outputs()) { auto oObj = output->config_object(); - oObj.print_ref(std::cout, *confdb, " "); + oObj.print_ref(std::cout, *confdb, " "); // NOLINT(runtime/output_format) } } } else { + // NOLINTNEXTLINE(runtime/output_format) std::cout << "Failed to get SmartDaqApplication " << appName << " from database\n"; return 0; } } -} +} // NOLINT(readability/fn_size)