12 #include <tracking/trackFindingCDC/hough/perigee/Phi0Rep.h>
13 #include <tracking/trackFindingCDC/hough/perigee/CurvRep.h>
14 #include <tracking/trackFindingCDC/hough/boxes/SweepBox.h>
15 #include <tracking/trackFindingCDC/hough/baseelements/SameSignChecker.h>
16 #include <tracking/trackFindingCDC/topology/ILayer.h>
23 namespace TrackFindingCDC {
27 template<
class T,
class APhi0 = DiscretePhi0>
28 class APhi0Sweeped :
public T {
36 using HoughBox = SweepBox<APhi0, typename T::HoughBox>;
50 float signedDriftLength,
53 ILayer iCLayer = -1)
const
55 const Vector2D& lowerPhi0Vec(houghBox.template getLowerBound<APhi0>());
56 const Vector2D& upperPhi0Vec(houghBox.template getUpperBound<APhi0>());
59 const float lowerX = x * lowerPhi0Vec.x() + y * lowerPhi0Vec.y();
60 const float upperX = x * upperPhi0Vec.x() + y * upperPhi0Vec.y();
62 float lowerCurv(getLowerCurv(houghBox));
63 float upperCurv(getUpperCurv(houghBox));
65 const bool lowerIsNonCurler = fabs(lowerCurv) <
m_curlCurv;
66 const bool upperIsNonCurler = fabs(upperCurv) <
m_curlCurv;
68 if (lowerIsNonCurler and upperIsNonCurler) {
69 if (not(lowerX >= 0) and not(upperX >= 0))
return ESign::c_Invalid;
72 const float lowerY = -x * lowerPhi0Vec.y() + y * lowerPhi0Vec.x();
73 const float upperY = -x * upperPhi0Vec.y() + y * upperPhi0Vec.x();
75 const float upperDXDZ = dxdz * upperPhi0Vec.x() + dydz * upperPhi0Vec.y();
76 const float lowerDXDZ = dxdz * lowerPhi0Vec.x() + dydz * lowerPhi0Vec.y();
79 const float lowerDYDZ = -dxdz * lowerPhi0Vec.y() + dydz * lowerPhi0Vec.x();
80 const float upperDYDZ = -dxdz * upperPhi0Vec.y() + dydz * upperPhi0Vec.x();
82 const ESign lowerDistSign = T::getDistanceSign(subordinaryHoughBox,
88 const ESign upperDistSign = T::getDistanceSign(subordinaryHoughBox,