00001 #ifndef __INCLUDE_MINUIT_H__
00002 #define __INCLUDE_MINUIT_H__
00003
00004 #include <cmath>
00005 #include <cstdio>
00006 #include <cstring>
00007 #include <cstdlib>
00008 #include <string>
00009
00010 #include "sfit.h"
00011 #include "minuitfcn.h"
00012 #include "cfortran.h"
00013 #include "cminuit.h"
00014
00015 PROTOCCALLSFSUB3(MNINIT,mninit,PINT,PINT,PINT);
00016 PROTOCCALLSFSUB7(MNPARM,mnparm,INT,STRING,DOUBLE,DOUBLE,PDOUBLE,PDOUBLE,PINT);
00017 PROTOCCALLSFSUB4(MNCOMD,mncomd,ROUTINE,STRING,PINT,ROUTINE);
00018 PROTOCCALLSFSUB8(MNCONT,mncont,ROUTINE,INT,INT,INT,PDOUBLE,PDOUBLE,
00019 PINT,ROUTINE);
00020 PROTOCCALLSFSUB6(MNSTAT,mnstat,PDOUBLE,PDOUBLE,PDOUBLE,PINT,PINT,PINT);
00021 PROTOCCALLSFSUB7(MNPOUT,mnpout,INT,PSTRING,PDOUBLE,PDOUBLE,PDOUBLE,
00022 PDOUBLE,PINT);
00023 PROTOCCALLSFSUB2(MNFIXP,mnfixp,INT,PINT);
00024 PROTOCCALLSFSUB1(MNFREE,mnfree,INT);
00025
00026 class CMNPars {
00027 public:
00028 char name[20];
00029 double value;
00030 double error;
00031 double min;
00032 double max;
00033 void Set(string parname,double value,double error,
00034 double min,double max);
00035 };
00036
00037 class CCF2S_Minuit{
00038 public:
00039 static int ndim;
00040 static const int MAXLINE=80;
00041 static int npars,dummy,Ncalls;
00042 static double *xval,*grad;
00043 static CMNPars *pars;
00044 static CSourceCalc *sourcecalc;
00045 static CKernel *kernel;
00046
00047
00048 static CCHArray *ctheory;
00049
00050 static C3DArray *cexp3D;
00051 static C3DArray *cerror3D;
00052 static C3DArray *ctheory3D;
00053
00054 static int lx,ly,lz;
00055 static CCHArray *cexp;
00056 static CCHArray *cerror;
00057 static CCHArray *source;
00058
00059 static void InitMinuit();
00060 static void CalcChiSquare(int npar,double* grad,double* fcnval,double* xval,
00061 int iflag,void* futil);
00062
00063 static void CalcChiSquare3D(int npar,double* grad,double* fcnval,double* xval,
00064 int iflag,void* futil);
00065 static void CalcChiSquare1D(int npar,double* grad,double* fcnval,double* xval,
00066 int iflag,void* futil);
00067 static void Scan(int ipar,int npts,double start,double end);
00068 static void Minimize();
00069 static void Minimize(int maxcalls);
00070 static void Minimize(int maxcalls,double tolerance);
00071 static void Migrad();
00072 static void Migrad(int maxcalls);
00073 static void Migrad(int maxcalls,double tolerance);
00074 static void Simplex();
00075 static void Simplex(int maxcalls);
00076 static void Simplex(int maxcalls,double tolerance);
00077 static void Minos();
00078 static void Minos(int ipar);
00079 static void StratLevel(int istrategy);
00080 static void Mnstat();
00081 static void ViewPars();
00082 static void SetError(double error);
00083 static void ErrorMatrix();
00084 static void Contour(int iparx,int ipary,int npts,
00085 double *xcontour,double *ycontour);
00086 static void SetPar(int ipar,char *name,double value,double error,
00087 double min,double max);
00088 static void FixPar(int ipar);
00089 static void FreePar(int ipar);
00090 CCF2S_Minuit();
00091 };
00092
00093
00094 class CCF2S_Minuit_3DGaussian : public CCF2S_Minuit{
00095 public:
00096 CCF2S_Minuit_3DGaussian(CSourceCalc *scset,C3DArray *cexpset,
00097 C3DArray *cerrorset,C3DArray *ctheory3Dset,
00098 CCHArray *ctheoryset,CCHArray *sourceset,
00099 CKernel *kernelset);
00100 };
00101
00102 class CCF2S_Minuit_Blast : public CCF2S_Minuit{
00103 public:
00104 CCF2S_Minuit_Blast(CSourceCalc *scset,C3DArray *cexpset,
00105 C3DArray *cerrorset,C3DArray *ctheory3Dset,
00106 CCHArray *ctheoryset,CCHArray *sourceset,
00107 CKernel *kernelset);
00108 };
00109
00110 class CCF2S_Minuit_GX1D : public CCF2S_Minuit{
00111 public:
00112 CCF2S_Minuit_GX1D(CSourceCalc *scset,CCHArray *cexpset,
00113 CCHArray *cerrorset,CCHArray *ctheoryset,
00114 CCHArray *sourceset,CKernel *kernelset);
00115 };
00116 #endif