Belle II Software  release-08-01-10
FourHitVariables.h
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 #pragma once
9 
10 #include <tracking/vxdHoughTracking/filters/pathFilters/ThreeHitVariables.h>
11 #include <tracking/spacePointCreation/SpacePoint.h>
12 #include <framework/geometry/B2Vector3.h>
13 
14 #include <cmath>
15 
16 namespace Belle2 {
21  namespace vxdHoughTracking {
22 
25  public:
27  FourHitVariables() : m_oHit(0., 0., 0.), m_ocHit(0., 0., 0.), m_icHit(0., 0., 0.), m_iHit(0., 0., 0.)
28  {};
29 
35  FourHitVariables(const B2Vector3D& oHit, const B2Vector3D& ocHit, const B2Vector3D& icHit, const B2Vector3D& iHit) :
36  m_oHit(oHit), m_ocHit(ocHit), m_icHit(icHit), m_iHit(iHit)
37  {
38  m_outerThreeHitVariables = ThreeHitVariables(oHit, ocHit, icHit);
39  m_innerThreeHitVariables = ThreeHitVariables(ocHit, icHit, iHit);
40  };
41 
47  void setHits(const B2Vector3D& oHit, const B2Vector3D& ocHit, const B2Vector3D& icHit, const B2Vector3D& iHit)
48  {
49  m_oHit = oHit;
50  m_ocHit = ocHit;
51  m_icHit = icHit;
52  m_iHit = iHit;
53  m_outerThreeHitVariables = ThreeHitVariables(oHit, ocHit, icHit);
54  m_innerThreeHitVariables = ThreeHitVariables(ocHit, icHit, iHit);
55  }
56 
59  {
62  if (outerCircleCenter.Perp2() > 1e30 or innerCircleCenter.Perp2() > 1e30) {
63  return NAN;
64  }
65  double outerCircleRadius = m_outerThreeHitVariables.calcAvgDistanceXY(outerCircleCenter);
66  double innerCircleRadius = m_innerThreeHitVariables.calcAvgDistanceXY(innerCircleCenter);
67 
68  return outerCircleRadius - innerCircleRadius;
69  }
70 
71 
74  {
77  if (outerCircleCenter.Perp2() > 1e30 or innerCircleCenter.Perp2() > 1e30) {
78  return NAN;
79  }
80 
81  return fabs(outerCircleCenter.Perp() - innerCircleCenter.Perp());
82  }
83 
84 
86  double getDeltaPT()
87  {
90  if (outerCircleCenter.Perp2() > 1e30 or innerCircleCenter.Perp2() > 1e30) {
91  return NAN;
92  }
93  double outerCircleRadius = m_outerThreeHitVariables.calcAvgDistanceXY(outerCircleCenter);
94  double innerCircleRadius = m_innerThreeHitVariables.calcAvgDistanceXY(innerCircleCenter);
95 
96  return fabs(0.00299792458 * m_BFieldZ * (outerCircleRadius - innerCircleRadius));
97  }
98 
101  void setBFieldZ(const double bfieldZ = 1.5) { m_BFieldZ = bfieldZ; }
102 
103  private:
105  double m_BFieldZ = 1.5;
118 
119  };
120 
121  }
123 }
DataType Perp2() const
The transverse component squared (R^2 in cylindrical coordinate system).
Definition: B2Vector3.h:196
DataType Perp() const
The transverse component (R in cylindrical coordinate system).
Definition: B2Vector3.h:200
Class that allows the calculation of simple variables to estimate the quality of two triplets of hits...
FourHitVariables(const B2Vector3D &oHit, const B2Vector3D &ocHit, const B2Vector3D &icHit, const B2Vector3D &iHit)
actual useful constructor
void setBFieldZ(const double bfieldZ=1.5)
Set the B-Field value used for pT calculations.
double getCircleCenterPositionDifference()
calculates the distance between the estimated circle centers (using 2 subsets of given hits) in the x...
void setHits(const B2Vector3D &oHit, const B2Vector3D &ocHit, const B2Vector3D &icHit, const B2Vector3D &iHit)
Set hits if not given in constructor of if they need to be changed.
B2Vector3D m_ocHit
second-to-outer hit position
ThreeHitVariables m_innerThreeHitVariables
ThreeHitVariables getter for the inner three hits.
double m_BFieldZ
BField along z to estimate pT.
B2Vector3D m_oHit
outermost hit position
ThreeHitVariables m_outerThreeHitVariables
ThreeHitVariables getter for the outer three hits.
double getDeltaPT()
calculates dpt-value (dpt= difference in transverse momentum of 2 subsets of the hits),...
B2Vector3D m_iHit
innermost hit position
double getCircleRadiusDifference()
calculates dpt-value (dpt= difference in transverse momentum of 2 subsets of the hits),...
B2Vector3D m_icHit
second-to-inner hit position
Class that allows the calculation of simple variables to estimate the quality of a triplet of hits.
B2Vector3D getCircleCenterXY()
calculates an estimation of circleCenter position, result is returned as the x and y value of the B2V...
double calcAvgDistanceXY(const B2Vector3D &circleCenter)
helper function which calculates the average distance in XY from the given center
Abstract base class for different kinds of events.