35 auto almost_equal(T left, T right,
int ulp) -> std::enable_if_t<!std::numeric_limits<T>::is_integer,
bool>
63 constexpr auto HIST_BIN_SIZE10 = 10;
64 constexpr auto HIST_BIN_SIZE30 = 10;
65 constexpr auto HIST_BIN_SIZE_F1 = 11;
66 constexpr auto HIST_MAX_BIN_F1 = 1.1;
68 TH1::AddDirectory(kFALSE);
86 return almost_equal(cluster.GetT(), neutron.
GetT(), 2) &&
87 almost_equal(cluster.GetPosition().X(), neutron.
GetPosition().X(), 2) &&
88 almost_equal(cluster.GetPosition().Y(), neutron.
GetPosition().Y(), 2) &&
89 almost_equal(cluster.GetPosition().Z(), neutron.
GetPosition().Z(), 2);
94 auto truePositives = 0;
95 for (
const auto& cluster : actualPositive)
97 for (
const auto& neutron : predictedPositive)
99 if (comp(neutron, cluster))
106 const auto falseNegatives =
static_cast<int>(actualPositive.size()) - truePositives;
112 auto falsePositives = 0;
113 for (
const auto& cluster : actualNegative)
115 for (
const auto& neutron : predictedPositive)
117 if (comp(neutron, cluster))
124 const auto trueNegatives =
static_cast<int>(actualNegative.size()) - falsePositives;
130 const auto precision = truePositives /
static_cast<double>(truePositives + falsePositives);
131 const auto recall = truePositives /
static_cast<double>(truePositives + falseNegatives);
133 const auto Fbeta = [&](
double beta)
135 if (precision == 0. && recall == 0.)
139 return (1. + beta * beta) * (precision * recall) / ((beta * beta * precision) + recall);