7 """Simple script to convert a JSON readout map file to an OKS file."""
9 group_name = os.path.basename(jsonfile).removesuffix(
".json")
11 oksfile = group_name +
".data.xml"
14 f
"Converting RO map from {jsonfile} to OKS in {oksfile} offsetting source_ids by {source_id_offset}"
17 with open(jsonfile)
as f:
18 jsonmap = json.loads(f.read())
22 "schema/confmodel/dunedaq.schema.xml",
23 "schema/appmodel/application.schema.xml",
24 "schema/appmodel/fdmodules.schema.xml",
25 "schema/appmodel/wiec.schema.xml"
29 db.create_db(oksfile, schemafiles)
38 last_felix_pars =
None
40 eth_streams_found =
False
41 flx_streams_found =
False
48 source_id = entry[
"src_id"] + source_id_offset
49 geo_id = entry[
"geo_id"]
50 geo_dal = dal.GeoId(f
"geoId-{source_id}",
51 detector_id=geo_id[
"det_id"],
52 crate_id=geo_id[
"crate_id"],
53 slot_id=geo_id[
"slot_id"],
54 stream_id=geo_id[
"stream_id"]
56 db.update_dal(geo_dal)
58 stream_dal = dal.DetectorStream(f
"stream-{source_id}",
59 source_id = source_id,
62 db.update_dal(stream_dal)
64 if entry[
"kind"] ==
"eth":
65 eth_source_id = source_id
66 if not eth_streams_found:
67 eth_streams_found =
True
68 lcore_dal = dal.ProcessingResource(
69 f
"lcores-{group_name}",
70 cpu_cores = lcores.split(
',')
72 db.update_dal(lcore_dal)
73 nic_config_dal = dal.DPDKPortConfiguration(
74 f
"nicConfig-{group_name}",
75 used_lcores = [ lcore_dal ]
77 db.update_dal(nic_config_dal)
79 pars = entry[
"parameters"]
80 if last_eth_pars ==
None or pars[
"rx_mac"] != last_eth_pars[
"rx_mac"]:
81 nic_name = f
"nic-{pars['rx_host']}"
82 print(f
"New nic adding nic {pars['rx_mac']} with id {nic_name}")
83 rxnic_dal = dal.NetworkDevice(
85 mac_address = pars[
"rx_mac"],
86 ip_address = [pars[
"rx_ip"]]
88 db.update_dal(rxnic_dal)
90 dpdkrec_dal = dal.DPDKReceiver(
91 f
"{pars['rx_host']}-receiver",
93 configuration = nic_config_dal
95 db.update_dal(dpdkrec_dal)
99 if last_tx_mac !=
None and pars[
"tx_mac"] != last_tx_mac:
100 link_dal = dal.HermesDataSender(
102 link_id = link_number,
103 streams = hermes_streams,
106 db.update_dal(link_dal)
107 links.append(link_dal)
108 link_number = link_number + 1
109 eth_senders.append(link_dal)
112 if last_tx_mac ==
None or pars[
"tx_mac"] != last_tx_mac:
113 if last_tx_host != pars[
'tx_host']:
116 nic_name = f
"nw-{pars['tx_host']}-{nic_num}"
117 print(f
"Adding NetworkInterface {nic_name}")
118 txnic_dal = dal.NetworkInterface(
120 mac_address = pars[
"tx_mac"],
121 ip_address = [pars[
"tx_ip"]]
123 db.update_dal(txnic_dal)
125 if last_eth_pars !=
None:
127 if pars[
"rx_mac"] != last_eth_pars[
"rx_mac"]:
128 db.update_dal(rset_dal)
129 daqcon_dal = dal.DetectorToDaqConnection(
130 f
"{last_eth_pars['rx_host']}-connections",
131 net_senders = eth_senders,
132 net_receiver = dpdkrec_dal
134 db.update_dal(daqcon_dal)
136 rset_dal = dal.ResourceSetAND(
137 f
"{last_eth_pars['rx_host']}-streams",
138 contains = eth_streams
140 db.update_dal(rset_dal)
149 hermes_id = f
"hermes_{geo_id['det_id']}_{geo_id['crate_id']}_{geo_id['slot_id']}"
150 hermes_link_id = f
"{hermes_id}-{link_number}"
151 if pars != last_eth_pars:
152 rx_queue = rx_queue + 1
154 last_eth_source_id = source_id
155 last_tx_mac = pars[
"tx_mac"]
156 last_tx_host = pars[
"tx_host"]
159 elif entry[
"kind"] ==
"flx":
160 print (f
"Processing config for FELIX {source_id=}")
161 flx_source_id = source_id
162 flx_streams_found =
True
163 pars = entry[
"parameters"]
164 if not last_felix_pars ==
None:
166 pars[
"card"] != last_felix_pars[
"card"]
167 or pars[
"slr"] != last_felix_pars[
"slr"]
170 f
'Adding FelixInterface felix-{last_felix_source_id} slr={last_felix_pars["slr"]}'
172 felix_dal = dal.FelixInterface(
173 f
"felix-{last_felix_source_id}",
174 card=last_felix_pars[
"card"],
175 slr=last_felix_pars[
"slr"]
177 db.update_dal(felix_dal)
179 daqcon_dal = dal.DetectorToDaqConnection(
180 f
"felix-{last_source_id}-connections",
181 felix_senders = [flx_senders],
182 felix_receiver = felix_dal
184 db.update_dal(daqcon_dal)
188 flx_sender_dal = dal.FelixDataSender(
189 f
"flxsender-{source_id}",
190 protocol=pars[
"protocol"],
192 streams = [flx_streams]
194 db.update_dal(flx_sender_dal)
195 flx_senders.append(flx_sender_dal)
196 last_felix_pars = pars
197 last_felix_source_id = source_id
199 raise RuntimeError(f
'Unknown kind of readout {entry["kind"]}!')
201 if entry[
"kind"] ==
"eth":
202 eth_streams.append(stream_dal)
203 hermes_streams.append(stream_dal)
205 flx_streams.append(stream_dal)
207 last_source_id = source_id
209 if eth_streams_found:
211 print(f
"Adding final HermesDataSender {hermes_link_id}")
212 if len(eth_streams) > 0:
213 link_dal = dal.HermesDataSender(
215 link_id = link_number,
216 streams = hermes_streams,
219 db.update_dal(link_dal)
220 links.append(link_dal)
222 daqcon_dal = dal.NetworkDetectorToDaqConnection(
223 f
"{last_eth_pars['rx_host']}-connections",
224 net_senders = eth_senders,
225 net_receiver = dpdkrec_dal
227 db.update_dal(daqcon_dal)
230 if flx_streams_found
and len(flx_senders) > 0:
231 print(f
"Adding final FelixInterface felix-{flx_source_id}")
232 felix_dal = dal.FelixInterface(
233 f
"felix-{flx_source_id}",
234 card=last_felix_pars[
"card"],
235 slr=last_felix_pars[
"slr"]
237 db.update_dal(felix_dal)
238 daqcon_dal = dal.FelixDetectorToDaqConnection(
239 f
"felix-{flx_source_id}-connections",
240 felix_senders = flx_senders,
241 felix_receiver = felix_dal
243 db.update_dal(daqcon_dal)