DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
tde_create_pinning_template.py
Go to the documentation of this file.
1#!/usr/bin/env python3
2import click
3
4import json
5
6import pandas as pd
7
8from rich import print
9
10from tde_stream_db_gen import get_mapping_from_channel_map, get_mapping
11
12
13@click.command
14@click.option("-c", "--channel_map", type = str, help = "ProtoDUNE channel map to infer the Crate/AMC mapping.")
15def main(channel_map):
16 if channel_map:
17 mapping = get_mapping_from_channel_map(channel_map)
18 else:
19 mapping = get_mapping(11, 2)
20
21 thread_name_prefix_ru = [
22 "rawproc-0",
23 "cleanup",
24 "consumer",
25 "recording",
26 "periodic"
27 ]
28 thread_name_prefix_tpg = [
29 "tpproc-0",
30 "cleanup",
31 "consumer",
32 "periodic"
33 ]
34
35 crate_group = [[0, 1, 2, 6, 7], [3, 4, 5, 8, 9]]
36
37 sids = {i : [] for i in range(len(crate_group))}
38 sid_counters = {i : i * 100 for i in pd.unique(mapping["CRP"])}
39
40 for cg in crate_group:
41 for crate in cg:
42 crate_map = mapping[mapping["Crate"] == crate]
43 amcs = pd.unique(crate_map["AMC"])
44 for amc in amcs:
45 base_sid = pd.unique(crate_map[crate_map["AMC"] == amc]["CRP"])[0]
46 sid_counters[base_sid] += 1
47
48 index = [crate in i for i in crate_group][0]
49 sids[index].append(str(sid_counters[base_sid]))
50
51 template = {"thread_group" : []}
52 for (n, v), s in zip(enumerate(sids.values()), pd.unique(mapping["CRP"])):
53 tg = {"numa" : n, "threads" : []}
54 for t in thread_name_prefix_ru:
55 tg["threads"].append(f"{t}-({'|'.join(v)})")
56
57 for t in thread_name_prefix_tpg:
58 tg["threads"].append(f"{t}-({'|'.join([str((10 * s) + j) for j in range(3)])})")
59
60 template["thread_group"].append(tg)
61
62 file = "pin_template_tde.json"
63 with open(file, "w") as f:
64 json.dump({"daq_application" : {"runp02srv004tde" : template}}, f, indent = 4)
65 print(f"pinning template written to {file}")
66
67 return
68
69if __name__ == "__main__":
70 main()