14 tpwriting_enabled: bool,
15 generate_segment: bool,
16 n_data_writers: int = 1,
17 trmon_app: bool =
False,
19 """Simple script to create an OKS configuration file for a dataflow segment.
21 The file will automatically include the relevant schema files and
22 any other OKS files you specify.
26 "schema/confmodel/dunedaq.schema.xml",
27 "schema/appmodel/application.schema.xml",
30 res, extra_includes = find_oksincludes(include, os.path.dirname(oksfile))
32 includefiles += extra_includes
38 if not oksfile.endswith(
".data.xml"):
39 oksfile = oksfile +
".data.xml"
40 print(f
"Creating OKS database file {oksfile}")
41 db.create_db(oksfile, includefiles)
42 db.set_active(oksfile)
45 for vhost
in db.get_dals(class_name=
"VirtualHost"):
46 hosts.append(vhost.id)
47 if vhost.id ==
"vlocalhost":
49 if "vlocalhost" not in hosts:
50 cpus = dal.HostCores(
"cpus", cpu_cores=[0, 1, 2, 3])
52 phdal = dal.PhysicalHost(
"localhost", contains=[cpus])
54 host = dal.VirtualHost(
"vlocalhost", runs_on=phdal, uses=[cpus])
56 hosts.append(
"vlocalhost")
59 daqapp_control = db.get_dal(class_name=
"Service", uid=
"daqapp_control")
60 rccontroller_control = db.get_dal(class_name=
"Service", uid=
"rccontroller_control")
63 tpw_source_id = db.get_dal(
"SourceIDConf", uid=
"srcid-tp-stream-writer")
66 trigger_record_q_rule = db.get_dal(
67 class_name=
"QueueConnectionRule", uid=
"trigger-record-q-rule"
69 dfapp_qrules = [trigger_record_q_rule]
72 frag_net_rule = db.get_dal(class_name=
"NetworkConnectionRule", uid=
"frag-net-rule")
73 df_token_net_rule = db.get_dal(
74 class_name=
"NetworkConnectionRule", uid=
"df-token-net-rule"
76 tpset_net_rule = db.get_dal(
77 class_name=
"NetworkConnectionRule", uid=
"tpset-net-rule"
79 ti_net_rule = db.get_dal(class_name=
"NetworkConnectionRule", uid=
"ti-net-rule")
80 td_dfo_net_rule = db.get_dal(
81 class_name=
"NetworkConnectionRule", uid=
"td-dfo-net-rule"
83 td_trb_net_rule = db.get_dal(
84 class_name=
"NetworkConnectionRule", uid=
"td-trb-net-rule"
86 data_req_trig_net_rule = db.get_dal(
87 class_name=
"NetworkConnectionRule", uid=
"data-req-trig-net-rule"
89 data_req_hsi_net_rule = db.get_dal(
90 class_name=
"NetworkConnectionRule", uid=
"data-req-hsi-net-rule"
92 data_req_readout_net_rule = db.get_dal(
93 class_name=
"NetworkConnectionRule", uid=
"data-req-readout-net-rule"
99 data_req_hsi_net_rule,
100 data_req_readout_net_rule,
101 data_req_trig_net_rule,
107 trmon_req_net_rule = db.get_dal(
108 class_name=
"NetworkConnectionRule", uid=
"trmon-req-net-rule"
110 trigger_record_net_rule = db.get_dal(
111 class_name=
"NetworkConnectionRule", uid=
"trigger-record-net-rule"
113 dfapp_netrules.append(trmon_req_net_rule)
114 dfapp_netrules.append(trigger_record_net_rule)
116 trmon_netrules.append(trigger_record_net_rule)
117 trigger_decision_token_q_rule = db.get_dal(
118 class_name=
"QueueConnectionRule", uid=
"trigger-decision-token-q-rule"
120 trmon_qrules.append(trigger_decision_token_q_rule)
122 dfo_netrules = [td_dfo_net_rule, ti_net_rule, df_token_net_rule]
123 tpw_netrules = [tpset_net_rule]
125 opmon_conf = db.get_dal(class_name=
"OpMonConf", uid=
"slow-all-monitoring")
127 dfo_conf = db.get_dal(class_name=
"DFOConf", uid=
"dfoconf-01")
128 dfo = dal.DFOApplication(
131 application_name=
"daq_application",
132 exposes_service=[daqapp_control],
133 network_rules=dfo_netrules,
134 opmon_conf=opmon_conf,
139 trb_conf = db.get_dal(class_name=
"TRBConf", uid=
"trb-01")
140 dw_conf = db.get_dal(class_name=
"DataWriterConf", uid=
"dw-01")
141 dfhw = db.get_dal(class_name=
"DFHWConf", uid=
"dfhw-01")
143 for dfapp_idx
in range(n_dfapps):
144 dfapp_id = dfapp_idx + 1
147 dfapp_source_id = dal.SourceIDConf(
148 f
"srcid-df-{dfapp_id:02}", sid=dfapp_id + 1, subsystem=
"TR_Builder"
150 db.update_dal(dfapp_source_id)
152 dfapp = dal.DFApplication(
155 application_name=
"daq_application",
156 exposes_service=[daqapp_control],
157 source_id=dfapp_source_id,
158 queue_rules=dfapp_qrules,
159 network_rules=dfapp_netrules,
160 opmon_conf=opmon_conf,
162 data_writers=[dw_conf] * n_data_writers,
169 if tpwriting_enabled:
170 tpw_writer_conf = db.get_dal(
171 class_name=
"TPStreamWriterConf", uid=
"tp-stream-writer-conf"
174 tpwapp = dal.TPStreamWriterApplication(
177 application_name=
"daq_application",
178 exposes_service=[daqapp_control],
179 source_id=tpw_source_id,
180 network_rules=tpw_netrules,
181 opmon_conf=opmon_conf,
182 tp_writer=tpw_writer_conf,
184 db.update_dal(tpwapp)
185 tpwapps.append(tpwapp)
189 trmonconf = db.get_dal(class_name=
"TRMonRequestorConf", uid=
"trmr-01")
190 trmondwconf = db.get_dal(class_name=
"DataWriterConf", uid=
"tr_mon_dw-01")
192 trmonapp = dal.TRMonReqApplication(
195 application_name=
"daq_application",
196 exposes_service=[daqapp_control],
197 network_rules=trmon_netrules,
198 queue_rules=trmon_qrules,
199 opmon_conf=opmon_conf,
201 data_writer=trmondwconf,
204 db.update_dal(trmonapp)
205 trmonapps.append(trmonapp)
208 fsm = db.get_dal(class_name=
"FSMconfiguration", uid=
"FSMconfiguration_noAction")
209 controller = dal.RCApplication(
211 application_name=
"drunc-controller",
214 opmon_conf=opmon_conf,
215 exposes_service=[rccontroller_control],
217 db.update_dal(controller)
221 controller=controller,
222 applications=[dfo] + dfapps + tpwapps + trmonapps,
228 except RuntimeError
as err:
229 print(
"Failed to commit Dataflow DB!")
230 print(traceback.format_exc())
238 generate_segment: bool,
240 """Simple script to create an OKS configuration file for a FakeHSI segment.
242 The file will automatically include the relevant schema files and
243 any other OKS files you specify.
249 "schema/confmodel/dunedaq.schema.xml",
250 "schema/appmodel/application.schema.xml",
251 "schema/appmodel/trigger.schema.xml",
254 res, extra_includes = find_oksincludes(include, os.path.dirname(oksfile))
256 includefiles += extra_includes
262 if not oksfile.endswith(
".data.xml"):
263 oksfile = oksfile +
".data.xml"
264 print(f
"Creating OKS database file {oksfile}")
265 db.create_db(oksfile, includefiles)
266 db.set_active(oksfile)
269 for vhost
in db.get_dals(class_name=
"VirtualHost"):
270 hosts.append(vhost.id)
271 if vhost.id ==
"vlocalhost":
273 if "vlocalhost" not in hosts:
274 cpus = dal.HostCores(
"cpus", cpu_cores=[0, 1, 2, 3])
276 phdal = dal.PhysicalHost(
"localhost", contains=[cpus])
278 host = dal.VirtualHost(
"vlocalhost", runs_on=phdal, uses=[cpus])
280 hosts.append(
"vlocalhost")
283 daqapp_control = db.get_dal(class_name=
"Service", uid=
"daqapp_control")
284 rccontroller_control = db.get_dal(class_name=
"Service", uid=
"rccontroller_control")
285 dataRequests = db.get_dal(class_name=
"Service", uid=
"dataRequests")
286 hsievents = db.get_dal(class_name=
"Service", uid=
"HSIEvents")
289 hsi_source_id = db.get_dal(class_name=
"SourceIDConf", uid=
"hsi-srcid-01")
290 hsi_tc_source_id = db.get_dal(class_name=
"SourceIDConf", uid=
"hsi-tc-srcid-1")
293 hsi_dlh_queue_rule = db.get_dal(
294 class_name=
"QueueConnectionRule", uid=
"hsi-dlh-data-requests-queue-rule"
296 hsi_qrules = [hsi_dlh_queue_rule]
299 tc_net_rule = db.get_dal(class_name=
"NetworkConnectionRule", uid=
"tc-net-rule")
300 hsi_rule = db.get_dal(class_name=
"NetworkConnectionRule", uid=
"hsi-rule")
301 ts_hsi_net_rule = db.get_dal(
302 class_name=
"NetworkConnectionRule", uid=
"ts-hsi-net-rule"
304 data_req_hsi_net_rule = db.get_dal(
305 class_name=
"NetworkConnectionRule", uid=
"data-req-hsi-net-rule"
307 hsi_netrules = [hsi_rule, data_req_hsi_net_rule, ts_hsi_net_rule]
308 tc_netrules = [hsi_rule, tc_net_rule]
310 opmon_conf = db.get_dal(class_name=
"OpMonConf", uid=
"slow-all-monitoring")
311 hsi_handler = db.get_dal(class_name=
"DataHandlerConf", uid=
"def-hsi-handler")
312 fakehsi = db.get_dal(class_name=
"FakeHSIEventGeneratorConf", uid=
"fakehsi")
314 hsi = dal.FakeHSIApplication(
317 application_name=
"daq_application",
318 exposes_service=[daqapp_control],
319 source_id=hsi_source_id,
320 queue_rules=hsi_qrules,
321 network_rules=hsi_netrules,
322 opmon_conf=opmon_conf,
323 link_handler=hsi_handler,
328 hsi_to_tc_conf = db.get_dal(class_name=
"HSI2TCTranslatorConf", uid=
"hsi-to-tc-conf")
330 hsi_to_tc = dal.HSIEventToTCApplication(
333 application_name=
"daq_application",
334 exposes_service=[dataRequests, hsievents, daqapp_control],
335 source_id=hsi_tc_source_id,
336 network_rules=tc_netrules,
337 opmon_conf=opmon_conf,
338 hsevent_to_tc_conf=hsi_to_tc_conf,
340 db.update_dal(hsi_to_tc)
343 fsm = db.get_dal(class_name=
"FSMconfiguration", uid=
"FSMconfiguration_noAction")
344 controller = dal.RCApplication(
346 application_name=
"drunc-controller",
349 opmon_conf=opmon_conf,
350 exposes_service=[rccontroller_control],
352 db.update_dal(controller)
355 f
"hsi-segment", controller=controller, applications=[hsi, hsi_to_tc]
367 generate_segment: bool,
368 emulated_file_name: str,
369 tpg_enabled: bool =
True,
370 hosts_to_use: list[str] = [],
372 """Simple script to create an OKS configuration file for all
373 ReadoutApplications defined in a readout map.
375 The file will automatically include the relevant schema files and
376 any other OKS files you specify.
379 generate_readoutOKS -i hosts \
380 -i appmodel/connections.data.xml -i appmodel/moduleconfs \
381 config/np04readoutmap.data.xml readoutApps.data.xml
383 Will load hosts, connections and moduleconfs data files as well as
384 the readoutmap (config/np04readoutmap.data.xml) and write the
385 generated apps to readoutApps.data.xml.
387 generate_readoutOKS --session --segment \
388 -i appmodel/fsm -i hosts \
389 -i appmodel/connections.data.xml -i appmodel/moduleconfs \
390 config/np04readoutmap.data.xml np04readout-session.data.xml
392 Will do the same but in addition it will generate a containing
393 Segment for the apps and a containing Session for the Segment.
395 NB: Currently FSM generation is not implemented so you must include
396 an fsm file in order to generate a Segment
400 if not readoutmap.endswith(
".data.xml"):
401 readoutmap = readoutmap +
".data.xml"
403 print(f
"Readout map file {readoutmap}")
407 "schema/confmodel/dunedaq.schema.xml",
408 "schema/appmodel/application.schema.xml",
409 "schema/appmodel/trigger.schema.xml",
410 "schema/appmodel/fdmodules.schema.xml",
411 "schema/appmodel/wiec.schema.xml",
414 if os.path.exists(readoutmap)
418 searchdirs = [path
for path
in os.environ[
"DUNEDAQ_DB_PATH"].split(
":")]
419 searchdirs.append(os.path.dirname(oksfile))
423 inc = inc.removesuffix(
".xml")
424 if inc.endswith(
".data"):
425 sub_dirs = [
"config",
"data"]
426 elif inc.endswith(
".schema"):
427 sub_dirs = [
"schema"]
431 for path
in searchdirs:
433 matches = glob.glob(f
"{inc}.xml", root_dir=path)
434 if len(matches) == 0:
435 for search_dir
in sub_dirs:
437 matches = glob.glob(f
"{search_dir}/{inc}.xml", root_dir=path)
438 for filename
in matches:
439 if filename
not in includefiles:
440 print(f
"Adding {filename} to include list")
441 includefiles.append(filename)
443 print(f
"{filename} already in include list")
451 for filename
in matches:
452 if filename
not in includefiles:
453 print(f
"Adding {filename} to include list")
454 includefiles.append(filename)
456 print(f
"{filename} already in include list")
461 print(f
"Error could not find include file for {inc}")
466 if not oksfile.endswith(
".data.xml"):
467 oksfile = oksfile +
".data.xml"
468 print(f
"Creating OKS database file {oksfile}")
469 db.create_db(oksfile, includefiles)
470 db.set_active(oksfile)
472 detector_connections = db.get_dals(class_name=
"DetectorToDaqConnection")
473 daqapp_control = db.get_dal(class_name=
"Service", uid=
"daqapp_control")
474 rccontroller_control = db.get_dal(class_name=
"Service", uid=
"rccontroller_control")
478 class_name=
"NetworkConnectionRule", uid=
"data-req-readout-net-rule"
482 'Expected NetworkConnectionRule "data-req-readout-net-rule" not found in input databases!'
487 for rule
in [
"tpset-net-rule",
"ts-net-rule",
"ta-net-rule"]:
488 netrules.append(db.get_dal(class_name=
"NetworkConnectionRule", uid=rule))
492 class_name=
"QueueConnectionRule", uid=
"fd-dlh-data-requests-queue-rule"
496 'Expected QueueConnectionRule "fd-dlh-data-requests-queue-rule" not found in input databases!'
504 qrules.append(db.get_dal(class_name=
"QueueConnectionRule", uid=rule))
507 if len(hosts_to_use) == 0:
508 for vhost
in db.get_dals(class_name=
"VirtualHost"):
509 if vhost.id ==
"vlocalhost":
510 hosts.append(vhost.id)
511 if "vlocalhost" not in hosts:
512 cpus = dal.HostCores(
"cpus", cpu_cores=[0, 1, 2, 3])
514 phdal = dal.PhysicalHost(
"localhost", contains=[cpus])
516 host = dal.VirtualHost(
"vlocalhost", runs_on=phdal, uses=[cpus])
518 hosts.append(
"vlocalhost")
520 for vhost
in db.get_dals(class_name=
"VirtualHost"):
521 if vhost.id
in hosts_to_use:
522 hosts.append(vhost.id)
523 assert len(hosts) > 0
525 rohw = dal.RoHwConfig(f
"rohw-{detector_connections[0].id}")
528 opmon_conf = db.get_dal(class_name=
"OpMonConf", uid=
"slow-all-monitoring")
529 fragagg = db.get_dal(class_name=
"FragmentAggregatorConf", uid=
"frag-agg-01")
537 for connection
in detector_connections:
539 geo_id = connection.get(
"GeoId")
540 det_id = geo_id[0].detector_id
542 raise Exception(f
"Unable to determine detector ID from Hardware Map!")
544 tphandler = db.get_dal(class_name=
"DataHandlerConf", uid=
"def-tp-handler")
547 if "DAPHNEStream" in emulated_file_name:
548 linkhandler = db.get_dal(
549 class_name=
"DataHandlerConf", uid=
"def-pds-stream-link-handler"
551 cb_desc = db.get_dal(
552 class_name=
"DataMoveCallbackDescriptor", uid=
"pds-stream-raw-input"
554 elif "DAPHNEEthStream" in emulated_file_name:
555 linkhandler = db.get_dal(
556 class_name=
"DataHandlerConf", uid=
"def-pds-eth-stream-link-handler"
558 cb_desc = db.get_dal(
559 class_name=
"DataMoveCallbackDescriptor", uid=
"pds-eth-stream-raw-input"
561 elif "DAPHNEEth" in emulated_file_name:
562 linkhandler = db.get_dal(
563 class_name=
"DataHandlerConf", uid=
"def-pds-eth-link-handler"
565 cb_desc = db.get_dal(
566 class_name=
"DataMoveCallbackDescriptor", uid=
"pds-eth-raw-input"
569 linkhandler = db.get_dal(
570 class_name=
"DataHandlerConf", uid=
"def-pds-link-handler"
572 cb_desc = db.get_dal(
573 class_name=
"DataMoveCallbackDescriptor", uid=
"pds-raw-input"
576 elif det_id == 3
or det_id == 10:
577 linkhandler = db.get_dal(
578 class_name=
"DataHandlerConf", uid=
"def-link-handler"
580 cb_desc = db.get_dal(
581 class_name=
"DataMoveCallbackDescriptor", uid=
"wib-eth-raw-input"
584 linkhandler = db.get_dal(
585 class_name=
"DataHandlerConf", uid=
"def-tde-link-handler"
587 cb_desc = db.get_dal(
588 class_name=
"DataMoveCallbackDescriptor", uid=
"tde-raw-input"
591 linkhandler = db.get_dal(
592 class_name=
"DataHandlerConf", uid=
"def-crt-bern-link-handler"
595 cb_desc = db.get_dal(
596 class_name=
"DataMoveCallbackDescriptor", uid=
"crt-bern-raw-input"
599 linkhandler = db.get_dal(
600 class_name=
"DataHandlerConf", uid=
"def-crt-grenoble-link-handler"
603 cb_desc = db.get_dal(
604 class_name=
"DataMoveCallbackDescriptor", uid=
"crt-grenoble-raw-input"
607 hostnum = appnum % len(hosts)
609 host = db.get_dal(class_name=
"VirtualHost", uid=hosts[hostnum])
612 if connection.className() ==
"NetworkDetectorToDaqConnection":
613 receiver = connection.net_receiver
614 elif connection.className() ==
"FelixDetectorToDaqConnection":
615 receiver = connection.felix_receiver
618 readout_start = db.get_dal(class_name=
"ActionPlan", uid=
"readout-start")
619 readout_stop = db.get_dal(class_name=
"ActionPlan", uid=
"readout-stop")
622 if type(receiver).__name__ ==
"FakeDataReceiver":
625 stream_emu = db.get_dal(
626 class_name=
"StreamEmulationParameters", uid=
"stream-emu"
628 stream_emu.data_file_name = resolve_asset_file(emulated_file_name)
629 db.update_dal(stream_emu)
631 stream_emu = dal.StreamEmulationParameters(
633 data_file_name=resolve_asset_file(emulated_file_name),
634 input_file_size_limit=5777280,
636 random_population_size=100000,
637 frame_error_rate_hz=0,
638 generate_periodic_adc_pattern=
True,
639 TP_rate_per_channel=1,
641 db.update_dal(stream_emu)
643 print(
"Generating fake DataReaderConf")
644 nicrec = dal.DPDKReaderConf(
646 template_for=
"FDFakeReaderModule",
648 emulation_conf=stream_emu,
650 db.update_dal(nicrec)
652 elif type(receiver).__name__ ==
"DPDKReceiver":
654 print(
"Generating DPDKReaderConf")
655 nicrec = dal.DPDKReaderConf(
656 f
"nicrcvr-dpdk-gen", template_for=
"DPDKReaderModule"
658 db.update_dal(nicrec)
661 wm_conf = db.get_dal(
"WIBModuleConf",
"def-wib-conf")
664 'Expected WIBModuleConf "def-wib-conf" not found in input databases!'
666 if hermes_conf ==
None:
668 hermes_conf = db.get_dal(
"HermesModuleConf",
"def-hermes-conf")
671 'Expected HermesModuleConf "def-hermes-conf" not found in input databases!'
676 wiec_app = dal.WIECApplication(
677 f
"wiec-{connection.id}",
678 application_name=
"daq_application",
680 detector_connections=[connection],
681 wib_module_conf=wm_conf,
682 hermes_module_conf=hermes_conf,
683 exposes_service=[daqapp_control],
685 db.update_dal(wiec_app)
687 elif type(receiver).__name__ ==
"FelixInterface":
689 print(
"Generating Felix DataReaderConf")
690 flxcard = dal.DataReaderConf(
691 f
"flxConf-1", template_for=
"FelixReaderModule"
693 db.update_dal(flxcard)
695 elif type(receiver).__name__ ==
"FileReaderReceiver":
698 snb_files = db.get_dal(
699 class_name=
"SNBFileSourceParameters",
700 uid=f
"snb-files-{connection.id}",
702 snb_files.data_files = [resolve_asset_file(emulated_file_name)]
703 db.update_dal(snb_files)
705 snb_files = dal.SNBFileSourceParameters(
707 data_files=[resolve_asset_file(emulated_file_name)],
708 input_buffer_size=5777280,
709 file_compression_algorithm=
"None",
711 db.update_dal(snb_files)
713 print(
"Generating fake DataReaderConf")
714 nicrec = dal.SNBFileReaderConf(
715 f
"nicrcvr-file-reader",
716 template_for=
"SNBFileReaderModule",
720 db.update_dal(nicrec)
723 print(f
"Using SNB DataHandler")
724 linkhandler.template_for =
"SNBDataHandlerModule"
725 db.update_dal(linkhandler)
727 readout_start = db.get_dal(class_name=
"ActionPlan", uid=
"snb-readout-start")
728 readout_stop = db.get_dal(class_name=
"ActionPlan", uid=
"snb-readout-stop")
731 f
"ReadoutGroup contains unknown interface type {type(receiver).__name__}"
738 dataRequests = db.get_dal(class_name=
"Service", uid=
"dataRequests")
739 timeSyncs = db.get_dal(class_name=
"Service", uid=
"timeSyncs")
740 triggerActivities = db.get_dal(class_name=
"Service", uid=
"triggerActivities")
741 triggerPrimitives = db.get_dal(class_name=
"Service", uid=
"triggerPrimitives")
743 ru = dal.ReadoutApplication(
744 f
"ru-{connection.id}",
745 application_name=
"daq_application",
747 detector_connections=[connection],
748 network_rules=netrules,
750 link_handler=linkhandler,
751 data_reader=datareader,
752 fragment_aggregator=fragagg,
753 opmon_conf=opmon_conf,
754 tp_generation_enabled=tpg_enabled,
755 ta_generation_enabled=tpg_enabled,
757 exposes_service=[daqapp_control, dataRequests, timeSyncs],
758 action_plans=[readout_start, readout_stop],
759 callback_desc=cb_desc,
762 ru.tp_handler = tphandler
764 tpbaseid = (appnum * 3) + 100
767 for plane
in range(1
if det_id
not in [3, 10, 11]
else 3):
768 s_id = tpbaseid + plane
769 tps_dal = dal.SourceIDConf(
770 f
"tp-srcid-{s_id}", sid=s_id, subsystem=
"Trigger"
772 db.update_dal(tps_dal)
773 tp_sources.append(tps_dal)
774 ru.tp_source_ids = tp_sources
775 ru.exposes_service += [triggerActivities, triggerPrimitives]
782 print(f
"No ReadoutApplications generated\n")
789 fsm = db.get_dal(class_name=
"FSMconfiguration", uid=
"FSMconfiguration_noAction")
790 controller = dal.RCApplication(
792 application_name=
"drunc-controller",
795 opmon_conf=opmon_conf,
796 exposes_service=[rccontroller_control],
798 db.update_dal(controller)
801 seg = dal.Segment(f
"ru-segment", controller=controller, applications=ruapps)
812 generate_segment: bool,
816 fragment_type: str |
None =
None,
818 """Simple script to create an OKS configuration file for a FakeDataProd-based readout segment.
820 The file will automatically include the relevant schema files and
821 any other OKS files you specify.
826 "schema/confmodel/dunedaq.schema.xml",
827 "schema/appmodel/application.schema.xml",
830 res, extra_includes = find_oksincludes(include, os.path.dirname(oksfile))
832 includefiles += extra_includes
838 if not oksfile.endswith(
".data.xml"):
839 oksfile = oksfile +
".data.xml"
840 print(f
"Creating OKS database file {oksfile}")
841 db.create_db(oksfile, includefiles)
842 db.set_active(oksfile)
845 for vhost
in db.get_dals(class_name=
"VirtualHost"):
846 hosts.append(vhost.id)
847 if vhost.id ==
"vlocalhost":
849 if "vlocalhost" not in hosts:
850 cpus = dal.HostCores(
"cpus", cpu_cores=[0, 1, 2, 3])
852 phdal = dal.PhysicalHost(
"localhost", contains=[cpus])
854 host = dal.VirtualHost(
"vlocalhost", runs_on=phdal, uses=[cpus])
856 hosts.append(
"vlocalhost")
861 daqapp_control = db.get_dal(class_name=
"Service", uid=
"daqapp_control")
862 rccontroller_control = db.get_dal(class_name=
"Service", uid=
"rccontroller_control")
863 dataRequests = db.get_dal(class_name=
"Service", uid=
"dataRequests")
864 timeSyncs = db.get_dal(class_name=
"Service", uid=
"timeSyncs")
865 opmon_conf = db.get_dal(class_name=
"OpMonConf", uid=
"slow-all-monitoring")
866 fragagg = db.get_dal(class_name=
"FragmentAggregatorConf", uid=
"frag-agg-01")
869 class_name=
"NetworkConnectionRule", uid=
"data-req-readout-net-rule"
872 for rule
in [
"ts-fdp-net-rule"]:
873 netrules.append(db.get_dal(class_name=
"NetworkConnectionRule", uid=rule))
877 class_name=
"QueueConnectionRule", uid=
"fpdm-data-requests-queue-rule"
881 'Expected QueueConnectionRule "fpdm-data-requests-queue-rule" not found in input databases!'
888 qrules.append(db.get_dal(class_name=
"QueueConnectionRule", uid=rule))
893 time_tick_diff = 32 * 64
895 fragment_type =
"WIBEth"
897 if fragment_type ==
"DAPHNEEthStream":
901 elif fragment_type ==
"DAPHNEEth":
903 time_tick_diff = 1024
907 f
"FakeDataProd fragment_type '{fragment_type}' not recognized for detector ID {det_id}; "
908 f
"expected 'DAPHNEEthStream' or 'DAPHNEEth'"
912 f
"FakeDataProd parameters not configured for detector ID {det_id}"
915 for appidx
in range(n_apps):
917 fakeapp = dal.FakeDataApplication(
918 f
"fakedata-{appidx}",
920 application_name=
"daq_application",
921 exposes_service=[daqapp_control, dataRequests, timeSyncs],
923 network_rules=netrules,
924 fragment_aggregator=fragagg,
925 opmon_conf=opmon_conf,
928 for streamidx
in range(n_streams):
929 stream = dal.FakeDataProdConf(
930 f
"fakedata-{appidx}-stream-{streamidx}",
931 system_type=
"Detector_Readout",
933 time_tick_diff=time_tick_diff,
934 frame_size=frame_size,
935 response_delay=response_delay,
936 fragment_type=fragment_type,
938 db.update_dal(stream)
939 fakeapp.producers.append(stream)
940 source_id = source_id + 1
942 db.update_dal(fakeapp)
943 fakeapps.append(fakeapp)
946 fsm = db.get_dal(class_name=
"FSMconfiguration", uid=
"FSMconfiguration_noAction")
947 controller = dal.RCApplication(
949 application_name=
"drunc-controller",
950 opmon_conf=opmon_conf,
953 exposes_service=[rccontroller_control],
955 db.update_dal(controller)
959 controller=controller,
960 applications=fakeapps,
971 generate_segment: bool,
972 tpg_enabled: bool =
True,
973 hsi_enabled: bool =
False,
975 """Simple script to create an OKS configuration file for a trigger segment.
977 The file will automatically include the relevant schema files and
978 any other OKS files you specify.
983 "schema/confmodel/dunedaq.schema.xml",
984 "schema/appmodel/application.schema.xml",
985 "schema/appmodel/trigger.schema.xml",
988 res, extra_includes = find_oksincludes(include, os.path.dirname(oksfile))
990 includefiles += extra_includes
996 if not oksfile.endswith(
".data.xml"):
997 oksfile = oksfile +
".data.xml"
998 print(f
"Creating OKS database file {oksfile}")
999 db.create_db(oksfile, includefiles)
1000 db.set_active(oksfile)
1003 for vhost
in db.get_dals(class_name=
"VirtualHost"):
1004 hosts.append(vhost.id)
1005 if vhost.id ==
"vlocalhost":
1007 if "vlocalhost" not in hosts:
1008 cpus = dal.HostCores(
"cpus", cpu_cores=[0, 1, 2, 3])
1010 phdal = dal.PhysicalHost(
"localhost", contains=[cpus])
1011 db.update_dal(phdal)
1012 host = dal.VirtualHost(
"vlocalhost", runs_on=phdal, uses=[cpus])
1014 hosts.append(
"vlocalhost")
1017 daqapp_control = db.get_dal(class_name=
"Service", uid=
"daqapp_control")
1018 rccontroller_control = db.get_dal(class_name=
"Service", uid=
"rccontroller_control")
1019 dataRequests = db.get_dal(class_name=
"Service", uid=
"dataRequests")
1020 triggerActivities = db.get_dal(class_name=
"Service", uid=
"triggerActivities")
1021 triggerCandidates = db.get_dal(class_name=
"Service", uid=
"triggerCandidates")
1022 triggerInhibits = db.get_dal(class_name=
"Service", uid=
"triggerInhibits")
1025 mlt_source_id = db.get_dal(class_name=
"SourceIDConf", uid=
"tc-srcid-1")
1026 tc_source_id = db.get_dal(class_name=
"SourceIDConf", uid=
"ta-srcid-1")
1029 tc_queue_rule = db.get_dal(class_name=
"QueueConnectionRule", uid=
"tc-queue-rule")
1030 td_queue_rule = db.get_dal(class_name=
"QueueConnectionRule", uid=
"td-queue-rule")
1031 ta_queue_rule = db.get_dal(class_name=
"QueueConnectionRule", uid=
"ta-queue-rule")
1032 mlt_qrules = [tc_queue_rule, td_queue_rule]
1033 tapp_qrules = [ta_queue_rule]
1036 tc_net_rule = db.get_dal(class_name=
"NetworkConnectionRule", uid=
"tc-net-rule")
1037 ta_net_rule = db.get_dal(class_name=
"NetworkConnectionRule", uid=
"ta-net-rule")
1038 ts_net_rule = db.get_dal(class_name=
"NetworkConnectionRule", uid=
"ts-net-rule")
1039 ti_net_rule = db.get_dal(class_name=
"NetworkConnectionRule", uid=
"ti-net-rule")
1040 td_dfo_net_rule = db.get_dal(
1041 class_name=
"NetworkConnectionRule", uid=
"td-dfo-net-rule"
1043 data_req_trig_net_rule = db.get_dal(
1044 class_name=
"NetworkConnectionRule", uid=
"data-req-trig-net-rule"
1050 data_req_trig_net_rule,
1053 tapp_netrules = [ta_net_rule, tc_net_rule, data_req_trig_net_rule]
1055 opmon_conf = db.get_dal(class_name=
"OpMonConf", uid=
"slow-all-monitoring")
1056 tc_subscriber = db.get_dal(class_name=
"DataReaderConf", uid=
"tc-subscriber-1")
1057 tc_handler = db.get_dal(class_name=
"DataHandlerConf", uid=
"def-tc-handler")
1058 mlt_conf = db.get_dal(class_name=
"MLTConf", uid=
"def-mlt-conf")
1059 random_tc_generator = db.get_dal(
1060 class_name=
"RandomTCMakerConf", uid=
"random-tc-generator"
1065 fixedtime_tc_generator = db.get_dal(
1066 class_name=
"FixedTimeTCMakerModuleConf",
1070 f
"FixedTimeTCMakerModule has been configured, excluding random triggers and HSI"
1072 tc_confs = [fixedtime_tc_generator]
1075 if not hsi_enabled
and len(tc_confs) == 0:
1076 tc_confs = [random_tc_generator]
1078 mlt = dal.MLTApplication(
1081 application_name=
"daq_application",
1088 source_id=mlt_source_id,
1089 queue_rules=mlt_qrules,
1090 network_rules=mlt_netrules,
1091 opmon_conf=opmon_conf,
1092 data_subscriber=tc_subscriber,
1093 trigger_inputs_handler=tc_handler,
1095 standalone_candidate_maker_confs=tc_confs,
1100 ta_subscriber = db.get_dal(class_name=
"DataReaderConf", uid=
"ta-subscriber-1")
1101 ta_handler = db.get_dal(class_name=
"DataHandlerConf", uid=
"def-ta-handler")
1104 tc_maker_start = db.get_dal(class_name=
"ActionPlan", uid=
"tc-maker-start")
1106 tcmaker = dal.TriggerApplication(
1109 application_name=
"daq_application",
1110 exposes_service=[daqapp_control, triggerActivities, dataRequests],
1111 source_id=tc_source_id,
1112 queue_rules=tapp_qrules,
1113 network_rules=tapp_netrules,
1114 opmon_conf=opmon_conf,
1115 data_subscriber=ta_subscriber,
1116 trigger_inputs_handler=ta_handler,
1117 action_plans=[tc_maker_start],
1119 db.update_dal(tcmaker)
1121 if generate_segment:
1122 fsm = db.get_dal(class_name=
"FSMconfiguration", uid=
"FSMconfiguration_noAction")
1123 controller = dal.RCApplication(
1125 application_name=
"drunc-controller",
1126 opmon_conf=opmon_conf,
1129 exposes_service=[rccontroller_control],
1131 db.update_dal(controller)
1135 controller=controller,
1136 applications=[mlt] + ([tcmaker]
if tpg_enabled
else []),
1149 connectivity_service_is_infrastructure_app: bool =
True,
1151 """Simple script to create an OKS configuration file for a session.
1153 The file will automatically include the relevant schema files and
1154 any other OKS files you specify.
1159 "schema/confmodel/dunedaq.schema.xml",
1160 "schema/appmodel/application.schema.xml",
1162 res, extra_includes = find_oksincludes(include, os.path.dirname(oksfile))
1164 includefiles += extra_includes
1170 if not oksfile.endswith(
".data.xml"):
1171 oksfile = oksfile +
".data.xml"
1172 print(f
"Creating OKS database file {oksfile} with includes {includefiles}")
1173 db.create_db(oksfile, includefiles)
1174 db.set_active(oksfile)
1177 for vhost
in db.get_dals(class_name=
"VirtualHost"):
1178 hosts.append(vhost.id)
1179 if vhost.id ==
"vlocalhost":
1181 if "vlocalhost" not in hosts:
1182 cpus = dal.HostCores(
"cpus", cpu_cores=[0, 1, 2, 3])
1184 phdal = dal.PhysicalHost(
"localhost", contains=[cpus])
1185 db.update_dal(phdal)
1186 host = dal.VirtualHost(
"vlocalhost", runs_on=phdal, uses=[cpus])
1188 hosts.append(
"vlocalhost")
1190 opmon_conf = db.get_dal(class_name=
"OpMonConf", uid=
"slow-all-monitoring")
1192 fsm = db.get_dal(class_name=
"FSMconfiguration", uid=
"fsmConf-test")
1193 rccontroller_control = db.get_dal(class_name=
"Service", uid=
"root-rccontroller_control")
1194 controller = dal.RCApplication(
1196 application_name=
"drunc-controller",
1199 opmon_conf=opmon_conf,
1200 exposes_service=[rccontroller_control],
1202 db.update_dal(controller)
1204 segments = db.get_dals(class_name=
"Segment")
1206 seg = dal.Segment(f
"root-segment", controller=controller, segments=segments)
1209 detconf = db.get_dal(class_name=
"DetectorConfig", uid=
"dummy-detector")
1211 detconf.op_env = op_env
1212 db.update_dal(detconf)
1214 opmon_svc = db.get_dal(class_name=
"OpMonURI", uid=
"local-opmon-uri")
1216 trace_file_var =
None
1217 TRACE_FILE = os.getenv(
"TRACE_FILE")
1218 if TRACE_FILE
is not None:
1219 trace_file_var = dal.Variable(
1220 "session-env-trace-file", name=
"TRACE_FILE", value=TRACE_FILE
1222 db.update_dal(trace_file_var)
1224 infrastructure_applications = []
1225 if connectivity_service_is_infrastructure_app:
1226 conn_svc = db.get_dal(
1227 class_name=
"ConnectionService", uid=
"local-connection-server"
1229 infrastructure_applications.append(conn_svc)
1231 env_vars_for_local_running = db.get_dal(
1232 class_name=
"VariableSet", uid=
"local-variables"
1234 if trace_file_var
is not None:
1235 env_vars_for_local_running.append(trace_file_var)
1237 sessiondal = dal.Session(
1239 environment=env_vars_for_local_running,
1241 detector_configuration=detconf,
1242 infrastructure_applications=infrastructure_applications,
1243 opmon_uri=opmon_svc,
1250 conn_svc_cfg = db.get_dal(
1251 class_name=
"ConnectivityService", uid=
"local-connectivity-service-config"
1253 sessiondal.connectivity_service = conn_svc_cfg
1255 db.update_dal(sessiondal)