CLHEP VERSION Reference Documentation
   
CLHEP Home Page     CLHEP Documentation     CLHEP Bug Reports

BivariateGaussian.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 // $Id: BivariateGaussian.cc,v 1.8 2010/06/16 18:22:01 garren Exp $
5 #include <assert.h>
6 #include <cmath> // for exp()
7 
8 #if (defined __STRICT_ANSI__) || (defined _WIN32)
9 #ifndef M_PI
10 #define M_PI 3.14159265358979323846
11 #endif // M_PI
12 #endif // __STRICT_ANSI__
13 
14 namespace Genfun {
15 FUNCTION_OBJECT_IMP(BivariateGaussian)
16 
18  _mean0("Mean0", 0.0,-10,10),
19  _mean1("Mean1", 0.0,-10,10),
20  _sigma0("Sigma0",1.0,0, 10),
21  _sigma1("Sigma1",1.0,0, 10),
22  _corr01("Corr01", 0.0, -1.0, 1.0)
23 {}
24 
26 }
27 
29  AbsFunction(right),
30  _mean0(right._mean0),
31  _mean1(right._mean1),
32  _sigma0(right._sigma0),
33  _sigma1(right._sigma1),
34  _corr01(right._corr01)
35 {
36 }
37 
38 double BivariateGaussian::operator() (const Argument & a) const {
39  assert (a.dimension()==2);
40  double x = a[0];
41  double y = a[1];
42 
43  double x0 = _mean0.getValue();
44  double y0 = _mean1.getValue();
45  double dx = x-x0;
46  double dy = y-y0;
47 
48  double sx = _sigma0.getValue();
49  double sy = _sigma1.getValue();
50 
51  double sxs = sx*sx;
52  double sys = sy*sy;
53  double rho = _corr01.getValue();
54  double dt = (1.0+rho)*(1.0-rho);
55 
56  return (1.0/(2*M_PI*sx*sy*sqrt(dt))) *
57  exp(-1.0/(2.0*dt)*(dx*dx/sxs+dy*dy/sys-2.0*rho*dx*dy/sx/sy));
58 }
59 
61  return _mean0;
62 }
63 
65  return _sigma0;
66 }
67 
68 const Parameter & BivariateGaussian::mean0() const {
69  return _mean0;
70 }
71 
72 const Parameter & BivariateGaussian::sigma0() const {
73  return _sigma0;
74 }
75 
77  return _mean1;
78 }
79 
81  return _sigma1;
82 }
83 
84 const Parameter & BivariateGaussian::mean1() const {
85  return _mean1;
86 }
87 
88 const Parameter & BivariateGaussian::sigma1() const {
89  return _sigma1;
90 }
91 
92 
93 
95  return _corr01;
96 }
97 
98 const Parameter & BivariateGaussian::corr01() const {
99  return _corr01;
100 }
101 
102 
103 unsigned int BivariateGaussian::dimensionality() const {
104  return 2;
105 }
106 
107 double BivariateGaussian::operator ()(double) const
108 {
109  std::cerr
110  << "Warning. bivariate Gaussian called with scalar argument"
111  << std::endl;
112  assert(0);
113  return 0;
114 }
115 
116 } // namespace Genfun
Genfun::Parameter::getValue
virtual double getValue() const
Definition: Parameter.cc:27
Genfun::BivariateGaussian::sigma0
Parameter & sigma0()
Definition: BivariateGaussian.cc:64
a
@ a
Definition: testCategories.cc:125
Genfun::AbsFunction
Definition: CLHEP/GenericFunctions/AbsFunction.hh:48
Genfun::BivariateGaussian::corr01
Parameter & corr01()
Definition: BivariateGaussian.cc:94
Genfun::BivariateGaussian::operator()
virtual double operator()(double argument) const
Definition: BivariateGaussian.cc:107
Genfun::BivariateGaussian::dimensionality
virtual unsigned int dimensionality() const
Definition: BivariateGaussian.cc:103
Genfun::Argument
Definition: CLHEP/GenericFunctions/Argument.hh:17
Genfun::BivariateGaussian::~BivariateGaussian
virtual ~BivariateGaussian()
Definition: BivariateGaussian.cc:25
Genfun::BivariateGaussian
Definition: CLHEP/GenericFunctions/BivariateGaussian.hh:20
Genfun::BivariateGaussian::BivariateGaussian
BivariateGaussian()
Definition: BivariateGaussian.cc:17
defs.h
Genfun::BivariateGaussian::mean0
Parameter & mean0()
Definition: BivariateGaussian.cc:60
Genfun::Parameter
Definition: CLHEP/GenericFunctions/Parameter.hh:35
Genfun::BivariateGaussian::sigma1
Parameter & sigma1()
Definition: BivariateGaussian.cc:80
x
any side effects of that construction would occur twice The semantics of throw x
Definition: whyZMthrowRethrows.txt:37
Genfun::BivariateGaussian::mean1
Parameter & mean1()
Definition: BivariateGaussian.cc:76
BivariateGaussian.hh
FUNCTION_OBJECT_IMP
#define FUNCTION_OBJECT_IMP(classname)
Definition: CLHEP/GenericFunctions/AbsFunction.hh:156
Genfun
Definition: CLHEP/GenericFunctions/Abs.hh:14