Checker if a position is contained in a family of curves over phi0 and curvature.
More...
#include <InPhi0CurvBox.h>
|
| InPhi0CurvBox (float curlCurv=NAN) |
| Constructor taking the curler curvature Curlers with high curvature than the curler curvature may obtain hits from both arms.
|
|
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 familiy of curves. More...
|
|
|
float | m_curlCurv |
| Curler curvature - set to value greater zero to activate on arm exclusive finding.
|
|
Checker if a position is contained in a family of curves over phi0 and curvature.
Definition at line 26 of file InPhi0CurvBox.h.
◆ getDistanceSign()
ESign getDistanceSign |
( |
const HoughBox & |
houghBox, |
|
|
float |
x, |
|
|
float |
y, |
|
|
float |
l, |
|
|
float |
= 0 , |
|
|
float |
= 0 , |
|
|
ILayer |
= -1 |
|
) |
| const |
|
inline |
Function that gives the sign of the distance from an observed drift circle to the familiy of curves.
- Returns
- ESign::c_Plus if the drift circle is always on the positive / right site
- ESign::c_Minus means the drift circle is always on the negative / left site
- ESign::c_Zero if the dirft circle lies on any of the curves
- ESign::c_Invalid if the drift cirlce is on the the wrong arm of the curve.
Definition at line 48 of file InPhi0CurvBox.h.
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];
float m_curlCurv
Curler curvature - set to value greater zero to activate on arm exclusive finding.
static ESign common(ESign n1, ESign n2)
Check if two values have a common sign.
The documentation for this class was generated from the following file: