CMS 3D CMS Logo

GaussianSumUtilities1D.h
Go to the documentation of this file.
1 #ifndef GaussianSumUtilities1D_h_
2 #define GaussianSumUtilities1D_h_
3 
4 // #include "TROOT.h"
5 
8 
9 #include <vector>
10 
17 private:
19 
20 public:
22  : theState(state),
23  // theStates(state.components()),
24  theModeStatus(NotComputed) {}
26 
28  inline unsigned int size() const { return components().size(); }
30  inline const std::vector<SingleGaussianState1D>& components() const { return theState.components(); }
32  inline double weight(unsigned int i) const { return components()[i].weight(); }
34  inline double mean(unsigned int i) const { return components()[i].mean(); }
36  inline double standardDeviation(unsigned int i) const {
37  // return sqrt(components()[i].variance());
38  return components()[i].standardDeviation();
39  }
41  inline double variance(unsigned int i) const { return components()[i].variance(); }
43  double pdf(unsigned int i, double x) const;
45  double quantile(const double) const;
47  bool modeIsValid() const;
50  const SingleGaussianState1D& mode() const;
52  double pdf(double) const;
54  double cdf(const double&) const;
56  double d1Pdf(const double&) const;
58  double d2Pdf(const double&) const;
60  double d3Pdf(const double&) const;
62  double lnPdf(const double&) const;
64  double d1LnPdf(const double&) const;
66  double d2LnPdf(const double&) const;
67 
69  double weight() const { return theState.weight(); }
71  double mean() const { return theState.mean(); }
73  double variance() const { return theState.variance(); }
74 
75 private:
79  bool findMode(double& mode, double& pdfAtMode, const double& xStart, const double& scale) const;
81  static double gauss(double, double, double);
83  static double gaussInt(double, double, double);
85  double combinedMean() const;
87  void computeMode() const;
90  double localVariance(double x) const;
91 
92  // the state of the mode finder
93  struct FinderState {
95  FinderState(size_t n) : pdfs(n) {}
96  double x;
97  double y;
98  double yd; // d1LnPdf
99  double yd2; // d2LnPdf
100  std::vector<double> pdfs;
101  };
102 
103  // update tre state at x
104  void update(FinderState& state, double x) const;
105 
107  std::vector<double> pdfComponents(const double&) const;
109  void pdfComponents(double, std::vector<double>&) const;
111  static double pdf(double, const std::vector<double>&);
113  double d1Pdf(double, const std::vector<double>&) const;
115  double d2Pdf(double, const std::vector<double>&) const;
117  double d3Pdf(double, const std::vector<double>&) const;
119  static double lnPdf(double, const std::vector<double>&);
121  double d1LnPdf(double, const std::vector<double>&) const;
123  double d2LnPdf(double, const std::vector<double>&) const;
124 
125 private:
127  // std::vector<SingleGaussianState1D> theStates;
128 
131  // mutable double theMode;
132 };
133 #endif
std::vector< double > pdfComponents(const double &) const
pdf components
double weight() const
combined weight
const MultiGaussianState1D & theState
double d2Pdf(const double &) const
second derivative of the p.d.f.
double d3Pdf(const double &) const
third derivative of the p.d.f.
double mean() const
combined mean
double weight() const
combined weight
static double gauss(double, double, double)
Value of gaussian distribution.
SingleGaussianState1D theMode
bool findMode(double &mode, double &pdfAtMode, const double &xStart, const double &scale) const
unsigned int size() const
number of components
double d1Pdf(const double &) const
first derivative of the p.d.f.
void computeMode() const
calculation of mode
static double gaussInt(double, double, double)
Integrated value of gaussian distribution.
double weight(unsigned int i) const
weight of a component
GaussianSumUtilities1D(const MultiGaussianState1D &state)
double variance() const
combined covariance
const SingleGaussianState1D & mode() const
double quantile(const double) const
Quantile (i.e. x for a given value of the c.d.f.)
double pdf(unsigned int i, double x) const
pdf of a single component at x
double variance() const
combined variance
double mean() const
combined mean
double mean(unsigned int i) const
mean value of a component
double variance(unsigned int i) const
variance of a component
double combinedMean() const
Mean value of combined state.
const SingleState1dContainer & components() const
access to components
double d2LnPdf(const double &) const
second derivative of ln(pdf)
double localVariance(double x) const
double standardDeviation(unsigned int i) const
standard deviation of a component
double lnPdf(const double &) const
ln(pdf)
void update(FinderState &state, double x) const
double cdf(const double &) const
value of the c.d.f.
double d1LnPdf(const double &) const
first derivative of ln(pdf)
const std::vector< SingleGaussianState1D > & components() const
components
bool modeIsValid() const
mode status