Belle II Software  release-05-01-25
angle.cc
1 #include <framework/utilities/Angle.h>
2 
3 #include <gtest/gtest.h>
4 
5 using namespace std;
6 using namespace Belle2;
7 
8 namespace {
9  double constexpr epsilon = 1e-7;
10 
11  TEST(Angle, BaseAngle)
12  {
13  class TestBaseAngle : public BaseAngle {
14  public:
15  TestBaseAngle(double angle, double error) : BaseAngle(angle, error) {};
16  };
17 
18  const double angle = TMath::PiOver2();
19  const double error = TMath::PiOver4();
20 
21  TestBaseAngle myBaseAngle(angle, error);
22  EXPECT_DOUBLE_EQ(angle, myBaseAngle.getAngle());
23  EXPECT_DOUBLE_EQ(error, myBaseAngle.getError());
24  EXPECT_DOUBLE_EQ(angle * TMath::RadToDeg(), myBaseAngle.getAngleInDeg());
25  EXPECT_DOUBLE_EQ(error * TMath::RadToDeg(), myBaseAngle.getErrorInDeg());
26  EXPECT_DOUBLE_EQ(angle - error, myBaseAngle.getLowerIntervalBoundary());
27  EXPECT_DOUBLE_EQ(angle + error, myBaseAngle.getUpperIntervalBoundary());
28  }
29 
30  TEST(Angle, ThetaAngle)
31  {
32  const double angle = 0.4;
33  const double error = 0.2;
34 
35  ThetaAngle myThetaAngle(angle, error);
36  EXPECT_FALSE(myThetaAngle.contains(ThetaAngle(0., 0.)));
37  EXPECT_FALSE(myThetaAngle.contains(ThetaAngle(1.6, 0.)));
38  EXPECT_TRUE(myThetaAngle.contains(ThetaAngle(angle - error / 2, 0.)));
39  EXPECT_TRUE(myThetaAngle.contains(ThetaAngle(angle + error / 2, 0.)));
40 
41  EXPECT_FLOAT_EQ(TMath::PiOver2(), ThetaAngle(TMath::Pi() + TMath::PiOver2(), 0.).getAngle());
42  }
43 
44  TEST(Angle, PhiAngleIntervalNormalCase)
45  {
46  double angle = 0.4;
47  double error = 0.2;
48  PhiAngle myPhiAngle(angle, error);
49  EXPECT_FALSE(myPhiAngle.contains(PhiAngle(0., 0.)));
50  EXPECT_FALSE(myPhiAngle.contains(PhiAngle(TMath::TwoPi(), 0.)));
51  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(angle - error / 2, 0.)));
52  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(angle + error / 2, 0.)));
53 
54  EXPECT_FLOAT_EQ(TMath::Pi(), PhiAngle(TMath::TwoPi() + TMath::Pi(), 0.).getAngle());
55  }
56 
57  TEST(Angle, PhiAngleIntervalBreaksZero)
58  {
59  const double angle = 0.1;
60  const double error = 0.3;
61  PhiAngle myPhiAngle(angle, error);
62  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(0 + epsilon, 0.)));
63  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(0 - epsilon, 0.)));
64  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(TMath::TwoPi() + epsilon, 0.)));
65  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(TMath::TwoPi() - epsilon, 0.)));
66  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(angle - error / 2, 0.)));
67  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(angle + error / 2, 0.)));
68  }
69 
70  TEST(Angle, PhiAngleIntervalBreaksTwoPi)
71  {
72  const double angle = TMath::TwoPi() - 0.1;
73  const double error = 0.3;
74  PhiAngle myPhiAngle(angle, error);
75  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(0 + epsilon, 0.)));
76  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(0 - epsilon, 0.)));
77  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(TMath::TwoPi() + epsilon, 0.)));
78  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(TMath::TwoPi() - epsilon, 0.)));
79  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(angle - error / 2, 0.)));
80  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(angle + error / 2, 0.)));
81  }
82 
83  TEST(Angle, PhiAngleNormalCase)
84  {
85  const double angle = TMath::Pi();
86  const double error = 0.0;
87  PhiAngle myPhiAngle(angle, error);
88  EXPECT_FALSE(myPhiAngle.contains(PhiAngle(0 + epsilon, 0.2)));
89  EXPECT_FALSE(myPhiAngle.contains(PhiAngle(0 - epsilon, 0.2)));
90  EXPECT_FALSE(myPhiAngle.contains(PhiAngle(TMath::TwoPi() + epsilon, 0.2)));
91  EXPECT_FALSE(myPhiAngle.contains(PhiAngle(TMath::TwoPi() - epsilon, 0.2)));
92  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(angle - error / 2, 0.2)));
93  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(angle + error / 2, 0.2)));
94  }
95 
96  TEST(Angle, PhiAngleBreaksZero)
97  {
98  const double angle = 0.1;
99  const double error = 0.0;
100  PhiAngle myPhiAngle(angle, error);
101  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(0 + epsilon, 0.2)));
102  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(0 - epsilon, 0.2)));
103  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(TMath::TwoPi() + epsilon, 0.2)));
104  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(TMath::TwoPi() - epsilon, 0.2)));
105  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(angle - error / 2, 0.2)));
106  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(angle + error / 2, 0.2)));
107  }
108 
109  TEST(Angle, PhiAngleBreaksTwoPi)
110  {
111  const double angle = TMath::TwoPi() - 0.1;
112  const double error = 0.0;
113  PhiAngle myPhiAngle(angle, error);
114  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(0 + epsilon, 0.2)));
115  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(0 - epsilon, 0.2)));
116  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(TMath::TwoPi() + epsilon, 0.2)));
117  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(TMath::TwoPi() - epsilon, 0.2)));
118  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(angle - error / 2, 0.2)));
119  EXPECT_TRUE(myPhiAngle.contains(PhiAngle(angle + error / 2, 0.2)));
120  }
121 
122  TEST(Angle, PhiAngleAndErrorBreakTwoPi)
123  {
124  const double angle = -0.0275 + TMath::TwoPi();
125  const double error = 3 * 0.0104;
126  PhiAngle myPhiAngle(angle, error);
127  EXPECT_FALSE(myPhiAngle.containsIn(PhiAngle(2.6, 0), 1));
128  }
129 
130 } // namespace
prepareAsicCrosstalkSimDB.e
e
aux.
Definition: prepareAsicCrosstalkSimDB.py:53
Belle2::ThetaAngle
Definition: Angle.h:115
Belle2::PhiAngle
Definition: Angle.h:158
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TEST
TEST(TestgetDetectorRegion, TestgetDetectorRegion)
Test Constructors.
Definition: utilityFunctions.cc:18
Belle2::BaseAngle
Class to compare if two angles are compatible withing a given error range.
Definition: Angle.h:34