DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
listrevapp_gen.py
Go to the documentation of this file.
1# This module facilitates the generation of WIB modules within WIB apps
2
3# Set moo schema search path
4from dunedaq.env import get_moo_model_path
5import moo.io
6
7moo.io.default_load_path = get_moo_model_path()
8
9# Load configuration types
10import moo.otypes
11
12moo.otypes.load_types("listrev/listreverser.jsonnet")
13moo.otypes.load_types("listrev/randomdatalistgenerator.jsonnet")
14moo.otypes.load_types("listrev/reversedlistvalidator.jsonnet")
15
16# Import new types
20
21
22from daqconf.core.app import App, ModuleGraph
23from daqconf.core.daqmodule import DAQModule
24from daqconf.core.conf_utils import Endpoint, Direction
25
26# ===============================================================================
28 nickname,
29 host="localhost",
30 n_wait_ms=100,
31 request_timeout_ms=1000,
32 request_rate_hz=10,
33 generator_indicies=[],
34 reverser_indicies=[],
35 has_validator=False,
36 n_generators=1,
37 n_reversers=1,
38 n_ints_min=50,
39 n_ints_max=200,
40 n_reqs=100,
41):
42 """
43 Here an entire application is generated.
44 """
45 # Define modules
46
47 modules = []
48
49 modules += [
50 DAQModule(
51 name=f"rdlg{gidx}",
52 plugin="RandomDataListGenerator",
53 conf=rlg.ConfParams(send_timeout_ms=n_wait_ms, request_timeout_ms=request_timeout_ms, generator_id=gidx),
54 ) for gidx in generator_indicies
55 ]
56
57 modules += [
58 DAQModule(
59 name=f"lr{ridx}",
60 plugin="ListReverser",
61 conf=lr.ConfParams(
62 send_timeout_ms=n_wait_ms,
63 request_timeout_ms=request_timeout_ms,
64 num_generators=n_generators,
65 reverser_id=ridx
66 ),
67 ) for ridx in reverser_indicies
68 ]
69
70 if has_validator:
71 modules += [
72 DAQModule(
73 name="lrv",
74 plugin="ReversedListValidator",
75 conf=rlv.ConfParams(
76 send_timeout_ms=n_wait_ms,
77 request_timeout_ms=request_timeout_ms,
78 request_rate_hz=request_rate_hz,
79 max_outstanding_requests=n_reqs,
80 num_reversers=n_reversers,
81 num_generators=n_generators,
82 min_list_size=n_ints_min,
83 max_list_size=n_ints_max
84 ),
85 )
86 ]
87
88 mgraph = ModuleGraph(modules)
89
90 for gidx in generator_indicies:
91 for ridx in range(n_reversers):
92 mgraph.add_endpoint(f"lr{ridx}_list_connection", f"rdlg{gidx}.q{ridx}", "IntList", Direction.OUT)
93 mgraph.add_endpoint(
94 f"rdlg{gidx}_request_connection",
95 f"rdlg{gidx}.request_input",
96 "RequestList",
97 Direction.IN
98 )
99 mgraph.add_endpoint(f"creates", f"rdlg{gidx}.create_input", "CreateList", Direction.IN, is_pubsub=True, toposort=False)
100
101 for ridx in reverser_indicies:
102 mgraph.add_endpoint(f"lr{ridx}_list_connection", f"lr{ridx}.list_input", "IntList", Direction.IN)
103 mgraph.add_endpoint(f"validator_list_connection", f"lr{ridx}.output", "ReversedList", Direction.OUT)
104 mgraph.add_endpoint(
105 f"lr{ridx}_request_connection",
106 f"lr{ridx}.request_input",
107 "RequestList",
108 Direction.IN
109 )
110
111 for gidx in range(n_generators):
112 mgraph.add_endpoint(f"rdlg{gidx}_request_connection", f"lr{ridx}.request_output_{gidx}", "RequestList", Direction.OUT)
113
114 if has_validator:
115 mgraph.add_endpoint("validator_list_connection", "lrv.list_input", "ReversedList", Direction.IN)
116 for ridx in range(n_reversers):
117 mgraph.add_endpoint(
118 f"lr{ridx}_request_connection",
119 f"lrv.request_output_{ridx}",
120 "RequestList",
121 Direction.OUT
122 )
123 mgraph.add_endpoint(f"creates", "lrv.creates_out", "CreateList", Direction.OUT, is_pubsub=True, toposort=False)
124
125 lr_app = App(modulegraph=mgraph, host=host, name=nickname)
126
127 return lr_app
get_listrev_app(nickname, host="localhost", n_wait_ms=100, request_timeout_ms=1000, request_rate_hz=10, generator_indicies=[], reverser_indicies=[], has_validator=False, n_generators=1, n_reversers=1, n_ints_min=50, n_ints_max=200, n_reqs=100)