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 contains = 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 rset_dal = dal.ResourceSetAND(
129 f
"{last_eth_pars['rx_host']}-senders",
130 contains = eth_senders
132 db.update_dal(rset_dal)
133 daqcon_dal = dal.DetectorToDaqConnection(
134 f
"{last_eth_pars['rx_host']}-connections",
135 contains = [rset_dal, dpdkrec_dal]
137 db.update_dal(daqcon_dal)
139 rset_dal = dal.ResourceSetAND(
140 f
"{last_eth_pars['rx_host']}-streams",
141 contains = eth_streams
143 db.update_dal(rset_dal)
152 hermes_id = f
"hermes_{geo_id['det_id']}_{geo_id['crate_id']}_{geo_id['slot_id']}"
153 hermes_link_id = f
"{hermes_id}-{link_number}"
154 if pars != last_eth_pars:
155 rx_queue = rx_queue + 1
157 last_eth_source_id = source_id
158 last_tx_mac = pars[
"tx_mac"]
159 last_tx_host = pars[
"tx_host"]
162 elif entry[
"kind"] ==
"flx":
163 print (f
"Processing config for FELIX {source_id=}")
164 flx_source_id = source_id
165 flx_streams_found =
True
166 pars = entry[
"parameters"]
167 if not last_felix_pars ==
None:
169 pars[
"card"] != last_felix_pars[
"card"]
170 or pars[
"slr"] != last_felix_pars[
"slr"]
173 f
'Adding FelixInterface felix-{last_felix_source_id} slr={last_felix_pars["slr"]}'
175 felix_dal = dal.FelixInterface(
176 f
"felix-{last_felix_source_id}",
177 card=last_felix_pars[
"card"],
178 slr=last_felix_pars[
"slr"]
180 db.update_dal(felix_dal)
181 rset_dal = dal.ResourceSetAND(
182 f
"felix-{last_source_id}-streams",
183 contains = flx_streams
185 db.update_dal(rset_dal)
186 daqcon_dal = dal.DetectorToDaqConnection(
187 f
"felix-{last_source_id}-connections",
188 contains = [rset_dal, felix_dal]
190 db.update_dal(daqcon_dal)
193 flx_sender_dal = dal.FelixDataSender(
194 f
"flxsender-{source_id}",
195 protocol=pars[
"protocol"],
197 contains = [stream_dal]
199 db.update_dal(flx_sender_dal)
200 flx_senders.append(flx_sender_dal)
201 last_felix_pars = pars
202 last_felix_source_id = source_id
204 raise RuntimeError(f
'Unknown kind of readout {entry["kind"]}!')
206 if entry[
"kind"] ==
"eth":
207 eth_streams.append(stream_dal)
208 hermes_streams.append(stream_dal)
210 flx_streams.append(stream_dal)
212 last_source_id = source_id
214 if eth_streams_found:
216 print(f
"Adding final HermesDataSender {hermes_link_id}")
217 if len(eth_streams) > 0:
218 link_dal = dal.HermesDataSender(
220 link_id = link_number,
221 contains = hermes_streams,
224 db.update_dal(link_dal)
225 links.append(link_dal)
227 rset_dal = dal.ResourceSetAND(
228 f
"{last_eth_pars['rx_host']}-senders",
229 contains = eth_senders
231 db.update_dal(rset_dal)
232 rset_dal = dal.ResourceSetAND(
233 f
"{last_eth_pars['rx_host']}-streams",
234 contains = eth_streams
236 db.update_dal(rset_dal)
237 daqcon_dal = dal.DetectorToDaqConnection(
238 f
"{last_eth_pars['rx_host']}-connections",
239 contains = [rset_dal, dpdkrec_dal]
241 db.update_dal(daqcon_dal)
244 if flx_streams_found
and len(flx_senders) > 0:
245 print(f
"Adding final FelixInterface felix-{flx_source_id}")
246 felix_dal = dal.FelixInterface(
247 f
"felix-{flx_source_id}",
248 card=last_felix_pars[
"card"],
249 slr=last_felix_pars[
"slr"]
251 db.update_dal(felix_dal)
252 rset_dal = dal.ResourceSetAND(
253 f
"felix-{flx_source_id}-streams",
254 contains = flx_streams
256 db.update_dal(rset_dal)
257 daqcon_dal = dal.DetectorToDaqConnection(
258 f
"felix-{flx_source_id}-connections",
259 contains = [rset_dal, felix_dal]
261 db.update_dal(daqcon_dal)