00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "Minuit2/FCNBase.h"
00011
00012 namespace ROOT {
00013
00014 namespace Minuit2 {
00015
00016
00017 class Quad12F : public FCNBase {
00018
00019 public:
00020
00021 double operator()(const std::vector<double>& par) const {
00022
00023 double x = par[0];
00024 double y = par[1];
00025 double z = par[2];
00026 double w = par[3];
00027 double x0 = par[4];
00028 double y0 = par[5];
00029 double z0 = par[6];
00030 double w0 = par[7];
00031 double x1 = par[8];
00032 double y1 = par[9];
00033 double z1 = par[10];
00034 double w1 = par[11];
00035
00036
00037 return ( (1./70.)*(21*x*x + 20*y*y + 19*z*z - 14*x*z - 20*y*z) + w*w + (1./70.)*(21*x0*x0 + 20*y0*y0 + 19*z0*z0 - 14*x0*z0 - 20*y0*z0) + w0*w0 + (1./70.)*(21*x1*x1 + 20*y1*y1 + 19*z1*z1 - 14*x1*z1 - 20*y1*z1) + w1*w1);
00038 }
00039
00040 double Up() const {return 1.;}
00041
00042 private:
00043
00044 };
00045
00046 }
00047
00048 }