13 """Simple script to convert a JSON readout map file to an OKS file."""
15 group_name = os.path.basename(jsonfile).removesuffix(
".json")
17 oksfile = group_name +
".data.xml"
20 f
"Converting RO map from {jsonfile} to OKS in {oksfile} offsetting source_ids by {source_id_offset}"
23 with open(jsonfile)
as f:
24 jsonmap = json.loads(f.read())
28 "schema/confmodel/dunedaq.schema.xml",
29 "schema/appmodel/application.schema.xml",
30 "schema/appmodel/fdmodules.schema.xml",
31 "schema/appmodel/wiec.schema.xml"
35 db.create_db(oksfile, schemafiles)
44 last_felix_pars =
None
46 eth_streams_found =
False
47 flx_streams_found =
False
54 source_id = entry[
"src_id"] + source_id_offset
55 geo_id = entry[
"geo_id"]
56 geo_dal = dal.GeoId(f
"geoId-{source_id}",
57 detector_id=geo_id[
"det_id"],
58 crate_id=geo_id[
"crate_id"],
59 slot_id=geo_id[
"slot_id"],
60 stream_id=geo_id[
"stream_id"]
62 db.update_dal(geo_dal)
64 stream_dal = dal.DetectorStream(f
"stream-{source_id}",
65 source_id = source_id,
68 db.update_dal(stream_dal)
70 if entry[
"kind"] ==
"eth":
71 eth_source_id = source_id
72 if not eth_streams_found:
73 eth_streams_found =
True
74 lcore_dal = dal.ProcessingResource(
75 f
"lcores-{group_name}",
76 cpu_cores = lcores.split(
',')
78 db.update_dal(lcore_dal)
79 nic_config_dal = dal.DPDKPortConfiguration(
80 f
"nicConfig-{group_name}",
81 used_lcores = [ lcore_dal ]
83 db.update_dal(nic_config_dal)
85 pars = entry[
"parameters"]
86 if last_eth_pars ==
None or pars[
"rx_mac"] != last_eth_pars[
"rx_mac"]:
87 nic_name = f
"nic-{pars['rx_host']}"
88 print(f
"New nic adding nic {pars['rx_mac']} with id {nic_name}")
89 rxnic_dal = dal.NetworkDevice(
91 mac_address = pars[
"rx_mac"],
92 ip_address = [pars[
"rx_ip"]]
94 db.update_dal(rxnic_dal)
96 dpdkrec_dal = dal.DPDKReceiver(
97 f
"{pars['rx_host']}-receiver",
99 configuration = nic_config_dal
101 db.update_dal(dpdkrec_dal)
105 if last_tx_mac !=
None and pars[
"tx_mac"] != last_tx_mac:
106 link_dal = dal.HermesDataSender(
108 link_id = link_number,
109 streams = hermes_streams,
112 db.update_dal(link_dal)
113 links.append(link_dal)
114 link_number = link_number + 1
115 eth_senders.append(link_dal)
118 if last_tx_mac ==
None or pars[
"tx_mac"] != last_tx_mac:
119 if last_tx_host != pars[
'tx_host']:
122 nic_name = f
"nw-{pars['tx_host']}-{nic_num}"
123 print(f
"Adding NetworkInterface {nic_name}")
124 txnic_dal = dal.NetworkInterface(
126 mac_address = pars[
"tx_mac"],
127 ip_address = [pars[
"tx_ip"]]
129 db.update_dal(txnic_dal)
131 if last_eth_pars !=
None:
133 if pars[
"rx_mac"] != last_eth_pars[
"rx_mac"]:
134 db.update_dal(rset_dal)
135 daqcon_dal = dal.DetectorToDaqConnection(
136 f
"{last_eth_pars['rx_host']}-connections",
137 net_senders = eth_senders,
138 net_receiver = dpdkrec_dal
140 db.update_dal(daqcon_dal)
142 rset_dal = dal.ResourceSetAND(
143 f
"{last_eth_pars['rx_host']}-streams",
144 contains = eth_streams
146 db.update_dal(rset_dal)
155 hermes_id = f
"hermes_{geo_id['det_id']}_{geo_id['crate_id']}_{geo_id['slot_id']}"
156 hermes_link_id = f
"{hermes_id}-{link_number}"
157 if pars != last_eth_pars:
158 rx_queue = rx_queue + 1
160 last_eth_source_id = source_id
161 last_tx_mac = pars[
"tx_mac"]
162 last_tx_host = pars[
"tx_host"]
165 elif entry[
"kind"] ==
"flx":
166 print (f
"Processing config for FELIX {source_id=}")
167 flx_source_id = source_id
168 flx_streams_found =
True
169 pars = entry[
"parameters"]
170 if not last_felix_pars ==
None:
172 pars[
"card"] != last_felix_pars[
"card"]
173 or pars[
"slr"] != last_felix_pars[
"slr"]
176 f
'Adding FelixInterface felix-{last_felix_source_id} slr={last_felix_pars["slr"]}'
178 felix_dal = dal.FelixInterface(
179 f
"felix-{last_felix_source_id}",
180 card=last_felix_pars[
"card"],
181 slr=last_felix_pars[
"slr"]
183 db.update_dal(felix_dal)
185 daqcon_dal = dal.DetectorToDaqConnection(
186 f
"felix-{last_source_id}-connections",
187 felix_senders = [flx_senders],
188 felix_receiver = felix_dal
190 db.update_dal(daqcon_dal)
194 flx_sender_dal = dal.FelixDataSender(
195 f
"flxsender-{source_id}",
196 protocol=pars[
"protocol"],
198 streams = [flx_streams]
200 db.update_dal(flx_sender_dal)
201 flx_senders.append(flx_sender_dal)
202 last_felix_pars = pars
203 last_felix_source_id = source_id
205 raise RuntimeError(f
'Unknown kind of readout {entry["kind"]}!')
207 if entry[
"kind"] ==
"eth":
208 eth_streams.append(stream_dal)
209 hermes_streams.append(stream_dal)
211 flx_streams.append(stream_dal)
213 last_source_id = source_id
215 if eth_streams_found:
217 print(f
"Adding final HermesDataSender {hermes_link_id}")
218 if len(eth_streams) > 0:
219 link_dal = dal.HermesDataSender(
221 link_id = link_number,
222 streams = hermes_streams,
225 db.update_dal(link_dal)
226 links.append(link_dal)
228 daqcon_dal = dal.NetworkDetectorToDaqConnection(
229 f
"{last_eth_pars['rx_host']}-connections",
230 net_senders = eth_senders,
231 net_receiver = dpdkrec_dal
233 db.update_dal(daqcon_dal)
236 if flx_streams_found
and len(flx_senders) > 0:
237 print(f
"Adding final FelixInterface felix-{flx_source_id}")
238 felix_dal = dal.FelixInterface(
239 f
"felix-{flx_source_id}",
240 card=last_felix_pars[
"card"],
241 slr=last_felix_pars[
"slr"]
243 db.update_dal(felix_dal)
244 daqcon_dal = dal.FelixDetectorToDaqConnection(
245 f
"felix-{flx_source_id}-connections",
246 felix_senders = flx_senders,
247 felix_receiver = felix_dal
249 db.update_dal(daqcon_dal)