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.