Belle II Software  release-05-01-25
SensorInfo.cc
1 #include <vxd/geometry/SensorInfoBase.h>
2 #include <vxd/geometry/SensorPlane.h>
3 #include <framework/utilities/TestHelpers.h>
4 #include <gtest/gtest.h>
5 #include <iostream>
6 #include <string>
7 #include <cmath>
8 
9 using namespace std;
10 
11 namespace Belle2 {
16  namespace VXD {
17 
22  TEST(SensorInfoBase, Rectangular)
23  {
24  SensorInfoBase rect(SensorInfoBase::PXD, VxdID(1, 2, 3), 1.0, 2.0, 3.0, 2, 4);
25  EXPECT_EQ(rect.getType(), SensorInfoBase::PXD);
26  EXPECT_EQ(rect.getID(), VxdID(1, 2, 3));
27  EXPECT_EQ(rect.getWidth(), 1.0);
28  EXPECT_EQ(rect.getLength(), 2.0);
29  EXPECT_EQ(rect.getThickness(), 3.0);
30  EXPECT_EQ(rect.getWidth(), rect.getUSize());
31  EXPECT_EQ(rect.getLength(), rect.getVSize());
32  EXPECT_EQ(rect.getThickness(), rect.getWSize());
33  EXPECT_EQ(rect.getUPitch(), 0.5);
34  EXPECT_EQ(rect.getVPitch(), 0.5);
35  EXPECT_EQ(rect.getUCellPosition(0), -0.25);
36  EXPECT_EQ(rect.getUCellPosition(1), 0.25);
37  EXPECT_EQ(rect.getVCellPosition(0), -0.75);
38  EXPECT_EQ(rect.getVCellPosition(1), -0.25);
39  EXPECT_EQ(rect.getVCellPosition(2), 0.25);
40  EXPECT_EQ(rect.getVCellPosition(3), 0.75);
41  for (double u = -1.0 + 0.05; u <= 1.0; u += 0.1) {
42  EXPECT_EQ(rect.getUCellID(u), (int)((u / 1.0 + 0.5) * 2));
43  if (u < -0.5) {EXPECT_EQ(rect.getUCellID(u, 0, true), 0); }
44  if (u > 0.5) {EXPECT_EQ(rect.getUCellID(u, 0, true), rect.getUCells() - 1);}
45  for (double v = -2.0 + 0.11; v <= 2.0; v += 0.2) {
46  EXPECT_EQ(rect.getVCellID(v), (int)((v / 2.0 + 0.5) * 4));
47  if (v < -1.0) {EXPECT_EQ(rect.getVCellID(v, true), 0);}
48  if (v > 1.0) {EXPECT_EQ(rect.getVCellID(v, true), rect.getVCells() - 1);}
49  EXPECT_EQ(rect.inside(u, v), fabs(u) <= 0.5 && fabs(v) <= 1.0);
50  }
51  }
52  EXPECT_EQ(rect.getUCells(), 2);
53  EXPECT_EQ(rect.getVCells(), 4);
54  }
55 
60  TEST(SensorInfoBase, Trapezoidal)
61  {
62  SensorInfoBase rect(SensorInfoBase::PXD, VxdID(3, 2, 1), 2.0, 2.0, 1.0, 2, 4, 1.0);
63  EXPECT_EQ(rect.getType(), SensorInfoBase::PXD);
64  EXPECT_EQ(rect.getID(), VxdID(3, 2, 1));
65  for (double v = -1.0; v < 1.0; v += 0.1) {
66  EXPECT_DOUBLE_EQ(rect.getWidth(v), 2.0 - (v / 2.0 + 0.5) * 1.0);
67  EXPECT_EQ(rect.getWidth(), rect.getUSize());
68  }
69  EXPECT_EQ(rect.getLength(), 2.0);
70  EXPECT_EQ(rect.getThickness(), 1.0);
71  EXPECT_EQ(rect.getLength(), rect.getVSize());
72  EXPECT_EQ(rect.getThickness(), rect.getWSize());
73  EXPECT_EQ(rect.getUPitch(-1.0), 1.0);
74  EXPECT_EQ(rect.getUPitch(0.0), 0.75);
75  EXPECT_EQ(rect.getUPitch(1.0), 0.5);
76  EXPECT_EQ(rect.getVPitch(), 0.5);
77  for (double u = -2.0 + 0.1; u <= 2.0; u += 0.2) {
78  for (double v = -2.0 + 0.11; v <= 2.0; v += 0.2) {
79  EXPECT_EQ(rect.getUCellID(u, v), (int)((u / rect.getWidth(v) + 0.5) * 2));
80  EXPECT_EQ(rect.getVCellID(v), (int)((v / 2.0 + 0.5) * 4));
81  EXPECT_EQ(rect.inside(u, v), fabs(u) <= rect.getWidth(v) / 2.0 && fabs(v) <= 1.0);
82  }
83  }
84  EXPECT_EQ(rect.getUCells(), 2);
85  EXPECT_EQ(rect.getVCells(), 4);
86  }
87 
92  TEST(SensorInfoBase, Segmented)
93  {
94  SensorInfoBase rect(SensorInfoBase::PXD, VxdID(3, 2, 1), 2.0, 2.0, 1.0, 2, 2, 1.0, 1.0, 4);
95  for (double v = -1.0; v < 1.0; v += 0.1) {
96  EXPECT_DOUBLE_EQ(rect.getWidth(v), 2.0 - (v / 2.0 + 0.5) * 1.0);
97  EXPECT_EQ(rect.getWidth(), rect.getUSize());
98  EXPECT_EQ(rect.getVPitch(v), v >= 0 ? 0.25 : 0.5);
99  }
100  EXPECT_EQ(rect.getLength(), 2.0);
101  EXPECT_EQ(rect.getThickness(), 1.0);
102  EXPECT_EQ(rect.getLength(), rect.getVSize());
103  EXPECT_EQ(rect.getThickness(), rect.getWSize());
104  EXPECT_EQ(rect.getUPitch(-1.0), 1.0);
105  EXPECT_EQ(rect.getUPitch(0.0), 0.75);
106  EXPECT_EQ(rect.getUPitch(1.0), 0.5);
107  EXPECT_EQ(rect.getVCellPosition(0), -0.75);
108  EXPECT_EQ(rect.getVCellPosition(1), -0.25);
109  EXPECT_EQ(rect.getVCellPosition(2), 0.125);
110  EXPECT_EQ(rect.getVCellPosition(3), 0.375);
111  EXPECT_EQ(rect.getVCellPosition(4), 0.625);
112  EXPECT_EQ(rect.getVCellPosition(5), 0.875);
113  for (double u = -2.0 + 0.1; u <= 2.0; u += 0.2) {
114  for (double v = -2.0 + 0.11; v <= 2.0; v += 0.2) {
115  EXPECT_EQ(rect.getUCellID(u, v), (int)((u / rect.getWidth(v) + 0.5) * 2));
116  if (v <= 0) {
117  EXPECT_EQ(rect.getVCellID(v), (int)((v / 2.0 + 0.5) * 4));
118  } else {
119  EXPECT_EQ(rect.getVCellID(v), (int)((v / 2.0 + 0.5) * 8) - 2);
120  }
121  EXPECT_EQ(rect.inside(u, v), fabs(u) <= rect.getWidth(v) / 2.0 && fabs(v) <= 1.0);
122  double iu(u), iv(v);
123  rect.forceInside(iu, iv);
124  EXPECT_TRUE(rect.inside(iu, iv));
125  }
126  }
127  EXPECT_EQ(rect.getUCells(), 2);
128  EXPECT_EQ(rect.getVCells(), 6);
129  }
130 
136  TEST(SensorPlane, DISABLED_NotFound)
137  {
138  SensorPlane plane(VxdID(1, 1, 1));
139  EXPECT_B2FATAL(plane.isInActive(0, 0));
140  }
141 
142  } // vxd namespace
144 } // Belle2 namespace
Belle2::VXD::SensorInfoBase::getUCells
int getUCells() const
Return number of pixel/strips in u direction.
Definition: SensorInfoBase.h:223
Belle2::VxdID
Class to uniquely identify a any structure of the PXD and SVD.
Definition: VxdID.h:43
Belle2::VXD::SensorInfoBase::getUCellID
int getUCellID(double u, double v=0, bool clamp=false) const
Return the corresponding pixel/strip ID of a given u coordinate.
Definition: SensorInfoBase.h:203
Belle2::VXD::SensorInfoBase
Base class to provide Sensor Information for PXD and SVD.
Definition: SensorInfoBase.h:40
Belle2::VXD::SensorInfoBase::getWidth
double getWidth(double v=0) const
Return the width of the sensor.
Definition: SensorInfoBase.h:91
Belle2::VXD::SensorInfoBase::getID
VxdID getID() const
Return the ID of the Sensor.
Definition: SensorInfoBase.h:85
Belle2::VXD::SensorInfoBase::getVPitch
double getVPitch(double v=0) const
Return the pitch of the sensor.
Definition: SensorInfoBase.h:150
Belle2::VXD::SensorInfoBase::forceInside
void forceInside(double &u, double &v) const
Force a position to be inside the active area.
Definition: SensorInfoBase.h:259
Belle2::VXD::SensorInfoBase::getLength
double getLength() const
Return the length of the sensor.
Definition: SensorInfoBase.h:116
Belle2::VXD::SensorInfoBase::getVCellID
int getVCellID(double v, bool clamp=false) const
Return the corresponding pixel/strip ID of a given v coordinate.
Definition: SensorInfoBase.h:213
Belle2::VXD::SensorInfoBase::getVCellPosition
double getVCellPosition(int vID) const
Return the position of a specific strip/pixel in v direction.
Definition: SensorInfoBase.h:191
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::VXD::SensorInfoBase::getThickness
double getThickness() const
Return the thickness of the sensor.
Definition: SensorInfoBase.h:121
Belle2::VXD::SensorInfoBase::getVCells
int getVCells() const
Return number of pixel/strips in v direction.
Definition: SensorInfoBase.h:225
Belle2::VXD::SensorInfoBase::getUSize
double getUSize(double v=0) const
Return the width of the sensor.
Definition: SensorInfoBase.h:127
Belle2::TEST
TEST(TestgetDetectorRegion, TestgetDetectorRegion)
Test Constructors.
Definition: utilityFunctions.cc:18
Belle2::VXD::SensorInfoBase::getWSize
double getWSize() const
Return the thickness of the sensor.
Definition: SensorInfoBase.h:137
Belle2::VXD::SensorInfoBase::getUPitch
double getUPitch(double v=0) const
Return the pitch of the sensor.
Definition: SensorInfoBase.h:143
Belle2::VXD::SensorInfoBase::getType
SensorType getType() const
Return the Type of the Sensor.
Definition: SensorInfoBase.h:83
Belle2::VXD::SensorInfoBase::getUCellPosition
double getUCellPosition(int uID, int vID=-1) const
Return the position of a specific strip/pixel in u direction.
Definition: SensorInfoBase.h:179
Belle2::VXD::SensorInfoBase::getVSize
double getVSize() const
Return the length of the sensor.
Definition: SensorInfoBase.h:132
Belle2::VXD::SensorInfoBase::inside
bool inside(double u, double v, double uTolerance=DBL_EPSILON, double vTolerance=DBL_EPSILON) const
Check wether a given point is inside the active area.
Definition: SensorInfoBase.h:238
Belle2::VXD::SensorPlane
A Finite plane of one VXD Sensor.
Definition: SensorPlane.h:44