hpstr
The Heavy Photon Search Toolkit for Reconstruction (hpstr) provides an interface to physics data from the HPS experiment saved in the LCIO format and converts it into an ROOT based format.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
ModuleMapper.cxx
Go to the documentation of this file.
1#include "ModuleMapper.h"
2#include <iostream>
3#include "TString.h"
5
6 year_ = year;
7 std::cout << "MODULE MAPPER YEAR " << year_ << std::endl;
8
9 if (year_ == 2019 || year_ == 2021) {
10
11 hw_to_sw["F0H0"] = "ly1_m0" ;
12 hw_to_sw["F0H1"] = "ly2_m0" ;
13 hw_to_sw["F0H2"] = "ly3_m0" ;
14 hw_to_sw["F0H3"] = "ly4_m0" ;
15 hw_to_sw["F1H0"] = "ly4_m1" ;
16 hw_to_sw["F1H1"] = "ly3_m1" ;
17 hw_to_sw["F1H2"] = "ly2_m1" ;
18 hw_to_sw["F1H3"] = "ly1_m1" ;
19 hw_to_sw["F2H0"] = "ly5_m0" ;
20 hw_to_sw["F2H1"] = "ly6_m0" ;
21 hw_to_sw["F2H2"] = "ly8_m0" ;
22 hw_to_sw["F2H3"] = "ly7_m0" ;
23 hw_to_sw["F3H0"] = "ly7_m1";
24 hw_to_sw["F3H1"] = "ly8_m1";
25 hw_to_sw["F3H2"] = "ly5_m1";
26 hw_to_sw["F3H3"] = "ly6_m1";
27 hw_to_sw["F4H0"] = "ly9_m0" ;
28 hw_to_sw["F4H1"] = "ly9_m2" ;
29 hw_to_sw["F4H2"] = "ly10_m0";
30 hw_to_sw["F4H3"] = "ly10_m2";
31 hw_to_sw["F5H0"] = "ly9_m1" ;
32 hw_to_sw["F5H1"] = "ly9_m3" ;
33 hw_to_sw["F5H2"] = "ly10_m1";
34 hw_to_sw["F5H3"] = "ly10_m3";
35 hw_to_sw["F6H0"] = "ly11_m0";
36 hw_to_sw["F6H1"] = "ly11_m2";
37 hw_to_sw["F6H2"] = "ly12_m0";
38 hw_to_sw["F6H3"] = "ly12_m2";
39 hw_to_sw["F7H0"] = "ly11_m1";
40 hw_to_sw["F7H1"] = "ly11_m3";
41 hw_to_sw["F7H2"] = "ly12_m1";
42 hw_to_sw["F7H3"] = "ly12_m3";
43 hw_to_sw["F8H0"] = "ly13_m0";
44 hw_to_sw["F8H1"] = "ly13_m2";
45 hw_to_sw["F8H2"] = "ly14_m0";
46 hw_to_sw["F8H3"] = "ly14_m2";
47 hw_to_sw["F9H0"] = "ly13_m1";
48 hw_to_sw["F9H1"] = "ly13_m3";
49 hw_to_sw["F9H2"] = "ly14_m1";
50 hw_to_sw["F9H3"] = "ly14_m3";
51
52 sw_to_hw["ly1_m0" ] = "F0H0" ;
53 sw_to_hw["ly2_m0" ] = "F0H1" ;
54 sw_to_hw["ly3_m0" ] = "F0H2" ;
55 sw_to_hw["ly4_m0" ] = "F0H3" ;
56 sw_to_hw["ly4_m1" ] = "F1H0" ;
57 sw_to_hw["ly3_m1" ] = "F1H1" ;
58 sw_to_hw["ly2_m1" ] = "F1H2" ;
59 sw_to_hw["ly1_m1" ] = "F1H3" ;
60 sw_to_hw["ly5_m0" ] = "F2H0" ;
61 sw_to_hw["ly6_m0" ] = "F2H1" ;
62 sw_to_hw["ly8_m0" ] = "F2H2" ;
63 sw_to_hw["ly7_m0" ] = "F2H3" ;
64 sw_to_hw["ly5_m1" ] = "F3H2" ;
65 sw_to_hw["ly6_m1" ] = "F3H3" ;
66 sw_to_hw["ly7_m1" ] = "F3H0" ;
67 sw_to_hw["ly8_m1" ] = "F3H1" ;
68 sw_to_hw["ly9_m0" ] = "F4H0" ;
69 sw_to_hw["ly9_m2" ] = "F4H1" ;
70 sw_to_hw["ly10_m0"] = "F4H2" ;
71 sw_to_hw["ly10_m2"] = "F4H3" ;
72 sw_to_hw["ly9_m1" ] = "F5H0" ;
73 sw_to_hw["ly9_m3" ] = "F5H1" ;
74 sw_to_hw["ly10_m1"] = "F5H2" ;
75 sw_to_hw["ly10_m3"] = "F5H3" ;
76 sw_to_hw["ly11_m0"] = "F6H0" ;
77 sw_to_hw["ly11_m2"] = "F6H1" ;
78 sw_to_hw["ly12_m0"] = "F6H2" ;
79 sw_to_hw["ly12_m2"] = "F6H3" ;
80 sw_to_hw["ly11_m1"] = "F7H0" ;
81 sw_to_hw["ly11_m3"] = "F7H1" ;
82 sw_to_hw["ly12_m1"] = "F7H2" ;
83 sw_to_hw["ly12_m3"] = "F7H3" ;
84 sw_to_hw["ly13_m0"] = "F8H0" ;
85 sw_to_hw["ly13_m2"] = "F8H1" ;
86 sw_to_hw["ly14_m0"] = "F8H2" ;
87 sw_to_hw["ly14_m2"] = "F8H3" ;
88 sw_to_hw["ly13_m1"] = "F9H0" ;
89 sw_to_hw["ly13_m3"] = "F9H1" ;
90 sw_to_hw["ly14_m1"] = "F9H2" ;
91 sw_to_hw["ly14_m3"] = "F9H3" ;
92
93 // HW to string and viceversa
94
95 hw_to_string["F0H0"] = "L0T_axial" ;
96 hw_to_string["F0H1"] = "L0T_stereo" ;
97 hw_to_string["F0H2"] = "L1T_axial" ;
98 hw_to_string["F0H3"] = "L1T_stereo" ;
99 hw_to_string["F1H0"] = "L1B_axial" ;
100 hw_to_string["F1H1"] = "L1B_stereo" ;
101 hw_to_string["F1H2"] = "L0B_axial" ;
102 hw_to_string["F1H3"] = "L0B_stereo" ;
103 hw_to_string["F2H0"] = "L2T_axial" ;
104 hw_to_string["F2H1"] = "L2T_stereo" ;
105 hw_to_string["F2H2"] = "L3T_stereo" ;
106 hw_to_string["F2H3"] = "L3T_axial" ;
107 hw_to_string["F3H2"] = "L2B_stereo" ;
108 hw_to_string["F3H3"] = "L2B_axial" ;
109 hw_to_string["F3H0"] = "L3B_stereo" ;
110 hw_to_string["F3H1"] = "L3B_axial" ;
111 hw_to_string["F4H0"] = "L4T_axial_ele" ;
112 hw_to_string["F4H1"] = "L4T_axial_pos" ;
113 hw_to_string["F4H2"] = "L4T_stereo_ele";
114 hw_to_string["F4H3"] = "L4T_stereo_pos";
115 hw_to_string["F5H0"] = "L4B_stereo_ele";
116 hw_to_string["F5H1"] = "L4B_stereo_pos";
117 hw_to_string["F5H2"] = "L4B_axial_ele" ;
118 hw_to_string["F5H3"] = "L4B_axial_pos" ;
119 hw_to_string["F6H0"] = "L5T_axial_ele" ;
120 hw_to_string["F6H1"] = "L5T_axial_pos" ;
121 hw_to_string["F6H2"] = "L5T_stereo_ele";
122 hw_to_string["F6H3"] = "L5T_stereo_pos";
123 hw_to_string["F7H0"] = "L5B_stereo_ele";
124 hw_to_string["F7H1"] = "L5B_stereo_pos";
125 hw_to_string["F7H2"] = "L5B_axial_ele" ;
126 hw_to_string["F7H3"] = "L5B_axial_pos" ;
127 hw_to_string["F8H0"] = "L6T_axial_ele" ;
128 hw_to_string["F8H1"] = "L6T_axial_pos" ;
129 hw_to_string["F8H2"] = "L6T_stereo_ele";
130 hw_to_string["F8H3"] = "L6T_stereo_pos";
131 hw_to_string["F9H0"] = "L6B_stereo_ele";
132 hw_to_string["F9H1"] = "L6B_stereo_pos";
133 hw_to_string["F9H2"] = "L6B_axial_ele" ;
134 hw_to_string["F9H3"] = "L6B_axial_pos" ;
135
136 string_to_hw["L0T_axial" ] = "F0H0";
137 string_to_hw["L0T_stereo" ] = "F0H1";
138 string_to_hw["L1T_axial" ] = "F0H2";
139 string_to_hw["L1T_stereo" ] = "F0H3";
140 string_to_hw["L1B_axial" ] = "F1H0";
141 string_to_hw["L1B_stereo" ] = "F1H1";
142 string_to_hw["L0B_axial" ] = "F1H2";
143 string_to_hw["L0B_stereo" ] = "F1H3";
144 string_to_hw["L2T_axial" ] = "F2H0";
145 string_to_hw["L2T_stereo" ] = "F2H1";
146 string_to_hw["L3T_stereo" ] = "F2H2";
147 string_to_hw["L3T_axial" ] = "F2H3";
148 string_to_hw["L2B_stereo" ] = "F3H2";
149 string_to_hw["L2B_axial" ] = "F3H3";
150 string_to_hw["L3B_stereo" ] = "F3H0";
151 string_to_hw["L3B_axial" ] = "F3H1";
152 string_to_hw["L4T_axial_ele" ] = "F4H0";
153 string_to_hw["L4T_axial_pos" ] = "F4H1";
154 string_to_hw["L4T_stereo_ele"] = "F4H2";
155 string_to_hw["L4T_stereo_pos"] = "F4H3";
156 string_to_hw["L4B_stereo_ele"] = "F5H0";
157 string_to_hw["L4B_stereo_pos"] = "F5H1";
158 string_to_hw["L4B_axial_ele" ] = "F5H2";
159 string_to_hw["L4B_axial_pos" ] = "F5H3";
160 string_to_hw["L5T_axial_ele" ] = "F6H0";
161 string_to_hw["L5T_axial_pos" ] = "F6H1";
162 string_to_hw["L5T_stereo_ele"] = "F6H2";
163 string_to_hw["L5T_stereo_pos"] = "F6H3";
164 string_to_hw["L5B_stereo_ele"] = "F7H0";
165 string_to_hw["L5B_stereo_pos"] = "F7H1";
166 string_to_hw["L5B_axial_ele" ] = "F7H2";
167 string_to_hw["L5B_axial_pos" ] = "F7H3";
168 string_to_hw["L6T_axial_ele" ] = "F8H0";
169 string_to_hw["L6T_axial_pos" ] = "F8H1";
170 string_to_hw["L6T_stereo_ele"] = "F8H2";
171 string_to_hw["L6T_stereo_pos"] = "F8H3";
172 string_to_hw["L6B_stereo_ele"] = "F9H0";
173 string_to_hw["L6B_stereo_pos"] = "F9H1";
174 string_to_hw["L6B_axial_ele" ] = "F9H2";
175 string_to_hw["L6B_axial_pos" ] = "F9H3";
176
177
178 //sw to string
179
180
181 sw_to_string["ly1_m0" ] = "L0T_axial" ;
182 sw_to_string["ly2_m0" ] = "L0T_stereo" ;
183 sw_to_string["ly3_m0" ] = "L1T_axial" ;
184 sw_to_string["ly4_m0" ] = "L1T_stereo" ;
185 sw_to_string["ly4_m1" ] = "L1B_axial" ;
186 sw_to_string["ly3_m1" ] = "L1B_stereo" ;
187 sw_to_string["ly2_m1" ] = "L0B_axial" ;
188 sw_to_string["ly1_m1" ] = "L0B_stereo" ;
189 sw_to_string["ly5_m0" ] = "L2T_axial" ;
190 sw_to_string["ly6_m0" ] = "L2T_stereo" ;
191 sw_to_string["ly8_m0" ] = "L3T_stereo" ;
192 sw_to_string["ly7_m0" ] = "L3T_axial" ;
193 sw_to_string["ly5_m1" ] = "L2B_stereo" ;
194 sw_to_string["ly6_m1" ] = "L2B_axial" ;
195 sw_to_string["ly7_m1" ] = "L3B_stereo" ;
196 sw_to_string["ly8_m1" ] = "L3B_axial" ;
197 sw_to_string["ly9_m0" ] = "L4T_axial_ele" ;
198 sw_to_string["ly9_m2" ] = "L4T_axial_pos" ;
199 sw_to_string["ly10_m0"] = "L4T_stereo_ele";
200 sw_to_string["ly10_m2"] = "L4T_stereo_pos";
201 sw_to_string["ly9_m1" ] = "L4B_stereo_ele";
202 sw_to_string["ly9_m3" ] = "L4B_stereo_pos";
203 sw_to_string["ly10_m1"] = "L4B_axial_ele" ;
204 sw_to_string["ly10_m3"] = "L4B_axial_pos" ;
205 sw_to_string["ly11_m0"] = "L5T_axial_ele" ;
206 sw_to_string["ly11_m2"] = "L5T_axial_pos" ;
207 sw_to_string["ly12_m0"] = "L5T_stereo_ele";
208 sw_to_string["ly12_m2"] = "L5T_stereo_pos";
209 sw_to_string["ly11_m1"] = "L5B_stereo_ele";
210 sw_to_string["ly11_m3"] = "L5B_stereo_pos";
211 sw_to_string["ly12_m1"] = "L5B_axial_ele" ;
212 sw_to_string["ly12_m3"] = "L5B_axial_pos" ;
213 sw_to_string["ly13_m0"] = "L6T_axial_ele" ;
214 sw_to_string["ly13_m2"] = "L6T_axial_pos" ;
215 sw_to_string["ly14_m0"] = "L6T_stereo_ele";
216 sw_to_string["ly14_m2"] = "L6T_stereo_pos";
217 sw_to_string["ly13_m1"] = "L6B_stereo_ele";
218 sw_to_string["ly13_m3"] = "L6B_stereo_pos";
219 sw_to_string["ly14_m1"] = "L6B_axial_ele" ;
220 sw_to_string["ly14_m3"] = "L6B_axial_pos" ;
221
222
223 string_to_sw["L0T_axial" ] = "ly1_m0" ;
224 string_to_sw["L0T_stereo" ] = "ly2_m0" ;
225 string_to_sw["L1T_axial" ] = "ly3_m0" ;
226 string_to_sw["L1T_stereo" ] = "ly4_m0" ;
227 string_to_sw["L1B_axial" ] = "ly4_m1" ;
228 string_to_sw["L1B_stereo" ] = "ly3_m1" ;
229 string_to_sw["L0B_axial" ] = "ly2_m1" ;
230 string_to_sw["L0B_stereo" ] = "ly1_m1" ;
231 string_to_sw["L2T_axial" ] = "ly5_m0" ;
232 string_to_sw["L2T_stereo" ] = "ly6_m0" ;
233 string_to_sw["L3T_stereo" ] = "ly8_m0" ;
234 string_to_sw["L3T_axial" ] = "ly7_m0" ;
235 string_to_sw["L2B_stereo" ] = "ly5_m1" ;
236 string_to_sw["L2B_axial" ] = "ly6_m1" ;
237 string_to_sw["L3B_stereo" ] = "ly7_m1" ;
238 string_to_sw["L3B_axial" ] = "ly8_m1" ;
239 string_to_sw["L4T_axial_ele" ] = "ly9_m0" ;
240 string_to_sw["L4T_axial_pos" ] = "ly9_m2" ;
241 string_to_sw["L4T_stereo_ele"] = "ly10_m0";
242 string_to_sw["L4T_stereo_pos"] = "ly10_m2";
243 string_to_sw["L4B_stereo_ele"] = "ly9_m1" ;
244 string_to_sw["L4B_stereo_pos"] = "ly9_m3" ;
245 string_to_sw["L4B_axial_ele" ] = "ly10_m1";
246 string_to_sw["L4B_axial_pos" ] = "ly10_m3";
247 string_to_sw["L5T_axial_ele" ] = "ly11_m0";
248 string_to_sw["L5T_axial_pos" ] = "ly11_m2";
249 string_to_sw["L5T_stereo_ele"] = "ly12_m0";
250 string_to_sw["L5T_stereo_pos"] = "ly12_m2";
251 string_to_sw["L5B_stereo_ele"] = "ly11_m1";
252 string_to_sw["L5B_stereo_pos"] = "ly11_m3";
253 string_to_sw["L5B_axial_ele" ] = "ly12_m1";
254 string_to_sw["L5B_axial_pos" ] = "ly12_m3";
255 string_to_sw["L6T_axial_ele" ] = "ly13_m0";
256 string_to_sw["L6T_axial_pos" ] = "ly13_m2";
257 string_to_sw["L6T_stereo_ele"] = "ly14_m0";
258 string_to_sw["L6T_stereo_pos"] = "ly14_m2";
259 string_to_sw["L6B_stereo_ele"] = "ly13_m1";
260 string_to_sw["L6B_stereo_pos"] = "ly13_m3";
261 string_to_sw["L6B_axial_ele" ] = "ly14_m1";
262 string_to_sw["L6B_axial_pos" ] = "ly14_m3";
263 }
264 else if (year_ == 2016)
265 {
266
267 std::cout<<"WARNING: ModuleMapper: using a mapping that might be wrong"<<std::endl;
268
269
270 hw_to_sw["F9H0"] = "ly1_m0" ;
271 hw_to_sw["F2H0"] = "ly1_m1" ;
272 hw_to_sw["F9H1"] = "ly2_m0" ;
273 hw_to_sw["F2H1"] = "ly2_m1" ;
274 hw_to_sw["F0H0"] = "ly3_m0" ;
275 hw_to_sw["F6H0"] = "ly3_m1" ;
276 hw_to_sw["F0H1"] = "ly4_m0" ;
277 hw_to_sw["F6H1"] = "ly4_m1" ;
278 hw_to_sw["F0H2"] = "ly5_m0" ;
279 hw_to_sw["F6H2"] = "ly5_m1" ;
280 hw_to_sw["F0H3"] = "ly6_m0" ;
281 hw_to_sw["F6H3"] = "ly6_m1" ;
282 hw_to_sw["F5H0"] = "ly7_m0" ;
283 hw_to_sw["F1H0"] = "ly7_m1" ;
284 hw_to_sw["F5H1"] = "ly7_m2" ;
285 hw_to_sw["F1H1"] = "ly7_m3" ;
286 hw_to_sw["F5H2"] = "ly8_m0" ;
287 hw_to_sw["F1H2"] = "ly8_m1" ;
288 hw_to_sw["F5H3"] = "ly8_m2" ;
289 hw_to_sw["F1H3"] = "ly8_m3" ;
290 hw_to_sw["F8H0"] = "ly9_m0" ;
291 hw_to_sw["F4H0"] = "ly9_m1" ;
292 hw_to_sw["F8H1"] = "ly9_m2" ;
293 hw_to_sw["F4H1"] = "ly9_m3" ;
294 hw_to_sw["F8H2"] = "ly10_m0";
295 hw_to_sw["F4H2"] = "ly10_m1";
296 hw_to_sw["F8H3"] = "ly10_m2";
297 hw_to_sw["F4H3"] = "ly10_m3";
298 hw_to_sw["F7H0"] = "ly11_m0";
299 hw_to_sw["F3H0"] = "ly11_m1";
300 hw_to_sw["F7H1"] = "ly11_m2";
301 hw_to_sw["F3H1"] = "ly11_m3";
302 hw_to_sw["F7H2"] = "ly12_m0";
303 hw_to_sw["F3H2"] = "ly12_m1";
304 hw_to_sw["F7H3"] = "ly12_m2";
305 hw_to_sw["F3H3"] = "ly12_m3";
306
307 sw_to_hw["ly1_m0" ] = "F9H0" ;
308 sw_to_hw["ly1_m1" ] = "F2H0" ;
309 sw_to_hw["ly2_m0" ] = "F9H1" ;
310 sw_to_hw["ly2_m1" ] = "F2H1" ;
311 sw_to_hw["ly3_m0" ] = "F0H0" ;
312 sw_to_hw["ly3_m1" ] = "F6H0" ;
313 sw_to_hw["ly4_m0" ] = "F0H1" ;
314 sw_to_hw["ly4_m1" ] = "F6H1" ;
315 sw_to_hw["ly5_m0" ] = "F0H2" ;
316 sw_to_hw["ly5_m1" ] = "F6H2" ;
317 sw_to_hw["ly6_m0" ] = "F0H3" ;
318 sw_to_hw["ly6_m1" ] = "F6H3" ;
319 sw_to_hw["ly7_m0" ] = "F5H0" ;
320 sw_to_hw["ly7_m1" ] = "F1H0" ;
321 sw_to_hw["ly7_m2" ] = "F5H1" ;
322 sw_to_hw["ly7_m3" ] = "F1H1" ;
323 sw_to_hw["ly8_m0" ] = "F5H2" ;
324 sw_to_hw["ly8_m1" ] = "F1H2" ;
325 sw_to_hw["ly8_m2" ] = "F5H3" ;
326 sw_to_hw["ly8_m3" ] = "F1H3" ;
327 sw_to_hw["ly9_m0" ] = "F8H0" ;
328 sw_to_hw["ly9_m1" ] = "F4H0" ;
329 sw_to_hw["ly9_m2" ] = "F8H1" ;
330 sw_to_hw["ly9_m3" ] = "F4H1" ;
331 sw_to_hw["ly10_m0"] = "F8H2" ;
332 sw_to_hw["ly10_m1"] = "F4H2" ;
333 sw_to_hw["ly10_m2"] = "F8H3" ;
334 sw_to_hw["ly10_m3"] = "F4H3" ;
335 sw_to_hw["ly11_m0"] = "F7H0" ;
336 sw_to_hw["ly11_m1"] = "F3H0" ;
337 sw_to_hw["ly11_m2"] = "F7H1" ;
338 sw_to_hw["ly11_m3"] = "F3H1" ;
339 sw_to_hw["ly12_m0"] = "F7H2" ;
340 sw_to_hw["ly12_m1"] = "F3H2" ;
341 sw_to_hw["ly12_m2"] = "F7H3" ;
342 sw_to_hw["ly12_m3"] = "F3H3" ;
343
344 // HW to string and viceversa
345
346 hw_to_string["F9H0"] = "L1T_axial" ;
347 hw_to_string["F2H0"] = "L1B_stereo" ;
348 hw_to_string["F9H1"] = "L1T_stereo" ;
349 hw_to_string["F2H1"] = "L1B_axial" ;
350 hw_to_string["F0H0"] = "L2T_axial" ;
351 hw_to_string["F6H0"] = "L2B_stereo" ;
352 hw_to_string["F0H1"] = "L2T_stereo" ;
353 hw_to_string["F6H1"] = "L2B_axial" ;
354 hw_to_string["F0H2"] = "L3T_axial" ;
355 hw_to_string["F6H2"] = "L3B_stereo" ;
356 hw_to_string["F0H3"] = "L3T_stereo" ;
357 hw_to_string["F6H3"] = "L3B_axial" ;
358 hw_to_string["F5H0"] = "L4T_axial_ele" ;
359 hw_to_string["F1H0"] = "L4B_stereo_ele";
360 hw_to_string["F5H1"] = "L4T_axial_pos" ;
361 hw_to_string["F1H1"] = "L4B_stereo_pos";
362 hw_to_string["F5H2"] = "L4T_stereo_ele";
363 hw_to_string["F1H2"] = "L4B_axial_ele" ;
364 hw_to_string["F5H3"] = "L4T_stereo_pos";
365 hw_to_string["F1H3"] = "L4B_axial_pos" ;
366 hw_to_string["F8H0"] = "L5T_axial_ele" ;
367 hw_to_string["F4H0"] = "L5B_stereo_ele";
368 hw_to_string["F8H1"] = "L5T_axial_pos" ;
369 hw_to_string["F4H1"] = "L5B_stereo_pos";
370 hw_to_string["F8H2"] = "L5T_stereo_ele";
371 hw_to_string["F4H2"] = "L5B_axial_ele" ;
372 hw_to_string["F8H3"] = "L5T_stereo_pos";
373 hw_to_string["F4H3"] = "L5B_axial_pos" ;
374 hw_to_string["F7H0"] = "L6T_axial_ele" ;
375 hw_to_string["F3H0"] = "L6B_stereo_ele";
376 hw_to_string["F7H1"] = "L6T_axial_pos" ;
377 hw_to_string["F3H1"] = "L6B_stereo_pos";
378 hw_to_string["F7H2"] = "L6T_stereo_ele";
379 hw_to_string["F3H2"] = "L6B_axial_ele" ;
380 hw_to_string["F7H3"] = "L6T_stereo_pos";
381 hw_to_string["F3H3"] = "L6B_axial_pos" ;
382
383
384 string_to_hw["L1T_axial" ] = "F9H0";
385 string_to_hw["L1B_stereo" ] = "F2H0";
386 string_to_hw["L1T_stereo" ] = "F9H1";
387 string_to_hw["L1B_axial" ] = "F2H1";
388 string_to_hw["L2T_axial" ] = "F0H0";
389 string_to_hw["L2B_stereo" ] = "F6H0";
390 string_to_hw["L2T_stereo" ] = "F0H1";
391 string_to_hw["L2B_axial" ] = "F6H1";
392 string_to_hw["L3T_axial" ] = "F0H2";
393 string_to_hw["L3B_stereo" ] = "F6H2";
394 string_to_hw["L3T_stereo" ] = "F0H3";
395 string_to_hw["L3B_axial" ] = "F6H3";
396 string_to_hw["L4T_axial_ele" ] = "F5H0";
397 string_to_hw["L4B_stereo_ele"] = "F1H0";
398 string_to_hw["L4T_axial_pos" ] = "F5H1";
399 string_to_hw["L4B_stereo_pos"] = "F1H1";
400 string_to_hw["L4T_stereo_ele"] = "F5H2";
401 string_to_hw["L4B_axial_ele" ] = "F1H2";
402 string_to_hw["L4T_stereo_pos"] = "F5H3";
403 string_to_hw["L4B_axial_pos" ] = "F1H3";
404 string_to_hw["L5T_axial_ele" ] = "F8H0";
405 string_to_hw["L5B_stereo_ele"] = "F4H0";
406 string_to_hw["L5T_axial_pos" ] = "F8H1";
407 string_to_hw["L5B_stereo_pos"] = "F4H1";
408 string_to_hw["L5T_stereo_ele"] = "F8H2";
409 string_to_hw["L5B_axial_ele" ] = "F4H2";
410 string_to_hw["L5T_stereo_pos"] = "F8H3";
411 string_to_hw["L5B_axial_pos" ] = "F4H3";
412 string_to_hw["L6T_axial_ele" ] = "F7H0";
413 string_to_hw["L6B_stereo_ele"] = "F3H0";
414 string_to_hw["L6T_axial_pos" ] = "F7H1";
415 string_to_hw["L6B_stereo_pos"] = "F3H1";
416 string_to_hw["L6T_stereo_ele"] = "F7H2";
417 string_to_hw["L6B_axial_ele" ] = "F3H2";
418 string_to_hw["L6T_stereo_pos"] = "F7H3";
419 string_to_hw["L6B_axial_pos" ] = "F3H3";
420
421
422 //sw to string
423
424 sw_to_string["ly1_m0" ] = "L1T_axial" ;
425 sw_to_string["ly1_m1" ] = "L1B_stereo" ;
426 sw_to_string["ly2_m0" ] = "L1T_stereo" ;
427 sw_to_string["ly2_m1" ] = "L1B_axial" ;
428 sw_to_string["ly3_m0" ] = "L2T_axial" ;
429 sw_to_string["ly3_m1" ] = "L2B_stereo" ;
430 sw_to_string["ly4_m0" ] = "L2T_stereo" ;
431 sw_to_string["ly4_m1" ] = "L2B_axial" ;
432 sw_to_string["ly5_m0" ] = "L3T_axial" ;
433 sw_to_string["ly5_m1" ] = "L3B_stereo" ;
434 sw_to_string["ly6_m0" ] = "L3T_stereo" ;
435 sw_to_string["ly6_m1" ] = "L3B_axial" ;
436 sw_to_string["ly7_m0" ] = "L4T_axial_ele" ;
437 sw_to_string["ly7_m1" ] = "L4B_stereo_ele";
438 sw_to_string["ly7_m2" ] = "L4T_axial_pos" ;
439 sw_to_string["ly7_m3" ] = "L4B_stereo_pos";
440 sw_to_string["ly8_m0" ] = "L4T_stereo_ele";
441 sw_to_string["ly8_m1" ] = "L4B_axial_ele" ;
442 sw_to_string["ly8_m2" ] = "L4T_stereo_pos";
443 sw_to_string["ly8_m3" ] = "L4B_axial_pos" ;
444 sw_to_string["ly9_m0" ] = "L5T_axial_ele" ;
445 sw_to_string["ly9_m1" ] = "L5B_stereo_ele";
446 sw_to_string["ly9_m2" ] = "L5T_axial_pos" ;
447 sw_to_string["ly9_m3" ] = "L5B_stereo_pos";
448 sw_to_string["ly10_m0"] = "L5T_stereo_ele";
449 sw_to_string["ly10_m1"] = "L5B_axial_ele" ;
450 sw_to_string["ly10_m2"] = "L5T_stereo_pos";
451 sw_to_string["ly10_m3"] = "L5B_axial_pos" ;
452 sw_to_string["ly11_m0"] = "L6T_axial_ele" ;
453 sw_to_string["ly11_m1"] = "L6B_stereo_ele";
454 sw_to_string["ly11_m2"] = "L6T_axial_pos" ;
455 sw_to_string["ly11_m3"] = "L6B_stereo_pos";
456 sw_to_string["ly12_m0"] = "L6T_stereo_ele";
457 sw_to_string["ly12_m1"] = "L6B_axial_ele" ;
458 sw_to_string["ly12_m2"] = "L6T_stereo_pos";
459 sw_to_string["ly12_m3"] = "L6B_axial_pos" ;
460
461
462 string_to_sw["L1T_axial" ] = "ly1_m0" ;
463 string_to_sw["L1B_stereo" ] = "ly1_m1" ;
464 string_to_sw["L1T_stereo" ] = "ly2_m0" ;
465 string_to_sw["L1B_axial" ] = "ly2_m1" ;
466 string_to_sw["L2T_axial" ] = "ly3_m0" ;
467 string_to_sw["L2B_stereo" ] = "ly3_m1" ;
468 string_to_sw["L2T_stereo" ] = "ly4_m0" ;
469 string_to_sw["L2B_axial" ] = "ly4_m1" ;
470 string_to_sw["L3T_axial" ] = "ly5_m0" ;
471 string_to_sw["L3B_stereo" ] = "ly5_m1" ;
472 string_to_sw["L3T_stereo" ] = "ly6_m0" ;
473 string_to_sw["L3B_axial" ] = "ly6_m1" ;
474 string_to_sw["L4T_axial_ele" ] = "ly7_m0" ;
475 string_to_sw["L4B_stereo_ele"] = "ly7_m1" ;
476 string_to_sw["L4T_axial_pos" ] = "ly7_m2" ;
477 string_to_sw["L4B_stereo_pos"] = "ly7_m3" ;
478 string_to_sw["L4T_stereo_ele"] = "ly8_m0" ;
479 string_to_sw["L4B_axial_ele" ] = "ly8_m1" ;
480 string_to_sw["L4T_stereo_pos"] = "ly8_m2" ;
481 string_to_sw["L4B_axial_pos" ] = "ly8_m3" ;
482 string_to_sw["L5T_axial_ele" ] = "ly9_m0" ;
483 string_to_sw["L5B_stereo_ele"] = "ly9_m1" ;
484 string_to_sw["L5T_axial_pos" ] = "ly9_m2" ;
485 string_to_sw["L5B_stereo_pos"] = "ly9_m3" ;
486 string_to_sw["L5T_stereo_ele"] = "ly10_m0";
487 string_to_sw["L5B_axial_ele" ] = "ly10_m1";
488 string_to_sw["L5T_stereo_pos"] = "ly10_m2";
489 string_to_sw["L5B_axial_pos" ] = "ly10_m3";
490 string_to_sw["L6T_axial_ele" ] = "ly11_m0";
491 string_to_sw["L6B_stereo_ele"] = "ly11_m1";
492 string_to_sw["L6T_axial_pos" ] = "ly11_m2";
493 string_to_sw["L6B_stereo_pos"] = "ly11_m3";
494 string_to_sw["L6T_stereo_ele"] = "ly12_m0";
495 string_to_sw["L6B_axial_ele" ] = "ly12_m1";
496 string_to_sw["L6T_stereo_pos"] = "ly12_m2";
497 string_to_sw["L6B_axial_pos" ] = "ly12_m3";
498 }
499 else
500 {
501 std::cout << "ERROR: Module Mapper cannot be setup for this year " << year_ << std::endl;
502 }
503}
504
505std::map<std::string, std::map<int,int>> ModuleMapper::buildChannelSvtIDMap(){
506
507 std::map<std::string, std::map<int,int>> channel_map;
508 std::map<int,int> local_to_svtid_map;
509 int channel_index = 0;
510 for(int feb=0; feb < 10; feb++){
511 std::string str_feb = "F" + std::to_string(feb);
512 int max_channel = 640;
513 if(year_ != 2016)
514 if (feb == 0 || feb == 1) max_channel = 512;
515 for(int hybrid=0; hybrid < 4; hybrid++){
516 if(year_ == 2016){
517 if( (feb == 2 || feb == 9) and hybrid > 1)
518 continue;
519 }
520 std::string str_hybrid = "H" + std::to_string(hybrid);
521 for(int channel=0; channel < max_channel; channel++){
522 int svtid = channel_index + channel;
523 local_to_svtid_map[channel] = svtid;
524 }
525 channel_map[str_feb + str_hybrid] = local_to_svtid_map ;
526 channel_index += max_channel;
527 }
528 }
529 return channel_map;
530}
531
532int ModuleMapper::getSvtIDFromHWChannel(int channel, std::string hwTag, std::map<std::string,std::map<int,int>> svtid_map) {
533 std::map<int,int> channelMap = svtid_map[hwTag];
534 std::map<int,int>::iterator it = channelMap.find(channel);
535 if(it != channelMap.end()){
536 return it->second;
537 }
538 else
539 return 99999; //Indicates channel not found in map. Feb 0-1 have max_channel = 512. If function receives channel > 512 in these cases, returns 99999 for svt_id
540 }
541
542
543
544
547
548std::vector<std::string> ModuleMapper::getHybridStrings() {
549 std::vector<std::string> hybrids;
550 for(int i=0; i < 7; ++i){
551 if( i < 4) {
552 hybrids.push_back(Form("L%iT_axial",i));
553 hybrids.push_back(Form("L%iT_stereo",i));
554 hybrids.push_back(Form("L%iB_stereo",i));
555 hybrids.push_back(Form("L%iB_axial",i));
556 }
557 else {
558 hybrids.push_back(Form("L%iT_axial_ele",i));
559 hybrids.push_back(Form("L%iT_stereo_ele",i));
560 hybrids.push_back(Form("L%iT_axial_pos",i));
561 hybrids.push_back(Form("L%iT_stereo_pos",i));
562 hybrids.push_back(Form("L%iB_axial_ele",i));
563 hybrids.push_back(Form("L%iB_stereo_ele",i));
564 hybrids.push_back(Form("L%iB_axial_pos",i));
565 hybrids.push_back(Form("L%iB_stereo_pos",i));
566 }
567 }
568
569 return hybrids;
570}
571
573
574 //Database file format is <FebN> <HybN>
575 //For FebN < 2
576 //<apv 0: 128->255> <apv 1: 0->127> <apv 2: 256->383> <apv 3: 384->512>
577 //For FebN >= 2
578 //<apv 0: 512->639> <apv 1: 384->511> <apv 2: 256->383> <apv 3: 128->255> <pv 4: 0->127>
579
580 //std::pair<int std::make_pair
581
582 //For each row, grab first three value, Feb, Hybrid, and APV
583 //Read the row, and store values into vector at appropriate index.
584 std::map<std::string,std::map<std::string,std::vector<int>>> map;
585 for(int feb = 0; feb < 10; feb++){
586 int napvs = 5;
587 if(feb < 2)
588 napvs = 4;
589 for(int hybrid = 0; hybrid < 5; hybrid++){
590 std::string FH_code = std::to_string(feb) + std::to_string(hybrid);
591 std::map<std::string, std::vector<int>> apv_channels;
592 for(int apv = 0; apv < napvs; apv++){
593 //std::pair<int,std::vector<int>> apv_channels;
594 std::vector<int> channels;
595 int a;
596 int b;
597 if(year_ != 2016){
598 if(feb < 2){
599 if(apv == 0){
600 a=128;
601 b=255;
602 }
603 if(apv == 1){
604 a=0;
605 b=127;
606 }
607 if(apv == 2){
608 a=256;
609 b=383;
610 }
611 if(apv == 3){
612 a=384;
613 b=511;
614 }
615 }
616 else {
617 if(apv == 0){
618 a=512;
619 b=639;
620 }
621 if(apv == 1){
622 a=384;
623 b=511;
624 }
625 if(apv == 2){
626 a=256;
627 b=383;
628 }
629 if(apv == 3){
630 a=128;
631 b=255;
632 }
633 if(apv == 4){
634 a=0;
635 b=127;
636 }
637 }
638 }
639 else {
640 if(apv == 0){
641 a=512;
642 b=639;
643 }
644 if(apv == 1){
645 a=384;
646 b=511;
647 }
648 if(apv == 2){
649 a=256;
650 b=383;
651 }
652 if(apv == 3){
653 a=128;
654 b=255;
655 }
656 if(apv == 4){
657 a=0;
658 b=127;
659 }
660 }
661
662 for (int i = a; i < b+1; i++){
663 channels.push_back(i);
664 }
665 //apv_channels.first = apv;
666 //apv_channels.second = channels;
667 apv_channels[std::to_string(apv)] = channels;
668 }
669 map[FH_code] = apv_channels;
670 }
671 }
672
673 apvChannelMap_ = map;;
674}
675
676void ModuleMapper::ReadThresholdsFile(std::string filename){
677
678 std::map<std::string, std::vector<int>> readThresholds;
679 std::ifstream threshfile;
680 threshfile.open(filename);
681 if(!threshfile){
682 std::cout << "ERROR! THRESHOLD FILE " << filename << " DOES NOT EXIST!" << std::endl;
683 std::cout << "FITTING WILL FAIL. PLEASE SPECIFY THE DATABASE THRESHOLD FILE ASSOCIATED WITH RUN" << std::endl;
684 }
685
686 std::string row;
687 while (getline (threshfile,row)) {
688 std::vector<int> thresholds;
689 std::string feb = row.substr(0,1);
690 std::string hyb = row.substr(2,1);
691 std::string apv = row.substr(4,1);
692 std::string data_string = row.substr(5);
693 std::stringstream lineStream(data_string);
694
695 unsigned int value;
696 while(lineStream >> std::hex >> value)
697 {
698 thresholds.push_back(value);
699 }
700
701 readThresholds[feb+hyb+apv] = thresholds;
702 }
703
704 threshfile.close();
705 thresholdsIn_ = readThresholds;
706}
707
708std::pair<std::string,int> ModuleMapper::findApvChannel(std::string feb, std::string hybrid, int channel) {
709
710 //std::cout << "Looking for Feb " << feb << " Hybrid " << hybrid << "channel " << channel << std::endl;
711 std::pair<std::string, int> apv_chindex;
712 std::map<std::string, std::map<std::string,std::vector<int>>>::iterator it;
713 for (it = apvChannelMap_.begin(); it != apvChannelMap_.end(); it++){
714 std::string FH = it->first;
715 std::string ifeb = (FH.substr(0,1));
716 std::string ihyb = (FH.substr(1,1));
717 if(ifeb == feb && ihyb == hybrid)
718 bool found = true;
719 else
720 continue;
721 //std::cout << "Found Feb: " << ifeb << " Hybrid: " << ihyb << std::endl;
722 std::map<std::string, std::vector<int>> apv_map = it->second;
723 std::map<std::string, std::vector<int>>::iterator itb;
724 bool foundapv = false;
725 for (itb = apv_map.begin(); itb != apv_map.end(); itb++){
726 std::string apv = itb->first;
727 std::vector<int> channels = itb->second;
728 //std::cout << "apv " << apv << std::endl;
729 //std::cout << "channels size : " << channels.size() << std::endl;
730 for(int i = 0; i < channels.size(); i++){
731 if(channels[i] == channel){
732 apv_chindex.first = apv;
733 apv_chindex.second = i;
734 //std::cout << "For channel " << channel << ": APV " << apv << " index " << i << std::endl;
735 foundapv = true;
736 break;
737 }
738 }
739 if(foundapv)
740 break;
741 }
742 if(foundapv)
743 break;
744 }
745
746 return apv_chindex;
747}
748
749int ModuleMapper::getThresholdValue(std::string feb, std::string hybrid, int channel){
750 std::pair<std::string,int> apv_channel = findApvChannel(feb, hybrid, channel);
751 std::string apv = apv_channel.first;
752 int apvchannel = apv_channel.second;
753 int threshold = thresholdsIn_[feb+hybrid+apv].at(apvchannel);
754 return threshold;
755}
756
757
758
759
760
std::map< std::string, std::vector< int > > thresholdsIn_
description
std::pair< std::string, int > findApvChannel(std::string feb, std::string hybrid, int channel)
get APV channel number given feb, hybrid, and channel number
std::map< std::string, std::string > sw_to_hw
description
std::map< std::string, std::string > string_to_hw
description
std::map< std::string, std::string > hw_to_sw
description
std::map< std::string, std::string > hw_to_string
description
int year_
description
void ReadThresholdsFile(std::string filename)
Used to read svt channel DAQ threshold values from daq thresholds file.
int getSvtIDFromHWChannel(int channel, std::string hwTag, std::map< std::string, std::map< int, int > > svtid_map)
Return global svt id for channel by providing local channel number and F<n>H<m> of channel.
int getThresholdValue(std::string feb, std::string hybrid, int channel)
Get channel DAQ threshold.
std::map< std::string, std::string > string_to_sw
description
ModuleMapper(const int year=2019)
std::map< std::string, std::map< int, int > > buildChannelSvtIDMap()
Build global svt id map for all FebHybrid combinations.
std::vector< std::string > getHybridStrings()
Get the Hybrid Strings.
std::map< std::string, std::string > sw_to_string
description
std::map< std::string, std::map< std::string, std::vector< int > > > apvChannelMap_
description
void buildApvChannelMap()
Used to generate apv channel map and read in thresholds from database.