npstat is hosted by Hepforge, IPPP Durham
NPStat  5.10.0
LocationScaleFamily1D.hh
Go to the documentation of this file.
1 #ifndef NPSTAT_LOCATIONSCALEFAMILY1D_HH_
2 #define NPSTAT_LOCATIONSCALEFAMILY1D_HH_
3 
4 /*!
5 // \file LocationScaleFamily1D.hh
6 //
7 // \brief Create a location-scale family from a non-scalable 1-d distribution
8 //
9 // Author: I. Volobouev
10 //
11 // September 2017
12 */
13 
15 
16 namespace npstat {
18  {
19  public:
20  inline LocationScaleFamily1D(const AbsDistribution1D& distro,
21  const double location, const double scale)
22  : AbsScalableDistribution1D(location, scale), d_(distro.clone()) {}
23 
26 
27  inline virtual LocationScaleFamily1D* clone() const
28  {return new LocationScaleFamily1D(*this);}
29 
30  inline virtual ~LocationScaleFamily1D() {delete d_;}
31 
32  inline AbsDistribution1D& getUnderlyingDistro() {return *d_;}
33  inline const AbsDistribution1D& getUnderlyingDistro() const
34  {return *d_;}
35 
36  //@{
37  /** Prototype needed for I/O */
38  inline virtual gs::ClassId classId() const {return gs::ClassId(*this);}
39  virtual bool write(std::ostream&) const;
40  //@}
41 
42  static inline const char* classname()
43  {return "npstat::LocationScaleFamily1D";}
44  static inline unsigned version() {return 1;}
45  static LocationScaleFamily1D* read(
46  const gs::ClassId& id, std::istream& is);
47 
48  protected:
49  inline virtual bool isEqual(const AbsDistribution1D& other) const
50  {
51  const LocationScaleFamily1D& r =
52  static_cast<const LocationScaleFamily1D&>(other);
53  return AbsScalableDistribution1D::isEqual(r) && *d_ == *r.d_;
54  }
55 
56  private:
57  inline LocationScaleFamily1D()
58  : AbsScalableDistribution1D(0.0, 1.0), d_(0) {}
59 
60  inline virtual double unscaledDensity(const double x) const
61  {return d_->density(x);}
62  inline virtual double unscaledCdf(const double x) const
63  {return d_->cdf(x);}
64  inline virtual double unscaledExceedance(const double x) const
65  {return d_->exceedance(x);}
66  inline virtual double unscaledQuantile(const double x) const
67  {return d_->quantile(x);}
68 
69  AbsDistribution1D* d_;
70  };
71 }
72 
73 #endif // NPSTAT_LOCATIONSCALEFAMILY1D_HH_
Interface definition for 1-d continuous statistical distributions.
Definition: AbsDistribution1D.hh:165
double scale() const
Definition: AbsDistribution1D.hh:183
virtual bool isEqual(const AbsDistribution1D &other) const
Definition: AbsDistribution1D.hh:242
double location() const
Definition: AbsDistribution1D.hh:180
Definition: LocationScaleFamily1D.hh:18
virtual gs::ClassId classId() const
Definition: LocationScaleFamily1D.hh:38
virtual bool isEqual(const AbsDistribution1D &other) const
Definition: LocationScaleFamily1D.hh:49
virtual LocationScaleFamily1D * clone() const
Definition: LocationScaleFamily1D.hh:27
Definition: AbsArrayProjector.hh:14
Definition: AbsDistribution1D.hh:31
virtual double density(double x) const =0
virtual AbsDistribution1D * clone() const =0
virtual double exceedance(double x) const =0
virtual double quantile(double x) const =0
virtual double cdf(double x) const =0