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

BivariateGaussian.cc

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 // $Id: BivariateGaussian.cc,v 1.8 2010/06/16 18:22:01 garren Exp $
00003 #include "CLHEP/GenericFunctions/defs.h"
00004 #include "CLHEP/GenericFunctions/BivariateGaussian.hh"
00005 #include <assert.h>
00006 #include <cmath>      // for exp()
00007 
00008 #if (defined __STRICT_ANSI__) || (defined _WIN32)
00009 #ifndef M_PI
00010 #define M_PI            3.14159265358979323846
00011 #endif // M_PI
00012 #endif // __STRICT_ANSI__
00013 
00014 namespace Genfun {
00015 FUNCTION_OBJECT_IMP(BivariateGaussian)
00016 
00017 BivariateGaussian::BivariateGaussian():
00018   _mean0("Mean0", 0.0,-10,10),
00019   _mean1("Mean1", 0.0,-10,10),
00020   _sigma0("Sigma0",1.0,0, 10),
00021   _sigma1("Sigma1",1.0,0, 10),
00022   _corr01("Corr01", 0.0, -1.0, 1.0)
00023 {}
00024 
00025 BivariateGaussian::~BivariateGaussian() {
00026 }
00027 
00028 BivariateGaussian::BivariateGaussian(const BivariateGaussian & right):
00029   AbsFunction(right),
00030   _mean0(right._mean0),
00031   _mean1(right._mean1),
00032   _sigma0(right._sigma0),
00033   _sigma1(right._sigma1),
00034   _corr01(right._corr01)
00035 {
00036 }
00037 
00038 double BivariateGaussian::operator() (const Argument & a) const {
00039   assert (a.dimension()==2);
00040   double x = a[0];
00041   double y = a[1];
00042 
00043   double x0   = _mean0.getValue();
00044   double y0   = _mean1.getValue();
00045   double dx   = x-x0;
00046   double dy   = y-y0;
00047   
00048   double sx     = _sigma0.getValue();
00049   double sy     = _sigma1.getValue();
00050 
00051   double sxs    = sx*sx;
00052   double sys    = sy*sy;
00053   double rho    = _corr01.getValue();
00054   double dt     = (1.0+rho)*(1.0-rho);
00055 
00056   return (1.0/(2*M_PI*sx*sy*sqrt(dt))) * 
00057                exp(-1.0/(2.0*dt)*(dx*dx/sxs+dy*dy/sys-2.0*rho*dx*dy/sx/sy));
00058 }
00059 
00060 Parameter & BivariateGaussian::mean0() {
00061   return _mean0;
00062 }
00063 
00064 Parameter & BivariateGaussian::sigma0() {
00065   return _sigma0;
00066 }
00067 
00068 const Parameter & BivariateGaussian::mean0() const {
00069   return _mean0;
00070 }
00071 
00072 const Parameter & BivariateGaussian::sigma0() const {
00073   return _sigma0;
00074 }
00075 
00076 Parameter & BivariateGaussian::mean1() {
00077   return _mean1;
00078 }
00079 
00080 Parameter & BivariateGaussian::sigma1() {
00081   return _sigma1;
00082 }
00083 
00084 const Parameter & BivariateGaussian::mean1() const {
00085   return _mean1;
00086 }
00087 
00088 const Parameter & BivariateGaussian::sigma1() const {
00089   return _sigma1;
00090 }
00091 
00092 
00093 
00094 Parameter & BivariateGaussian::corr01() {
00095   return _corr01;
00096 }
00097 
00098 const Parameter & BivariateGaussian::corr01() const {
00099   return _corr01;
00100 }
00101 
00102 
00103 unsigned int BivariateGaussian::dimensionality() const {
00104   return 2;
00105 }
00106 
00107 double BivariateGaussian::operator ()(double) const
00108 {
00109   std::cerr
00110     << "Warning.  bivariate Gaussian called with scalar argument"
00111     << std::endl;
00112   assert(0);
00113   return 0;
00114 }
00115 
00116 } // namespace Genfun

Generated on 15 Nov 2012 for CLHEP by  doxygen 1.4.7