9 #include <analysis/dbobjects/PIDPriorsTable.h>
10 #include <framework/logging/Logger.h>
22 auto checkEdges = [](std::vector<float>& edges,
const std::string & axis) {
23 if (edges.size() < 2) {
24 B2WARNING(
"You provided less than 2 bin edges for the " << axis <<
25 " axis. This is not enough to create one bin, so one will be created with range [-FLT_MAX, +FLT_MAX]");
26 edges = { -FLT_MAX, FLT_MAX};
28 auto prevVal = edges[0];
29 for (
int iBin = 1; iBin < static_cast<int>(edges.size()); iBin++) {
30 auto edge = edges[iBin];
32 B2FATAL(
"Null or negative bin size found on the X axis. Please make sure that all the bin edges are sorted and non-equal");
55 if (value > 1. || value < 0.) {
56 B2WARNING(
"The value " << value <<
" you are trying to set for the bin (" << x <<
", " << y <<
57 ") does not look like a probability. The table will be filled, but i will not be usable as a proper prior probability table.");
100 std::cout <<
" --- Prior summary --- " << std::endl;
103 std::cout <<
" X axis: " ;
105 std::cout <<
" " << edge <<
" " ;
107 std::cout <<
" " << std::endl;
108 std::cout <<
" Y axis ";
110 std::cout <<
" " << edge <<
" " ;
112 std::cout <<
" " << std::endl;
113 std::cout <<
" Values " << std::endl;
114 for (
int iY =
m_binEdgesY.size() - 2; iY >= 0; iY--) {
115 for (
int iX = 0; iX < static_cast<int>(
m_binEdgesX.size() - 1); iX++) {
118 std::cout <<
" " << std::endl;
120 std::cout <<
" --- End of prior summary --- " << std::endl;
126 std::cout <<
" --- Error summary --- " << std::endl;
129 std::cout <<
" X axis: " ;
131 std::cout <<
" " << edge <<
" " ;
133 std::cout <<
" " << std::endl;
134 std::cout <<
" Y axis ";
136 std::cout <<
" " << edge <<
" " ;
138 std::cout <<
" " << std::endl;
139 std::cout <<
" Values " << std::endl;
140 for (
int iY =
m_binEdgesY.size() - 2; iY >= 0; iY--) {
141 for (
int iX = 0; iX < static_cast<int>(
m_binEdgesX.size() - 1); iX++) {
144 std::cout <<
" " << std::endl;
146 std::cout <<
" --- End of error summary --- " << std::endl;
153 const float& min = edges.front();
154 const float& max = edges.back();
155 if (val > max || val < min) {
156 B2WARNING(
"PriorsTable: " << text <<
LogVar(
"value", val) <<
LogVar(
"min", min) <<
LogVar(
"max", max));
165 auto it = std::lower_bound(array.cbegin(), array.cend(), val);
166 return std::distance(array.cbegin(), it) - 1;
175 float averageBinSize = (array.back() - array.front()) / (array.size() - 1);
176 short bin = 1 + (short)((val - array[0]) / averageBinSize);
179 while (bin <
static_cast<short>(array.size()) && array[bin] < val) {
183 while (bin - 1 > 0 && array[bin - 1] > val) {
192 float binWidth = (array.back() - array.front()) / (array.size() - 1.);
193 return (
short)((val - array.back()) / binWidth);
void printPrior() const
Prints the content of the table and the axes.
std::vector< float > m_errors
The matrix with the errors on the prior probabilities.
std::vector< float > m_binEdgesY
The array containing the bin edges for the Y axis.
bool checkRange(const std::string &text, float val, const std::vector< float > &edges) const
Checks if a value is within the range of an array.
void setBinEdges(const std::vector< float > &binEdgesX, const std::vector< float > &binEdgesY)
Sets the bin edges arrays.
std::vector< float > m_priors
The matrix with the prior probabilities.
float getPriorValue(float x, float y) const
Returns the prior probability for a given value of (x,y).
void setPriorValue(float x, float y, float value)
Sets the prior value for a single bin.
short findBinFast(float val, std::vector< float > array) const
This function returns the position of a number in a sorted array of bin edges This implementation sho...
void printError() const
Prints the content of the error table and the axes.
float getErrorValue(float x, float y) const
Returns the error on the prior probability for a given value of (x,y).
short findBinWithFixedWidth(float val, std::vector< float > array) const
This function returns the position of a number in a sorted array of bin edges, assuming that the latt...
std::vector< float > m_binEdgesX
The array containing the bin edges for the X axis.
void setErrorValue(float x, float y, float value)
Sets the error on the prior value for a single bin.
float getPriorInBin(int iX, int iY) const
Returns the prior probability for a given bin.
short findBin(float val, std::vector< float > array) const
This function returns the position of a number in a sorted array of bin edges.
float getErrorInBin(int iX, int iY) const
Returns the error on prior probability for a given bin.
Class to store variables with their name which were sent to the logging service.
Abstract base class for different kinds of events.