npstat is hosted by Hepforge, IPPP Durham
NPStat  5.10.0
SbMomentsCalculator.hh
1 #ifndef NPSTAT_SBMOMENTSCALCULATOR_HH_
2 #define NPSTAT_SBMOMENTSCALCULATOR_HH_
3 
4 //=========================================================================
5 // SbMomentsCalculator.hh
6 //
7 // Internal utility classes used for calculating transformation
8 // parameters of Johnson's S_b distribution. Applications codes
9 // should not use any of these classes explicitly, as they might
10 // change in the future.
11 //
12 // Author: I. Volobouev
13 //
14 // May 2010
15 //=========================================================================
16 
20 
21 namespace npstat {
23  {
24  inline virtual ~SbMomentsCalculator() {}
25 
26  // The following function should return "true" if the
27  // arguments (and the answer) are reasonable
28  virtual bool calculate(
29  long double p0, long double p1,
30  long double *mean, long double *var,
31  long double *skew, long double *kurt,
32  long double *dskewdp0, long double *dskewdp1,
33  long double *dkurtdp0, long double *dkurtdp1) const = 0;
34 
35  virtual void getParameters(
36  long double gamma, long double delta,
37  long double *p0, long double *p1) const = 0;
38 
39  virtual void getGammaDelta(
40  long double p0, long double p1,
41  long double *gamma, long double *delta) const = 0;
42  };
43 
45  {
46  inline virtual ~SbMomentsBy6Integrals() {}
47 
48  // The "results" array must have at least 6 elements
49  virtual bool integrate6(
50  long double a, long double b, long double *results) const = 0;
51 
52  bool calculate(
53  long double p0, long double p1,
54  long double *mean, long double *var,
55  long double *skew, long double *kurt,
56  long double *dskewdp0, long double *dskewdp1,
57  long double *dkurtdp0, long double *dkurtdp1) const;
58 
59  void getParameters(
60  long double gamma, long double delta,
61  long double *p0, long double *p1) const;
62 
63  void getGammaDelta(
64  long double p0, long double p1,
65  long double *gamma, long double *delta) const;
66  };
67 
69  {
70  // The number of points in the constructor below should be
71  // supported by the "GaussHermiteQuadrature" integrator:
72  // see "GaussHermiteQuadrature.hh" header file for more info
73  explicit SbMomentsGaussHermite(unsigned npoints=256U);
74  inline virtual ~SbMomentsGaussHermite() {}
75 
76  bool integrate6(
77  long double a, long double b, long double *results) const;
78  private:
80  };
81 
83  {
84  // The number of points in the constructor below should be
85  // supported by the "GaussLegendreQuadrature" integrator:
86  // see "GaussLegendreQuadrature.hh" header file for more info
87  explicit SbMomentsMultiZone(unsigned npoints=128U);
88  inline virtual ~SbMomentsMultiZone() {}
89 
90  bool integrate6(
91  long double a, long double b, long double *results) const;
92  private:
93  void central_integ_big_a(long double a, long double b,
94  long double* p) const;
96  };
97 
99  {
100  explicit SbMomentsMix(double mixPoint=0.95, unsigned npointsHemite=256U,
101  unsigned npointsLegendre=128U);
102  inline virtual ~SbMomentsMix() {}
103 
104  inline double mixPoint() const {return mixPoint_;}
105  inline void setMixPoint(double mixPoint) {mixPoint_ = mixPoint;}
106 
107  bool integrate6(
108  long double a, long double b, long double *results) const;
109  private:
112  double mixPoint_;
113  };
114 
115  class SbMomentsFunctor : public Functor1<long double, long double>
116  {
117  public:
118  SbMomentsFunctor(long double a, long double b, unsigned n);
119  inline virtual ~SbMomentsFunctor() {}
120  long double operator()(const long double& x) const;
121 
122  private:
124  long double a_;
125  long double b_;
126  unsigned n_;
127  };
128 
129  class SbMomentsGaussFunctor : public Functor1<long double, long double>
130  {
131  public:
132  SbMomentsGaussFunctor(long double a, long double b, unsigned n);
133  inline virtual ~SbMomentsGaussFunctor() {}
134  long double operator()(const long double& x) const;
135 
136  private:
138  long double a_;
139  long double b_;
140  unsigned n_;
141  };
142 
143  class SbMomentsInvErfFunctor : public Functor1<long double, long double>
144  {
145  public:
146  SbMomentsInvErfFunctor(long double a, long double b, unsigned n);
147  inline virtual ~SbMomentsInvErfFunctor() {}
148  long double operator()(const long double& x) const;
149 
150  private:
152  long double a_;
153  long double b_;
154  unsigned n_;
155  };
156 
158  {
159  inline virtual ~SbMoments0SkewBigKurt() {}
160 
161  bool calculate(
162  long double p0, long double p1,
163  long double *mean, long double *var,
164  long double *skew, long double *kurt,
165  long double *dskewdp0, long double *dskewdp1,
166  long double *dkurtdp0, long double *dkurtdp1) const;
167 
168  void getParameters(
169  long double gamma, long double delta,
170  long double *p0, long double *p1) const;
171 
172  void getGammaDelta(
173  long double p0, long double p1,
174  long double *gamma, long double *delta) const;
175  };
176 
178  {
179  inline virtual ~SbMomentsBigDelta() {}
180 
181  bool calculate(
182  long double p0, long double p1,
183  long double *mean, long double *var,
184  long double *skew, long double *kurt,
185  long double *dskewdp0, long double *dskewdp1,
186  long double *dkurtdp0, long double *dkurtdp1) const;
187 
188  void getParameters(
189  long double gamma, long double delta,
190  long double *p0, long double *p1) const;
191 
192  void getGammaDelta(
193  long double p0, long double p1,
194  long double *gamma, long double *delta) const;
195  };
196 
198  {
199  explicit SbMomentsBigGamma(unsigned maxdeg=20U);
200  inline virtual ~SbMomentsBigGamma() {}
201 
202  void setMaxDeg(unsigned maxdeg);
203  inline unsigned maxdeg() const {return maxdeg_;}
204  unsigned bestDeg(long double p0, long double p1) const;
205 
206  bool calculate(
207  long double p0, long double p1,
208  long double *mean, long double *var,
209  long double *skew, long double *kurt,
210  long double *dskewdp0, long double *dskewdp1,
211  long double *dkurtdp0, long double *dkurtdp1) const;
212 
213  void getParameters(
214  long double gamma, long double delta,
215  long double *p0, long double *p1) const;
216 
217  void getGammaDelta(
218  long double p0, long double p1,
219  long double *gamma, long double *delta) const;
220  private:
221  unsigned maxdeg_;
222  };
223 }
224 
225 #endif // NPSTAT_SBMOMENTSCALCULATOR_HH_
Gauss-Hermite quadratures in long double precision.
Gauss-Legendre quadratures in long double precision.
Interface definitions and concrete simple functors for a variety of functor-based calculations.
Definition: GaussHermiteQuadrature.hh:26
Definition: GaussLegendreQuadrature.hh:27
Definition: SbMomentsCalculator.hh:116
Definition: SbMomentsCalculator.hh:130
Definition: SbMomentsCalculator.hh:144
Definition: AbsArrayProjector.hh:14
Definition: SimpleFunctors.hh:58
Definition: SbMomentsCalculator.hh:158
Definition: SbMomentsCalculator.hh:178
Definition: SbMomentsCalculator.hh:198
Definition: SbMomentsCalculator.hh:45
Definition: SbMomentsCalculator.hh:23
Definition: SbMomentsCalculator.hh:69
Definition: SbMomentsCalculator.hh:99
Definition: SbMomentsCalculator.hh:83