DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
DFOApplication.cpp
Go to the documentation of this file.
1
15#include "appmodel/DFOConf.hpp"
22
25#include "confmodel/Service.hpp"
26#include "logging/Logging.hpp"
27#include "oks/kernel.hpp"
28
29#include <string>
30#include <vector>
31
32namespace dunedaq {
33namespace appmodel {
34
35void
36DFOApplication::generate_modules(std::shared_ptr<appmodel::ConfigurationHelper> helper) const
37{
38 std::vector<const confmodel::DaqModule*> modules;
39
40 ConfigObjectFactory obj_fac(this);
41
42
43 std::string dfoUid("DFO-" + UID());
44 TLOG_DEBUG(7) << "creating OKS configuration object for DFOModule class ";
45 auto dfoObj = obj_fac.create("DFOModule", dfoUid);
46
47 auto dfoConf = get_dfo();
48 dfoObj.set_obj("configuration", &dfoConf->config_object());
49
50 if (dfoConf == 0) {
51 throw(BadConf(ERS_HERE, "No DFOConf configuration given"));
52 }
53
54 std::vector<const conffwk::ConfigObject*> output_conns;
55 std::vector<const conffwk::ConfigObject*> input_conns;
57 conffwk::ConfigObject busyOutObj;
58 conffwk::ConfigObject tokenInObj;
59
60 for (auto rule : get_network_rules()) {
61 auto endpoint_class = rule->get_endpoint_class();
62 auto descriptor = rule->get_descriptor();
63
64 auto connObj = obj_fac.create_net_obj(descriptor, "");
65
66 if (descriptor->get_data_type() == "TriggerDecision") {
67 if (endpoint_class == "DFOModule") {
68 tdInObj = connObj;
69 input_conns.push_back(&tdInObj);
70 }
71 } else if (descriptor->get_data_type() == "TriggerDecisionToken") {
72 tokenInObj = connObj;
73 input_conns.push_back(&tokenInObj);
74 }
75
76 else if (descriptor->get_data_type() == "TriggerInhibit") {
77 busyOutObj = connObj;
78 output_conns.push_back(&busyOutObj);
79 }
80 }
81
82 if (tdInObj == nullptr) {
83 throw(BadConf(ERS_HERE, "No TriggerDecision input connection descriptor given"));
84 }
85 if (busyOutObj == nullptr) {
86 throw(BadConf(ERS_HERE, "No TriggerInhibit output connection descriptor given"));
87 }
88 if (tokenInObj == nullptr) {
89 throw(BadConf(ERS_HERE, "No TriggerDecisionToken input connection descriptor given"));
90 }
91
92 // Process special Network rules!
93 std::vector<conffwk::ConfigObject> tdOutObjs;
94 for (auto [uid, descriptor]:
95 helper->get_netdescriptors("TriggerDecision", "DFApplication")) {
96 tdOutObjs.emplace_back(obj_fac.create_net_obj(descriptor, uid));
97 }
98
99 for (auto& tdOut : tdOutObjs) {
100 output_conns.push_back(&tdOut);
101 }
102
103 dfoObj.set_objs("inputs", input_conns);
104 dfoObj.set_objs("outputs", output_conns);
105
106 // Add to our list of modules to return
107 modules.push_back(obj_fac.get_dal<DFOModule>(dfoUid));
108
109 obj_fac.update_modules(modules);
110}
111
112} // namespace appmodel
113} // namespace dunedaq
#define ERS_HERE
void update_modules(const std::vector< const confmodel::DaqModule * > &modules)
conffwk::ConfigObject create_net_obj(const NetworkConnectionDescriptor *ndesc, std::string uid) const
Helper function that gets a network connection config.
const T * get_dal(std::string uid) const
conffwk::ConfigObject create(const std::string &class_name, const std::string &id) const
const dunedaq::appmodel::DFOConf * get_dfo() const
Get "dfo" relationship value.
void generate_modules(std::shared_ptr< appmodel::ConfigurationHelper >) const override
const std::vector< const dunedaq::appmodel::NetworkConnectionRule * > & get_network_rules() const
Get "network_rules" relationship value.
const std::string & UID() const noexcept
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:112
Including Qt Headers.