Program Listing for File PDF.h

Return to documentation for file (src/lib/PDF.h)

/*
 15/05/2015
 Class to store one PDF
*/

// avoid multiple def of the same class
#ifndef PDF_H  // check that this keyword has been set already
#define PDF_H  // define the keyword to be checked

#include <algorithm>
#include <stdexcept>
#include <string>
#include <vector>

using namespace std;


class PDF {
 private:
  double scaleStep = -99, invScaleStep = -99;
  double scaleMin = 0, scaleMax = 0;

  size_t vsize;

  inline double linear_interp(double x, double x1, double y1, double x2,
                              double y2) {
    if (x2 > x1)
      return y1 + (x - x1) * (y2 - y1) / (x2 - x1);
    else
      return y1;
  }

 public:
  vector<double> vPDF;
  vector<double> chi2, xaxis, secondX, secondP;
  vector<int> ind, secondInd;

  PDF() { ; }


  PDF(const double min, const double max, const size_t size);

  ~PDF() {
    vPDF.clear();
    chi2.clear();
    xaxis.clear();
  }


  double normalization();

  vector<double> cumulant();

  void chi2toPDF();

  int chi2mini();

  pair<double, double> uncMin(
      double dchi);
  double probaBay(
      double xvalue);

  size_t index(
      const double inVal) const;
  void secondMax(const double win);
  double levelCumu2x(float xval);    // find the xaxis value corresponding to a
                                     // level in the cumulative function

  pair<double, double> improve_extremum(bool is_chi2) const;

  pair<double, double> confidence_interval(float level);

  pair<double, double> credible_interval(float level, double val);

  inline size_t get_maxid() const {
    return max_element(vPDF.begin(), vPDF.end()) - vPDF.begin();
  }

  inline double get_max() const { return xaxis[get_maxid()]; }

  inline size_t size() const { return vsize; }
};

pair<double, double> quadratic_extremum(double x1, double x2, double x3,
                                        double y1, double y2, double y3);
#endif