12 #include <tracking/trackFindingCDC/hough/axes/StandardAxes.h>
13 #include <tracking/trackFindingCDC/hough/boxes/Box.h>
14 #include <tracking/trackFindingCDC/topology/ILayer.h>
21 namespace TrackFindingCDC {
46 const std::array<DiscretePhi0, 2>& phi0Vec = houghBox.getBounds<
DiscretePhi0>();
47 const std::array<ContinuousTanL, 2>& tanL = houghBox.getBounds<
ContinuousTanL>();
49 std::array<float, 2> xRot;
50 xRot[0] = x * phi0Vec[0]->x() + y * phi0Vec[0]->y();
51 xRot[1] = x * phi0Vec[1]->x() + y * phi0Vec[1]->y();
53 std::array<float, 2> yRot;
54 yRot[0] = -x * phi0Vec[0]->y() + y * phi0Vec[0]->x();
55 yRot[1] = -x * phi0Vec[1]->y() + y * phi0Vec[1]->x();
57 std::array<float, 2> dxdzRot;
58 dxdzRot[0] = dxdz * phi0Vec[0]->x() + dydz * phi0Vec[0]->y();
59 dxdzRot[1] = dxdz * phi0Vec[1]->x() + dydz * phi0Vec[1]->y();
61 std::array<float, 2> dydzRot;
62 dydzRot[0] = -dxdz * phi0Vec[0]->y() + dydz * phi0Vec[0]->x();
63 dydzRot[1] = -dxdz * phi0Vec[1]->y() + dydz * phi0Vec[1]->x();
66 const std::array<float, 2>& s = xRot;
69 if (onlyPositiveArm) {
71 if (xRot[0] < 0 and xRot[1] < 0)
return ESign::c_Invalid;
75 std::array<float, 4> xRotCor;
76 xRotCor[0b00] = xRot[0] + dxdzRot[0] * s[0] *
static_cast<float>(tanL[0]);
77 xRotCor[0b01] = xRot[0] + dxdzRot[0] * s[0] *
static_cast<float>(tanL[1]);
78 xRotCor[0b10] = xRot[1] + dxdzRot[1] * s[1] *
static_cast<float>(tanL[0]);
79 xRotCor[0b11] = xRot[1] + dxdzRot[1] * s[1] *
static_cast<float>(tanL[1]);
81 const std::array<float, 4>& sCor = xRotCor;
83 std::array<float, 4> dist;
84 dist[0b00] = -(yRot[0] + dydzRot[0] * sCor[0b00] *
static_cast<float>(tanL[0]) + l);
85 dist[0b01] = -(yRot[0] + dydzRot[0] * sCor[0b01] *
static_cast<float>(tanL[1]) + l);
86 dist[0b10] = -(yRot[1] + dydzRot[1] * sCor[0b10] *
static_cast<float>(tanL[0]) + l);
87 dist[0b11] = -(yRot[1] + dydzRot[1] * sCor[0b11] *
static_cast<float>(tanL[1]) + l);