SurfYZTest.cc
Go to the documentation of this file.
1 #define BOOST_TEST_MODULE ( SurfYZTest )
2 #include "boost/test/unit_test.hpp"
3 
4 //
5 // File: SurfYZTest.cxx
6 //
7 // Purpose: Unit test for SurfYZPlane.
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.),
23  surf3(1., 1., 1., 0.),
24  surf4(2., 3., 4., 1.) {}
25  trkf::SurfYZPlane surf1; // Default constructed.
26  trkf::SurfYZPlane surf2; // Same as surf1.
27  trkf::SurfYZPlane surf3; // Different origin, parallel to surf1 and surf2.
28  trkf::SurfYZPlane surf4; // Not parallel.
29 };
30 
31 BOOST_FIXTURE_TEST_SUITE(SurfYZTest, SurfYZTestFixture)
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() == "SurfYZPlane";
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);
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);
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);
119  BOOST_TEST(mom[0] == 4./std::sqrt(14.), tol);
120  BOOST_TEST(mom[1] == (6.*std::cos(1.) - 2.*std::sin(1.))/std::sqrt(14.), tol);
121  BOOST_TEST(mom[2] == (6.*std::sin(1.) + 2.*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() == "SurfYZPlane";
129  } );
130 }
131 
132 BOOST_AUTO_TEST_SUITE_END()
trkf::SurfYZPlane surf2
Definition: SurfYZTest.cc:26
Planar surface parallel to x-axis.
auto const tolerance
virtual bool isParallel(const Surface &surf) const
Test whether two surfaces are parallel, within tolerance.
virtual double distanceTo(const Surface &surf) const
Find perpendicular forward distance to a parallel surface.
trkf::SurfYZPlane surf4
Definition: SurfYZTest.cc:28
const double e
virtual void getMomentum(const TrackVector &vec, double mom[3], TrackDirection dir=UNKNOWN) const
Get momentum vector of track.
trkf::SurfYZPlane surf3
Definition: SurfYZTest.cc:27
KVector< 5 >::type TrackVector
Track state vector, dimension 5.
Kalman filter linear algebra typedefs.
virtual void toLocal(const double xyz[3], double uvw[3]) const
Transform global to local coordinates.
Definition: SurfYZPlane.cxx:68
virtual void toGlobal(const double uvw[3], double xyz[3]) const
Transform local to global coordinates.
Definition: SurfYZPlane.cxx:90
virtual bool isEqual(const Surface &surf) const
Test two surfaces for equality, within tolerance.
BOOST_AUTO_TEST_CASE(Equality)
Definition: SurfYZTest.cc:35
trkf::SurfYZPlane surf1
Definition: SurfYZTest.cc:25
virtual void getPosition(const TrackVector &vec, double xyz[3]) const
Get position of track.
auto const tol
Definition: SurfYZTest.cc:16
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33