npstat is hosted by Hepforge, IPPP Durham
NPStat  5.10.0
ScalableGaussND.hh
Go to the documentation of this file.
1 #ifndef NPSTAT_SCALABLEGAUSSND_HH_
2 #define NPSTAT_SCALABLEGAUSSND_HH_
3 
4 /*!
5 // \file ScalableGaussND.hh
6 //
7 // \brief Multivariate Gaussian distribution
8 //
9 // Author: I. Volobouev
10 //
11 // March 2010
12 */
13 
14 #include <cmath>
15 
17 
18 namespace npstat {
19  /**
20  // Multivariate Gaussian distribution. It can be shifted and scaled
21  // but not rotated (its arguments, of course, can be rotated independently).
22  */
24  {
25  public:
26  ScalableGaussND(const double* location,
27  const double* scale, unsigned dim);
28  virtual ~ScalableGaussND() {}
29 
30  inline virtual ScalableGaussND* clone() const
31  {return new ScalableGaussND(*this);}
32  inline bool mappedByQuantiles() const {return true;}
33 
34  //@{
35  /** Method needed for "geners" I/O */
36  virtual gs::ClassId classId() const {return gs::ClassId(*this);}
37  virtual bool write(std::ostream& of) const;
38  //@}
39 
40  static inline const char* classname() {return "npstat::ScalableGaussND";}
41  static inline unsigned version() {return 1;}
42  static ScalableGaussND* read(const gs::ClassId& id, std::istream& in);
43 
44  protected:
45  virtual bool isEqual(const AbsDistributionND& r) const
47 
48  private:
49  double unscaledDensity(const double* x) const;
50  void unscaledUnitMap(const double* rnd, unsigned bufLen,
51  double* x) const;
52  double norm_;
53 
54 #ifdef SWIG
55  public:
56  inline ScalableGaussND(const double* ilocation, unsigned lenLocation,
57  const double* iscale, unsigned lenScale)
58  : AbsScalableDistributionND(ilocation,lenLocation,iscale,lenScale)
59  {norm_ = pow(2.0*M_PI, -0.5*lenScale);}
60 #endif // SWIG
61  };
62 }
63 
64 #endif // NPSTAT_SCALABLEGAUSSND_HH_
Interface definition for multivariate continuous statistical distributions.
Definition: AbsDistributionND.hh:26
unsigned dim() const
Definition: AbsDistributionND.hh:51
Definition: AbsDistributionND.hh:129
virtual bool isEqual(const AbsDistributionND &) const
double location(unsigned i) const
Definition: AbsDistributionND.hh:141
double scale(unsigned i) const
Definition: AbsDistributionND.hh:144
Definition: ScalableGaussND.hh:24
virtual ScalableGaussND * clone() const
Definition: ScalableGaussND.hh:30
bool mappedByQuantiles() const
Definition: ScalableGaussND.hh:32
virtual bool isEqual(const AbsDistributionND &r) const
Definition: ScalableGaussND.hh:45
virtual gs::ClassId classId() const
Definition: ScalableGaussND.hh:36
Definition: AbsArrayProjector.hh:14