23 namespace TrackFindingCDC {
25 template <
class AResultType =
double>
26 std::vector<AResultType> linspace(
double start,
29 const std::function<AResultType(
double)>& map)
31 std::vector<AResultType> result;
33 result.push_back(map(start));
34 for (std::size_t i = 1; i < n - 1; ++i) {
35 result.push_back(map((start * (n - 1 - i) +
final * i) / (n - 1)));
37 result.push_back(map(
final));
38 assert(result.size() == n);
43 template <
class AResultType =
double>
44 std::vector<AResultType> linspace(
double start,
double final, std::size_t n)
46 auto map = [](
const double in) -> AResultType {
return AResultType(in);};
47 return linspace<AResultType>(start,
final, n, map);
51 template<
class T =
double>
68 ,
m_values(linspace(lowerBound, upperBound, nBins + 1, map))
77 if (not std::isfinite(x))
return m_values.back();
78 const int iMax =
m_values.size() - 2;
81 int i = std::min(std::max(0,
static_cast<int>(iBin)), iMax);
86 const T&
nearest(
double x)
const
88 if (not std::isfinite(x))
return m_values.back();
89 const int iMax =
m_values.size() - 2;
91 int i = std::min(std::max(0, iBin), iMax);
96 const T&
at(
int i)
const
98 const int iMax =
m_values.size() - 2;
99 i = std::min(std::max(0, i), iMax);