Quad4F.h

Go to the documentation of this file.
00001 // @(#)root/minuit2:$Id: Quad4F.h 23073 2008-04-09 08:23:25Z moneta $
00002 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei   2003-2005  
00003 
00004 /**********************************************************************
00005  *                                                                    *
00006  * Copyright (c) 2005 LCG ROOT Math team,  CERN/PH-SFT                *
00007  *                                                                    *
00008  **********************************************************************/
00009 
00010 #include "Minuit2/FCNGradientBase.h"
00011 
00012 namespace ROOT {
00013 
00014    namespace Minuit2 {
00015 
00016 
00017 class Quad4F : public FCNBase {
00018 
00019 public:
00020 
00021   Quad4F() {}
00022 
00023   ~Quad4F() {}
00024 
00025   double operator()(const std::vector<double>& par) const {
00026 
00027     double x = par[0];
00028     double y = par[1];
00029     double z = par[2];
00030     double w = par[3];
00031 
00032     return ( (1./70.)*(21*x*x + 20*y*y + 19*z*z - 14*x*z - 20*y*z) + w*w );
00033   }
00034 
00035   double Up() const {return 1.;}
00036 
00037 private:
00038 
00039 };
00040 
00041 // same function implementing the derivatives too 
00042 class Quad4FGrad : public FCNGradientBase {
00043 
00044 public:
00045 
00046   Quad4FGrad() {}
00047 
00048   ~Quad4FGrad() {}
00049 
00050   double operator()(const std::vector<double>& par) const {
00051 
00052     double x = par[0];
00053     double y = par[1];
00054     double z = par[2];
00055     double w = par[3];
00056 
00057     return ( (1./70.)*(21*x*x + 20*y*y + 19*z*z - 14*x*z - 20*y*z) + w*w );
00058   }
00059 
00060   std::vector<double> Gradient(const std::vector<double>& par) const {
00061     
00062     double x = par[0];
00063     double y = par[1];
00064     double z = par[2];
00065     double w = par[3];
00066 
00067 
00068     std::vector<double> g(4);
00069     g[0] = (1./70.) * ( 42. * x - 14. * z ); 
00070     g[1] = (1./70.) * ( 40. * y - 20. * z ); 
00071     g[2] = (1./70.) * ( 38. * z - 14. * x - 20. * y ); 
00072     g[3] = 2. * w; 
00073     return g;  
00074   }
00075 
00076   double Up() const {return 1.;}
00077 
00078 private:
00079 
00080 };
00081 
00082 
00083   }  // namespace Minuit2
00084 
00085 }  // namespace ROOT

Generated on Tue Jul 5 14:37:13 2011 for ROOT_528-00b_version by  doxygen 1.5.1