Belle II Software  release-05-01-25
CompactSecID.cc
1 /********************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2015 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Eugenio Paoloni *
7  * *
8  * This software is provided "as is" without any warranty. *
9  *******************************************************************************/
10 
11 #include <tracking/trackFindingVXD/filterMap/map/CompactSecIDs.h>
12 #include "tracking/dataobjects/FullSecID.h"
13 
14 #include <gtest/gtest.h>
15 #include <iostream>
16 #include <vector>
17 
18 using namespace std;
19 using namespace Belle2;
20 
21 
22 TEST(CompactSecIDs, basicCheck)
23 {
24  CompactSecIDs compactSecIds;
25 
26  vector< double > uSup = { .25, .5 , .75 };
27  vector< double > vSup = { .25, .5 , .75 , .8};
28 
29  vector< vector< FullSecID > > sectors;
30 
31  sectors.resize(uSup.size() + 1);
32 
33  int counter = 0;
34  for (unsigned int i = 0; i < uSup.size() + 1 ; i++) {
35  sectors[i].resize(vSup.size() + 1);
36  for (unsigned int j = 0; j < vSup.size() + 1; j++) {
37  sectors[i][j] = FullSecID(VxdID(6, 3 , 2), false, 12 + counter);
38  counter ++;
39  }
40  }
41  // succesfully insert
42  EXPECT_EQ(sectors.size()*sectors[0].size(),
43  compactSecIds.addSectors(uSup, vSup, sectors)) ;
44 
45  // succesfully retrieve
46  EXPECT_EQ(1, compactSecIds.getCompactID(sectors[0][0]));
47  EXPECT_EQ(2, compactSecIds.getCompactIDFastAndDangerous(sectors[0][1]));
48 
49  // unsuccesfully retrieve
50  EXPECT_EQ(0, compactSecIds.getCompactID(FullSecID(VxdID(6, 3 , 2), false, 1)));
51  EXPECT_EQ(0, compactSecIds.getCompactID(FullSecID(VxdID(7, 3 , 2), false, 1)));
52  EXPECT_EQ(0, compactSecIds.getCompactID(FullSecID(VxdID(5, 3 , 2), false, 1)));
53 
54  // cannot insert twice
55  EXPECT_EQ(0, compactSecIds.addSectors(uSup, vSup, sectors));
56 
57 
58 
59 }
60 
61 
62 TEST(CompactSecIDs, stressTest)
63 {
64 
65  CompactSecIDs compactSecIds;
66  vector<int> layers = { 1, 2, 3, 4, 5, 6};
67  vector<int> ladders = { 8, 12, 7, 10, 12, 16};
68  vector<int> sensors = { 2, 2, 2, 3, 4, 5};
69 
70 
71  vector< double > uSup = { .25, .5 , .75 };
72  vector< double > vSup = { .2, .4 , .6 , .8};
73 
74 
75  vector< vector< FullSecID > > sectors;
76 
77  sectors.resize(uSup.size() + 1);
78 
79 
80  for (auto layer : layers)
81  for (int ladder = 1 ; ladder <= ladders[layer - 1] ; ladder++)
82  for (int sensor = 1 ; sensor <= sensors[layer - 1] ; sensor++) {
83  int counter = 0;
84  for (unsigned int i = 0; i < uSup.size() + 1; i++) {
85  sectors[i].resize(vSup.size() + 1);
86  for (unsigned int j = 0; j < vSup.size() + 1 ; j++) {
87  sectors[i][j] = FullSecID(VxdID(layer, ladder , sensor),
88  sensor % 2 == 0 ? false : true , counter);
89  counter ++;
90  }
91  }
92 
93  // succesfully insert
94  EXPECT_EQ(sectors.size()*sectors[0].size() , compactSecIds.addSectors(uSup , vSup, sectors));
95  }
96 
97  for (auto layer : layers)
98  for (int ladder = 1 ; ladder <= ladders[layer - 1] ; ladder++)
99  for (int sensor = 1 ; sensor <= sensors[layer - 1] ; sensor++) {
100  int counter = 0;
101  for (unsigned int i = 0; i < uSup.size() + 1 ; i++) {
102  sectors[i].resize(vSup.size() + 1);
103  for (unsigned int j = 0; j < vSup.size() + 1; j++) {
104  sectors[i][j] = FullSecID(VxdID(layer, ladder , sensor),
105  sensor % 2 == 0 ? false : true, counter);
106  counter ++;
107  }
108  }
109 
110  // un succesfully insert because the sectors are already in compactSecIds
111  EXPECT_EQ(0 , compactSecIds.addSectors(uSup , vSup, sectors));
112  }
113 
114  int expected = 0;
115 
116  for (auto layer : layers)
117  for (int ladder = 1 ; ladder <= ladders[layer - 1] ; ladder++)
118  for (int sensor = 1 ; sensor <= sensors[layer - 1] ; sensor++)
119  for (unsigned int sector = 0 ; sector < (uSup.size() + 1) * (vSup.size() + 1) ; sector ++) {
120  FullSecID aSector(VxdID(layer, ladder , sensor),
121  sensor % 2 == 0 ? false : true
122  , sector);
123  // succesfully retrieve
124  EXPECT_EQ(++ expected, compactSecIds.getCompactID(aSector));
125 
126  }
127 
128  // list< pair< float, float> >;
129 
130  for (double u = 0. ; u < 1.; u += .25) {
131  for (double v = 0.; v < 1.; v += .2)
132  cout << compactSecIds.getFullSecID(VxdID(1, 1 , 1), u, v) << "\t";
133  cout << endl;
134  }
135 
136  // the compactsecids dont throw exceptions anymore
150  for (double u = .25 ; u < 1.25; u += .25) {
151  for (double v = 0.2; v < 1.2; v += .2) {
152  if (u < 0. or u > 1. or v < 0. or v >1.) {
153  EXPECT_ANY_THROW(compactSecIds.getFullSecID(VxdID(1, 1 , 1), u, v));
154  } else {
155  cout << compactSecIds.getFullSecID(VxdID(1, 1 , 1), u, v) << "\t";
156  }
157  }
158  cout << endl;
159  }
160 
161 }
Belle2::VxdID
Class to uniquely identify a any structure of the PXD and SVD.
Definition: VxdID.h:43
Belle2::CompactSecIDs::getCompactID
sectorID_t getCompactID(const FullSecID &fullID) const
Returns the compact id of the FullSecID.
Definition: CompactSecIDs.h:124
Belle2::FullSecID
Class to identify a sector inside of the VXD.
Definition: FullSecID.h:43
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::CompactSecIDs
This class provides a computer convenient numbering scheme for the sectors in the sector map and for ...
Definition: CompactSecIDs.h:38
Belle2::TEST
TEST(TestgetDetectorRegion, TestgetDetectorRegion)
Test Constructors.
Definition: utilityFunctions.cc:18
prepareAsicCrosstalkSimDB.u
u
merged u1 and u2
Definition: prepareAsicCrosstalkSimDB.py:46
Belle2::CompactSecIDs::addSectors
int addSectors(const std::vector< double > &normalizedUsup, const std::vector< double > &normalizedVsup, const std::vector< std::vector< FullSecID >> &fullSecIDs)
This method defines all the sectors on a given sensor.
Definition: CompactSecIDs.h:79
Belle2::CompactSecIDs::getCompactIDFastAndDangerous
sectorID_t getCompactIDFastAndDangerous(const FullSecID &fullID) const
Fast (and potentially dangerous) equivalent of getCompactID.
Definition: CompactSecIDs.h:278
Belle2::CompactSecIDs::getFullSecID
FullSecID getFullSecID(VxdID aSensorID, double normalizedU, double normalizedV) const
Returns a fullSecID for given sensor and pair of coordinates.
Definition: CompactSecIDs.h:161