161 for (
int i = 0; i<5; ++i)
fINDFLG[i] = 0;
220 gROOT->GetListOfSpecials()->Remove(
this);
462 case 0:
case 3:
case 2:
case 28:
484 if (
nargs<1)
return -1;
485 for (i=0;i<
nargs;i++) {
491 if (
nargs<1)
return 0;
493 for (i=0;i<
fNpar;i++)
502 if (
nargs<1)
return -1;
503 for (i=0;i<
nargs;i++) {
516 Printf(
"SAVe command is obsolete");
521 {
if(
nargs<1)
return -1;
542 case 26:
case 27:
case 29:
case 30:
case 31:
case 32:
544 case 33:
case 34:
case 35:
case 36:
case 37:
case 38:
546 Printf(
"Obsolete command. Use corresponding SET command instead");
560 static const char *
cname[30] = {
627 for (i=0;i<
fNpar;i++)
643 Printf(
"Limits for param %s: Low=%E, High=%E",
665 Printf(
"Limits for param %s Low=%E, High=%E",
673 Printf(
"\nCovariant matrix ");
675 for (i=0;i<
fNpar;i++)
if(
fPL0[i]>0.) nn++;
681 std::cout<<std::endl;
683 std::cout<<std::endl;
688 Printf(
"\nGlobal correlation factors (maximum correlation of the parameter\n with arbitrary linear combination of other parameters)");
689 for(i=0;i<
fNpar;i++) {
693 std::cout<<std::endl;
735 Printf(
"Relative floating point precision RP=%E",
fRP);
750 Printf(
"FUMILI-ROOT version 0.1");
775 if(ipar>=0 && ipar<
fNpar &&
fPL0[ipar]>0.) {
797 Error(
"GetCovarianceMatrixElement",
"Illegal arguments i=%d, j=%d",i,
j);
838 else return fA[ipar];
953 Int_t i, k,
l,
ii,
ki,
li,
kk,
ni, ll,
nk,
nl,
ir,
lk;
964 for (i = 1; i <=
n; ++i) {
967 if (
pl_1[
ir] <= 0.0e0)
goto L1;
970 ni = i * (i - 1) / 2;
979 if (
nl -
ni <= 0)
goto L5;
989 if (i -
n >= 0)
goto L12;
993 nk = k * (k - 1) / 2;
1005 if (
l - i <= 0)
goto L9;
1013 if (
l <= 0)
goto L10;
1017 if (k - i - 1 <= 0)
goto L11;
1023 for (i = 1; i <=
n; ++i) {
1024 for (k = i; k <=
n; ++k) {
1025 nl = k * (k - 1) / 2;
1028 for (
l = k;
l <=
n; ++
l) {
1034 ki = k * (k - 1) / 2 + i;
1043 for (i = 1; i <= k; ++i) {
1063 Warning(
"IsFixed",
"Illegal parameter number :%d",ipar);
1098 for( i = 0; i <
fNpar; i++) {
1127 for( i=0; i <
n; i++) {
1144 for( i = 0; i <
n; i++) {
1157 for( i=0; i <
nn0; i++)
fZ[i]=0.;
1169 if(!
ijkl)
return 10;
1176 for( i=0; i <
nn0; i++)
fZ0[i] =
fZ[i];
1182 if( 0.59*t < -
fGT)
goto L19;
1184 if (t < 0.25 ) t = 0.25;
1190 for( i = 0; i <
n; i++) {
1207 printf(
"trying to execute an illegal jump at L85\n");
1218 for( i = 0; i <
n; i++) {
1225 if ((
fA[i] >=
fAMX[i] &&
fGr[i] < 0.) ||
1232 for(
j=0;
j <= i;
j++) {
1253 for( i = 0; i <
n; i++) {
1276 for( i = 0; i <
n; i++) {
1280 for(
l = 0;
l <
n;
l++) {
1300 for( i = 0; i <
n; i++)
1338 for( i = 0; i <
n; i++) {
1375 for( i = 0; i <
n; i++) {
1447 for ( i = 0; i <
n; i++)
fA[i] =
fA[i] +
fDA[i];
1494 xsexpl=
"****\n* FUNCTION IS NOT DECREASING OR BAD DERIVATIVES\n****";
1498 xsexpl=
"****\n* ESTIMATED ERRORS ARE INfiNITE\n****";
1502 xsexpl=
"****\n* MAXIMUM NUMBER OF ITERATIONS IS EXCEEDED\n****";
1506 xsexpl=
"****\n* PROBABILITY OF LIKLIHOOD FUNCTION IS NEGATIVE OR ZERO\n****";
1510 xsexpl=
"****\n* fiT IS IN PROGRESS\n****";
1518 colhdl[1] =
" NEGATIVE ";
1519 colhdl[2] =
" POSITIVE ";
1524 colhdu[1] =
" INTERNAL ";
1525 colhdl[1] =
" STEP SIZE ";
1526 colhdu[2] =
" INTERNAL ";
1535 colhdl[2] =
" DERIVATIVE";
1538 colhdu[0] =
" PARABOLIC ";
1542 colhdl[1] =
" NEGATIVE ";
1543 colhdl[2] =
" POSITIVE ";
1546 Printf(
" FCN=%g FROM FUMILI STATUS=%-10s %9d CALLS OF FCN",
1549 Printf(
" EXT PARAMETER %-14s%-14s%-14s",
1550 (
const char*)
colhdu[0].Data()
1551 ,(
const char*)
colhdu[1].Data()
1552 ,(
const char*)
colhdu[2].Data());
1553 Printf(
" NO. NAME VALUE %-14s%-14s%-14s",
1554 (
const char*)
colhdl[0].Data()
1555 ,(
const char*)
colhdl[1].Data()
1556 ,(
const char*)
colhdl[2].Data());
1573 cx2 =
" *undefined* ";
1574 cx3 =
" *undefined* ";
1577 Printf(
"%4d %-11s%14.5e%14.5e%-14s%-14s",i+1
1587 if(ipar>=0 && ipar<
fNpar &&
fPL0[ipar]<=0.) {
1707 fS =
fS + (
y*
y/(sig*sig))*.5;
1710 for (i=0;i<
fNpar;i++) {
1713 fGr[i] += df[
n]*(
y/sig);
1720 fZ[
l++] += df[i]*df[
j];
1757 if(
flag == 9)
return;
1768 if (nd > 2)
x[2] = cache[4];
1769 if (nd > 1)
x[1] = cache[3];
1791 zik[
l++] += df[
j]*df[k];
1824 if(
flag == 9)
return;
1838 fu =
f1->
Integral(cache[2] - 0.5*cache[3],cache[2] + 0.5*cache[3])/cache[3];
1839 }
else if (nd < 3) {
1840 fu = ((
TF2*)
f1)->Integral(cache[2] - 0.5*cache[3],cache[2] + 0.5*cache[3],cache[4] - 0.5*cache[5],cache[4] + 0.5*cache[5])/(cache[3]*cache[5]);
1842 fu = ((
TF3*)
f1)->Integral(cache[2] - 0.5*cache[3],cache[2] + 0.5*cache[3],cache[4] - 0.5*cache[5],cache[4] + 0.5*cache[5],cache[6] - 0.5*cache[7],cache[6] + 0.5*cache[7])/(cache[3]*cache[5]*cache[7]);
1861 zik[
l++] += df[
j]*df[k];
1905 if(
flag == 9)
return;
1914 if (nd > 2)
x[2] = cache[4];
1915 if (nd > 1)
x[1] = cache[3];
1927 if (
fu < 1.e-9)
fu = 1.e-9;
1948 zik[
l++] += df[
j]*df[k];
1990 if(
flag == 9) {
delete [] df;
return;}
1998 if (nd > 2)
x[2] = cache[4];
1999 if (nd > 1)
x[1] = cache[3];
2004 fu =
f1->
Integral(cache[2] - 0.5*cache[3],cache[2] + 0.5*cache[3])/cache[3];
2005 }
else if (nd < 3) {
2006 fu = ((
TF2*)
f1)->Integral(cache[2] - 0.5*cache[3],cache[2] + 0.5*cache[3],cache[4] - 0.5*cache[5],cache[4] + 0.5*cache[5])/(cache[3]*cache[5]);
2008 fu = ((
TF3*)
f1)->Integral(cache[2] - 0.5*cache[3],cache[2] + 0.5*cache[3],cache[4] - 0.5*cache[5],cache[4] + 0.5*cache[5],cache[6] - 0.5*cache[7],cache[6] + 0.5*cache[7])/(cache[3]*cache[5]*cache[7]);
2017 if (
fu < 1.e-9)
fu = 1.e-9;
2038 zik[
l++] += df[
j]*df[k];
2131 if(
flag == 9)
return;
2139 for (bin=0;bin<
n;bin++) {
2157 if (
exh > 0 &&
exl > 0) {
2163 if (eu <= 0) eu = 1;
2169 for (i=0;i<
npar;i++) {
2180 zik[
l++] += df[i]*df[
j];
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
static const Double_t gMAXDOUBLE
void H1FitChisquareFumili(Int_t &npar, Double_t *gin, Double_t &f, Double_t *u, Int_t flag)
Minimization function for H1s using a Chisquare method.
void GraphFitChisquareFumili(Int_t &npar, Double_t *gin, Double_t &f, Double_t *u, Int_t flag)
Minimization function for Graphs using a Chisquare method.
void H1FitLikelihoodFumili(Int_t &npar, Double_t *gin, Double_t &f, Double_t *u, Int_t flag)
Minimization function for H1s using a Likelihood method.
static const Double_t gMINDOUBLE
R__EXTERN TFumili * gFumili
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char cname
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
void Printf(const char *fmt,...)
Formats a string in a circular formatting buffer and prints the string.
static void RejectPoint(Bool_t reject=kTRUE)
Static function to set the global flag to reject points the fgRejectPoint global flag is tested by al...
virtual Double_t Derivative(Double_t x, Double_t *params=nullptr, Double_t epsilon=0.001) const
Returns the first derivative of the function at point x, computed by Richardson's extrapolation metho...
virtual Int_t GetNpar() const
virtual Double_t Integral(Double_t a, Double_t b, Double_t epsrel=1.e-12)
IntegralOneDim or analytical integral.
virtual void SetNumberFitPoints(Int_t npfits)
virtual void InitArgs(const Double_t *x, const Double_t *params)
Initialize parameters addresses.
virtual Double_t EvalPar(const Double_t *x, const Double_t *params=nullptr)
Evaluate function with given coordinates and parameters.
static Bool_t RejectedPoint()
See TF1::RejectPoint above.
virtual void SetParameters(const Double_t *params)
virtual Bool_t IsInside(const Double_t *x) const
return kTRUE if the point is inside the function range
A 2-Dim function with parameters.
A 3-Dim function with parameters.
Double_t GetParameter(Int_t ipar) const override
Return current value of parameter ipar.
void DeleteArrays()
Deallocates memory. Called from destructor TFumili::~TFumili.
Bool_t fNumericDerivatives
Double_t GetParError(Int_t ipar) const override
Return error of parameter ipar.
Bool_t IsFixed(Int_t ipar) const override
Return kTRUE if parameter ipar is fixed, kFALSE otherwise)
Int_t fNED2
K - Length of vector X plus 2 (for chi2)
Double_t GetCovarianceMatrixElement(Int_t i, Int_t j) const override
Return element i,j from the covariance matrix.
Int_t ExecuteCommand(const char *command, Double_t *args, Int_t nargs) override
Execute MINUIT commands.
Int_t fNpar
fNpar - number of parameters
void PrintResults(Int_t k, Double_t p) const override
Prints fit results.
Int_t GetNumberFreeParameters() const override
Return the number of free parameters.
Int_t GetNumberTotalParameters() const override
Return the total number of parameters (free + fixed)
Double_t * GetCovarianceMatrix() const override
Return a pointer to the covariance matrix.
virtual void FitLikelihood(Int_t &npar, Double_t *gin, Double_t &f, Double_t *u, Int_t flag)
Minimization function for H1s using a Likelihood method.
~TFumili() override
TFumili destructor.
Int_t GetStats(Double_t &amin, Double_t &edm, Double_t &errdef, Int_t &nvpar, Int_t &nparx) const override
Return global fit parameters.
Double_t * fEXDA
[fNED12] experimental data poInt_ter
Int_t SGZ()
Evaluates objective function ( chi-square ), gradients and Z-matrix using data provided by user via T...
void ReleaseParameter(Int_t ipar) override
Releases parameter number ipar.
virtual void FitChisquare(Int_t &npar, Double_t *gin, Double_t &f, Double_t *u, Int_t flag)
Minimization function for H1s using a Chisquare method.
const char * GetParName(Int_t ipar) const override
Return name of parameter ipar.
void FixParameter(Int_t ipar) override
Fixes parameter number ipar.
void Derivatives(Double_t *, Double_t *)
Calculates partial derivatives of theoretical function.
Double_t * fAMN
[fMaxParam] Minimum param value
TString * fANames
[fMaxParam] Parameter names
Double_t * GetPL0() const
Double_t * fPL
[fMaxParam] Limits for parameters step. If <0, then parameter is fixed
Int_t Eval(Int_t &npar, Double_t *grad, Double_t &fval, Double_t *par, Int_t flag)
Evaluate the minimisation function.
void SetParNumber(Int_t ParNum)
void SetData(Double_t *, Int_t, Int_t)
Sets pointer to data array provided by user.
Int_t fINDFLG[5]
internal flags;
Double_t EvalTFN(Double_t *, Double_t *)
Evaluate theoretical function.
Double_t * fParamError
[fMaxParam] Parameter errors
Double_t Chisquare(Int_t npar, Double_t *params) const override
return a chisquare equivalent
Int_t fENDFLG
End flag of fit.
Double_t * fR
[fMaxParam] Correlation factors
Double_t * fDA
[fMaxParam] Parameter step
void SetFitMethod(const char *name) override
ret fit method (chisquare or log-likelihood)
Int_t fNstepDec
fNstepDec - maximum number of step decreasing counter
Int_t GetErrors(Int_t ipar, Double_t &eplus, Double_t &eminus, Double_t &eparab, Double_t &globcc) const override
Return errors after MINOs not implemented.
Double_t * fZ0
[fMaxParam2] Matrix of approximate second derivatives of objective function This matrix is diagonal a...
Double_t * fPL0
[fMaxParam] Step initial bounds
Double_t * fA
[fMaxParam] Fit parameter array
Int_t Minimize()
Main minimization procedure.
Int_t fNmaxIter
fNmaxIter - maximum number of iterations
Int_t ExecuteSetCommand(Int_t)
Called from TFumili::ExecuteCommand in case of "SET xxx" and "SHOW xxx".
Double_t fS
fS - objective function value (return)
Double_t fEPS
fEPS - required precision of parameters. If fEPS<0 then
virtual void FitChisquareI(Int_t &npar, Double_t *gin, Double_t &f, Double_t *u, Int_t flag)
Minimization function for H1s using a Chisquare method.
Int_t fNfcn
Number of FCN calls;.
Int_t fLastFixed
Last fixed parameter number.
void BuildArrays()
Allocates memory for internal arrays.
Double_t * fZ
[fMaxParam2] Inverse fZ0 matrix - covariance matrix
Bool_t fLogLike
LogLikelihood flag.
Int_t fNED1
Number of experimental vectors X=(x1,x2,...xK)
void Clear(Option_t *opt="") override
Resets all parameter names, values and errors to zero.
Double_t * fGr
[fMaxParam] Gradients of objective function
Double_t fGT
Expected function change in next iteration.
Int_t SetParameter(Int_t ipar, const char *parname, Double_t value, Double_t verr, Double_t vlow, Double_t vhigh) override
Sets for parameter number ipar initial parameter value, name parname, initial error verr and limits v...
TString fCword
Command string.
virtual void FitLikelihoodI(Int_t &npar, Double_t *gin, Double_t &f, Double_t *u, Int_t flag)
Minimization function for H1s using a Likelihood method.
Double_t fRP
Precision of fit ( machine zero on CDC 6000) quite old yeh?
Double_t * fCmPar
[fMaxParam] parameters of commands
Double_t * fDF
[fMaxParam] First derivatives of theoretical function
Double_t GetSumLog(Int_t) override
Return Sum(log(i) i=0,n used by log-likelihood fits.
Double_t * fSumLog
[fNlog]
Double_t * fAMX
[fMaxParam] Maximum param value
Int_t fNlimMul
fNlimMul - after fNlimMul successful iterations permits four-fold increasing of fPL
Bool_t fGRAD
user calculated gradients
void InvertZ(Int_t)
Inverts packed diagonal matrix Z by square-root method.
Double_t GetErrorY(Int_t bin) const override
It returns the error along Y at point i.
Double_t GetErrorXhigh(Int_t bin) const override
It returns the error along X at point i.
Double_t GetErrorXlow(Int_t bin) const override
It returns the error along X at point i.
A TGraph is an object made of two arrays X and Y with npoints each.
TH1 is the base class of all histogram classes in ROOT.
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
@ kInvalidObject
if object ctor succeeded but object should not be used
const char * Data() const
void ToUpper()
Change string to upper case.
Int_t fPointSize
Number of words per point in the cache.
virtual TObject * GetObjectFit() const
TObject * fUserFunc
Pointer to user theoretical function (a TF1*)
virtual Foption_t GetFitOption() const
virtual void SetFCN(void(*fcn)(Int_t &, Double_t *, Double_t &f, Double_t *, Int_t))
To set the address of the minimization objective function called by the native compiler (see function...
Double_t * fCache
[fCacheSize] Array of points data (fNpoints*fPointSize < fCacheSize words)
void(* fFCN)(Int_t &npar, Double_t *gin, Double_t &f, Double_t *u, Int_t flag)
static TVirtualFitter * GetFitter()
static: return the current Fitter
virtual TObject * GetUserFunc() const
Int_t fNpoints
Number of points to fit.
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
Double_t Log(Double_t x)
Returns the natural logarithm of x.
Double_t Sqrt(Double_t x)
Returns the square root of x.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.