17 """Simple script to create an OKS configuration file for a dataflow segment.
19 The file will automatically include the relevant schema files and
20 any other OKS files you specify.
24 "schema/confmodel/dunedaq.schema.xml",
25 "schema/appmodel/application.schema.xml",
28 res, extra_includes = find_oksincludes(include, os.path.dirname(oksfile))
30 includefiles += extra_includes
36 if not oksfile.endswith(
".data.xml"):
37 oksfile = oksfile +
".data.xml"
38 print(f
"Creating OKS database file {oksfile}")
39 db.create_db(oksfile, includefiles)
40 db.set_active(oksfile)
43 for vhost
in db.get_dals(class_name=
"VirtualHost"):
44 hosts.append(vhost.id)
45 if vhost.id ==
"vlocalhost":
47 if "vlocalhost" not in hosts:
48 cpus = dal.ProcessingResource(
"cpus", cpu_cores=[0, 1, 2, 3])
50 phdal = dal.PhysicalHost(
"localhost", contains=[cpus])
52 host = dal.VirtualHost(
"vlocalhost", runs_on=phdal, uses=[cpus])
54 hosts.append(
"vlocalhost")
57 daqapp_control = db.get_dal(class_name=
"Service", uid=
"daqapp_control")
58 rccontroller_control = db.get_dal(class_name=
"Service", uid=
"rccontroller_control")
61 tpw_source_id = db.get_dal(
"SourceIDConf", uid=
"srcid-tp-stream-writer")
64 trigger_record_q_rule = db.get_dal(
65 class_name=
"QueueConnectionRule", uid=
"trigger-record-q-rule"
67 dfapp_qrules = [trigger_record_q_rule]
70 frag_net_rule = db.get_dal(class_name=
"NetworkConnectionRule", uid=
"frag-net-rule")
71 df_token_net_rule = db.get_dal(
72 class_name=
"NetworkConnectionRule", uid=
"df-token-net-rule"
74 tpset_net_rule = db.get_dal(
75 class_name=
"NetworkConnectionRule", uid=
"tpset-net-rule"
77 ti_net_rule = db.get_dal(class_name=
"NetworkConnectionRule", uid=
"ti-net-rule")
78 td_dfo_net_rule = db.get_dal(
79 class_name=
"NetworkConnectionRule", uid=
"td-dfo-net-rule"
81 td_trb_net_rule = db.get_dal(
82 class_name=
"NetworkConnectionRule", uid=
"td-trb-net-rule"
84 data_req_trig_net_rule = db.get_dal(
85 class_name=
"NetworkConnectionRule", uid=
"data-req-trig-net-rule"
87 data_req_hsi_net_rule = db.get_dal(
88 class_name=
"NetworkConnectionRule", uid=
"data-req-hsi-net-rule"
90 data_req_readout_net_rule = db.get_dal(
91 class_name=
"NetworkConnectionRule", uid=
"data-req-readout-net-rule"
97 data_req_hsi_net_rule,
98 data_req_readout_net_rule,
99 data_req_trig_net_rule,
101 dfo_netrules = [td_dfo_net_rule, ti_net_rule, df_token_net_rule]
102 tpw_netrules = [tpset_net_rule]
104 opmon_conf = db.get_dal(class_name=
"OpMonConf", uid=
"slow-all-monitoring")
106 dfo_conf = db.get_dal(class_name=
"DFOConf", uid=
"dfoconf-01")
107 dfo = dal.DFOApplication(
110 application_name=
"daq_application",
111 exposes_service=[daqapp_control],
112 network_rules=dfo_netrules,
113 opmon_conf=opmon_conf,
118 trb_conf = db.get_dal(class_name=
"TRBConf", uid=
"trb-01")
119 dw_conf = db.get_dal(class_name=
"DataWriterConf", uid=
"dw-01")
120 dfhw = db.get_dal(class_name=
"DFHWConf", uid=
"dfhw-01")
122 for dfapp_idx
in range(n_dfapps):
123 dfapp_id = dfapp_idx + 1
126 dfapp_source_id = dal.SourceIDConf(
127 f
"srcid-df-{dfapp_id:02}", sid=dfapp_id + 1, subsystem=
"TR_Builder"
129 db.update_dal(dfapp_source_id)
131 dfapp = dal.DFApplication(
134 application_name=
"daq_application",
135 exposes_service=[daqapp_control],
136 source_id=dfapp_source_id,
137 queue_rules=dfapp_qrules,
138 network_rules=dfapp_netrules,
139 opmon_conf=opmon_conf,
141 data_writers=[dw_conf] * n_data_writers,
148 if tpwriting_enabled:
149 tpw_writer_conf = db.get_dal(
150 class_name=
"TPStreamWriterConf", uid=
"tp-stream-writer-conf"
153 tpwapp = dal.TPStreamWriterApplication(
156 application_name=
"daq_application",
157 exposes_service=[daqapp_control],
158 source_id=tpw_source_id,
159 network_rules=tpw_netrules,
160 opmon_conf=opmon_conf,
161 tp_writer=tpw_writer_conf,
163 db.update_dal(tpwapp)
164 tpwapps.append(tpwapp)
167 fsm = db.get_dal(class_name=
"FSMconfiguration", uid=
"FSMconfiguration_noAction")
168 controller = dal.RCApplication(
170 application_name=
"drunc-controller",
173 opmon_conf=opmon_conf,
174 exposes_service=[rccontroller_control],
176 db.update_dal(controller)
179 f
"df-segment", controller=controller, applications=[dfo] + dfapps + tpwapps
192 """Simple script to create an OKS configuration file for a FakeHSI segment.
194 The file will automatically include the relevant schema files and
195 any other OKS files you specify.
201 "schema/confmodel/dunedaq.schema.xml",
202 "schema/appmodel/application.schema.xml",
203 "schema/appmodel/trigger.schema.xml",
206 res, extra_includes = find_oksincludes(include, os.path.dirname(oksfile))
208 includefiles += extra_includes
214 if not oksfile.endswith(
".data.xml"):
215 oksfile = oksfile +
".data.xml"
216 print(f
"Creating OKS database file {oksfile}")
217 db.create_db(oksfile, includefiles)
218 db.set_active(oksfile)
221 for vhost
in db.get_dals(class_name=
"VirtualHost"):
222 hosts.append(vhost.id)
223 if vhost.id ==
"vlocalhost":
225 if "vlocalhost" not in hosts:
226 cpus = dal.ProcessingResource(
"cpus", cpu_cores=[0, 1, 2, 3])
228 phdal = dal.PhysicalHost(
"localhost", contains=[cpus])
230 host = dal.VirtualHost(
"vlocalhost", runs_on=phdal, uses=[cpus])
232 hosts.append(
"vlocalhost")
235 daqapp_control = db.get_dal(class_name=
"Service", uid=
"daqapp_control")
236 rccontroller_control = db.get_dal(class_name=
"Service", uid=
"rccontroller_control")
237 dataRequests = db.get_dal(class_name=
"Service", uid=
"dataRequests")
238 hsievents = db.get_dal(class_name=
"Service", uid=
"HSIEvents")
241 hsi_source_id = db.get_dal(class_name=
"SourceIDConf", uid=
"hsi-srcid-01")
242 hsi_tc_source_id = db.get_dal(class_name=
"SourceIDConf", uid=
"hsi-tc-srcid-1")
245 hsi_dlh_queue_rule = db.get_dal(
246 class_name=
"QueueConnectionRule", uid=
"hsi-dlh-data-requests-queue-rule"
248 hsi_qrules = [hsi_dlh_queue_rule]
251 tc_net_rule = db.get_dal(class_name=
"NetworkConnectionRule", uid=
"tc-net-rule")
252 hsi_rule = db.get_dal(class_name=
"NetworkConnectionRule", uid=
"hsi-rule")
253 ts_hsi_net_rule = db.get_dal(
254 class_name=
"NetworkConnectionRule", uid=
"ts-hsi-net-rule"
256 data_req_hsi_net_rule = db.get_dal(
257 class_name=
"NetworkConnectionRule", uid=
"data-req-hsi-net-rule"
259 hsi_netrules = [hsi_rule, data_req_hsi_net_rule, ts_hsi_net_rule]
260 tc_netrules = [hsi_rule, tc_net_rule]
262 opmon_conf = db.get_dal(class_name=
"OpMonConf", uid=
"slow-all-monitoring")
263 hsi_handler = db.get_dal(class_name=
"DataHandlerConf", uid=
"def-hsi-handler")
264 fakehsi = db.get_dal(class_name=
"FakeHSIEventGeneratorConf", uid=
"fakehsi")
266 hsi = dal.FakeHSIApplication(
269 application_name=
"daq_application",
270 exposes_service=[daqapp_control],
271 source_id=hsi_source_id,
272 queue_rules=hsi_qrules,
273 network_rules=hsi_netrules,
274 opmon_conf=opmon_conf,
275 link_handler=hsi_handler,
280 hsi_to_tc_conf = db.get_dal(class_name=
"HSI2TCTranslatorConf", uid=
"hsi-to-tc-conf")
282 hsi_to_tc = dal.HSIEventToTCApplication(
285 application_name=
"daq_application",
286 exposes_service=[dataRequests, hsievents, daqapp_control],
287 source_id=hsi_tc_source_id,
288 network_rules=tc_netrules,
289 opmon_conf=opmon_conf,
290 hsevent_to_tc_conf=hsi_to_tc_conf,
292 db.update_dal(hsi_to_tc)
295 fsm = db.get_dal(class_name=
"FSMconfiguration", uid=
"FSMconfiguration_noAction")
296 controller = dal.RCApplication(
298 application_name=
"drunc-controller",
301 opmon_conf=opmon_conf,
302 exposes_service=[rccontroller_control],
304 db.update_dal(controller)
307 f
"hsi-segment", controller=controller, applications=[hsi, hsi_to_tc]
320 emulated_file_name="asset://?checksum=e96fd6efd3f98a9a3bfaba32975b476e
",
324 """Simple script to create an OKS configuration file for all
325 ReadoutApplications defined in a readout map.
327 The file will automatically include the relevant schema files and
328 any other OKS files you specify.
331 generate_readoutOKS -i hosts \
332 -i appmodel/connections.data.xml -i appmodel/moduleconfs \
333 config/np04readoutmap.data.xml readoutApps.data.xml
335 Will load hosts, connections and moduleconfs data files as well as
336 the readoutmap (config/np04readoutmap.data.xml) and write the
337 generated apps to readoutApps.data.xml.
339 generate_readoutOKS --session --segment \
340 -i appmodel/fsm -i hosts \
341 -i appmodel/connections.data.xml -i appmodel/moduleconfs \
342 config/np04readoutmap.data.xml np04readout-session.data.xml
344 Will do the same but in addition it will generate a containing
345 Segment for the apps and a containing Session for the Segment.
347 NB: Currently FSM generation is not implemented so you must include
348 an fsm file in order to generate a Segment
352 if not readoutmap.endswith(
".data.xml"):
353 readoutmap = readoutmap +
".data.xml"
355 print(f
"Readout map file {readoutmap}")
358 "schema/confmodel/dunedaq.schema.xml",
359 "schema/appmodel/application.schema.xml",
360 "schema/appmodel/trigger.schema.xml",
361 "schema/appmodel/fdmodules.schema.xml",
362 "schema/appmodel/wiec.schema.xml",
366 searchdirs = [path
for path
in os.environ[
"DUNEDAQ_DB_PATH"].split(
":")]
367 searchdirs.append(os.path.dirname(oksfile))
371 inc = inc.removesuffix(
".xml")
372 if inc.endswith(
".data"):
373 sub_dirs = [
"config",
"data"]
374 elif inc.endswith(
".schema"):
375 sub_dirs = [
"schema"]
379 for path
in searchdirs:
381 matches = glob.glob(f
"{inc}.xml", root_dir=path)
382 if len(matches) == 0:
383 for search_dir
in sub_dirs:
385 matches = glob.glob(f
"{search_dir}/{inc}.xml", root_dir=path)
386 for filename
in matches:
387 if filename
not in includefiles:
388 print(f
"Adding {filename} to include list")
389 includefiles.append(filename)
391 print(f
"{filename} already in include list")
399 for filename
in matches:
400 if filename
not in includefiles:
401 print(f
"Adding {filename} to include list")
402 includefiles.append(filename)
404 print(f
"{filename} already in include list")
409 print(f
"Error could not find include file for {inc}")
414 if not oksfile.endswith(
".data.xml"):
415 oksfile = oksfile +
".data.xml"
416 print(f
"Creating OKS database file {oksfile}")
417 db.create_db(oksfile, includefiles)
418 db.set_active(oksfile)
420 detector_connections = db.get_dals(class_name=
"DetectorToDaqConnection")
421 daqapp_control = db.get_dal(class_name=
"Service", uid=
"daqapp_control")
422 rccontroller_control = db.get_dal(class_name=
"Service", uid=
"rccontroller_control")
426 class_name=
"NetworkConnectionRule", uid=
"data-req-readout-net-rule"
430 'Expected NetworkConnectionRule "data-req-readout-net-rule" not found in input databases!'
435 for rule
in [
"tpset-net-rule",
"ts-net-rule",
"ta-net-rule"]:
436 netrules.append(db.get_dal(class_name=
"NetworkConnectionRule", uid=rule))
440 class_name=
"QueueConnectionRule", uid=
"fd-dlh-data-requests-queue-rule"
444 'Expected QueueConnectionRule "fd-dlh-data-requests-queue-rule" not found in input databases!'
452 qrules.append(db.get_dal(class_name=
"QueueConnectionRule", uid=rule))
455 if len(hosts_to_use) == 0:
456 for vhost
in db.get_dals(class_name=
"VirtualHost"):
457 if vhost.id ==
"vlocalhost":
458 hosts.append(vhost.id)
459 if "vlocalhost" not in hosts:
460 cpus = dal.ProcessingResource(
"cpus", cpu_cores=[0, 1, 2, 3])
462 phdal = dal.PhysicalHost(
"localhost", contains=[cpus])
464 host = dal.VirtualHost(
"vlocalhost", runs_on=phdal, uses=[cpus])
466 hosts.append(
"vlocalhost")
468 for vhost
in db.get_dals(class_name=
"VirtualHost"):
469 if vhost.id
in hosts_to_use:
470 hosts.append(vhost.id)
471 assert len(hosts) > 0
473 rohw = dal.RoHwConfig(f
"rohw-{detector_connections[0].id}")
476 opmon_conf = db.get_dal(class_name=
"OpMonConf", uid=
"slow-all-monitoring")
484 for connection
in detector_connections:
486 geo_id = connection.get(
"GeoId")
487 det_id = geo_id[0].detector_id
489 raise Exception(f
"Unable to determine detector ID from Hardware Map!")
491 tphandler = db.get_dal(class_name=
"DataHandlerConf", uid=
"def-tp-handler")
494 if "DAPHNEStream" in emulated_file_name:
495 linkhandler = db.get_dal(
496 class_name=
"DataHandlerConf", uid=
"def-pds-stream-link-handler"
499 class_name=
"QueueConnectionRule", uid=
"pds-stream-raw-data-rule"
502 linkhandler = db.get_dal(
503 class_name=
"DataHandlerConf", uid=
"def-pds-link-handler"
506 class_name=
"QueueConnectionRule", uid=
"pds-raw-data-rule"
510 linkhandler = db.get_dal(
511 class_name=
"DataHandlerConf", uid=
"def-link-handler"
514 class_name=
"QueueConnectionRule", uid=
"wib-eth-raw-data-rule"
517 linkhandler = db.get_dal(
518 class_name=
"DataHandlerConf", uid=
"def-tde-link-handler"
521 class_name=
"QueueConnectionRule", uid=
"tde-raw-data-rule"
524 linkhandler = db.get_dal(
525 class_name=
"DataHandlerConf", uid=
"def-crt-bern-link-handler"
528 class_name=
"QueueConnectionRule", uid=
"crt-bern-raw-data-rule"
531 linkhandler = db.get_dal(
532 class_name=
"DataHandlerConf", uid=
"def-crt-grenoble-link-handler"
535 class_name=
"QueueConnectionRule", uid=
"crt-grenoble-raw-data-rule"
538 hostnum = appnum % len(hosts)
540 host = db.get_dal(class_name=
"VirtualHost", uid=hosts[hostnum])
543 if connection.className() ==
"NetworkDetectorToDaqConnection":
544 receiver = connection.net_receiver
545 elif connection.className() ==
"FelixDetectorToDaqConnection":
546 receiver = connection.felix_receiver
549 if type(receiver).__name__ ==
"FakeDataReceiver":
552 stream_emu = db.get_dal(
553 class_name=
"StreamEmulationParameters", uid=
"stream-emu"
555 stream_emu.data_file_name = resolve_asset_file(emulated_file_name)
556 db.update_dal(stream_emu)
558 stream_emu = dal.StreamEmulationParameters(
560 data_file_name=resolve_asset_file(emulated_file_name),
561 input_file_size_limit=5777280,
563 random_population_size=100000,
564 frame_error_rate_hz=0,
565 generate_periodic_adc_pattern=
True,
566 TP_rate_per_channel=1,
568 db.update_dal(stream_emu)
570 print(
"Generating fake DataReaderConf")
571 nicrec = dal.DPDKReaderConf(
573 template_for=
"FDFakeReaderModule",
575 emulation_conf=stream_emu,
577 db.update_dal(nicrec)
579 elif type(receiver).__name__ ==
"DPDKReceiver":
581 print(
"Generating DPDKReaderConf")
582 nicrec = dal.DPDKReaderConf(
583 f
"nicrcvr-dpdk-gen", template_for=
"DPDKReaderModule"
585 db.update_dal(nicrec)
588 wm_conf = db.get_dal(
"WIBModuleConf",
"def-wib-conf")
591 'Expected WIBModuleConf "def-wib-conf" not found in input databases!'
593 if hermes_conf ==
None:
595 hermes_conf = db.get_dal(
"HermesModuleConf",
"def-hermes-conf")
598 'Expected HermesModuleConf "def-hermes-conf" not found in input databases!'
603 wiec_app = dal.WIECApplication(
604 f
"wiec-{connection.id}",
605 application_name=
"daq_application",
607 detector_connections=[connection],
608 wib_module_conf=wm_conf,
609 hermes_module_conf=hermes_conf,
610 exposes_service=[daqapp_control],
612 db.update_dal(wiec_app)
614 elif type(receiver).__name__ ==
"FelixInterface":
616 print(
"Generating Felix DataReaderConf")
617 flxcard = dal.DataReaderConf(
618 f
"flxConf-1", template_for=
"FelixReaderModule"
620 db.update_dal(flxcard)
624 f
"ReadoutGroup contains unknown interface type {type(receiver).__name__}"
631 dataRequests = db.get_dal(class_name=
"Service", uid=
"dataRequests")
632 timeSyncs = db.get_dal(class_name=
"Service", uid=
"timeSyncs")
633 triggerActivities = db.get_dal(class_name=
"Service", uid=
"triggerActivities")
634 triggerPrimitives = db.get_dal(class_name=
"Service", uid=
"triggerPrimitives")
637 readout_start = db.get_dal(class_name=
"ActionPlan", uid=
"readout-start")
638 readout_stop = db.get_dal(class_name=
"ActionPlan", uid=
"readout-stop")
640 ru = dal.ReadoutApplication(
641 f
"ru-{connection.id}",
642 application_name=
"daq_application",
644 detector_connections=[connection],
645 network_rules=netrules,
646 queue_rules=qrules + [det_q],
647 link_handler=linkhandler,
648 data_reader=datareader,
649 opmon_conf=opmon_conf,
650 tp_generation_enabled=tpg_enabled,
651 ta_generation_enabled=tpg_enabled,
653 exposes_service=[daqapp_control, dataRequests, timeSyncs],
654 action_plans=[readout_start, readout_stop],
657 ru.tp_handler = tphandler
659 tpbaseid = (appnum * 3) + 100
662 for plane
in range(1
if det_id
not in [3, 10, 11]
else 3):
663 s_id = tpbaseid + plane
664 tps_dal = dal.SourceIDConf(
665 f
"tp-srcid-{s_id}", sid=s_id, subsystem=
"Trigger"
667 db.update_dal(tps_dal)
668 tp_sources.append(tps_dal)
669 ru.tp_source_ids = tp_sources
670 ru.exposes_service += [triggerActivities, triggerPrimitives]
677 print(f
"No ReadoutApplications generated\n")
684 fsm = db.get_dal(class_name=
"FSMconfiguration", uid=
"FSMconfiguration_noAction")
685 controller = dal.RCApplication(
687 application_name=
"drunc-controller",
690 opmon_conf=opmon_conf,
691 exposes_service=[rccontroller_control],
693 db.update_dal(controller)
696 seg = dal.Segment(f
"ru-segment", controller=controller, applications=ruapps)
705 oksfile, include, generate_segment, n_streams, n_apps, det_id
707 """Simple script to create an OKS configuration file for a FakeDataProd-based readout segment.
709 The file will automatically include the relevant schema files and
710 any other OKS files you specify.
715 "schema/confmodel/dunedaq.schema.xml",
716 "schema/appmodel/application.schema.xml",
719 res, extra_includes = find_oksincludes(include, os.path.dirname(oksfile))
721 includefiles += extra_includes
727 if not oksfile.endswith(
".data.xml"):
728 oksfile = oksfile +
".data.xml"
729 print(f
"Creating OKS database file {oksfile}")
730 db.create_db(oksfile, includefiles)
731 db.set_active(oksfile)
734 for vhost
in db.get_dals(class_name=
"VirtualHost"):
735 hosts.append(vhost.id)
736 if vhost.id ==
"vlocalhost":
738 if "vlocalhost" not in hosts:
739 cpus = dal.ProcessingResource(
"cpus", cpu_cores=[0, 1, 2, 3])
741 phdal = dal.PhysicalHost(
"localhost", contains=[cpus])
743 host = dal.VirtualHost(
"vlocalhost", runs_on=phdal, uses=[cpus])
745 hosts.append(
"vlocalhost")
750 daqapp_control = db.get_dal(class_name=
"Service", uid=
"daqapp_control")
751 rccontroller_control = db.get_dal(class_name=
"Service", uid=
"rccontroller_control")
752 dataRequests = db.get_dal(class_name=
"Service", uid=
"dataRequests")
753 timeSyncs = db.get_dal(class_name=
"Service", uid=
"timeSyncs")
754 opmon_conf = db.get_dal(class_name=
"OpMonConf", uid=
"slow-all-monitoring")
757 class_name=
"NetworkConnectionRule", uid=
"data-req-readout-net-rule"
760 for rule
in [
"ts-fdp-net-rule"]:
761 netrules.append(db.get_dal(class_name=
"NetworkConnectionRule", uid=rule))
765 class_name=
"QueueConnectionRule", uid=
"fpdm-data-requests-queue-rule"
769 'Expected QueueConnectionRule "fpdm-data-requests-queue-rule" not found in input databases!'
776 qrules.append(db.get_dal(class_name=
"QueueConnectionRule", uid=rule))
784 fragment_type=
"WIBEth"
786 raise Exception(f
"FakeDataProd parameters not configured for detector ID {det_id}")
788 for appidx
in range(n_apps):
790 fakeapp = dal.FakeDataApplication(f
"fakedata_{appidx}",
792 application_name=
"daq_application",
793 exposes_service=[daqapp_control, dataRequests, timeSyncs],
795 network_rules=netrules,
796 opmon_conf=opmon_conf,)
798 for streamidx
in range(n_streams):
799 stream = dal.FakeDataProdConf(
800 f
"fakedata_{appidx}_stream_{streamidx}",
801 system_type=
"Detector_Readout",
803 time_tick_diff=time_tick_diff,
804 frame_size=frame_size,
805 response_delay=response_delay,
806 fragment_type=fragment_type,
808 db.update_dal(stream)
809 fakeapp.producers.append(stream)
810 source_id = source_id + 1
812 db.update_dal(fakeapp)
813 fakeapps.append(fakeapp)
817 fsm = db.get_dal(class_name=
"FSMconfiguration", uid=
"FSMconfiguration_noAction")
818 controller = dal.RCApplication(
820 application_name=
"drunc-controller",
821 opmon_conf=opmon_conf,
824 exposes_service=[rccontroller_control],
826 db.update_dal(controller)
830 controller=controller,
831 applications=fakeapps,
846 """Simple script to create an OKS configuration file for a trigger segment.
848 The file will automatically include the relevant schema files and
849 any other OKS files you specify.
854 "schema/confmodel/dunedaq.schema.xml",
855 "schema/appmodel/application.schema.xml",
856 "schema/appmodel/trigger.schema.xml",
859 res, extra_includes = find_oksincludes(include, os.path.dirname(oksfile))
861 includefiles += extra_includes
867 if not oksfile.endswith(
".data.xml"):
868 oksfile = oksfile +
".data.xml"
869 print(f
"Creating OKS database file {oksfile}")
870 db.create_db(oksfile, includefiles)
871 db.set_active(oksfile)
874 for vhost
in db.get_dals(class_name=
"VirtualHost"):
875 hosts.append(vhost.id)
876 if vhost.id ==
"vlocalhost":
878 if "vlocalhost" not in hosts:
879 cpus = dal.ProcessingResource(
"cpus", cpu_cores=[0, 1, 2, 3])
881 phdal = dal.PhysicalHost(
"localhost", contains=[cpus])
883 host = dal.VirtualHost(
"vlocalhost", runs_on=phdal, uses=[cpus])
885 hosts.append(
"vlocalhost")
888 daqapp_control = db.get_dal(class_name=
"Service", uid=
"daqapp_control")
889 rccontroller_control = db.get_dal(class_name=
"Service", uid=
"rccontroller_control")
890 dataRequests = db.get_dal(class_name=
"Service", uid=
"dataRequests")
891 triggerActivities = db.get_dal(class_name=
"Service", uid=
"triggerActivities")
892 triggerCandidates = db.get_dal(class_name=
"Service", uid=
"triggerCandidates")
893 triggerInhibits = db.get_dal(class_name=
"Service", uid=
"triggerInhibits")
896 mlt_source_id = db.get_dal(class_name=
"SourceIDConf", uid=
"tc-srcid-1")
897 tc_source_id = db.get_dal(class_name=
"SourceIDConf", uid=
"ta-srcid-1")
900 tc_queue_rule = db.get_dal(class_name=
"QueueConnectionRule", uid=
"tc-queue-rule")
901 td_queue_rule = db.get_dal(class_name=
"QueueConnectionRule", uid=
"td-queue-rule")
902 ta_queue_rule = db.get_dal(class_name=
"QueueConnectionRule", uid=
"ta-queue-rule")
903 mlt_qrules = [tc_queue_rule, td_queue_rule]
904 tapp_qrules = [ta_queue_rule]
907 tc_net_rule = db.get_dal(class_name=
"NetworkConnectionRule", uid=
"tc-net-rule")
908 ta_net_rule = db.get_dal(class_name=
"NetworkConnectionRule", uid=
"ta-net-rule")
909 ts_net_rule = db.get_dal(class_name=
"NetworkConnectionRule", uid=
"ts-net-rule")
910 ti_net_rule = db.get_dal(class_name=
"NetworkConnectionRule", uid=
"ti-net-rule")
911 td_dfo_net_rule = db.get_dal(
912 class_name=
"NetworkConnectionRule", uid=
"td-dfo-net-rule"
914 data_req_trig_net_rule = db.get_dal(
915 class_name=
"NetworkConnectionRule", uid=
"data-req-trig-net-rule"
921 data_req_trig_net_rule,
924 tapp_netrules = [ta_net_rule, tc_net_rule, data_req_trig_net_rule]
926 opmon_conf = db.get_dal(class_name=
"OpMonConf", uid=
"slow-all-monitoring")
927 tc_subscriber = db.get_dal(class_name=
"DataReaderConf", uid=
"tc-subscriber-1")
928 tc_handler = db.get_dal(class_name=
"DataHandlerConf", uid=
"def-tc-handler")
929 mlt_conf = db.get_dal(class_name=
"MLTConf", uid=
"def-mlt-conf")
930 random_tc_generator = db.get_dal(
931 class_name=
"RandomTCMakerConf", uid=
"random-tc-generator"
933 tc_confs = []
if hsi_enabled
else [random_tc_generator]
935 mlt = dal.MLTApplication(
938 application_name=
"daq_application",
939 exposes_service=[daqapp_control, triggerCandidates, triggerInhibits, dataRequests],
940 source_id=mlt_source_id,
941 queue_rules=mlt_qrules,
942 network_rules=mlt_netrules,
943 opmon_conf=opmon_conf,
944 data_subscriber=tc_subscriber,
945 trigger_inputs_handler=tc_handler,
947 standalone_candidate_maker_confs=tc_confs,
952 ta_subscriber = db.get_dal(class_name=
"DataReaderConf", uid=
"ta-subscriber-1")
953 ta_handler = db.get_dal(class_name=
"DataHandlerConf", uid=
"def-ta-handler")
956 tc_maker_start = db.get_dal(class_name=
"ActionPlan", uid=
"tc-maker-start")
958 tcmaker = dal.TriggerApplication(
961 application_name=
"daq_application",
962 exposes_service=[daqapp_control, triggerActivities, dataRequests],
963 source_id=tc_source_id,
964 queue_rules=tapp_qrules,
965 network_rules=tapp_netrules,
966 opmon_conf=opmon_conf,
967 data_subscriber=ta_subscriber,
968 trigger_inputs_handler=ta_handler,
969 action_plans=[tc_maker_start],
971 db.update_dal(tcmaker)
974 fsm = db.get_dal(class_name=
"FSMconfiguration", uid=
"FSMconfiguration_noAction")
975 controller = dal.RCApplication(
977 application_name=
"drunc-controller",
978 opmon_conf=opmon_conf,
981 exposes_service=[rccontroller_control],
983 db.update_dal(controller)
987 controller=controller,
988 applications=[mlt] + ([tcmaker]
if tpg_enabled
else []),
1001 connectivity_service_is_infrastructure_app=True,
1002 disable_connectivity_service=False,
1004 """Simple script to create an OKS configuration file for a session.
1006 The file will automatically include the relevant schema files and
1007 any other OKS files you specify.
1012 "schema/confmodel/dunedaq.schema.xml",
1013 "schema/appmodel/application.schema.xml",
1015 res, extra_includes = find_oksincludes(include, os.path.dirname(oksfile))
1017 includefiles += extra_includes
1023 if not oksfile.endswith(
".data.xml"):
1024 oksfile = oksfile +
".data.xml"
1025 print(f
"Creating OKS database file {oksfile} with includes {includefiles}")
1026 db.create_db(oksfile, includefiles)
1027 db.set_active(oksfile)
1030 for vhost
in db.get_dals(class_name=
"VirtualHost"):
1031 hosts.append(vhost.id)
1032 if vhost.id ==
"vlocalhost":
1034 if "vlocalhost" not in hosts:
1035 cpus = dal.ProcessingResource(
"cpus", cpu_cores=[0, 1, 2, 3])
1037 phdal = dal.PhysicalHost(
"localhost", contains=[cpus])
1038 db.update_dal(phdal)
1039 host = dal.VirtualHost(
"vlocalhost", runs_on=phdal, uses=[cpus])
1041 hosts.append(
"vlocalhost")
1043 fsm = db.get_dal(class_name=
"FSMconfiguration", uid=
"fsmConf-test")
1044 rccontroller_control = db.get_dal(class_name=
"Service", uid=
"rccontroller_control")
1045 controller = dal.RCApplication(
1047 application_name=
"drunc-controller",
1050 exposes_service=[rccontroller_control],
1052 db.update_dal(controller)
1054 segments = db.get_dals(class_name=
"Segment")
1056 seg = dal.Segment(f
"root-segment", controller=controller, segments=segments)
1059 detconf = db.get_dal(class_name=
"DetectorConfig", uid=
"dummy-detector")
1061 detconf.op_env = op_env
1062 db.update_dal(detconf)
1064 opmon_svc = db.get_dal(class_name=
"OpMonURI", uid=
"local-opmon-uri")
1066 trace_file_var =
None
1067 TRACE_FILE = os.getenv(
"TRACE_FILE")
1068 if TRACE_FILE
is not None:
1069 trace_file_var = dal.Variable(
1070 "session-env-trace-file", name=
"TRACE_FILE", value=TRACE_FILE
1072 db.update_dal(trace_file_var)
1074 infrastructure_applications = []
1075 if connectivity_service_is_infrastructure_app:
1076 conn_svc = db.get_dal(
1077 class_name=
"ConnectionService", uid=
"local-connection-server"
1079 infrastructure_applications.append(conn_svc)
1081 env_vars_for_local_running = db.get_dal(
1082 class_name=
"VariableSet", uid=
"local-variables"
1084 if trace_file_var
is not None:
1085 env_vars_for_local_running.append(trace_file_var)
1087 sessiondal = dal.Session(
1089 environment=env_vars_for_local_running,
1091 detector_configuration=detconf,
1092 infrastructure_applications=infrastructure_applications,
1093 opmon_uri=opmon_svc,
1096 if not disable_connectivity_service:
1097 conn_svc_cfg = db.get_dal(
1098 class_name=
"ConnectivityService", uid=
"local-connectivity-service-config"
1100 sessiondal.connectivity_service = conn_svc_cfg
1102 db.update_dal(sessiondal)