Belle II Software  release-08-01-10
InPhi0ImpactCurvBox Class Reference

Checker if a position is contained in a family of curves over phi0, impact and curvature. More...

#include <InPhi0ImpactCurvBox.h>

Public Types

using HoughBox = Box< DiscretePhi0, ContinuousImpact, DiscreteCurv >
 The box to which this object correspondes.
 

Public Member Functions

 InPhi0ImpactCurvBox (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...
 

Private Attributes

float m_curlCurv
 Curler curvature - set to value greater zero to activate on arm exclusive finding.
 

Detailed Description

Checker if a position is contained in a family of curves over phi0, impact and curvature.

Definition at line 24 of file InPhi0ImpactCurvBox.h.

Member Function Documentation

◆ 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 InPhi0ImpactCurvBox.h.

55  {
56  const std::array<DiscretePhi0, 2>& phi0Vec = houghBox.getBounds<DiscretePhi0>();
57  const std::array<DiscreteCurv, 2>& curv = houghBox.getBounds<DiscreteCurv>();
58 
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();
62 
63  const bool isNonCurler = (static_cast<float>(curv[1]) <= m_curlCurv and
64  static_cast<float>(curv[0]) >= -m_curlCurv);
65  const bool onlyPositiveArm = isNonCurler;
66 
67  if (onlyPositiveArm) {
68  // Reject hit if it is on the inward going branch but the curvature suggest it is no curler
69  if (xRot[0] < 0 and xRot[1] < 0) return ESign::c_Invalid;
70  }
71 
72  std::array<float, 2> yRot;
73  yRot[0] = -x * phi0Vec[0]->y() + y * phi0Vec[0]->x();
74  yRot[1] = -x * phi0Vec[1]->y() + y * phi0Vec[1]->x();
75 
76  const std::array<ContinuousImpact, 2>& impact = houghBox.getBounds<ContinuousImpact>();
77 
78  // Using binary notation encoding lower and upper box bounds to fill the flat array.
79  std::array<float, 4> yRotMinusI;
80  yRotMinusI[0b00] = yRot[0] - impact[0];
81  yRotMinusI[0b01] = yRot[0] - impact[1];
82  yRotMinusI[0b10] = yRot[1] - impact[0];
83  yRotMinusI[0b11] = yRot[1] - impact[1];
84 
85  const float l2 = l * l;
86  std::array<float, 4> r2MinusI;
87  r2MinusI[0b00] = xRot[0] * xRot[0] + yRotMinusI[0b00] * yRotMinusI[0b00] - l2;
88  r2MinusI[0b01] = xRot[0] * xRot[0] + yRotMinusI[0b01] * yRotMinusI[0b01] - l2;
89  r2MinusI[0b10] = xRot[1] * xRot[1] + yRotMinusI[0b10] * yRotMinusI[0b10] - l2;
90  r2MinusI[0b11] = xRot[1] * xRot[1] + yRotMinusI[0b11] * yRotMinusI[0b11] - l2;
91 
92 
93  // Using binary notation encoding lower and upper box bounds to fill the flat array.
94  std::array<ESign, 2> distSign;
95  for (int c_Curv = 0; c_Curv < 2; ++c_Curv) {
96  std::array<float, 4> dist;
97  float curvHalf = static_cast<float>(curv[c_Curv]) / 2;
98  dist[0b00] = - yRotMinusI[0b00] + r2MinusI[0b00] * curvHalf - l;
99  dist[0b01] = - yRotMinusI[0b01] + r2MinusI[0b01] * curvHalf - l;
100  dist[0b10] = - yRotMinusI[0b10] + r2MinusI[0b10] * curvHalf - l;
101  dist[0b11] = - yRotMinusI[0b11] + r2MinusI[0b11] * curvHalf - l;
102  distSign[c_Curv] = ESignUtil::common(dist);
103  }
104 
105  return ESignUtil::common(distSign[0], distSign[1]);
106 
107  }
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.
Definition: ESign.h:57
@ c_Curv
Constant to address the curvature in the xy plane.

The documentation for this class was generated from the following file: