Project
Loading...
Searching...
No Matches
testTrackingTopology.cxx
Go to the documentation of this file.
1// Copyright 2019-2026 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
12#include <boost/test/tools/old/interface.hpp>
13#define BOOST_TEST_MODULE ITS TrackingTopology
14#define BOOST_TEST_MAIN
15#define BOOST_TEST_DYN_LINK
16
17#include <boost/test/unit_test.hpp>
19
21BOOST_AUTO_TEST_CASE(layermask_holes_and_length)
22{
24
25 const LayerMask layer3Hole{0x77}; // layers 0,1,2,4,5,6
26 BOOST_CHECK_EQUAL(layer3Hole.count(), 6);
27 BOOST_CHECK_EQUAL(layer3Hole.length(), 7);
28 BOOST_CHECK_EQUAL(layer3Hole.holeMask().value(), 0x08);
29 BOOST_CHECK(layer3Hole.isAllowed(1, 0x08));
30 BOOST_CHECK(!layer3Hole.isAllowed(0, 0x08));
31
32 const LayerMask missingLeadingLayer0{0x7e}; // layers 1..6
33 BOOST_CHECK_EQUAL(missingLeadingLayer0.count(), 6);
34 BOOST_CHECK_EQUAL(missingLeadingLayer0.length(), 6);
35 BOOST_CHECK_EQUAL(missingLeadingLayer0.holeMask().value(), 0x00);
36
37 const LayerMask missingTrailingLayer6{0x3f}; // layers 0..5
38 BOOST_CHECK_EQUAL(missingTrailingLayer6.count(), 6);
39 BOOST_CHECK_EQUAL(missingTrailingLayer6.length(), 6);
40 BOOST_CHECK_EQUAL(missingTrailingLayer6.holeMask().value(), 0x00);
41}
42
43BOOST_AUTO_TEST_CASE(layermask_topological_length_counts_internal_holes)
44{
46
47 BOOST_CHECK_GE(LayerMask{0x7f}.length(), 7); // 7 clusters
48 BOOST_CHECK_GE(LayerMask{0x77}.length(), 7); // 6 clusters + layer-3 hole
49 BOOST_CHECK_LT(LayerMask{0x7e}.length(), 7); // missing leading layer
50 BOOST_CHECK_LT(LayerMask{0x3f}.length(), 7); // missing trailing layer
51}
52
53BOOST_AUTO_TEST_CASE(trackingtopology_basic)
54{
56 topo.init(4, 0, 0);
57 const auto view = topo.getView();
58 view.print();
59
60 BOOST_CHECK_EQUAL(view.nTransitions, 3);
61 for (int i{0}; i < 3; ++i) {
62 const auto& tra = view.getTransition(i);
63 BOOST_CHECK_EQUAL(tra.fromLayer, i);
64 BOOST_CHECK_EQUAL(tra.toLayer, i + 1);
65 }
66
67 BOOST_CHECK_EQUAL(view.nCells, 2);
68 for (int i{0}; i < 2; ++i) {
69 const auto& cell = view.getCell(i);
70 BOOST_CHECK_EQUAL(cell.firstTransition, i);
71 BOOST_CHECK_EQUAL(cell.secondTransition, i + 1);
72 }
73}
74
75BOOST_AUTO_TEST_CASE(trackingtopology_single_allowed_hole)
76{
78 topo.init(5, 1, 1 << 2);
79 const auto view = topo.getView();
80 view.print();
81
82 BOOST_CHECK_EQUAL(view.nTransitions, 5);
83 BOOST_CHECK_EQUAL(view.nCells, 5);
84
85 bool hasHoleTransition = false;
86 for (int i{0}; i < view.nTransitions; ++i) {
87 const auto& transition = view.getTransition(i);
88 hasHoleTransition |= transition.fromLayer == 1 && transition.toLayer == 3;
89 BOOST_CHECK(o2::its::LayerMask::skipped(transition.fromLayer, transition.toLayer).isAllowedHoleMask(1, 1 << 2));
90 }
91 BOOST_CHECK(hasHoleTransition);
92
93 bool hasHoleCell = false;
94 for (int i{0}; i < view.nCells; ++i) {
95 const auto& cell = view.getCell(i);
96 hasHoleCell |= cell.hitLayerMask.value() == 0x0b; // layers 0,1,3
97 BOOST_CHECK(cell.hitLayerMask.isAllowed(1, 1 << 2));
98 }
99 BOOST_CHECK(hasHoleCell);
100}
101
102BOOST_AUTO_TEST_CASE(trackingtopology_rejects_wrong_hole_layer)
103{
105 topo.init(5, 1, 1 << 2);
106 const auto view = topo.getView();
107 view.print();
108
109 for (int i{0}; i < view.nTransitions; ++i) {
110 const auto& transition = view.getTransition(i);
111 BOOST_CHECK(!(transition.fromLayer == 0 && transition.toLayer == 2));
112 BOOST_CHECK(!(transition.fromLayer == 2 && transition.toLayer == 4));
113 }
114
115 for (int i{0}; i < view.nCells; ++i) {
116 const auto& cell = view.getCell(i);
117 BOOST_CHECK(cell.hitLayerMask.holeMask().isSubsetOf(1 << 2));
118 }
119}
int32_t i
void init(int maxLayers, int maxHoles, Mask holeLayerMask)
BOOST_AUTO_TEST_CASE(layermask_holes_and_length)
-----— Tests -----—
BOOST_CHECK(tree)
BOOST_CHECK_EQUAL(triggersD.size(), triggers.size())