Belle II Software  release-08-01-10
PrecisionUtil.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 <framework/logging/Logger.h>
11 #include <functional>
12 #include <cmath>
13 
14 namespace Belle2 {
19  namespace TrackFindingCDC {
20 
25  class PrecisionUtil {
26 
27  public: // Auxiliary stuff
29  static constexpr int getLookupGridLevel() {return c_lookupGridLevel; };
30 
32  static constexpr const int c_lookupGridLevel = 16;
33 
35  static double convertRhoToPt(double curv) {return 1.5 * 0.00299792458 / fabs(curv); };
36 
37  public: // Variations of precision functions
43  using PrecisionFunction = std::function<double(double)>;
44 
49  static double getBasicCurvPrecision(double __attribute__((unused)) curv)
50  {
51  // 0.3 is the width of the Legendre phase-space in curvatures direction.
52  return 0.3 / pow(2, 16);
53  }
54 
65  static double getOriginCurvPrecision(double curv)
66  {
67  // Convert to pt making the cut-off of that has been here before
68  double pt = convertRhoToPt(curv);
69  if (not(pt <= 3.0)) {
70  pt = 3.0;
71  }
72 
73  double precision = exp(-16.1987 * pt - 5.96206) + 0.000190872 - 0.0000739319 * pt;
74 
75  /* 10.5 - 0.24 * exp(-4.13118 * convertRhoToPt(curv) + 2.74); */
76  B2DEBUG(25, "origin: precision = " << precision << "; curv = " << curv);
77  return precision;
78  }
79 
90  static double getNonOriginCurvPrecision(double curv)
91  {
92  // Convert to pt making the cut-off of that has been here before
93  double pt = convertRhoToPt(curv);
94  if (not(pt <= 3.0)) {
95  pt = 3.0;
96  }
97 
98  double precision{};
99  if (pt < 0.36) {
100  precision = exp(-0.356965 - 0.00186066 * pt) - 0.697526;
101  } else {
102  precision = exp(-0.357335 + 0.000438872 * pt) - 0.697786;
103  }
104 
105  B2DEBUG(25, "non origin: precision = " << precision << "; curv = " << curv);
106  return precision;
107  }
108  };
109  }
111 }
Utility collection for functions to determine a curvature precision such at a hough box covers a cert...
Definition: PrecisionUtil.h:25
static double convertRhoToPt(double curv)
convert curvature (one of the axis in legendre phase-space) to Pt (in GeV)
Definition: PrecisionUtil.h:35
static constexpr const int c_lookupGridLevel
Deepness of the trigonometrical lookup table.
Definition: PrecisionUtil.h:32
static double getOriginCurvPrecision(double curv)
Function which estimates desired curvature resolution of quadtree node in the given pt region paramet...
Definition: PrecisionUtil.h:65
static double getNonOriginCurvPrecision(double curv)
Function which estimates desired curvature resolution of quadtree node in the given pt region paramet...
Definition: PrecisionUtil.h:90
static constexpr int getLookupGridLevel()
Returns desired deepness of the trigonometrical lookup table. Used as template parameter for the Trig...
Definition: PrecisionUtil.h:29
static double getBasicCurvPrecision(double curv)
Basic function to estimate the curvature precision Takes a curvature value and returns a width that.
Definition: PrecisionUtil.h:49
std::function< double(double)> PrecisionFunction
Function type which is used for resolution calculations (resolution=f(curvature)) Takes a curvature v...
Definition: PrecisionUtil.h:43
Abstract base class for different kinds of events.