Revision 95fa392878f569fed9374e316146dcc386f6e6b6 authored by Rene Brun on 02 February 2002, 11:56:14 UTC, committed by Rene Brun on 02 February 2002, 11:56:14 UTC
git-svn-id: http://root.cern.ch/svn/root/trunk@3838 27541ba8-7e3a-0410-8455-c3a389f83636
1 parent 77c228f
TMinuit.h
// @(#)root/minuit:$Name: $:$Id: TMinuit.h,v 1.1.1.1 2000/05/16 17:00:44 rdm Exp $
// Author: Rene Brun, Frederick James 12/08/95
/*************************************************************************
* Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/
// ---------------------------------- minuit.h
//////////////////////////////////////////////////////////////////////////
// //
// TMinuit //
// //
// The MINUIT minimisation package (base class) //
// //
//////////////////////////////////////////////////////////////////////////
#ifndef ROOT_TMinuit
#define ROOT_TMinuit
#ifndef ROOT_TNamed
#include "TNamed.h"
#endif
#ifndef ROOT_TMethodCall
#include "TMethodCall.h"
#endif
class TMinuit : public TNamed {
private:
TMinuit(const TMinuit &m);
// should become private....
public:
Double_t fAmin; //Minimum value found for FCN
Double_t fUp; //FCN+-UP defines errors (for chisquare fits UP=1)
Double_t fEDM; //Estimated vertical distance to the minimum
Double_t fFval3; //
Double_t fEpsi; //
Double_t fApsi; //
Double_t fDcovar; //Relative change in covariance matrix
Double_t fEpsmac; //machine precision for floating points:
Double_t fEpsma2; //sqrt(fEpsmac)
Double_t fVlimlo; //
Double_t fVlimhi; //
Double_t fUndefi; //Undefined number = -54321
Double_t fBigedm; //Big EDM = 123456
Double_t fUpdflt; //
Double_t fXmidcr; //
Double_t fYmidcr; //
Double_t fXdircr; //
Double_t fYdircr; //
Double_t *fU; //External (visible to user in FCN) value of parameters
Double_t *fAlim; //Lower limits for parameters. If zero no limits
Double_t *fBlim; //Upper limits for parameters
Double_t *fErp; //Positive Minos errors if calculated
Double_t *fErn; //Negative Minos errors if calculated
Double_t *fWerr; //External parameters error (standard deviation, defined by UP)
Double_t *fGlobcc; //Global Correlation Coefficients
Double_t *fX; //Internal parameters values
Double_t *fXt; //Internal parameters values X saved as Xt
Double_t *fDirin; //(Internal) step sizes for current step
Double_t *fXs; //Internal parameters values saved for fixed params
Double_t *fXts; //Internal parameters values X saved as Xt for fixed params
Double_t *fDirins; //(Internal) step sizes for current step for fixed params
Double_t *fGrd; //First derivatives
Double_t *fG2; //
Double_t *fGstep; //Step sizes
Double_t *fGin; //
Double_t *fDgrd; //Uncertainties
Double_t *fGrds; //
Double_t *fG2s; //
Double_t *fGsteps; //
Double_t *fVhmat; //(Internal) error matrix stored as Half MATrix, since it is symmetric
Double_t *fVthmat; //VHMAT is sometimes saved in VTHMAT, especially in MNMNOT
Double_t *fP; //
Double_t *fPstar; //
Double_t *fPstst; //
Double_t *fPbar; //
Double_t *fPrho; //Minimum point of parabola
Double_t *fWord7; //
Double_t *fXpt; //X array of points for contours
Double_t *fYpt; //Y array of points for contours
Double_t *fCONTgcc; //[kMAXDIM] array used in mncont
Double_t *fCONTw; //[kMAXDIM] array used in mncont
Double_t *fFIXPyy; //[kMAXDIM] array used in mnfixp
Double_t *fGRADgf; //[kMAXDIM] array used in mngrad
Double_t *fHESSyy; //[kMAXDIM] array used in mnhess
Double_t *fIMPRdsav; //[kMAXDIM] array used in mnimpr
Double_t *fIMPRy; //[kMAXDIM] array used in mnimpr
Double_t *fMATUvline; //[kMAXDIM] array used in mnmatu
Double_t *fMIGRflnu; //[kMAXDIM] array used in mnmigr
Double_t *fMIGRstep; //[kMAXDIM] array used in mnmigr
Double_t *fMIGRgs; //[kMAXDIM] array used in mnmigr
Double_t *fMIGRvg; //[kMAXDIM] array used in mnmigr
Double_t *fMIGRxxs; //[kMAXDIM] array used in mnmigr
Double_t *fMNOTxdev; //[kMAXDIM] array used in mnmnot
Double_t *fMNOTw; //[kMAXDIM] array used in mnmnot
Double_t *fMNOTgcc; //[kMAXDIM] array used in mnmnot
Double_t *fPSDFs; //[kMAXDIM] array used in mnpsdf
Double_t *fSEEKxmid; //[kMAXDIM] array used in mnseek
Double_t *fSEEKxbest; //[kMAXDIM] array used in mnseek
Double_t *fSIMPy; //[kMAXDIM] array used in mnsimp
Double_t *fVERTq; //[kMAXDIM] array used in mnvert
Double_t *fVERTs; //[kMAXDIM] array used in mnvert
Double_t *fVERTpp; //[kMAXDIM] array used in mnvert
Double_t *fCOMDplist; //[kMAXP] array used in mncomd
Double_t *fPARSplist; //[kMAXP] array used in mnpars
Int_t *fNvarl; //parameters flag (-1=undefined, 0=constant..)
Int_t *fNiofex; //Internal parameters number, or zero if not currently variable
Int_t *fNexofi; //External parameters number for currently variable parameters
Int_t *fIpfix; //List of fixed parameters
Int_t fNpfix; //Number of fixed parameters
Int_t fEmpty; //Initialization flag (1 = Minuit initialized)
Int_t fMaxpar; //Maximum number of parameters
Int_t fMaxint; //Maximum number of internal parameters
Int_t fNpar; //Number of free parameters (total number of pars = fNpar + fNfix)
Int_t fMaxext; //Maximum number of external parameters
Int_t fMaxIterations; //Maximum number of iterations
Int_t fNu; //
Int_t fIsysrd; //standardInput unit
Int_t fIsyswr; //standard output unit
Int_t fIsyssa; //
Int_t fNpagwd; //Page width
Int_t fNpagln; //Number of lines per page
Int_t fNewpag; //
Int_t fIstkrd[10]; //
Int_t fNstkrd; //
Int_t fIstkwr[10]; //
Int_t fNstkwr; //
Int_t fISW[7]; //Array of switches
Int_t fIdbg[11]; //Array of internal debug switches
Int_t fNblock; //Number of Minuit data blocks
Int_t fIcomnd; //Number of commands
Int_t fNfcn; //Number of calls to FCN
Int_t fNfcnmx; //Maximum number of calls to FCN
Int_t fNfcnlc; //
Int_t fNfcnfr; //
Int_t fItaur; //
Int_t fIstrat; //
Int_t fNwrmes[2]; //
Int_t fNfcwar[20]; //
Int_t fIcirc[2]; //
Int_t fStatus; //Status flag for the last called Minuit function
Int_t fKe1cr; //
Int_t fKe2cr; //
Bool_t fLwarn; //true if warning messges are to be put out (default=true)
Bool_t fLrepor; //true if exceptional conditions are put out (default=false)
Bool_t fLimset; //true if a parameter is up against limits (for MINOS)
Bool_t fLnolim; //true if there are no limits on any parameters (not yet used)
Bool_t fLnewmn; //true if the previous process has unexpectedly improved FCN
Bool_t fLphead; //true if a heading should be put out for the next parameter definition
char *fChpt; //Character to be plotted at the X,Y contour positions
TString *fCpnam; //Array of parameters names
TString fCfrom; //
TString fCstatu; //
TString fCtitl; //
TString fCword; //
TString fCundef; //
TString fCvrsn; //
TString fCovmes[4]; //
TString *fOrigin; //
TString *fWarmes; //
TObject *fObjectFit; //Pointer to object being fitted
TMethodCall *fMethodCall; //Pointer to MethodCall in case of interpreted function
void (*fFCN)(Int_t &npar, Double_t *gin, Double_t &f, Double_t *u, Int_t flag);
// methods performed on TMinuit class
public:
TMinuit();
TMinuit(Int_t maxpar);
virtual ~TMinuit();
virtual void BuildArrays(Int_t maxpar=15);
virtual Int_t Command(const char *command);
virtual TObject *Contour(Int_t npoints=10, Int_t pa1=0, Int_t pa2=1);
virtual Int_t DefineParameter( Int_t parNo, const char *name, Double_t initVal, Double_t initErr, Double_t lowerLimit, Double_t upperLimit );
virtual void DeleteArrays();
virtual Int_t FixParameter( Int_t parNo );
TMethodCall *GetMethodCall() {return fMethodCall;}
TObject *GetObjectFit() {return fObjectFit;}
Int_t GetMaxIterations() {return fMaxIterations;}
virtual Int_t GetNumFixedPars();
virtual Int_t GetNumFreePars();
virtual Int_t GetNumPars();
virtual Int_t GetParameter( Int_t parNo, Double_t ¤tValue, Double_t ¤tError );
Int_t GetStatus() {return fStatus;}
virtual Int_t Migrad();
virtual void mnamin();
virtual void mnbins(Double_t a1, Double_t a2, Int_t naa, Double_t &bl, Double_t &bh, Int_t &nb, Double_t &bwid);
virtual void mncalf(Double_t *pvec, Double_t &ycalf);
virtual void mncler();
virtual void mncntr(Int_t ke1, Int_t ke2, Int_t &ierrf);
virtual void mncomd(const char *crdbin, Int_t &icondn);
virtual void mncont(Int_t ke1, Int_t ke2, Int_t nptu, Double_t *xptu, Double_t *yptu, Int_t &ierrf);
virtual void mncrck(TString crdbuf, Int_t maxcwd, TString &comand, Int_t &lnc
, Int_t mxp, Double_t *plist, Int_t &llist, Int_t &ierr, Int_t isyswr);
virtual void mncros(Double_t &aopt, Int_t &iercr);
virtual void mncuve();
virtual void mnderi();
virtual void mndxdi(Double_t pint, Int_t ipar, Double_t &dxdi);
virtual void mneig(Double_t *a, Int_t ndima, Int_t n, Int_t mits, Double_t *work, Double_t precis, Int_t &ifault);
virtual void mnemat(Double_t *emat, Int_t ndim);
virtual void mnerrs(Int_t number, Double_t &eplus, Double_t &eminus, Double_t &eparab, Double_t &gcc);
virtual void mneval(Double_t anext, Double_t &fnext, Int_t &ierev);
virtual void mnexcm(const char *comand, Double_t *plist, Int_t llist, Int_t &ierflg) ;
virtual void mnexin(Double_t *pint);
virtual void mnfixp(Int_t iint, Int_t &ierr);
virtual void mnfree(Int_t k);
virtual void mngrad();
virtual void mnhelp(TString comd);
virtual void mnhelp(const char *command="");
virtual void mnhess();
virtual void mnhes1();
virtual void mnimpr();
virtual void mninex(Double_t *pint);
virtual void mninit(Int_t i1, Int_t i2, Int_t i3);
virtual void mnlims();
virtual void mnline(Double_t *start, Double_t fstart, Double_t *step, Double_t slope, Double_t toler);
virtual void mnmatu(Int_t kode);
virtual void mnmigr();
virtual void mnmnos();
virtual void mnmnot(Int_t ilax, Int_t ilax2, Double_t &val2pl, Double_t &val2mi);
virtual void mnparm(Int_t k, TString cnamj, Double_t uk, Double_t wk, Double_t a, Double_t b, Int_t &ierflg);
virtual void mnpars(TString &crdbuf, Int_t &icondn);
virtual void mnpfit(Double_t *parx2p, Double_t *pary2p, Int_t npar2p, Double_t *coef2p, Double_t &sdev2p);
virtual void mnpint(Double_t &pexti, Int_t i, Double_t &pinti);
virtual void mnplot(Double_t *xpt, Double_t *ypt, char *chpt, Int_t nxypt, Int_t npagwd, Int_t npagln);
virtual void mnpout(Int_t iuext, TString &chnam, Double_t &val, Double_t &err, Double_t &xlolim, Double_t &xuplim, Int_t &iuint);
virtual void mnprin(Int_t inkode, Double_t fval);
virtual void mnpsdf();
virtual void mnrazz(Double_t ynew, Double_t *pnew, Double_t *y, Int_t &jh, Int_t &jl);
virtual void mnrn15(Double_t &val, Int_t &inseed);
virtual void mnrset(Int_t iopt);
virtual void mnsave();
virtual void mnscan();
virtual void mnseek();
virtual void mnset();
virtual void mnsimp();
virtual void mnstat(Double_t &fmin, Double_t &fedm, Double_t &errdef, Int_t &npari, Int_t &nparx, Int_t &istat);
virtual void mntiny(Double_t epsp1, Double_t &epsbak);
Bool_t mnunpt(TString &cfname);
virtual void mnvert(Double_t *a, Int_t l, Int_t m, Int_t n, Int_t &ifail);
virtual void mnwarn(const char *copt, const char *corg, const char *cmes);
virtual void mnwerr();
virtual Int_t Release( Int_t parNo );
virtual Int_t SetErrorDef( Double_t up );
virtual void SetFCN(void *fcn);
virtual void SetFCN(void (*fcn)(Int_t &, Double_t *, Double_t &f, Double_t *, Int_t));
virtual void SetMaxIterations(Int_t maxiter=500) {fMaxIterations = maxiter;}
virtual void SetObjectFit(TObject *obj) {fObjectFit=obj;}
virtual Int_t SetPrintLevel( Int_t printLevel=0 );
ClassDef(TMinuit,0) //The MINUIT minimisation package
};
R__EXTERN TMinuit *gMinuit;
#endif
Computing file changes ...