8 #include <tracking/vxdCaTracking/ThreeHitFilters.h>
9 #include <gtest/gtest.h>
27 TVector3 innerHit(1., 1., 0.), centerHit(3., 3., 0.), outerHitEvil(6., 3., 0.), outerHitSimple(6., 4., 0.);
35 aFilter.
resetValues(outerHitEvil, centerHit, innerHit);
42 aFilter.
resetValues(outerHitSimple, centerHit, innerHit);
47 aFilter.
resetValues(outerHitEvil, centerHit, innerHit);
57 TVector3 innerHit(1., 1., 0.), centerHit(3., 3., 0.), outerHitEvil(6., 3., 0.), outerHitSimple(6., 4., 0.);
66 EXPECT_DOUBLE_EQ(26.5650511770779893515721937204532946712042, aFilter.
fullAngle3D());
74 TVector3 innerHit(1., 1., 0.), centerHit(3., 3., 0.), outerHit(6., 4., 1.);
75 TVector3 cent_inner = centerHit - innerHit, outer_center = outerHit - centerHit;
80 EXPECT_DOUBLE_EQ(31.4821541052938556040832384555411729852856, aFilter.
fullAngle3D());
81 EXPECT_DOUBLE_EQ(0.090909090909090909091, aFilter.
calcAngle3D());
83 EXPECT_DOUBLE_EQ(26.5650511770779893515721937204532946712042, aFilter.
fullAngleXY());
86 EXPECT_FLOAT_EQ(17.54840061379229806435203716652846677620, aFilter.
fullAngleRZ());
87 EXPECT_FLOAT_EQ(cos(17.54840061379229806435203716652846677620 * M_PI / 180.), aFilter.
calcAngleRZ());
89 EXPECT_DOUBLE_EQ(0.4636476090008061162142562314612144020285, aFilter.
fullAngle2D(outer_center, cent_inner));
90 EXPECT_DOUBLE_EQ(0.89442719099991586, aFilter.
calcAngle2D(outer_center, cent_inner));
97 TVector3 innerHit(1., 1., 0.), centerHit(3., 3., 0.), outerHit(6., 4., 1.), sigma(.01, .01, .01), unrealsigma(2, 2, 2),
98 outerhighHit(4., 6., 1.);
106 EXPECT_DOUBLE_EQ(1., aFilter.
calcSign(outerHit, centerHit, innerHit, sigma, sigma, sigma));
107 EXPECT_DOUBLE_EQ(-1., aFilter.
calcSign(outerhighHit, centerHit, innerHit, sigma, sigma, sigma));
108 EXPECT_DOUBLE_EQ(-1., aFilter.
calcSign(innerHit, centerHit, outerHit, sigma, sigma, sigma));
109 EXPECT_DOUBLE_EQ(0., aFilter.
calcSign(outerHit, centerHit, innerHit, unrealsigma, unrealsigma,
112 EXPECT_LT(0., aFilter.
calcSign(outerHit, centerHit, innerHit));
113 EXPECT_GT(0., aFilter.
calcSign(outerhighHit, centerHit, innerHit));
114 EXPECT_GT(0., aFilter.
calcSign(innerHit, centerHit, outerHit));
115 EXPECT_LT(0., aFilter.
calcSign(outerHit, centerHit, innerHit));
117 EXPECT_DOUBLE_EQ(1., aFilter.
calcSign(outerHit, centerHit, innerHit));
118 EXPECT_DOUBLE_EQ(-1., aFilter.
calcSign(outerhighHit, centerHit, innerHit));
119 EXPECT_DOUBLE_EQ(-1., aFilter.
calcSign(innerHit, centerHit, outerHit));
126 TVector3 innerHit(1., 1., 0.), centerHit(3., 3., 1.), outerHit(6., 4., 3.);
127 TVector3 cent_inner = centerHit - innerHit, outer_center = outerHit - centerHit;
132 outerHit.RotateZ(.4);
133 centerHit.RotateZ(.4);
134 innerHit.RotateZ(.4);
135 aFilter.
resetValues(outerHit, centerHit, innerHit);
145 TVector3 innerHit(1., 2., 0.), centerHit(3., 2., 1.), outerHit(3., 4., 3.);
146 TVector3 cent_inner = centerHit - innerHit, outer_center = outerHit - centerHit;
148 TVector3 innerHit2(1., 1., 0.), centerHit2(3., 3., 0.), outerHitEvil(6., 3., 0.);
150 double pt = 0, ptTrue = 0;
152 aFilter.
resetValues(outerHit, centerHit, innerHit);
153 ptTrue = aFilter.
calcPt(1.414213562373095048801688724209698078570);
154 aFilter.
resetValues(outerHit, centerHit, innerHit);
156 EXPECT_DOUBLE_EQ(ptTrue, pt);
158 ptTrue = 0.017118925181688543;
159 aFilter.
resetValues(outerHitEvil, centerHit2, innerHit2);
161 EXPECT_DOUBLE_EQ(ptTrue, pt);
165 ptTrue = aFilter.
calcPt(1.414213562373095048801688724209698078570);
167 EXPECT_ANY_THROW(aFilter.
calcPt());
Set up a few arrays and objects in the datastore.
The class 'ThreeHitFilters' bundles filter methods using 3 hits which are stored in TVector3s.
double calcAngle3D()
calculates the angle between the hits/vectors (3D), returning unit: none (calculation for degrees is ...
double fullAngle3D()
calculates the angle between the hits/vectors (3D), returning unit: angle in degrees
double calcPt()
calculates the estimation of the transverse momentum of the 3-hit-tracklet, returning unit: GeV/c
double calcHelixFit()
reverse compatibility, calls calcHelixParameterFit
double fullAngleRZ()
calculates the angle between the hits/vectors (RZ), returning unit: angle in degrees
double calcDeltaSlopeRZ()
calculates deviations in the slope of the inner segment and the outer segment, returning unit: none
double fullAngle2D(const TVector3 &vecA, const TVector3 &vecB)
calculates the angle between the hits/vectors (2D), generalized, returning unit: angle in radians WAR...
double getMagneticField()
returns the set value of the magnetic field in Tesla
double calcAngleRZ()
calculates the angle between the hits/vectors (RZ), returning unit: none (calculation for degrees is ...
double fullAngleXY()
calculates the angle between the hits/vectors (XY), returning unit: angle in degrees
double calcDeltaSlopeZOverS()
compares the "slopes" z over arc length.
void resetValues(const TVector3 &outerHit, const TVector3 ¢erHit, const TVector3 &innerHit)
Overrides Constructor-Setup.
double calcCircleDist2IP()
calculates the distance of the point of closest approach of circle to the IP, returning unit: cm
void resetMagneticField(const double magneticFieldStrength=1.5)
Overrides Constructor-Setup for magnetic field.
double calcAngle2D(const TVector3 &vecA, const TVector3 &vecB)
calculates the angle between the hits/vectors (2D), generalized, returning unit: none.
double calcAngleXY()
calculates the angle between the hits/vectors (XY), returning unit: none (calculation for degrees is ...
int calcSign(const TVector3 &a, const TVector3 &b, const TVector3 &c)
calculates calculates the sign of the curvature of given 3-hit-tracklet.
TEST_F(GlobalLabelTest, LargeNumberOfTimeDependentParameters)
Test large number of time-dep params for registration and retrieval.
Abstract base class for different kinds of events.