npstat is hosted by Hepforge, IPPP Durham
NPStat  5.10.0
PolynomialDistro1D.hh
Go to the documentation of this file.
1 #ifndef NPSTAT_POLYNOMIALDISTRO1D_HH_
2 #define NPSTAT_POLYNOMIALDISTRO1D_HH_
3 
4 /*!
5 // \file PolynomialDistro1D.hh
6 //
7 // \brief Statistical distribution constructed using shifted Legendre
8 // polynomial series
9 //
10 // Author: I. Volobouev
11 //
12 // November 2020
13 */
14 
16 
18 
19 namespace npstat {
20  /**
21  // A distribution whose density is a series in terms of
22  // orthonormal Legendre polynomials on [0, 1]. The constructor
23  // parameter "nCheck" gives the number of points for which the
24  // code checks that the density is positive (nCheck = 0 disables
25  // this check). The series coefficients start with degree 1
26  // (note, not 0).
27  */
29  {
30  public:
31  PolynomialDistro1D(double location, double scale,
32  const double* coeffs, unsigned maxdeg,
33  unsigned nCheck = 10001);
34 
35  PolynomialDistro1D(double location, double scale,
36  const std::vector<double>& coeffs,
37  unsigned nCheck = 10001);
38 
39  inline virtual PolynomialDistro1D* clone() const
40  {return new PolynomialDistro1D(*this);}
41 
42  inline virtual ~PolynomialDistro1D() {}
43 
44  inline unsigned nCheckUsed() const {return nCheckUsed_;}
45 
46  // Methods needed for I/O
47  virtual gs::ClassId classId() const {return gs::ClassId(*this);}
48  virtual bool write(std::ostream& os) const;
49 
50  static inline const char* classname()
51  {return "npstat::PolynomialDistro1D";}
52  static inline unsigned version() {return 2;}
53  static PolynomialDistro1D* read(const gs::ClassId& id, std::istream& in);
54 
55  protected:
56  virtual bool isEqual(const AbsDistribution1D&) const;
57 
58  private:
60 
61  inline static int nParameters() {return -1;}
62 
63  double unscaledDensity(double x) const;
64  double unscaledCdf(double x) const;
65  double unscaledQuantile(double x) const;
66  double unscaledExceedance(double x) const;
67 
68  void checkPositive(unsigned nCheck) const;
69  void setupCoeffs(const double* coeffs, unsigned maxdeg);
70 
72  std::vector<double> allCoeffs_;
73  std::vector<double> integCoeffs_;
74  unsigned nCheckUsed_;
75  };
76 }
77 
78 #endif // NPSTAT_POLYNOMIALDISTRO1D_HH_
Orthonormal versions of some classical orthogonal polynomials.
Factories for 1-d distributions for use in interpretive language environments.
Definition: AbsDistribution1D.hh:165
double scale() const
Definition: AbsDistribution1D.hh:183
double location() const
Definition: AbsDistribution1D.hh:180
Definition: PolynomialDistro1D.hh:29
virtual bool isEqual(const AbsDistribution1D &) const
virtual gs::ClassId classId() const
Definition: PolynomialDistro1D.hh:47
virtual PolynomialDistro1D * clone() const
Definition: PolynomialDistro1D.hh:39
Definition: Distribution1DFactory.hh:35
Definition: ClassicalOrthoPolys1D.hh:121
Definition: AbsArrayProjector.hh:14
Definition: AbsDistribution1D.hh:31