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

An algorithm to check if a hit is contained in a hyperbolic cosine hough box. More...

#include <HitInHyperBox.h>

Public Types

using HoughBox = Box< DiscreteQ, DiscreteP, DiscreteZ0 >
 Hough space is 3D with axes q, p, z0 as described above.
 

Public Member Functions

Weight operator() (const CDCRecoHit3D &recoHit, const HoughBox *hyperBox)
 Returns weight of the hit for the given hough box; in this algorithm - 1 if hit inside the box, NaN otherwise.
 

Static Public Member Functions

static bool compareDistances (const HoughBox &hyperBox, const CDCRecoHit3D &lhsRecoHit, const CDCRecoHit3D &rhsRecoHit)
 Compares distances from two hits to the track represented by the given box. More...
 
static float centerX (const HoughBox &hyperBox)
 Returns center value of the box along first (Q) axis.
 
static float centerY (const HoughBox &hyperBox)
 Returns center value of the box along second (P) axis.
 
static float centerZ (const HoughBox &hyperBox)
 Returns center value of the box along third (Z0) axis.
 
static float deltaX (const HoughBox &hyperBox)
 Returns half width of the box along first (Q) axis.
 
static const char * debugLine ()
 ROOT expression of the track hypothesis.
 

Static Private Member Functions

static double catZ (const double q, const double p, const double R)
 Returns z(R) for the catenary with parameters q = E/p_t and p = p_z/E.
 

Detailed Description

An algorithm to check if a hit is contained in a hyperbolic cosine hough box.

The exact parameterization is z(R) = 1 / mu * (sqrt(1 - p * p) * cosh(R * mu / q + arcsinh(p / sqrt(1 - p * p))) - 1) + z0

q is p_t / E - transverse fraction of energy p is p_z / E - longitudinal fraction of energy mu is gcB / E - inverse of scale; ranges from 0.0375 for E=6GeV, g=0.5 to 2.25 for E=1GeV, g=5.0 z0 is z at R=0 z and R are in units of CDC size

If we apply a constraint z0=0, The tree will not perform well as mu is highly correlated to q (and p)

Instead we relax z0=0 and apply mu=q Then for a better continuity around g=0 (sign flip), we take 1/q as new q

Resulting parameterization is z(R) = q * (sqrt(1 - p * p) * cosh(R + arcsinh(p / sqrt(1 - p * p))) - 1) + z0 Which can still provide reasonable fits.

Additionally, box edges are behaving more or less on same scale near origin and near edges of CDC if z(R) = +-dQ + 1 / (q +- dQ) * (sqrt(1 - p * p) * cosh(R + arcsinh(p / sqrt(1 - p * p))) - 1) + z0

Definition at line 52 of file HitInHyperBox.h.

Member Function Documentation

◆ compareDistances()

static bool compareDistances ( const HoughBox hyperBox,
const CDCRecoHit3D lhsRecoHit,
const CDCRecoHit3D rhsRecoHit 
)
inlinestatic

Compares distances from two hits to the track represented by the given box.

The comparison is done based on reconstructed Z coordinates of hits and track Z position.

Definition at line 86 of file HitInHyperBox.h.

87  {
88  const float centerQ = *(hyperBox.getCenter<0>());
89  const float centerP = *(hyperBox.getCenter<1>());
90  const float centerZ0 = *(hyperBox.getCenter<2>());
91 
92  const double lhsZ = lhsRecoHit.getRecoZ();
93  const double rhsZ = rhsRecoHit.getRecoZ();
94 
95  const double lhsS = lhsRecoHit.getArcLength2D();
96  const double rhsS = rhsRecoHit.getArcLength2D();
97 
98  const double lhsZDistance = catZ(centerQ, centerP, lhsS) + centerZ0 - lhsZ;
99  const double rhsZDistance = catZ(centerQ, centerP, rhsS) + centerZ0 - rhsZ;
100 
101  return lhsZDistance < rhsZDistance;
102  }
static double catZ(const double q, const double p, const double R)
Returns z(R) for the catenary with parameters q = E/p_t and p = p_z/E.

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