9#include <analysis/dbobjects/PIDPriorsTable.h>
10#include <framework/logging/Logger.h>
23 auto checkEdges = [](std::vector<float>& edges,
const std::string & axis) {
24 if (edges.size() < 2) {
25 B2WARNING(
"You provided less than 2 bin edges for the " << axis <<
26 " axis. This is not enough to create one bin, so one will be created with range [-FLT_MAX, +FLT_MAX]");
27 edges = { -FLT_MAX, FLT_MAX};
29 auto prevVal = edges[0];
30 for (
int iBin = 1; iBin < static_cast<int>(edges.size()); iBin++) {
31 auto edge = edges[iBin];
33 B2FATAL(
"Null or negative bin size found on the X axis. Please make sure that all the bin edges are sorted and non-equal");
56 if (value > 1. || value < 0.) {
57 B2WARNING(
"The value " << value <<
" you are trying to set for the bin (" << x <<
", " << y <<
58 ") does not look like a probability. The table will be filled, but i will not be usable as a proper prior probability table.");
101 std::cout <<
" --- Prior summary --- " << std::endl;
104 std::cout <<
" X axis: " ;
106 std::cout <<
" " << edge <<
" " ;
108 std::cout <<
" " << std::endl;
109 std::cout <<
" Y axis ";
111 std::cout <<
" " << edge <<
" " ;
113 std::cout <<
" " << std::endl;
114 std::cout <<
" Values " << std::endl;
115 for (
int iY =
m_binEdgesY.size() - 2; iY >= 0; iY--) {
116 for (
int iX = 0; iX < static_cast<int>(
m_binEdgesX.size() - 1); iX++) {
119 std::cout <<
" " << std::endl;
121 std::cout <<
" --- End of prior summary --- " << std::endl;
127 std::cout <<
" --- Error summary --- " << std::endl;
130 std::cout <<
" X axis: " ;
132 std::cout <<
" " << edge <<
" " ;
134 std::cout <<
" " << std::endl;
135 std::cout <<
" Y axis ";
137 std::cout <<
" " << edge <<
" " ;
139 std::cout <<
" " << std::endl;
140 std::cout <<
" Values " << std::endl;
141 for (
int iY =
m_binEdgesY.size() - 2; iY >= 0; iY--) {
142 for (
int iX = 0; iX < static_cast<int>(
m_binEdgesX.size() - 1); iX++) {
145 std::cout <<
" " << std::endl;
147 std::cout <<
" --- End of error summary --- " << std::endl;
154 const float& min = edges.front();
155 const float& max = edges.back();
156 if (val > max || val < min) {
157 B2WARNING(
"PriorsTable: " << text <<
LogVar(
"value", val) <<
LogVar(
"min", min) <<
LogVar(
"max", max));
166 auto it = std::lower_bound(array.cbegin(), array.cend(), val);
167 return std::distance(array.cbegin(), it) - 1;
176 float averageBinSize = (array.back() - array.front()) / (array.size() - 1);
177 short bin = 1 + (short)((val - array[0]) / averageBinSize);
180 while (bin <
static_cast<short>(array.size()) && array[bin] < val) {
184 while (bin - 1 > 0 && array[bin - 1] > val) {
193 float binWidth = (array.back() - array.front()) / (array.size() - 1.);
194 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.