CLHEP 2.0.4.7 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.5.4.1.2.1 2009/11/10 20:43:12 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   _mean0(right._mean0),
00030   _mean1(right._mean1),
00031   _sigma0(right._sigma0),
00032   _sigma1(right._sigma1),
00033   _corr01(right._corr01)
00034 {
00035 }
00036 
00037 double BivariateGaussian::operator() (const Argument & a) const {
00038   assert (a.dimension()==2);
00039   double x = a[0];
00040   double y = a[1];
00041 
00042   double x0   = _mean0.getValue();
00043   double y0   = _mean1.getValue();
00044   double dx   = x-x0;
00045   double dy   = y-y0;
00046   
00047   double sx     = _sigma0.getValue();
00048   double sy     = _sigma1.getValue();
00049 
00050   double sxs    = sx*sx;
00051   double sys    = sy*sy;
00052   double rho    = _corr01.getValue();
00053   double dt     = (1.0+rho)*(1.0-rho);
00054 
00055   return (1.0/(2*M_PI*sx*sy*sqrt(dt))) * 
00056                exp(-1.0/(2.0*dt)*(dx*dx/sxs+dy*dy/sys-2.0*rho*dx*dy/sx/sy));
00057 }
00058 
00059 Parameter & BivariateGaussian::mean0() {
00060   return _mean0;
00061 }
00062 
00063 Parameter & BivariateGaussian::sigma0() {
00064   return _sigma0;
00065 }
00066 
00067 const Parameter & BivariateGaussian::mean0() const {
00068   return _mean0;
00069 }
00070 
00071 const Parameter & BivariateGaussian::sigma0() const {
00072   return _sigma0;
00073 }
00074 
00075 Parameter & BivariateGaussian::mean1() {
00076   return _mean1;
00077 }
00078 
00079 Parameter & BivariateGaussian::sigma1() {
00080   return _sigma1;
00081 }
00082 
00083 const Parameter & BivariateGaussian::mean1() const {
00084   return _mean1;
00085 }
00086 
00087 const Parameter & BivariateGaussian::sigma1() const {
00088   return _sigma1;
00089 }
00090 
00091 
00092 
00093 Parameter & BivariateGaussian::corr01() {
00094   return _corr01;
00095 }
00096 
00097 const Parameter & BivariateGaussian::corr01() const {
00098   return _corr01;
00099 }
00100 
00101 
00102 unsigned int BivariateGaussian::dimensionality() const {
00103   return 2;
00104 }
00105 
00106 double BivariateGaussian::operator ()(double x) const
00107 {
00108   std::cerr
00109     << "Warning.  bivariate Gaussian called with scalar argument"
00110     << std::endl;
00111   assert(0);
00112   return 0;
00113 }
00114 
00115 } // namespace Genfun

Generated on Thu Jul 1 22:02:30 2010 for CLHEP by  doxygen 1.4.7