10 #include <tracking/trackFindingCDC/hough/perigee/CurvRep.h>
11 #include <tracking/trackFindingCDC/numerics/LookupTable.h>
12 #include <framework/logging/Logger.h>
15 using namespace TrackFindingCDC;
18 : m_lowerBound(lowerBound)
19 , m_upperBound(upperBound)
21 , m_nOverlap(nOverlap)
36 const double expandedLowerBound = -width / 2;
37 return linspace<float>(expandedLowerBound,
m_upperBound, nPositions);
47 long nCurlingCurvs = 3 * nPositions / 10;
49 std::vector<float> curlingCurvs = linspace<float>(1 / fabs(
m_upperBound),
52 [](
float f) {
return 1 / f;});
54 std::sort(curlingCurvs.begin(), curlingCurvs.end());
55 float minWidthCurling = curlingCurvs[1] - curlingCurvs[0];
58 std::vector<float> nonCurlingCurvs = linspace<float>(-fabs(
m_lowerBound),
60 nPositions - nCurlingCurvs);
62 float widthNonCurling = nonCurlingCurvs[1] - nonCurlingCurvs[0];
64 B2INFO(
"Min Width curling" << minWidthCurling);
65 B2INFO(
"Width non curling" << widthNonCurling);
66 assert(minWidthCurling > widthNonCurling);
69 nonCurlingCurvs.insert(nonCurlingCurvs.end(), ++(curlingCurvs.begin()), curlingCurvs.end());
70 B2INFO(nonCurlingCurvs.size());
73 assert(nPositions ==
static_cast<long>(nonCurlingCurvs.size()));
74 assert(std::is_sorted(nonCurlingCurvs.begin(), nonCurlingCurvs.end()));
75 return nonCurlingCurvs;
81 std::vector<CurvWithArcLength2DCache> result;
82 result.reserve(discreteCurvs.size());
83 for (
float curv : discreteCurvs) {
84 result.emplace_back(curv);
103 const double width =
m_upperBound / (
m_nBins * (1 - overlapWidthRatio) + overlapWidthRatio - 0.5);