11def generate_mdt_mappings():
12 """
13 Creates dictionaries representing the mappings
14 for different systems onto the chamber name.
15 """
16 def fix_line(line):
17 if not line:
18 return None
19 hv, lv, jtag, name, output_channel = line.split()
20 return int(hv), int(lv), int(jtag), name, int(output_channel)
21
22 mdtcodes = resource_string(
"DCSCalculator2.subdetectors.data",
"mdt_codes.dat").decode().
strip().
split(
"\n")
23
24
25 lines = [line for line in [fix_line(raw_line) for raw_line in mdtcodes if raw_line] if line]
26
27 name_to_output = make_multi_mapping((name, output_channel) for hv, lv, jtag, name, output_channel in lines)
28 hv_to_name = make_multi_mapping((hv, name) for hv, lv, jtag, name, output_channel in lines)
29 lv_to_name = make_multi_mapping((lv, name) for hv, lv, jtag, name, output_channel in lines)
30 jtag_to_name = make_multi_mapping((jtag, name) for hv, lv, jtag, name, output_channel in lines)
31 name_to_name = make_multi_mapping((name, name) for hv, lv, jtag, name, output_channel in lines)
32
33 return name_to_output, hv_to_name, lv_to_name, jtag_to_name, name_to_name
34
35
std::vector< std::string > split(const std::string &s, const std::string &t=":")