DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dal_methods.cpp
Go to the documentation of this file.
1
9#include "pybind11/operators.h"
10#include "pybind11/pybind11.h"
11#include "pybind11/stl.h"
12
21#include "confmodel/Session.hpp"
22
23
24#include <sstream>
25
26namespace py = pybind11;
27using namespace dunedaq::conffwk;
28
30
32 ObjectLocator(const std::string& id_arg, const std::string& class_name_arg) :
33 id(id_arg), class_name(class_name_arg)
34 {}
35 const std::string id;
36 const std::string class_name;
37 };
38
39
40 std::vector<ObjectLocator>
42 const std::string& session_name) {
43 auto session=db.get<Session>(session_name);
44 std::vector<ObjectLocator> apps;
45 for (auto app : session->all_applications()) {
46 apps.push_back({app->UID(),app->class_name()});
47 }
48 return apps;
49 }
50
51 std::vector<ObjectLocator>
53 const std::string& session_name) {
54 auto session=db.get<Session>(session_name);
55 std::vector<ObjectLocator> apps;
56 for (auto app : session->enabled_applications()) {
57 apps.push_back({app->UID(),app->class_name()});
58 }
59 return apps;
60 }
61
63 const std::string& session_id,
64 const std::string& component_id) {
65 const dunedaq::confmodel::Session* session_ptr = db.get<dunedaq::confmodel::Session>(session_id);
66 const dunedaq::confmodel::Resource* component_ptr = db.get<dunedaq::confmodel::Resource>(component_id);
67 if (component_ptr == nullptr) {
68 return false;
69 }
70 return component_ptr->is_disabled(*session_ptr);
71 }
72
73
74 std::vector<std::vector<ObjectLocator>> component_get_parents(Configuration& db,
75 const std::string& session_id,
76 const std::string& component_id) {
77 const dunedaq::confmodel::Session* session_ptr = db.get<dunedaq::confmodel::Session>(session_id);
78 const dunedaq::confmodel::Resource* component_ptr = db.get<dunedaq::confmodel::Resource>(component_id);
79
80 std::list<std::vector<const dunedaq::confmodel::Resource*>> parents;
81 std::vector<std::vector<ObjectLocator>> parent_ids;
82
83 component_ptr->parents(*session_ptr, parents);
84
85 for (const auto& parent : parents) {
86 std::vector<ObjectLocator> parents_components;
87 for (const auto& ancestor_component_ptr : parent) {
88 parents_components.emplace_back(
89 ObjectLocator(ancestor_component_ptr->UID(),
90 ancestor_component_ptr->class_name()) );
91 }
92 parent_ids.emplace_back(parents_components);
93 }
94 return parent_ids;
95 }
96
97 std::vector<std::string> daq_application_get_used_hostresources(Configuration& db, const std::string& app_id) {
98 auto app = db.get<dunedaq::confmodel::DaqApplication>(app_id);
99 std::vector<std::string> resources;
100 for (auto res : app->get_used_hostresources()) {
101 resources.push_back(res->UID());
102 }
103 return resources;
104 }
105
107 const std::string& session_id,
108 const std::string& app_id) {
109 const auto* app = db.get<dunedaq::confmodel::DaqApplication>(app_id);
110 const auto* session = db.get<dunedaq::confmodel::Session>(session_id);
111 return app->construct_commandline_parameters(db, session);
112 }
113
115 const std::string& session_id,
116 const std::string& app_id) {
117 const auto* app = const_cast<Configuration&>(db).get<dunedaq::confmodel::RCApplication>(app_id);
118 const auto* session = const_cast<Configuration&>(db).get<dunedaq::confmodel::Session>(session_id);
119 return app->construct_commandline_parameters(db, session);
120 }
121
122
124 const std::string& d2d_id) {
125 const auto* d2d = db.get<dunedaq::confmodel::DetectorToDaqConnection>(d2d_id);
126 if (d2d == nullptr) {
127 return "";
128 }
129 return d2d->receiver()->UID();
130 }
131
132 std::vector<std::string> d2d_senders(Configuration& db,
133 const std::string& d2d_id) {
134 std::vector<std::string> senders;
135 const auto* d2d = db.get<dunedaq::confmodel::DetectorToDaqConnection>(d2d_id);
136 if (d2d != nullptr) {
137 for (auto sender: d2d->senders()) {
138 senders.push_back(sender->UID());
139 }
140 }
141 return senders;
142 }
143
144 std::vector<std::string> d2d_streams(Configuration& db,
145 const std::string& d2d_id) {
146 std::vector<std::string> streams;
147 const auto* d2d = db.get<dunedaq::confmodel::DetectorToDaqConnection>(d2d_id);
148 if (d2d != nullptr) {
149 for (auto stream: d2d->streams()) {
150 streams.push_back(stream->UID());
151 }
152 }
153 return streams;
154 }
155
156 std::vector<std::string>
158 const std::string& res_id) {
159 std::vector<std::string> resources;
160 auto res_set = db.get<dunedaq::confmodel::ResourceSet>(res_id);
161 if (res_set != nullptr) {
162 for (auto res: res_set->contained_resources()) {
163 resources.push_back(res->UID());
164 }
165 }
166 return resources;
167 }
168
169
170void
172{
173 py::class_<ObjectLocator>(m, "ObjectLocator")
174 .def(py::init<const std::string&, const std::string&>())
175 .def_readonly("id", &ObjectLocator::id)
176 .def_readonly("class_name", &ObjectLocator::class_name)
177 ;
178
179 m.def("session_get_all_applications", &session_get_all_applications, "Get list of ALL applications (regardless of enabled/disabled state) in the requested session");
180 m.def("session_get_enabled_applications", &session_get_enabled_applications, "Get list of enabled applications in the requested session");
181
182 m.def("component_disabled", &component_disabled, "Determine if a Resource-derived object (e.g. a Segment) has been disabled");
183 m.def("component_get_parents", &component_get_parents, "Get the Resource-derived class instances of the parent(s) of the Resource-derived object in question");
184 m.def("daqapp_get_used_resources", &daq_application_get_used_hostresources, "Get list of HostResources used by DAQApplication");
185 m.def("daq_application_construct_commandline_parameters", &daq_application_construct_commandline_parameters, "Get a version of the command line agruments parsed");
186 m.def("rc_application_construct_commandline_parameters", &rc_application_construct_commandline_parameters, "Get a version of the command line agruments parsed");
187
188 m.def("d2d_receiver", &d2d_receiver, "Get receiver associated with DetectorToDaqConnection");
189 m.def("d2d_senders", &d2d_senders, "Get senders associated with DetectorToDaqConnection");
190 m.def("d2d_streams", &d2d_streams, "Get streams associated with DetectorToDaqConnection");
191 m.def("resourceset_contains", &resourceset_contains, "Get contained Resources from ResourceSet");
192}
193
194} // namespace dunedaq::confmodel::python
Defines base class for cache of template objects.
void get(const std::string &class_name, const std::string &id, ConfigObject &object, unsigned long rlevel=0, const std::vector< std::string > *rclasses=0)
Get object by class name and object id (multi-thread safe).
const std::string & UID() const noexcept
virtual const DetDataReceiver * receiver() const =0
void parents(const dunedaq::confmodel::Session &session, std::list< std::vector< const dunedaq::confmodel::Resource * > > &parents) const
bool is_disabled(const dunedaq::confmodel::ResourceTree &session) const
std::vector< std::string > d2d_senders(Configuration &db, const std::string &d2d_id)
std::vector< ObjectLocator > session_get_enabled_applications(Configuration &db, const std::string &session_name)
std::vector< std::vector< ObjectLocator > > component_get_parents(Configuration &db, const std::string &session_id, const std::string &component_id)
std::vector< std::string > d2d_streams(Configuration &db, const std::string &d2d_id)
std::vector< std::string > daq_application_construct_commandline_parameters(Configuration &db, const std::string &session_id, const std::string &app_id)
bool component_disabled(Configuration &db, const std::string &session_id, const std::string &component_id)
std::vector< std::string > daq_application_get_used_hostresources(Configuration &db, const std::string &app_id)
std::vector< std::string > resourceset_contains(Configuration &db, const std::string &res_id)
std::vector< ObjectLocator > session_get_all_applications(Configuration &db, const std::string &session_name)
void register_dal_methods(py::module &m)
std::vector< std::string > rc_application_construct_commandline_parameters(const Configuration &db, const std::string &session_id, const std::string &app_id)
std::string d2d_receiver(Configuration &db, const std::string &d2d_id)
ObjectLocator(const std::string &id_arg, const std::string &class_name_arg)