00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef ROOT_TMinuit
00024 #define ROOT_TMinuit
00025
00026 #ifndef ROOT_TNamed
00027 #include "TNamed.h"
00028 #endif
00029
00030 #ifndef ROOT_TMethodCall
00031 #include "TMethodCall.h"
00032 #endif
00033
00034 class TMinuit : public TNamed {
00035
00036 private:
00037 TMinuit(const TMinuit &m);
00038 TMinuit& operator=(const TMinuit &m);
00039
00040
00041 public:
00042 enum{kMAXWARN=100};
00043
00044 Int_t fNpfix;
00045 Int_t fEmpty;
00046 Int_t fMaxpar;
00047 Int_t fMaxint;
00048 Int_t fNpar;
00049 Int_t fMaxext;
00050 Int_t fMaxIterations;
00051 Int_t fMaxpar5;
00052 Int_t fMaxcpt;
00053 Int_t fMaxpar2;
00054 Int_t fMaxpar1;
00055
00056 Double_t fAmin;
00057 Double_t fUp;
00058 Double_t fEDM;
00059 Double_t fFval3;
00060 Double_t fEpsi;
00061 Double_t fApsi;
00062 Double_t fDcovar;
00063 Double_t fEpsmac;
00064 Double_t fEpsma2;
00065 Double_t fVlimlo;
00066 Double_t fVlimhi;
00067 Double_t fUndefi;
00068 Double_t fBigedm;
00069 Double_t fUpdflt;
00070 Double_t fXmidcr;
00071 Double_t fYmidcr;
00072 Double_t fXdircr;
00073 Double_t fYdircr;
00074
00075 Double_t *fU;
00076 Double_t *fAlim;
00077 Double_t *fBlim;
00078 Double_t *fErp;
00079 Double_t *fErn;
00080 Double_t *fWerr;
00081 Double_t *fGlobcc;
00082 Double_t *fX;
00083 Double_t *fXt;
00084 Double_t *fDirin;
00085 Double_t *fXs;
00086 Double_t *fXts;
00087 Double_t *fDirins;
00088 Double_t *fGrd;
00089 Double_t *fG2;
00090 Double_t *fGstep;
00091 Double_t *fGin;
00092 Double_t *fDgrd;
00093 Double_t *fGrds;
00094 Double_t *fG2s;
00095 Double_t *fGsteps;
00096 Double_t *fVhmat;
00097 Double_t *fVthmat;
00098 Double_t *fP;
00099 Double_t *fPstar;
00100 Double_t *fPstst;
00101 Double_t *fPbar;
00102 Double_t *fPrho;
00103 Double_t *fWord7;
00104 Double_t *fXpt;
00105 Double_t *fYpt;
00106
00107 Double_t *fCONTgcc;
00108 Double_t *fCONTw;
00109 Double_t *fFIXPyy;
00110 Double_t *fGRADgf;
00111 Double_t *fHESSyy;
00112 Double_t *fIMPRdsav;
00113 Double_t *fIMPRy;
00114 Double_t *fMATUvline;
00115 Double_t *fMIGRflnu;
00116 Double_t *fMIGRstep;
00117 Double_t *fMIGRgs;
00118 Double_t *fMIGRvg;
00119 Double_t *fMIGRxxs;
00120 Double_t *fMNOTxdev;
00121 Double_t *fMNOTw;
00122 Double_t *fMNOTgcc;
00123 Double_t *fPSDFs;
00124 Double_t *fSEEKxmid;
00125 Double_t *fSEEKxbest;
00126 Double_t *fSIMPy;
00127 Double_t *fVERTq;
00128 Double_t *fVERTs;
00129 Double_t *fVERTpp;
00130 Double_t *fCOMDplist;
00131 Double_t *fPARSplist;
00132
00133 Int_t *fNvarl;
00134 Int_t *fNiofex;
00135 Int_t *fNexofi;
00136 Int_t *fIpfix;
00137 Int_t fNu;
00138 Int_t fIsysrd;
00139 Int_t fIsyswr;
00140 Int_t fIsyssa;
00141 Int_t fNpagwd;
00142 Int_t fNpagln;
00143 Int_t fNewpag;
00144 Int_t fIstkrd[10];
00145 Int_t fNstkrd;
00146 Int_t fIstkwr[10];
00147 Int_t fNstkwr;
00148 Int_t fISW[7];
00149 Int_t fIdbg[11];
00150 Int_t fNblock;
00151 Int_t fIcomnd;
00152 Int_t fNfcn;
00153 Int_t fNfcnmx;
00154 Int_t fNfcnlc;
00155 Int_t fNfcnfr;
00156 Int_t fItaur;
00157 Int_t fIstrat;
00158 Int_t fNwrmes[2];
00159 Int_t fNfcwar[20];
00160 Int_t fIcirc[2];
00161 Int_t fStatus;
00162 Int_t fKe1cr;
00163 Int_t fKe2cr;
00164 Bool_t fLwarn;
00165 Bool_t fLrepor;
00166 Bool_t fLimset;
00167 Bool_t fLnolim;
00168 Bool_t fLnewmn;
00169 Bool_t fLphead;
00170 Bool_t fGraphicsMode;
00171 char *fChpt;
00172 TString *fCpnam;
00173 TString fCfrom;
00174 TString fCstatu;
00175 TString fCtitl;
00176 TString fCword;
00177 TString fCundef;
00178 TString fCvrsn;
00179 TString fCovmes[4];
00180 TString fOrigin[kMAXWARN];
00181 TString fWarmes[kMAXWARN];
00182 TObject *fObjectFit;
00183 TObject *fPlot;
00184 TMethodCall *fMethodCall;
00185 void (*fFCN)(Int_t &npar, Double_t *gin, Double_t &f, Double_t *u, Int_t flag);
00186
00187
00188 public:
00189 TMinuit();
00190 TMinuit(Int_t maxpar);
00191 virtual ~TMinuit();
00192 virtual void BuildArrays(Int_t maxpar=15);
00193 virtual TObject *Clone(const char *newname="") const;
00194 virtual Int_t Command(const char *command);
00195 virtual TObject *Contour(Int_t npoints=10, Int_t pa1=0, Int_t pa2=1);
00196 virtual Int_t DefineParameter( Int_t parNo, const char *name, Double_t initVal, Double_t initErr, Double_t lowerLimit, Double_t upperLimit );
00197 virtual void DeleteArrays();
00198 virtual Int_t Eval(Int_t npar, Double_t *grad, Double_t &fval, Double_t *par, Int_t flag);
00199 virtual Int_t FixParameter( Int_t parNo );
00200 TMethodCall *GetMethodCall() const {return fMethodCall;}
00201 TObject *GetObjectFit() const {return fObjectFit;}
00202 Int_t GetMaxIterations() const {return fMaxIterations;}
00203 virtual Int_t GetNumFixedPars() const;
00204 virtual Int_t GetNumFreePars() const;
00205 virtual Int_t GetNumPars() const;
00206 virtual Int_t GetParameter( Int_t parNo, Double_t ¤tValue, Double_t ¤tError ) const;
00207 virtual TObject *GetPlot() const {return fPlot;}
00208 Int_t GetStatus() const {return fStatus;}
00209 virtual Int_t Migrad();
00210 virtual void mnamin();
00211 virtual void mnbins(Double_t a1, Double_t a2, Int_t naa, Double_t &bl, Double_t &bh, Int_t &nb, Double_t &bwid);
00212 virtual void mncalf(Double_t *pvec, Double_t &ycalf);
00213 virtual void mncler();
00214 virtual void mncntr(Int_t ke1, Int_t ke2, Int_t &ierrf);
00215 virtual void mncomd(const char *crdbin, Int_t &icondn);
00216 virtual void mncont(Int_t ke1, Int_t ke2, Int_t nptu, Double_t *xptu, Double_t *yptu, Int_t &ierrf);
00217 virtual void mncrck(TString crdbuf, Int_t maxcwd, TString &comand, Int_t &lnc
00218 , Int_t mxp, Double_t *plist, Int_t &llist, Int_t &ierr, Int_t isyswr);
00219 virtual void mncros(Double_t &aopt, Int_t &iercr);
00220 virtual void mncuve();
00221 virtual void mnderi();
00222 virtual void mndxdi(Double_t pint, Int_t ipar, Double_t &dxdi);
00223 virtual void mneig(Double_t *a, Int_t ndima, Int_t n, Int_t mits, Double_t *work, Double_t precis, Int_t &ifault);
00224 virtual void mnemat(Double_t *emat, Int_t ndim);
00225 virtual void mnerrs(Int_t number, Double_t &eplus, Double_t &eminus, Double_t &eparab, Double_t &gcc);
00226 virtual void mneval(Double_t anext, Double_t &fnext, Int_t &ierev);
00227 virtual void mnexcm(const char *comand, Double_t *plist, Int_t llist, Int_t &ierflg) ;
00228 virtual void mnexin(Double_t *pint);
00229 virtual void mnfixp(Int_t iint, Int_t &ierr);
00230 virtual void mnfree(Int_t k);
00231 virtual void mngrad();
00232 virtual void mnhelp(TString comd);
00233 virtual void mnhelp(const char *command="");
00234 virtual void mnhess();
00235 virtual void mnhes1();
00236 virtual void mnimpr();
00237 virtual void mninex(Double_t *pint);
00238 virtual void mninit(Int_t i1, Int_t i2, Int_t i3);
00239 virtual void mnlims();
00240 virtual void mnline(Double_t *start, Double_t fstart, Double_t *step, Double_t slope, Double_t toler);
00241 virtual void mnmatu(Int_t kode);
00242 virtual void mnmigr();
00243 virtual void mnmnos();
00244 virtual void mnmnot(Int_t ilax, Int_t ilax2, Double_t &val2pl, Double_t &val2mi);
00245 virtual void mnparm(Int_t k, TString cnamj, Double_t uk, Double_t wk, Double_t a, Double_t b, Int_t &ierflg);
00246 virtual void mnpars(TString &crdbuf, Int_t &icondn);
00247 virtual void mnpfit(Double_t *parx2p, Double_t *pary2p, Int_t npar2p, Double_t *coef2p, Double_t &sdev2p);
00248 virtual void mnpint(Double_t &pexti, Int_t i, Double_t &pinti);
00249 virtual void mnplot(Double_t *xpt, Double_t *ypt, char *chpt, Int_t nxypt, Int_t npagwd, Int_t npagln);
00250 virtual void mnpout(Int_t iuext, TString &chnam, Double_t &val, Double_t &err, Double_t &xlolim, Double_t &xuplim, Int_t &iuint) const;
00251 virtual void mnprin(Int_t inkode, Double_t fval);
00252 virtual void mnpsdf();
00253 virtual void mnrazz(Double_t ynew, Double_t *pnew, Double_t *y, Int_t &jh, Int_t &jl);
00254 virtual void mnrn15(Double_t &val, Int_t &inseed);
00255 virtual void mnrset(Int_t iopt);
00256 virtual void mnsave();
00257 virtual void mnscan();
00258 virtual void mnseek();
00259 virtual void mnset();
00260 virtual void mnsimp();
00261 virtual void mnstat(Double_t &fmin, Double_t &fedm, Double_t &errdef, Int_t &npari, Int_t &nparx, Int_t &istat);
00262 virtual void mntiny(Double_t epsp1, Double_t &epsbak);
00263 Bool_t mnunpt(TString &cfname);
00264 virtual void mnvert(Double_t *a, Int_t l, Int_t m, Int_t n, Int_t &ifail);
00265 virtual void mnwarn(const char *copt, const char *corg, const char *cmes);
00266 virtual void mnwerr();
00267 virtual Int_t Release( Int_t parNo );
00268 virtual Int_t SetErrorDef( Double_t up );
00269 virtual void SetFCN(void *fcn);
00270 virtual void SetFCN(void (*fcn)(Int_t &, Double_t *, Double_t &f, Double_t *, Int_t));
00271 virtual void SetGraphicsMode(Bool_t mode=kTRUE) {fGraphicsMode = mode;}
00272 virtual void SetMaxIterations(Int_t maxiter=500) {fMaxIterations = maxiter;}
00273 virtual void SetObjectFit(TObject *obj) {fObjectFit=obj;}
00274 virtual Int_t SetPrintLevel( Int_t printLevel=0 );
00275
00276 ClassDef(TMinuit,1)
00277 };
00278
00279 R__EXTERN TMinuit *gMinuit;
00280
00281 #endif
00282