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