70 std::vector<const confmodel::DaqModule*> modules;
78 auto tch_class = tch_conf->get_template_for();
81 auto mlt_class = mlt_conf->get_template_for();
82 std::string handler_name(tch_conf->UID());
85 throw(BadConf(
ERS_HERE,
"No MLT configuration in MLTApplication given"));
94 auto destination_class = rule->get_destination_class();
95 auto data_type = rule->get_descriptor()->get_data_type();
96 if (destination_class == tch_class) {
97 tc_inputq_desc = rule->get_descriptor();
98 }
else if (destination_class == mlt_class) {
99 td_outputq_desc = rule->get_descriptor();
103 if (tc_inputq_desc ==
nullptr) {
104 throw(BadConf(
ERS_HERE,
"No TC input queue descriptor given"));
106 if (td_outputq_desc ==
nullptr) {
107 throw(BadConf(
ERS_HERE,
"No TD output-input queue descriptor given"));
122 std::string data_type = rule->get_descriptor()->get_data_type();
125 if (data_type ==
"TriggerInhibit") {
126 ti_net_desc = rule->get_descriptor();
128 if (data_type ==
"TriggerDecision") {
129 td_net_desc = rule->get_descriptor();
131 if (data_type ==
"TriggerCandidate") {
132 tc_net_desc = rule->get_descriptor();
134 if (data_type ==
"TimeSync") {
135 timesync_net_desc = rule->get_descriptor();
137 if (data_type ==
"DataRequest") {
138 req_net_desc = rule->get_descriptor();
141 TLOG_DEBUG(3) <<
"Endpoint class (currently not used in for networkconnections): data_type: " << data_type;
145 throw(BadConf(
ERS_HERE,
"No MLT network connection for the output TriggerDecision given"));
148 throw(BadConf(
ERS_HERE,
"No MLT network connection for the output TriggerInhibit given"));
151 throw(BadConf(
ERS_HERE,
"No MLT network connection for the Input of TriggerCandidates given"));
154 throw(BadConf(
ERS_HERE,
"No MLT network connection for the Input of DataRequests given"));
173 if (timesync_net_desc !=
nullptr) {
183 std::vector<conffwk::ConfigObject> generated_tc_conns;
184 generated_tc_conns.reserve(standalone_TC_maker_confs.size());
185 for (
auto gen_conf : standalone_TC_maker_confs) {
188 gen_obj.
set_obj(
"configuration", &(gen_conf->config_object()));
189 if (gen_conf->get_timestamp_method() ==
"kTimeSync" && !timesync_net_obj.
is_null()) {
190 gen_obj.
set_objs(
"inputs", { ×ync_net_obj });
194 generated_tc_conns.push_back(tc_net_gen);
196 gen_obj.
set_objs(
"outputs", { &generated_tc_conns.back() });
204 if (rdr_conf ==
nullptr) {
205 throw(BadConf(
ERS_HERE,
"No DataReaderModule configuration given"));
208 std::string reader_uid(
"data-reader-" +
UID());
209 std::string reader_class = rdr_conf->get_template_for();
210 TLOG_DEBUG(7) <<
"creating OKS configuration object for Data subscriber class " << reader_class;
212 reader_obj.
set_objs(
"inputs", { &tc_net_obj });
213 reader_obj.
set_objs(
"outputs", { &input_queue_obj });
214 reader_obj.
set_obj(
"configuration", &rdr_conf->config_object());
222 std::vector<const dunedaq::confmodel::Application*> apps =
session->enabled_applications();
224 std::vector<const conffwk::ConfigObject*> sourceIds;
226 for (
auto app : apps) {
228 if (ro_app !=
nullptr) {
229 auto connections = ro_app->get_detector_connections();
231 for (
auto d2d_conn : connections) {
232 if (d2d_conn->is_disabled(*
session)) {
233 TLOG_DEBUG(7) <<
"Ignoring disabled Detector2DaqConnection " << d2d_conn->UID();
237 if (d2d_conn->contained_resources().empty()) {
238 throw(BadConf(
ERS_HERE,
"DetectorToDaqConnection does not contain interfaces"));
242 for (
auto stream : d2d_conn->streams()) {
243 if (stream ==
nullptr) {
244 throw(BadConf(
ERS_HERE,
"ReadoutInterface contains something other than DetectorStream"));
246 if (stream->is_disabled(*
session)) {
247 TLOG_DEBUG(7) <<
"Ignoring disabled DetectorStream " << stream->UID();
252 auto id = stream->get_source_id();
253 std::string sourceIdConfUID =
"dro-mlt-stream-config-" + std::to_string(
id);
255 obj_fac.
create(
"SourceIDConf", sourceIdConfUID));
256 sourceIdConf->
set_by_val<uint32_t>(
"sid", id);
258 sourceIdConf->
set_by_val<std::string>(
"subsystem",
"Detector_Readout");
259 sourceIds.push_back(sourceIdConf);
262 if (ro_app->get_tp_generation_enabled()) {
263 for (
auto sid : ro_app->get_tp_source_ids()) {
264 sourceIds.push_back(&(sid->config_object()));
275 if (tpreplay_app !=
nullptr) {
276 for (
auto sid : tpreplay_app->get_tp_source_ids()) {
277 sourceIds.push_back(&(sid->config_object()));
282 if (fd_app !=
nullptr) {
284 auto producers = fd_app->get_producers();
286 for (
auto stream : producers) {
288 if (stream->is_disabled(*
session)) {
289 TLOG_DEBUG(7) <<
"Ignoring disabled FakeDataProdConf " << stream->UID();
294 auto id = stream->get_source_id();
295 std::string sourceIdConfUID =
"dro-mlt-stream-config-" + std::to_string(
id);
297 obj_fac.
create(
"SourceIDConf", sourceIdConfUID));
298 sourceIdConf->
set_by_val<uint32_t>(
"sid", id);
300 sourceIdConf->
set_by_val<std::string>(
"subsystem",
"Detector_Readout");
301 sourceIds.push_back(sourceIdConf);
308 if (trg_app !=
nullptr && trg_app->get_source_id() !=
nullptr) {
312 trg_app->UID() +
"-" + std::to_string(trg_app->get_source_id()->get_sid())
314 tcSourceIdConf->
set_by_val<uint32_t>(
"sid", trg_app->get_source_id()->get_sid());
315 tcSourceIdConf->
set_by_val<std::string>(
"subsystem", trg_app->get_source_id()->get_subsystem());
316 sourceIds.push_back(tcSourceIdConf);
322 if (hsi_app !=
nullptr && hsi_app->get_source_id() !=
nullptr) {
326 hsi_app->UID() +
"-" + std::to_string(hsi_app->get_source_id()->get_sid())));
327 hsEventSourceIdConf->
set_by_val<uint32_t>(
"sid", hsi_app->get_source_id()->get_sid());
328 hsEventSourceIdConf->
set_by_val<std::string>(
"subsystem", hsi_app->get_source_id()->get_subsystem());
329 sourceIds.push_back(hsEventSourceIdConf);
333 if (dts_hsi_app !=
nullptr && dts_hsi_app->get_source_id() !=
nullptr) {
337 dts_hsi_app->UID() +
"-" + std::to_string(dts_hsi_app->get_source_id()->get_sid())
340 hsEventSourceIdConf->
set_by_val<uint32_t>(
"sid", dts_hsi_app->get_source_id()->get_sid());
341 hsEventSourceIdConf->
set_by_val<std::string>(
"subsystem", dts_hsi_app->get_source_id()->get_subsystem());
342 sourceIds.push_back(hsEventSourceIdConf);
347 auto sources = ctb_app->get_sources();
348 for (
const auto & s : sources ) {
350 ctb_app->UID() +
"-" + s.first ) );
351 src_id_conf_ptr->set_by_val<uint32_t>(
"sid", s.second->get_sid());
352 src_id_conf_ptr->set_by_val<std::string>(
"subsystem", s.second->get_subsystem());
353 sourceIds.push_back(src_id_conf_ptr);
362 cib_app->UID() +
"-" + std::to_string(cib_app->get_source_id()->get_sid())
365 hsEventSourceIdConf->
set_by_val<uint32_t>(
"sid", cib_app->get_source_id()->get_sid());
366 hsEventSourceIdConf->
set_by_val<std::string>(
"subsystem", cib_app->get_source_id()->get_subsystem());
367 sourceIds.push_back(hsEventSourceIdConf);
373 std::vector<const conffwk::ConfigObject*> mandatory_sids;
375 if (tc_dp !=
nullptr) {
377 mandatory_sids.push_back(&m->config_object());
387 auto sessionApps =
session->enabled_applications();
388 std::vector<conffwk::ConfigObject> fragOutObjs;
389 for (
auto app : sessionApps) {
391 if (dfapp ==
nullptr)
395 for (
auto rule : dfNRules) {
396 auto descriptor = rule->get_descriptor();
397 auto data_type = descriptor->get_data_type();
398 if (data_type ==
"Fragment") {
399 fragOutObjs.emplace_back(obj_fac.
create_net_obj(descriptor, dfapp->UID()));
405 std::vector<const conffwk::ConfigObject*> ti_output_objs;
406 for (
auto& fNet : fragOutObjs) {
407 ti_output_objs.push_back(&fNet);
409 ti_output_objs.push_back(&output_queue_obj);
411 auto tch_conf_obj = tch_conf->config_object();
413 throw(BadConf(
ERS_HERE,
"No source_id associated with this TriggerApplication!"));
416 std::string ti_uid(handler_name +
"-" + std::to_string(source_id));
418 ti_obj.
set_by_val<uint32_t>(
"source_id", source_id);
419 ti_obj.
set_by_val<uint32_t>(
"detector_id", 1);
420 ti_obj.
set_obj(
"module_configuration", &tch_conf_obj);
421 ti_obj.
set_objs(
"enabled_source_ids", sourceIds);
422 ti_obj.
set_objs(
"mandatory_source_ids", mandatory_sids);
423 ti_obj.
set_objs(
"inputs", { &input_queue_obj, &dr_net_obj });
424 ti_obj.
set_objs(
"outputs", ti_output_objs);
435 mlt_obj.
set_obj(
"configuration", &(mlt_conf->config_object()));
436 mlt_obj.
set_objs(
"inputs", { &output_queue_obj, &ti_net_obj });
437 mlt_obj.
set_objs(
"outputs", { &td_net_obj });