Project
Loading...
Searching...
No Matches
testElectronicMapper.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
13#define BOOST_TEST_MODULE Test MCHRaw CRUEncoder
14#define BOOST_TEST_MAIN
15#define BOOST_TEST_DYN_LINK
16
17#include <boost/test/unit_test.hpp>
18
20
21#include "dslist.h"
22#include <array>
23#include <boost/mpl/list.hpp>
24#include <fmt/format.h>
25#include <gsl/span>
26#include <set>
27
28using namespace o2::mch::raw;
29
30typedef boost::mpl::list<o2::mch::raw::ElectronicMapperDummy,
33
34typedef boost::mpl::list<o2::mch::raw::ElectronicMapperGenerated>
36
37// // Used to generate dslist.cxx
38// BOOST_AUTO_TEST_CASE(dumpseg)
39// {
40// std::map<int, std::vector<int>> dsids;
41//
42// o2::mch::mapping::forEachDetectionElement([&dsids](int deId) {
43// auto seg = o2::mch::mapping::segmentation(deId);
44// seg.forEachDualSampa([&dsids, deId](int dsid) {
45// dsids[deId].emplace_back(dsid);
46// });
47// });
48//
49// for (auto p : dsids) {
50// std::cout << "dsids[" << p.first << "]={";
51// for (auto i = 0; i < p.second.size(); i++) {
52// std::cout << p.second[i];
53// if (i != p.second.size() - 1) {
54// std::cout << ",";
55// }
56// }
57// std::cout << "};\n";
58// }
59// std::cout << "\n";
60// }
61
63
64template <size_t N>
65std::set<int> nofDualSampas(std::array<int, N> deIds)
66{
67 std::set<int> ds;
68
69 for (auto deId : deIds) {
70 for (auto dsid : dslist(deId)) {
71 ds.insert(encode(DsDetId{deId, dsid}));
72 }
73 }
74 return ds;
75}
76
77template <typename T>
78std::set<int> nofDualSampasFromMapper(gsl::span<int> deids)
79{
80 std::set<int> ds;
81
82 auto d2e = o2::mch::raw::createDet2ElecMapper<T>();
83
84 for (auto deid : deids) {
85 size_t nref = dslist(deid).size();
86 std::set<int> dsForOneDE;
87 for (auto dsid : dslist(deid)) {
88 DsDetId id{static_cast<uint16_t>(deid), static_cast<uint16_t>(dsid)};
89 auto dsel = d2e(id);
90 if (dsel.has_value()) {
91 auto code = o2::mch::raw::encode(id); // encode to be sure we're counting unique pairs (deid,dsid)
92 ds.insert(code);
93 dsForOneDE.insert(code);
94 } else {
95 std::cout << "did not find matching dsel for id=" << id << "\n";
96 }
97 };
98 if (dsForOneDE.size() != nref) {
99 std::cout << fmt::format("ERROR : mapper has {:4d} DS while DE {:4d} should have {:4d}\n", dsForOneDE.size(), deid, nref);
100 }
101 }
102 return ds;
103}
104
105// BOOST_TEST_DECORATOR(*boost::unit_test::disabled())
106BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH1R, T, testTypes)
107{
108 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH1R);
110 BOOST_CHECK_EQUAL(check.size(), expected.size());
111 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
112}
113
114BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH1L, T, testTypes)
115{
116 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH1L);
118 BOOST_CHECK_EQUAL(check.size(), expected.size());
119 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
120}
121
122BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH2R, T, testTypes)
123{
124 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH2R);
126 BOOST_CHECK_EQUAL(check.size(), expected.size());
127 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
128}
129
130BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH2L, T, testTypes)
131{
132 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH2L);
134 BOOST_CHECK_EQUAL(check.size(), expected.size());
135 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
136}
137
138BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH3R, T, testTypes)
139{
140 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH3R);
142 BOOST_CHECK_EQUAL(check.size(), expected.size());
143 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
144}
145
146BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH3L, T, testTypes)
147{
148 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH3L);
150 BOOST_CHECK_EQUAL(check.size(), expected.size());
151 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
152}
153
154BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH4R, T, testTypes)
155{
156 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH4R);
158 BOOST_CHECK_EQUAL(check.size(), expected.size());
159 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
160}
161
162BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH4L, T, testTypes)
163{
164 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH4L);
166 BOOST_CHECK_EQUAL(check.size(), expected.size());
167 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
168}
169
170BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH5R, T, testTypes)
171{
172 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH5R);
174 BOOST_CHECK_EQUAL(check.size(), expected.size());
175 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
176}
177
178BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH5L, T, testTypes)
179{
180 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH5L);
182 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
183}
184
185BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH6R, T, testTypes)
186{
187 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH6R);
189 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
190}
191
192BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH6L, T, testTypes)
193{
194 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH6L);
196 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
197}
198
199BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH7R, T, testTypes)
200{
201 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH7R);
203 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
204}
205
206BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH7L, T, testTypes)
207{
208 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH7L);
210 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
211}
212
213BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH8R, T, testTypes)
214{
215 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH8R);
217 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
218}
219
220BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH8L, T, testTypes)
221{
222 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH8L);
224 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
225}
226
227BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH9R, T, testTypes)
228{
229 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH9R);
231 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
232}
233
234BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH9L, T, testTypes)
235{
236 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH9L);
238 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
239}
240
241BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH10R, T, testTypes)
242{
243 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH10R);
245 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
246}
247
248BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH10L, T, testTypes)
249{
250 auto check = nofDualSampasFromMapper<T>(o2::mch::raw::deIdsOfCH10L);
252 BOOST_CHECK(std::equal(expected.begin(), expected.end(), check.begin()));
253}
254
255// this check depends on the installation status at Pt2, i.e.
256// not yet fullly installed chambers have an expected number of solarIds
257// set to zero
258BOOST_AUTO_TEST_CASE_TEMPLATE(CheckNumberOfSolarsPerDetectionElement, T, realTypes)
259{
260 // Chamber 1
261 BOOST_CHECK_EQUAL(getSolarUIDs<T>(100).size(), 12);
262 BOOST_CHECK_EQUAL(getSolarUIDs<T>(102).size(), 12);
263 BOOST_CHECK_EQUAL(getSolarUIDs<T>(101).size(), 12);
264 BOOST_CHECK_EQUAL(getSolarUIDs<T>(103).size(), 12);
265
266 // Chamber 2
267 BOOST_CHECK_EQUAL(getSolarUIDs<T>(200).size(), 12);
268 BOOST_CHECK_EQUAL(getSolarUIDs<T>(202).size(), 12);
269 BOOST_CHECK_EQUAL(getSolarUIDs<T>(201).size(), 12);
270 BOOST_CHECK_EQUAL(getSolarUIDs<T>(203).size(), 12);
271
272 // Chamber 3
273 BOOST_CHECK_EQUAL(getSolarUIDs<T>(300).size(), 12);
274 BOOST_CHECK_EQUAL(getSolarUIDs<T>(302).size(), 12);
275 BOOST_CHECK_EQUAL(getSolarUIDs<T>(301).size(), 12);
276 BOOST_CHECK_EQUAL(getSolarUIDs<T>(303).size(), 12);
277
278 // Chamber 4
279 BOOST_CHECK_EQUAL(getSolarUIDs<T>(400).size(), 12);
280 BOOST_CHECK_EQUAL(getSolarUIDs<T>(402).size(), 12);
281 BOOST_CHECK_EQUAL(getSolarUIDs<T>(401).size(), 12);
282 BOOST_CHECK_EQUAL(getSolarUIDs<T>(403).size(), 12);
283
284 // Chamber 5
285 // 5R = 5I
286 BOOST_CHECK_EQUAL(getSolarUIDs<T>(500).size(), 4);
287 BOOST_CHECK_EQUAL(getSolarUIDs<T>(501).size(), 4);
288 BOOST_CHECK_EQUAL(getSolarUIDs<T>(502).size(), 4);
289 BOOST_CHECK_EQUAL(getSolarUIDs<T>(503).size(), 2);
290 BOOST_CHECK_EQUAL(getSolarUIDs<T>(504).size(), 1);
291 BOOST_CHECK_EQUAL(getSolarUIDs<T>(514).size(), 1);
292 BOOST_CHECK_EQUAL(getSolarUIDs<T>(515).size(), 2);
293 BOOST_CHECK_EQUAL(getSolarUIDs<T>(516).size(), 4);
294 BOOST_CHECK_EQUAL(getSolarUIDs<T>(517).size(), 4);
295 // 5L = 5O
296 BOOST_CHECK_EQUAL(getSolarUIDs<T>(505).size(), 1);
297 BOOST_CHECK_EQUAL(getSolarUIDs<T>(506).size(), 2);
298 BOOST_CHECK_EQUAL(getSolarUIDs<T>(507).size(), 4);
299 BOOST_CHECK_EQUAL(getSolarUIDs<T>(508).size(), 4);
300 BOOST_CHECK_EQUAL(getSolarUIDs<T>(509).size(), 4);
301 BOOST_CHECK_EQUAL(getSolarUIDs<T>(510).size(), 4);
302 BOOST_CHECK_EQUAL(getSolarUIDs<T>(511).size(), 4);
303 BOOST_CHECK_EQUAL(getSolarUIDs<T>(512).size(), 2);
304 BOOST_CHECK_EQUAL(getSolarUIDs<T>(513).size(), 1);
305
306 // Chamber 6
307 // 6R = 6I
308 BOOST_CHECK_EQUAL(getSolarUIDs<T>(600).size(), 4);
309 BOOST_CHECK_EQUAL(getSolarUIDs<T>(601).size(), 4);
310 BOOST_CHECK_EQUAL(getSolarUIDs<T>(602).size(), 4);
311 BOOST_CHECK_EQUAL(getSolarUIDs<T>(603).size(), 2);
312 BOOST_CHECK_EQUAL(getSolarUIDs<T>(604).size(), 1);
313 BOOST_CHECK_EQUAL(getSolarUIDs<T>(614).size(), 1);
314 BOOST_CHECK_EQUAL(getSolarUIDs<T>(615).size(), 2);
315 BOOST_CHECK_EQUAL(getSolarUIDs<T>(616).size(), 4);
316 BOOST_CHECK_EQUAL(getSolarUIDs<T>(617).size(), 4);
317 // 6L = 6O
318 BOOST_CHECK_EQUAL(getSolarUIDs<T>(605).size(), 1);
319 BOOST_CHECK_EQUAL(getSolarUIDs<T>(606).size(), 2);
320 BOOST_CHECK_EQUAL(getSolarUIDs<T>(607).size(), 4);
321 BOOST_CHECK_EQUAL(getSolarUIDs<T>(608).size(), 4);
322 BOOST_CHECK_EQUAL(getSolarUIDs<T>(609).size(), 4);
323 BOOST_CHECK_EQUAL(getSolarUIDs<T>(610).size(), 4);
324 BOOST_CHECK_EQUAL(getSolarUIDs<T>(611).size(), 4);
325 BOOST_CHECK_EQUAL(getSolarUIDs<T>(612).size(), 2);
326 BOOST_CHECK_EQUAL(getSolarUIDs<T>(613).size(), 1);
327
328 // Chamber 7
329 // 7R = 7I
330 BOOST_CHECK_EQUAL(getSolarUIDs<T>(700).size(), 4);
331 BOOST_CHECK_EQUAL(getSolarUIDs<T>(701).size(), 4);
332 BOOST_CHECK_EQUAL(getSolarUIDs<T>(702).size(), 4);
333 BOOST_CHECK_EQUAL(getSolarUIDs<T>(703).size(), 4);
334 BOOST_CHECK_EQUAL(getSolarUIDs<T>(704).size(), 2);
335 BOOST_CHECK_EQUAL(getSolarUIDs<T>(705).size(), 2);
336 BOOST_CHECK_EQUAL(getSolarUIDs<T>(706).size(), 1);
337 BOOST_CHECK_EQUAL(getSolarUIDs<T>(720).size(), 1);
338 BOOST_CHECK_EQUAL(getSolarUIDs<T>(721).size(), 2);
339 BOOST_CHECK_EQUAL(getSolarUIDs<T>(722).size(), 2);
340 BOOST_CHECK_EQUAL(getSolarUIDs<T>(723).size(), 4);
341 BOOST_CHECK_EQUAL(getSolarUIDs<T>(724).size(), 4);
342 BOOST_CHECK_EQUAL(getSolarUIDs<T>(725).size(), 4);
343 // 7L = 7O
344 BOOST_CHECK_EQUAL(getSolarUIDs<T>(707).size(), 1);
345 BOOST_CHECK_EQUAL(getSolarUIDs<T>(708).size(), 2);
346 BOOST_CHECK_EQUAL(getSolarUIDs<T>(709).size(), 2);
347 BOOST_CHECK_EQUAL(getSolarUIDs<T>(710).size(), 4);
348 BOOST_CHECK_EQUAL(getSolarUIDs<T>(711).size(), 4);
349 BOOST_CHECK_EQUAL(getSolarUIDs<T>(712).size(), 4);
350 BOOST_CHECK_EQUAL(getSolarUIDs<T>(713).size(), 4);
351 BOOST_CHECK_EQUAL(getSolarUIDs<T>(714).size(), 4);
352 BOOST_CHECK_EQUAL(getSolarUIDs<T>(715).size(), 4);
353 BOOST_CHECK_EQUAL(getSolarUIDs<T>(716).size(), 4);
354 BOOST_CHECK_EQUAL(getSolarUIDs<T>(717).size(), 2);
355 BOOST_CHECK_EQUAL(getSolarUIDs<T>(718).size(), 2);
356 BOOST_CHECK_EQUAL(getSolarUIDs<T>(719).size(), 1);
357
358 // Chamber 8
359 // 8R = 8I
360 BOOST_CHECK_EQUAL(getSolarUIDs<T>(800).size(), 4);
361 BOOST_CHECK_EQUAL(getSolarUIDs<T>(801).size(), 4);
362 BOOST_CHECK_EQUAL(getSolarUIDs<T>(802).size(), 4);
363 BOOST_CHECK_EQUAL(getSolarUIDs<T>(803).size(), 4);
364 BOOST_CHECK_EQUAL(getSolarUIDs<T>(804).size(), 2);
365 BOOST_CHECK_EQUAL(getSolarUIDs<T>(805).size(), 2);
366 BOOST_CHECK_EQUAL(getSolarUIDs<T>(806).size(), 1);
367 BOOST_CHECK_EQUAL(getSolarUIDs<T>(820).size(), 1);
368 BOOST_CHECK_EQUAL(getSolarUIDs<T>(821).size(), 2);
369 BOOST_CHECK_EQUAL(getSolarUIDs<T>(822).size(), 2);
370 BOOST_CHECK_EQUAL(getSolarUIDs<T>(823).size(), 4);
371 BOOST_CHECK_EQUAL(getSolarUIDs<T>(824).size(), 4);
372 BOOST_CHECK_EQUAL(getSolarUIDs<T>(825).size(), 4);
373 // 8L = 8O
374 BOOST_CHECK_EQUAL(getSolarUIDs<T>(807).size(), 1);
375 BOOST_CHECK_EQUAL(getSolarUIDs<T>(808).size(), 2);
376 BOOST_CHECK_EQUAL(getSolarUIDs<T>(809).size(), 2);
377 BOOST_CHECK_EQUAL(getSolarUIDs<T>(810).size(), 4);
378 BOOST_CHECK_EQUAL(getSolarUIDs<T>(811).size(), 4);
379 BOOST_CHECK_EQUAL(getSolarUIDs<T>(812).size(), 4);
380 BOOST_CHECK_EQUAL(getSolarUIDs<T>(813).size(), 4);
381 BOOST_CHECK_EQUAL(getSolarUIDs<T>(814).size(), 4);
382 BOOST_CHECK_EQUAL(getSolarUIDs<T>(815).size(), 4);
383 BOOST_CHECK_EQUAL(getSolarUIDs<T>(816).size(), 4);
384 BOOST_CHECK_EQUAL(getSolarUIDs<T>(817).size(), 2);
385 BOOST_CHECK_EQUAL(getSolarUIDs<T>(818).size(), 2);
386 BOOST_CHECK_EQUAL(getSolarUIDs<T>(819).size(), 1);
387
388 // Chamber 9
389 // 9R = 9I
390 BOOST_CHECK_EQUAL(getSolarUIDs<T>(900).size(), 4);
391 BOOST_CHECK_EQUAL(getSolarUIDs<T>(901).size(), 4);
392 BOOST_CHECK_EQUAL(getSolarUIDs<T>(902).size(), 4);
393 BOOST_CHECK_EQUAL(getSolarUIDs<T>(903).size(), 4);
394 BOOST_CHECK_EQUAL(getSolarUIDs<T>(904).size(), 4);
395 BOOST_CHECK_EQUAL(getSolarUIDs<T>(905).size(), 2);
396 BOOST_CHECK_EQUAL(getSolarUIDs<T>(906).size(), 2);
397 BOOST_CHECK_EQUAL(getSolarUIDs<T>(920).size(), 2);
398 BOOST_CHECK_EQUAL(getSolarUIDs<T>(921).size(), 2);
399 BOOST_CHECK_EQUAL(getSolarUIDs<T>(922).size(), 4);
400 BOOST_CHECK_EQUAL(getSolarUIDs<T>(923).size(), 4);
401 BOOST_CHECK_EQUAL(getSolarUIDs<T>(924).size(), 4);
402 BOOST_CHECK_EQUAL(getSolarUIDs<T>(925).size(), 4);
403 // 9L = 9O
404 BOOST_CHECK_EQUAL(getSolarUIDs<T>(907).size(), 2);
405 BOOST_CHECK_EQUAL(getSolarUIDs<T>(908).size(), 2);
406 BOOST_CHECK_EQUAL(getSolarUIDs<T>(909).size(), 4);
407 BOOST_CHECK_EQUAL(getSolarUIDs<T>(910).size(), 4);
408 BOOST_CHECK_EQUAL(getSolarUIDs<T>(911).size(), 4);
409 BOOST_CHECK_EQUAL(getSolarUIDs<T>(912).size(), 4);
410 BOOST_CHECK_EQUAL(getSolarUIDs<T>(913).size(), 4);
411 BOOST_CHECK_EQUAL(getSolarUIDs<T>(914).size(), 4);
412 BOOST_CHECK_EQUAL(getSolarUIDs<T>(915).size(), 4);
413 BOOST_CHECK_EQUAL(getSolarUIDs<T>(916).size(), 4);
414 BOOST_CHECK_EQUAL(getSolarUIDs<T>(917).size(), 4);
415 BOOST_CHECK_EQUAL(getSolarUIDs<T>(918).size(), 2);
416 BOOST_CHECK_EQUAL(getSolarUIDs<T>(919).size(), 2);
417
418 // Chamber 10
419 // 10R = 10I
420 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1000).size(), 4);
421 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1001).size(), 4);
422 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1002).size(), 4);
423 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1003).size(), 4);
424 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1004).size(), 4);
425 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1005).size(), 2);
426 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1006).size(), 2);
427 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1020).size(), 2);
428 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1021).size(), 2);
429 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1022).size(), 4);
430 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1023).size(), 4);
431 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1024).size(), 4);
432 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1025).size(), 4);
433 // 10L = 10O
434 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1007).size(), 2);
435 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1008).size(), 2);
436 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1009).size(), 4);
437 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1010).size(), 4);
438 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1011).size(), 4);
439 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1012).size(), 4);
440 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1013).size(), 4);
441 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1014).size(), 4);
442 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1015).size(), 4);
443 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1016).size(), 4);
444 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1017).size(), 4);
445 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1018).size(), 2);
446 BOOST_CHECK_EQUAL(getSolarUIDs<T>(1019).size(), 2);
447}
448
449template <typename T>
451
452template <>
454{
455 return 421;
456}
457template <>
462
463template <typename T>
465
466template <>
468{
469 return 16820;
470}
471
472template <>
474{
475 return 16820;
476}
477
478BOOST_AUTO_TEST_CASE_TEMPLATE(AllSolarsMustGetAFeeLinkAndTheReverse, T, testTypes)
479{
480 auto errors = solar2FeeLinkConsistencyCheck<T>();
481 BOOST_CHECK_EQUAL(errors.size(), 0);
482 if (!errors.empty()) {
483 for (auto msg : errors) {
484 std::cout << "ERROR: " << msg << "\n";
485 }
486 }
487}
488
490{
491 std::set<uint16_t> solarIds = getSolarUIDs<T>();
492 BOOST_CHECK_EQUAL(solarIds.size(), expectedNumberOfSolars<T>()); // must be updated when adding more chambers
493}
494
495BOOST_AUTO_TEST_CASE_TEMPLATE(CheckNumberOfDsElecId, T, testTypes)
496{
497 std::set<DsElecId> dsElecIds = getAllDs<T>();
498 BOOST_CHECK_EQUAL(dsElecIds.size(), expectedNumberOfDs<T>()); // must be updated when adding more chambers
499}
500
501// Spot check (on a few selected ones, e.g. the ones used in some unit tests)
502// solars actually have an associated FeeLinkId.
503BOOST_AUTO_TEST_CASE_TEMPLATE(CheckAFewSolarIdThatMustHaveAFeeLinkd, T, testTypes)
504{
505 auto solarIds = {361, 448, 728};
506 for (auto solarId : solarIds) {
507 BOOST_TEST_INFO(fmt::format("solarId={}", solarId));
508 auto s2f = o2::mch::raw::createSolar2FeeLinkMapper<T>();
509 auto f = s2f(solarId);
510 BOOST_CHECK_EQUAL(f.has_value(), true);
511 }
512}
513
515{
518 auto s = f2s(id);
519 BOOST_CHECK_EQUAL(s.has_value(), true);
520}
521
522BOOST_AUTO_TEST_CASE(NumberOfSolarsPerFeeId)
523{
524 using elecmap = ElectronicMapperGenerated;
525
526 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(0).size(), 12);
527 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(1).size(), 12);
528 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(2).size(), 12);
529 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(3).size(), 12);
530 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(4).size(), 12);
531 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(5).size(), 12);
532 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(6).size(), 12);
533 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(7).size(), 12);
534 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(8).size(), 12);
535 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(9).size(), 12);
536
537 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(10).size(), 0);
538 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(11).size(), 0);
539 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(12).size(), 12);
540 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(13).size(), 12);
541 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(14).size(), 12);
542 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(15).size(), 12);
543 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(16).size(), 12);
544 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(17).size(), 12);
545 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(18).size(), 11);
546 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(19).size(), 9);
547
548 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(20).size(), 6);
549 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(21).size(), 11);
550 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(22).size(), 9);
551 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(23).size(), 6);
552 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(24).size(), 9);
553 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(25).size(), 6);
554 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(26).size(), 11);
555 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(27).size(), 9);
556 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(28).size(), 6);
557 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(29).size(), 11);
558
559 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(30).size(), 5);
560 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(31).size(), 12);
561 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(32).size(), 10);
562 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(33).size(), 11);
563 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(34).size(), 5);
564 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(35).size(), 12);
565 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(36).size(), 5);
566 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(37).size(), 12);
567 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(38).size(), 10);
568 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(39).size(), 11);
569
570 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(40).size(), 5);
571 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(41).size(), 12);
572 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(42).size(), 10);
573 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(43).size(), 11);
574 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(44).size(), 11);
575 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(45).size(), 11);
576 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(46).size(), 11);
577 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(47).size(), 11);
578 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(48).size(), 10);
579 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(49).size(), 11);
580
581 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(50).size(), 11);
582 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(51).size(), 11);
583 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(52).size(), 11);
584 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(53).size(), 11);
585 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(54).size(), 11);
586 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(55).size(), 11);
587 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(56).size(), 11);
588 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(57).size(), 11);
589 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(58).size(), 0);
590 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(59).size(), 0);
591
592 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(60).size(), 11);
593 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(61).size(), 11);
594 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(62).size(), 11);
595 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(63).size(), 11);
596
597 BOOST_CHECK_EQUAL(getSolarUIDsPerFeeId<elecmap>(64).size(), 0);
598}
599
600BOOST_AUTO_TEST_CASE(NumberOfDualSampasPerFeeId)
601{
602 using elecmap = ElectronicMapperGenerated;
603
604 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(0).size(), 451);
605 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(1).size(), 451);
606 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(2).size(), 451);
607 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(3).size(), 451);
608 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(4).size(), 451);
609 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(5).size(), 451);
610 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(6).size(), 451);
611 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(7).size(), 451);
612 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(8).size(), 442);
613 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(9).size(), 442);
614
615 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(10).size(), 0);
616 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(11).size(), 0);
617 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(12).size(), 442);
618 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(13).size(), 442);
619 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(14).size(), 442);
620 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(15).size(), 442);
621 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(16).size(), 442);
622 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(17).size(), 442);
623 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(18).size(), 263);
624 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(19).size(), 204);
625
626 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(20).size(), 137);
627 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(21).size(), 263);
628 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(22).size(), 204);
629 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(23).size(), 137);
630 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(24).size(), 225);
631 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(25).size(), 122);
632 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(26).size(), 267);
633 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(27).size(), 225);
634 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(28).size(), 122);
635 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(29).size(), 267);
636
637 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(30).size(), 97);
638 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(31).size(), 290);
639 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(32).size(), 250);
640 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(33).size(), 223);
641 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(34).size(), 97);
642 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(35).size(), 290);
643 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(36).size(), 97);
644 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(37).size(), 290);
645 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(38).size(), 250);
646 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(39).size(), 223);
647
648 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(40).size(), 97);
649 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(41).size(), 290);
650 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(42).size(), 250);
651 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(43).size(), 223);
652 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(44).size(), 181);
653 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(45).size(), 293);
654 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(46).size(), 298);
655 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(47).size(), 178);
656 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(48).size(), 250);
657 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(49).size(), 223);
658
659 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(50).size(), 181);
660 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(51).size(), 293);
661 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(52).size(), 298);
662 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(53).size(), 178);
663 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(54).size(), 181);
664 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(55).size(), 293);
665 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(56).size(), 298);
666 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(57).size(), 178);
667 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(58).size(), 0);
668 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(59).size(), 0);
669
670 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(60).size(), 181);
671 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(61).size(), 293);
672 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(62).size(), 298);
673 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(63).size(), 178);
674
675 BOOST_CHECK_EQUAL(getDualSampasPerFeeId<elecmap>(64).size(), 0);
676
677 int n{0};
678 for (uint16_t feeId = 0; feeId <= 64; feeId++) {
679 n += getDualSampasPerFeeId<elecmap>(feeId).size();
680 }
681
682 BOOST_CHECK_EQUAL(n, 16820);
683}
684
685BOOST_AUTO_TEST_CASE(CircularSolarId2IndexCheck)
686{
688 for (const auto& solarId : solarIds) {
689 BOOST_TEST_INFO_SCOPE(fmt::format("SolarId {}", solarId));
691 BOOST_CHECK_EQUAL(index.has_value(), true);
693 BOOST_CHECK_EQUAL(id.has_value(), true);
694 BOOST_CHECK_EQUAL(id.value(), solarId);
695 }
696}
A DsDetId is just a pair (detection element id, dual sampa id)
Definition DsDetId.h:22
std::function< std::set< int >(int deId)> createDualSampaMapper()
Definition dslist.cxx:15
GLdouble n
Definition glcorearb.h:1982
GLsizeiptr size
Definition glcorearb.h:659
GLuint index
Definition glcorearb.h:781
GLdouble f
Definition glcorearb.h:310
GLsizei const GLfloat * value
Definition glcorearb.h:819
GLuint id
Definition glcorearb.h:650
void check(const std::vector< std::string > &arguments, const std::vector< ConfigParamSpec > &workflowOptions, const std::vector< DeviceSpec > &deviceSpecs, CheckMatrix &matrix)
std::array< int, 2 > deIdsOfCH1L
Definition Mapper.cxx:18
std::array< int, 9 > deIdsOfCH5L
Definition Mapper.cxx:26
std::array< int, 2 > deIdsOfCH2L
Definition Mapper.cxx:20
std::array< int, 9 > deIdsOfCH6R
Definition Mapper.cxx:27
std::array< int, 2 > deIdsOfCH3R
Definition Mapper.cxx:21
std::array< int, 2 > deIdsOfCH1R
Definition Mapper.cxx:17
std::array< int, 9 > deIdsOfCH5R
Definition Mapper.cxx:25
std::function< std::optional< uint16_t >(FeeLinkId)> createFeeLink2SolarMapper< ElectronicMapperGenerated >()
std::array< int, 13 > deIdsOfCH7R
Definition Mapper.cxx:29
std::array< int, 13 > deIdsOfCH8R
Definition Mapper.cxx:31
std::array< int, 9 > deIdsOfCH6L
Definition Mapper.cxx:28
std::array< int, 2 > deIdsOfCH3L
Definition Mapper.cxx:22
std::optional< uint16_t > solarIndex2Id< ElectronicMapperGenerated >(uint16_t solarIndex)
std::array< int, 2 > deIdsOfCH2R
Definition Mapper.cxx:19
std::array< int, 13 > deIdsOfCH8L
Definition Mapper.cxx:32
std::optional< uint16_t > solarId2Index< ElectronicMapperGenerated >(uint16_t solarId)
std::array< int, 13 > deIdsOfCH10L
Definition Mapper.cxx:36
std::array< int, 13 > deIdsOfCH9L
Definition Mapper.cxx:34
std::array< int, 13 > deIdsOfCH10R
Definition Mapper.cxx:35
std::array< int, 2 > deIdsOfCH4L
Definition Mapper.cxx:24
std::set< uint16_t > getSolarUIDs< ElectronicMapperGenerated >()
std::array< int, 13 > deIdsOfCH9R
Definition Mapper.cxx:33
std::array< int, 2 > deIdsOfCH4R
Definition Mapper.cxx:23
std::array< int, 13 > deIdsOfCH7L
Definition Mapper.cxx:30
uint32_t encode(const DsDetId &id)
Create an integer code for the given id.
Definition DsDetId.cxx:28
BOOST_AUTO_TEST_CASE(FlatHisto)
std::map< std::string, ID > expected
boost::mpl::list< o2::dcs::DataPointIdentifier, o2::dcs::DataPointValue, o2::dcs::DataPointCompositeObject > testTypes
int expectedNumberOfSolars()
int expectedNumberOfDs< ElectronicMapperGenerated >()
int expectedNumberOfDs()
std::set< int > nofDualSampas(std::array< int, N > deIds)
int expectedNumberOfDs< ElectronicMapperDummy >()
std::set< int > nofDualSampasFromMapper(gsl::span< int > deids)
auto dslist
int expectedNumberOfSolars< ElectronicMapperGenerated >()
BOOST_AUTO_TEST_CASE_TEMPLATE(MustContainAllSampaCH1R, T, testTypes)
boost::mpl::list< o2::mch::raw::ElectronicMapperDummy, o2::mch::raw::ElectronicMapperGenerated > testTypes
int expectedNumberOfSolars< ElectronicMapperDummy >()
boost::mpl::list< o2::mch::raw::ElectronicMapperGenerated > realTypes
o2::mch::DsIndex ds
BOOST_CHECK(tree)
BOOST_CHECK_EQUAL(triggersD.size(), triggers.size())
uint64_t const void const *restrict const msg
Definition x9.h:153