10#include <tracking/trackFindingCDC/hough/perigee/Phi0Rep.h>
11#include <tracking/trackFindingCDC/hough/perigee/CurvRep.h>
12#include <tracking/trackFindingCDC/hough/boxes/Box.h>
13#include <tracking/trackFindingCDC/topology/ILayer.h>
23 namespace TrackFindingCDC {
56 const std::array<DiscretePhi0, 2>& phi0Vec = houghBox.getBounds<
DiscretePhi0>();
57 const std::array<DiscreteCurv, 2>& curv = houghBox.getBounds<
DiscreteCurv>();
59 std::array<float, 2> xRot;
60 xRot[0] = x * phi0Vec[0]->x() + y * phi0Vec[0]->y();
61 xRot[1] = x * phi0Vec[1]->x() + y * phi0Vec[1]->y();
63 const bool isNonCurler =
static_cast<float>(curv[1]) <=
m_curlCurv and
static_cast<float>(curv[0]) >= -
m_curlCurv;
64 const bool onlyPositiveArm = isNonCurler;
65 if (onlyPositiveArm) {
67 if (xRot[0] < 0 and xRot[1] < 0)
return ESign::c_Invalid;
70 std::array<float, 2> yRotPlusL;
71 yRotPlusL[0] = -x * phi0Vec[0]->y() + y * phi0Vec[0]->x() + l;
72 yRotPlusL[1] = -x * phi0Vec[1]->y() + y * phi0Vec[1]->x() + l;
74 const float r2 = x * x + y * y - l * l;
75 std::array<float, 2> r2TimesHalfCurv;
76 r2TimesHalfCurv[0] = r2 * (
static_cast<float>(curv[0]) / 2.0);
77 r2TimesHalfCurv[1] = r2 * (
static_cast<float>(curv[1]) / 2.0);
80 std::array<float, 4> dist;
82 dist[0b00] = r2TimesHalfCurv[0] - yRotPlusL[0];
83 dist[0b10] = r2TimesHalfCurv[0] - yRotPlusL[1];
85 dist[0b01] = r2TimesHalfCurv[1] - yRotPlusL[0];
86 dist[0b11] = r2TimesHalfCurv[1] - yRotPlusL[1];
The base class for all boxes.
Representation for a discrete position in an array of discrete positions.
Checker if a position is contained in a family of curves over phi0 and curvature.
InPhi0CurvBox(float curlCurv=NAN)
Constructor taking the curler curvature Curlers with high curvature than the curler curvature may obt...
float m_curlCurv
Curler curvature - set to value greater zero to activate on arm exclusive finding.
ESign getDistanceSign(const HoughBox &houghBox, float x, float y, float l, float=0, float=0, ILayer=-1) const
Function that gives the sign of the distance from an observed drift circle to the family of curves.
ESign
Enumeration for the distinct sign values of floating point variables.
static ESign common(ESign n1, ESign n2)
Check if two values have a common sign.
Abstract base class for different kinds of events.