Belle II Software  release-05-01-25
TwoHitFilters.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2010 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Jakob Lettenbichler *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #pragma once
12 
13 #include <TVector3.h>
14 #include <math.h>
15 
16 
17 
18 namespace Belle2 {
24  class TwoHitFilters {
25  public:
26 
28  TwoHitFilters():
29  m_x2(0.),
30  m_y2(0.),
31  m_z2(0.),
32  m_dz(0.)
33  {
34  m_hitA.SetXYZ(0., 0., 0.);
35  m_hitB.SetXYZ(0., 0., 0.);
36  }
37 
39  TwoHitFilters(TVector3& outerHit, TVector3& innerHit):
40  m_hitA(outerHit),
41  m_hitB(innerHit) { initializeMe(outerHit, innerHit); }
42 
43 
45  ~TwoHitFilters() {}
46 
48  void resetValues(TVector3& outerHit, TVector3& innerHit)
49  {
50  m_hitA = outerHit;
51  m_hitB = innerHit;
52 
53  initializeMe(outerHit, innerHit);
54  }
55 
57  double calcDist3D() const { return (m_x2 + m_y2 + m_z2); } // return unit: cm^2
58 
60  double fullDist3D() const { return sqrt(calcDist3D()); } // return unit: cm
61 
63  double calcDistXY() const { return (m_x2 + m_y2); } // return unit: cm^2
64 
66  double fullDistXY() const { return sqrt(calcDistXY()); } // return unit: cm
67 
69  double calcDistZ() const { return m_dz; } // return unit: cm
70 
72  double calcSlopeRZ() const
73  {
74  //double slope = atan (calcDistXY() / m_dz) ;
75  double slope = atan(fullDistXY() / m_dz) ; //since calcDistXY() returns cm ^2
76  return filterNan(slope);
77  } // return unit: radians
78 
80  double fullSlopeRZ() const { return calcSlopeRZ(); }
81 
83  double calcNormedDist3D() const
84  {
85  double normedVal = calcDistXY() / calcDist3D();
86  return filterNan(normedVal);
87  } // return unit: none
88 
90  double filterNan(double value) const;
91 
92  protected:
93 
95  void initializeMe(TVector3& outerHit, TVector3& innerHit)
96  {
97  m_x2 = outerHit[0] - innerHit[0]; // not x2 yet, reusing member
98  m_y2 = outerHit[1] - innerHit[1];
99  m_dz = outerHit[2] - innerHit[2];
100 
101  m_x2 *= m_x2; // now it's x2...
102  m_y2 *= m_y2;
104  }
105 
106  TVector3 m_hitA;
107  TVector3 m_hitB;
108  double m_x2;
109  double m_y2;
110  double m_z2;
111  double m_dz;
113  }; //end class TwoHitFilters
115 } //end namespace Belle2
Belle2::TwoHitFilters::initializeMe
void initializeMe(TVector3 &outerHit, TVector3 &innerHit)
initializer function, sets values
Definition: TwoHitFilters.h:103
Belle2::TwoHitFilters::m_y2
double m_y2
internal intermediate value storing y^2, no enduser-relevance
Definition: TwoHitFilters.h:117
Belle2::TwoHitFilters::calcDist3D
double calcDist3D() const
calculates the distance between the hits (3D), returning unit: cm^2 for speed optimization
Definition: TwoHitFilters.h:65
Belle2::TwoHitFilters::fullDistXY
double fullDistXY() const
calculates the real distance between the hits (XY), returning unit: cm
Definition: TwoHitFilters.h:74
Belle2::TwoHitFilters::calcNormedDist3D
double calcNormedDist3D() const
calculates the normed distance between the hits (3D), return unit: none
Definition: TwoHitFilters.h:91
Belle2::TwoHitFilters::calcSlopeRZ
double calcSlopeRZ() const
calculates the angle of the slope of the hits in RZ, returnValue = theta = atan(r/z)
Definition: TwoHitFilters.h:80
Belle2::TwoHitFilters::calcDistZ
double calcDistZ() const
calculates the distance between the hits (Z only), returning unit: cm
Definition: TwoHitFilters.h:77
Belle2::TwoHitFilters::fullDist3D
double fullDist3D() const
calculates the real distance between the hits (3D), returning unit: cm
Definition: TwoHitFilters.h:68
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TwoHitFilters::m_x2
double m_x2
internal intermediate value storing x^2, no enduser-relevance
Definition: TwoHitFilters.h:116
Belle2::TwoHitFilters::m_dz
double m_dz
internal intermediate value storing distance in z, no enduser-relevance
Definition: TwoHitFilters.h:119
Belle2::TwoHitFilters::m_z2
double m_z2
internal intermediate value storing z^2, no enduser-relevance
Definition: TwoHitFilters.h:118
Belle2::TwoHitFilters::TwoHitFilters
TwoHitFilters()
Empty constructor.
Definition: TwoHitFilters.h:36
Belle2::TwoHitFilters::m_hitA
TVector3 m_hitA
outer hit (position relevant for useful filter calculation, e.g.
Definition: TwoHitFilters.h:114
Belle2::TwoHitFilters::m_hitB
TVector3 m_hitB
inner hit (position relevant for useful filter calculation, e.g.
Definition: TwoHitFilters.h:115
Belle2::TwoHitFilters::resetValues
void resetValues(TVector3 &outerHit, TVector3 &innerHit)
Overrides Constructor-Setup.
Definition: TwoHitFilters.h:56
Belle2::TwoHitFilters::calcDistXY
double calcDistXY() const
calculates the distance between the hits (XY), returning unit: cm^2 for speed optimization
Definition: TwoHitFilters.h:71
Belle2::TwoHitFilters::~TwoHitFilters
~TwoHitFilters()
Destructor.
Definition: TwoHitFilters.h:53
Belle2::TwoHitFilters::fullSlopeRZ
double fullSlopeRZ() const
calculates the angle of the slope of the hits in RZ, returnValue = theta = atan(r/z)
Definition: TwoHitFilters.h:88
Belle2::TwoHitFilters::filterNan
double filterNan(double value) const
nice little nanChecker returns 0 if value was nan or inf, else returns value itself
Definition: TwoHitFilters.cc:17