All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SurfXYZTest.cc
Go to the documentation of this file.
1 #define BOOST_TEST_MODULE ( SurfXYZTest )
2 #include "boost/test/unit_test.hpp"
3 
4 //
5 // File: SurfXYZTest.cxx
6 //
7 // Purpose: Unit test for SurfXYZPlane.
8 //
9 
10 #include <cmath>
13 #include "cetlib_except/exception.h"
14 
16 auto const tol = 1.e-6% tolerance();
17 
19 {
21  surf1(),
22  surf2(0., 0., 0., 0., 0.),
23  surf3(1., 1., 1., 0., 0.),
24  surf4(1., 2., 2., 1., 0.1) {}
25  trkf::SurfXYZPlane surf1; // Default constructed.
26  trkf::SurfXYZPlane surf2; // Same as surf1.
27  trkf::SurfXYZPlane surf3; // Different origin, parallel to surf1 and surf2.
28  trkf::SurfXYZPlane surf4; // Not parallel.
29 };
30 
32 
33 // Test equality comparisons.
34 
36  BOOST_TEST(surf1.isEqual(surf2));
37  BOOST_TEST(!surf1.isEqual(surf3));
38  BOOST_TEST(!surf1.isEqual(surf4));
39  BOOST_TEST(!surf2.isEqual(surf3));
40  BOOST_TEST(!surf2.isEqual(surf4));
41  BOOST_TEST(!surf3.isEqual(surf4));
42 }
43 
44 // Test parallel comparisions.
45 
47  BOOST_TEST(surf1.isParallel(surf2));
48  BOOST_TEST(surf1.isParallel(surf3));
49  BOOST_TEST(!surf1.isParallel(surf4));
50  BOOST_TEST(surf2.isParallel(surf3));
51  BOOST_TEST(!surf2.isParallel(surf4));
52  BOOST_TEST(!surf3.isParallel(surf4));
53 }
54 
55 // Test coordinate transformations.
56 
57 BOOST_AUTO_TEST_CASE(Transformation) {
58  double xyz1[3] = {1., 2., 3.};
59  double xyz2[3];
60  double uvw[3];
61  surf4.toLocal(xyz1, uvw);
62  surf4.toGlobal(uvw, xyz2);
63  for(int i=0; i<3; ++i)
64  BOOST_TEST(xyz1[i] == xyz2[i], tol);
65 }
66 
67 // Test separation.
68 
69 BOOST_AUTO_TEST_CASE(Separation) {
70  BOOST_TEST(surf1.distanceTo(surf2) == 0.);
71  BOOST_TEST(surf1.distanceTo(surf3) == 1.);
72  BOOST_TEST(surf3.distanceTo(surf1) == -1.);
73 }
74 
75 // Should throw exception (not parallel).
76 
77 BOOST_AUTO_TEST_CASE(NotParallel) {
78  BOOST_CHECK_EXCEPTION( surf1.distanceTo(surf4), cet::exception, \
79  [](cet::exception const & e) \
80  { \
81  return e.category() == "SurfXYZPlane"; \
82  } );
83 }
84 
85 // Test track parameters.
86 
87 BOOST_AUTO_TEST_CASE(TrackParameters) {
88  trkf::TrackVector v(5);
89  v(0) = 0.1; // u.
90  v(1) = 0.2; // v.
91  v(2) = 2.; // du/dw.
92  v(3) = 3.; // dv/dw.
93  v(4) = 0.5; // p = 2 GeV.
94 
95  // For this vector, the direction cosines are.
96  // du/ds = 2./sqrt(14.);
97  // dv/ds = 3./sqrt(14.);
98  // dw/ds = 1./sqrt(14.);
99 
100  double xyz[3];
101  double mom[3];
102  surf1.getPosition(v, xyz);
103  BOOST_TEST(xyz[0] == 0.1, tol);
104  BOOST_TEST(xyz[1] == 0.2, tol);
105  BOOST_TEST(xyz[2] == 0.0, tol);
106  surf3.getPosition(v, xyz);
107  BOOST_TEST(xyz[0] == 1.1, tol);
108  BOOST_TEST(xyz[1] == 1.2, tol);
109  BOOST_TEST(xyz[2] == 1.0, tol);
110  surf1.getMomentum(v, mom, trkf::Surface::FORWARD);
111  BOOST_TEST(mom[0] == 4./std::sqrt(14.), tol);
112  BOOST_TEST(mom[1] == 6./std::sqrt(14.), tol);
113  BOOST_TEST(mom[2] == 2./std::sqrt(14.), tol);
114  surf1.getMomentum(v, mom, trkf::Surface::BACKWARD);
115  BOOST_TEST(mom[0] == -4./std::sqrt(14.), tol);
116  BOOST_TEST(mom[1] == -6./std::sqrt(14.), tol);
117  BOOST_TEST(mom[2] == -2./std::sqrt(14.), tol);
118  surf4.getMomentum(v, mom, trkf::Surface::FORWARD);
119  BOOST_TEST(mom[0] == (4.*std::cos(0.1) + 2.*std::sin(0.1))/std::sqrt(14.), tol);
120  BOOST_TEST(mom[1] == (4.*std::sin(0.1)*std::sin(1.) + 6.*std::cos(1.) - 2.*std::cos(0.1)*std::sin(1.))/std::sqrt(14.), tol);
121  BOOST_TEST(mom[2] == (-4.*std::sin(0.1)*std::cos(1.) + 6.*std::sin(1.) + 2.*std::cos(0.1)*std::cos(1.))/std::sqrt(14.), tol);
122 
123  // Should throw exception (no direction).
124 
125  BOOST_CHECK_EXCEPTION( surf1.getMomentum(v, mom), cet::exception, \
126  [](cet::exception const & e) \
127  { \
128  return e.category() == "SurfXYZPlane"; \
129  } );
130 }
131 
132 BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_CASE(AllTests)
General planar surface.
auto const tol
Definition: SurfXYZTest.cc:16
auto const tolerance
BOOST_FIXTURE_TEST_SUITE(GeometryIteratorsIcarus, IcarusGeometryIteratorTestFixture) BOOST_AUTO_TEST_CASE(AllTests)
trkf::SurfXYZPlane surf4
Definition: SurfXYZTest.cc:28
trkf::SurfXYZPlane surf2
Definition: SurfXYZTest.cc:26
KVector< 5 >::type TrackVector
Track state vector, dimension 5.
Kalman filter linear algebra typedefs.
do i e
trkf::SurfXYZPlane surf3
Definition: SurfXYZTest.cc:27
trkf::SurfXYZPlane surf1
Definition: SurfXYZTest.cc:25