12 #include <tracking/trackFindingCDC/hough/boxes/Box.h>
13 #include <tracking/trackFindingCDC/topology/ILayer.h>
23 namespace TrackFindingCDC {
26 class InPhi0ImpactCurvBox {
58 const std::array<DiscretePhi0, 2>& phi0Vec = houghBox.getBounds<
DiscretePhi0>();
59 const std::array<DiscreteCurv, 2>& curv = houghBox.getBounds<
DiscreteCurv>();
61 std::array<float, 2> xRot;
62 xRot[0] = x * phi0Vec[0]->x() + y * phi0Vec[0]->y();
63 xRot[1] = x * phi0Vec[1]->x() + y * phi0Vec[1]->y();
65 const bool isNonCurler = (
static_cast<float>(curv[1]) <=
m_curlCurv and
67 const bool onlyPositiveArm = isNonCurler;
69 if (onlyPositiveArm) {
71 if (xRot[0] < 0 and xRot[1] < 0)
return ESign::c_Invalid;
74 std::array<float, 2> yRot;
75 yRot[0] = -x * phi0Vec[0]->y() + y * phi0Vec[0]->x();
76 yRot[1] = -x * phi0Vec[1]->y() + y * phi0Vec[1]->x();
78 const std::array<ContinuousImpact, 2>& impact = houghBox.getBounds<
ContinuousImpact>();
81 std::array<float, 4> yRotMinusI;
82 yRotMinusI[0b00] = yRot[0] - impact[0];
83 yRotMinusI[0b01] = yRot[0] - impact[1];
84 yRotMinusI[0b10] = yRot[1] - impact[0];
85 yRotMinusI[0b11] = yRot[1] - impact[1];
87 const float l2 = l * l;
88 std::array<float, 4> r2MinusI;
89 r2MinusI[0b00] = xRot[0] * xRot[0] + yRotMinusI[0b00] * yRotMinusI[0b00] - l2;
90 r2MinusI[0b01] = xRot[0] * xRot[0] + yRotMinusI[0b01] * yRotMinusI[0b01] - l2;
91 r2MinusI[0b10] = xRot[1] * xRot[1] + yRotMinusI[0b10] * yRotMinusI[0b10] - l2;
92 r2MinusI[0b11] = xRot[1] * xRot[1] + yRotMinusI[0b11] * yRotMinusI[0b11] - l2;
96 std::array<ESign, 2> distSign;
97 for (
int c_Curv = 0; c_Curv < 2; ++c_Curv) {
98 std::array<float, 4> dist;
99 float curvHalf =
static_cast<float>(curv[c_Curv]) / 2;
100 dist[0b00] = - yRotMinusI[0b00] + r2MinusI[0b00] * curvHalf - l;
101 dist[0b01] = - yRotMinusI[0b01] + r2MinusI[0b01] * curvHalf - l;
102 dist[0b10] = - yRotMinusI[0b10] + r2MinusI[0b10] * curvHalf - l;
103 dist[0b11] = - yRotMinusI[0b11] + r2MinusI[0b11] * curvHalf - l;