339static const char charal[29] =
" .ABCDEFGHIJKLMNOPQRSTUVWXYZ";
454 gROOT->GetListOfSpecials()->Add(
this);
481 gROOT->GetListOfSpecials()->Add(
this);
491 Error(
"TMinuit",
"can not copy construct TMinuit");
504 if (
gROOT !=
nullptr &&
gROOT->GetListOfSpecials() !=
nullptr)
gROOT->GetListOfSpecials()->Remove(
this);
586 for (
int i = 0; i <
fMaxpar; i++) {
666 Warning(
"Contour",
"Cannot find more than 4 points, no TGraph returned");
674 Warning(
"Contour",
"Returning a TGraph with %d points only",
npfound);
683 if ((
h =
gROOT->GetPluginManager()->FindHandler(
"TMinuitGraph"))) {
684 if (
h->LoadPlugin() != -1)
833 mnexcm(
"FIX", tmp, 1, err );
886 mnexcm(
"MIGRAD", tmp, 0, err );
900 mnexcm(
"RELEASE", tmp, 1, err );
912 mnexcm(
"SET ERRDEF", &
up, 1, err );
939 m->SetParamPtrs(args);
958 mnexcm(
"SET PRINT", tmp, 1, err );
980 Printf(
" FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4.");
1051 if (
naa == -1)
return;
1053 if (
naa > 1 ||
nb == 1)
return;
1058 if (
nb << 1 !=
naa)
return;
1079 for (i = 1; i <=
fNpar; ++i) {
1113 for (i = 1; i <=
fMaxext; ++i) {
1134 static const char *
const clabel =
"0123456789ABCDEFGHIJ";
1141 Int_t i,
ngrid,
ixmid,
nparx,
ix,
nx,
ny,
ki1,
ki2,
ixzero,
iy,
ics;
1177 if (
nx < 11)
nx = 11;
1178 if (
ny < 11)
ny = 11;
1179 if (
nx >= 115)
nx = 114;
1196 for (i = 1; i <= 20; ++i) {
contur[i-1] =
fAmin +
fUp*(i-1)*(i-1); }
1269 Printf(
" %12.4g%s%12.4g",xlo,(
const char*)
chln,xup);
1274 Printf(
" X-AXIS: PARAMETER %3d %s ONE COLUMN=%12.4g"
1283 Printf(
" INVALID PARAMETER NUMBER(S) REQUESTED. IGNORED.");
1319 lenbuf =
crdbuf.Length();
1324 for (i = 1; i <=
TMath::Min(20,lenbuf); ++i) {
1325 if (
crdbuf[i-1] ==
'\'')
break;
1326 if (
crdbuf[i-1] ==
' ') {
1334 if (
ipos > lenbuf) {
1335 Printf(
" BLANK COMMAND IGNORED.");
1368 Printf(
" COMMAND CANNOT BE INTERPRETED");
1405 Int_t nall,
iold,
line,
mpar,
ierr,
inew,
move, next, i,
j,
nfcol,
iercr;
1406 Int_t idist=0,
npcol,
kints,
i2,
i1,
lr,
nfcnco=0,
ki1,
ki2,
ki3,
ke3;
1432 Printf(
" START MNCONTOUR CALCULATION OF %4d POINTS ON CONTOUR.",
nptu);
1437 Printf(
" EACH POINT IS A MINIMUM WITH RESPECT TO PARAMETER %3d %s",
ke3,(
const char*)
fCpnam[
ke3-1]);
1439 Printf(
" EACH POINT IS A MINIMUM WITH RESPECT TO THE OTHER %3d VARIABLE PARAMETERS.",
fNpar - 2);
1449 mnwarn(
"W",
"MNContour ",
"Contour squeezed by parameter limits.");
1458 mnwarn(
"W",
"MNContour ",
"Contour squeezed by parameter limits.");
1469 mnwarn(
"W",
"MNContour ",
"Contour squeezed by parameter limits.");
1477 mnwarn(
"W",
"MNContour ",
"Contour squeezed by parameter limits.");
1487 Printf(
" Plot of four points found by MINOS");
1493 for (i = 2; i <=
nall; ++i) {
1511 for (i = 1; i <=
mpar; ++i) {
fXt[i-1] =
fX[i-1]; }
1514 for (i = 1; i <=
mpar; ++i) {
1561 Printf(
" MNCONT CANNOT FIND NEXT POINT ON CONTOUR. ONLY %3d POINTS FOUND.",
nowpts);
1565 mnwarn(
"W",
"MNContour ",
"Cannot find midpoint, try closer.");
1591 for (i = 2; i <=
nall; ++i) {
1626 for (i = 1; i <=
mpar; ++i) {
1645 Printf(
" INVALID PARAMETER NUMBERS.");
1648 Printf(
" LESS THAN FOUR POINTS REQUESTED.");
1654 Printf(
" MNCONT UNABLE TO FIND FOUR POINTS.");
1682 char *
cnull =
nullptr;
1683 const char *
cnumer =
"123456789-.0+";
1686 Int_t ifld,
iend,
lend, left,
nreq,
ipos,
kcmnd,
nextb,
ic,
ibegin,
ltoadd;
1721 Printf(
" MINUIT WARNING: INPUT DATA WORD TOO LONG.");
1748 for (
ic = 1;
ic <= 13; ++
ic) {
1772 Printf(
" MINUIT WARNING IN MNCRCK: ");
1773 Printf(
" COMMAND HAS INPUT %5d NUMERIC FIELDS, BUT MINUIT CAN ACCEPT ONLY%3d",
nreq,
mxp);
1830 for (ik = 1; ik <= 2; ++ik) {
1836 if (
fKe2cr == 0)
continue;
1842 if (
zdir == 0)
continue;
1894 mnwarn(
"D",
"MNCROS ",
"Looking for slope of the right sign");
1896 for (it = 1; it <=
maxlk; ++it) {
1921 mnwarn(
"W",
"MNCROS ",
"Cannot find slope of the right sign");
1961 for (i = 1; i <= 3; ++i) {
1986 if (
coeff[2] <= 0) {
1987 mnwarn(
"D",
"MNCROS ",
"Curvature is negative near contour line.");
1991 mnwarn(
"D",
"MNCROS ",
"Problem 2, impossible determinant");
2001 Printf(
" MNCONTour problem 1");
2024 for (i = 1; i <= 3; ++i) {
2100 for (i = 1; i <=
ipt; ++i) {
2114 Printf(
"POINTS LABELLED '+' WERE TOO HIGH TO PLOT.");
2117 Printf(
"RIGHTMOST POINT IS UP AGAINST LIMIT.");
2137 Printf(
" FUNCTION MUST BE MINIMIZED BEFORE CALLING %s",(
const char*)
fCfrom);
2144 mnwarn(
"W",
fCfrom,
"NO ERROR MATRIX. WILL IMPROVISE.");
2145 for (i = 1; i <=
fNpar; ++i) {
2147 for (
j = 1;
j <= i-1; ++
j) {
2152 if (
fG2[i-1] <= 0) {
2201 Printf(
" FIRST DERIVATIVE DEBUG PRINTOUT. MNDERI");
2202 Printf(
" PAR DERIV STEP MINSTEP OPTSTEP D1-D2 2ND DRV");
2219 for (i = 1; i <=
fNpar; ++i) {
2232 if (
fGstep[i-1] < 0 && step > .5) step = .5;
2246 fX[i-1] =
xtf + step;
2250 fX[i-1] =
xtf - step;
2330 if (
l < 1)
goto L25;
2332 for (k = 1; k <=
l; ++k) {
2339 if (
gl > 1
e-35)
goto L30;
2347 if (
f >= 0)
gl = -
gl;
2352 for (
j = 1;
j <=
l; ++
j) {
2356 if (
j >=
l)
goto L47;
2364 for (
j = 1;
j <=
l; ++
j) {
2368 for (k = 1; k <=
j; ++k) {
2378 for (i = 1; i <=
n; ++i) {
2382 for (
j = 1;
j <=
l; ++
j) {
2390 if (
l == 0)
continue;
2392 for (
j = 1;
j <=
l; ++
j) {
2399 for (i = 2; i <=
n; ++i) {
2406 for (
l = 1;
l <=
n; ++
l) {
2410 for (m1 =
l; m1 <=
n; ++m1) {
2419 if (
j ==
mits)
return;
2427 for (i =
l; i <=
n; ++i) {
work[i] -=
h; }
2434 for (
i1 =
l;
i1 <= m1; ++
i1) {
2456 for (k = 1; k <=
n; ++k) {
2470 for (i = 1; i <=
n1; ++i) {
2474 for (
j =
i1;
j <=
n; ++
j) {
2480 if (k == i)
continue;
2484 for (
j = 1;
j <=
n; ++
j) {
2517 if (
fISW[1] < 1)
return;
2519 Printf(
" EXTERNAL ERROR MATRIX. NDIM=%4d NPAR=%3d ERR DEF=%g",ndim,
fNpar,
fUp);
2526 Printf(
" USER-DIMENSIONED ARRAY EMAT NOT BIG ENOUGH. REDUCED MATRIX CALCULATED.");
2534 Printf(
" ELEMENTS ABOVE DIAGONAL ARE NOT PRINTED.");
2537 for (i = 1; i <=
npard; ++i) {
2540 for (
j = 1;
j <= i; ++
j) {
2549 for (i = 1; i <=
npard; ++i) {
2591 if (eplus ==
fUndefi) eplus = 0;
2599 if (
fISW[1] < 2)
return;
2669 static const char *
const cname[40] = {
2727 if (
lk > 20)
lk = 20;
2744 for (i = 1; i <=
lnow; ++i) {
2756 for (i =
lnow + 1; i <=
kll; ++i) {
2762 Printf(
" ERROR: ABOVE CALL TO MNEXCM TRIED TO PASS MORE THAN %d PARAMETERS.",
fMaxpar);
2780 for (i = 1; i <=
nntot; ++i) {
2788 if (
fCword(0,4) ==
"MINO") i = 5;
2789 if (i != 6 && i != 7 && i != 8 && i != 23) {
2804 case 10:
goto L1000;
2805 case 11:
goto L1100;
2806 case 12:
goto L1200;
2807 case 13:
goto L1300;
2808 case 14:
goto L1400;
2809 case 15:
goto L1500;
2810 case 16:
goto L1600;
2811 case 17:
goto L1700;
2812 case 18:
goto L1800;
2813 case 19:
goto L1900;
2814 case 20:
goto L1900;
2815 case 21:
goto L1900;
2816 case 22:
goto L2200;
2817 case 23:
goto L2300;
2818 case 24:
goto L2400;
2819 case 25:
goto L1900;
2820 case 26:
goto L2600;
2821 case 27:
goto L3300;
2822 case 28:
goto L3300;
2823 case 29:
goto L3300;
2824 case 30:
goto L3300;
2825 case 31:
goto L3300;
2826 case 32:
goto L3300;
2827 case 33:
goto L3300;
2828 case 34:
goto L3400;
2829 case 35:
goto L3500;
2830 case 36:
goto L3600;
2831 case 37:
goto L3700;
2832 case 38:
goto L3800;
2833 case 39:
goto L3900;
2834 case 40:
goto L4000;
2851 if (
fISW[3] >= 1)
return;
2853 if (
fISW[0] == 1)
return;
2854 if (
fCword(0,3) ==
"MIG")
return;
2859 if (
fISW[0] == 1)
return;
2879 Printf(
" TOO MANY FUNCTION CALLS. MINOS GIVES UP");
2899 Printf(
"%s: NO PARAMETERS REQUESTED ",(
const char*)
fCword);
2904 chwhy =
" IS UNDEFINED.";
2908 chwhy =
" IS CONSTANT. ";
2912 chwhy =
" ALREADY FIXED.";
2918 chwhy =
" ALREADY VARIABLE.";
2941 if (it > 1 || it < 0)
goto L1005;
2952 Printf(
" IGNORED. UNKNOWN ARGUMENT:%4d",it);
2983 Printf(
"%s: NO PARAMETERS REQUESTED ",(
const char*)
fCword);
3041 if (
fISW[4] >= 0)
Printf(
" CALL TO USER FUNCTION WITH IFLAG = 3");
3053 Printf(
" MINUIT MEMORY CLEARED. NO PARAMETERS NOW DEFINED.");
3089 if (step <= 0) step = 2;
3092 for (i = 1; i <=
fNpar; ++i) {
3103 Printf(
" BLANK COMMAND IGNORED.");
3109 Printf(
" THE *COVARIANCE* COMMAND IS OSBSOLETE. THE COVARIANCE MATRIX IS NOW SAVED IN A DIFFERENT FORMAT WITH THE *SAVE* COMMAND AND READ IN WITH:*SET COVARIANCE*");
3137 Printf(
" OBSOLETE COMMAND:%s PLEASE USE:%s",(
const char*)
fCword
3173 Int_t kold,
nold,
ndex,
knew,
iext, i,
j,
m,
n,
lc, ik;
3180 Printf(
" MINUIT ERROR. ARGUMENT TO MNFIXP=%4d",
iint);
3186 Printf(
" MINUIT CANNOT FIX PARAMETER %4d MAXIMUM NUMBER THAT CAN BE FIXED IS %d",
iext,
fMaxpar);
3206 for (ik =
iext + 1; ik <=
fNu; ++ik) {
3220 if (
fISW[1] <= 0)
return;
3222 if (
fNpar <= 0)
return;
3223 for (i = 1; i <=
nold; ++i) {
3232 for (i = 1; i <=
nold; ++i) {
3233 for (
j = 1;
j <= i; ++
j) {
3263 Printf(
" CALL TO MNFREE IGNORED. ARGUMENT GREATER THAN ONE");
3266 Printf(
" CALL TO MNFREE IGNORED. THERE ARE NO FIXED PARAMETERS");
3268 if (k == 1 || k == 0)
goto L40;
3273 Printf(
" IGNORED. PARAMETER SPECIFIED IS ALREADY VARIABLE.");
3279 Printf(
" PARAMETER %4d NOT FIXED. CANNOT BE RELEASED.",
ka);
3292 for (i = ik + 1; i <=
fNpfix; ++i) {
3313 for (ik =
fNu; ik >=
ir; --ik) {
3344 Printf(
" PARAMETER %4d %s RESTORED TO VARIABLE.",
ir,
3347 if (k == 0)
goto L40;
3385 Printf(
" CHECK OF GRADIENT CALCULATION IN FCN");
3386 Printf(
" PARAMETER G(IN FCN) G(MINUIT) DG(MINUIT) AGREEMENT");
3391 const char *
cwd =
"GOOD";
3403 Printf(
" %5d %10s%12.4e%12.4e%12.4e %s",i
3404 ,(
const char*)
fCpnam[i-1]
3408 Printf(
" AGREEMENT=NONE MEANS FCN DID NOT CALCULATE THE DERIVATIVE");
3411 Printf(
" MINUIT DOES NOT ACCEPT DERIVATIVE CALCULATIONS BY FCN");
3412 Printf(
" TO FORCE ACCEPTANCE, ENTER *SET GRAD 1*");
3447 Printf(
" ==>List of MINUIT Interactive commands:");
3448 Printf(
" CLEar Reset all parameter names and values undefined");
3449 Printf(
" CONtour Make contour map of the user function");
3450 Printf(
" EXIT Exit from Interactive Minuit");
3451 Printf(
" FIX Cause parameter(s) to remain constant");
3452 Printf(
" HESse Calculate the Hessian or error matrix.");
3453 Printf(
" IMPROVE Search for a new minimum around current minimum");
3454 Printf(
" MIGrad Minimize by the method of Migrad");
3455 Printf(
" MINImize MIGRAD + SIMPLEX method if Migrad fails");
3456 Printf(
" MINOs Exact (non-linear) parameter error analysis");
3457 Printf(
" MNContour Calculate one MINOS function contour");
3458 Printf(
" PARameter Define or redefine new parameters and values");
3459 Printf(
" RELease Make previously FIXed parameters variable again");
3460 Printf(
" REStore Release last parameter fixed");
3461 Printf(
" SAVe Save current parameter values on a file");
3462 Printf(
" SCAn Scan the user function by varying parameters");
3463 Printf(
" SEEk Minimize by the method of Monte Carlo");
3464 Printf(
" SET Set various MINUIT constants or conditions");
3465 Printf(
" SHOw Show values of current constants or conditions");
3466 Printf(
" SIMplex Minimize by the method of Simplex");
3476 Printf(
" Resets all parameter names and values to undefined.");
3477 Printf(
" Must normally be followed by a PARameters command or ");
3478 Printf(
" equivalent, in order to define parameter values.");
3486 Printf(
" ***>CONTOUR <par1> <par2> [devs] [ngrid]");
3487 Printf(
" Instructs Minuit to trace contour lines of the user function");
3488 Printf(
" with respect to the two parameters whose external numbers");
3489 Printf(
" are <par1> and <par2>.");
3490 Printf(
" Other variable parameters of the function, if any, will have");
3491 Printf(
" their values fixed at the current values during the contour");
3492 Printf(
" tracing. The optional parameter [devs] (default value 2.)");
3493 Printf(
" gives the number of standard deviations in each parameter");
3494 Printf(
" which should lie entirely within the plotting area.");
3495 Printf(
" Optional parameter [ngrid] (default value 25 unless page");
3496 Printf(
" size is too small) determines the resolution of the plot,");
3497 Printf(
" i.e. the number of rows and columns of the grid at which the");
3498 Printf(
" function will be evaluated. [See also MNContour.]");
3507 Printf(
" Signals the end of a data block (i.e., the end of a fit),");
3508 Printf(
" and implies that execution should continue, because another");
3509 Printf(
" Data Block follows. A Data Block is a set of Minuit data");
3510 Printf(
" consisting of");
3512 Printf(
" (2) One or more Parameter Definitions,");
3513 Printf(
" (3) A blank line, and");
3514 Printf(
" (4) A set of Minuit Commands.");
3515 Printf(
" The END command is used when more than one Data Block is to");
3516 Printf(
" be used with the same FCN function. It first causes Minuit");
3517 Printf(
" to issue a CALL FCN with IFLAG=3, in order to allow FCN to");
3518 Printf(
" perform any calculations associated with the final fitted");
3519 Printf(
" parameter values, unless a CALL FCN 3 command has already");
3520 Printf(
" been executed at the current FCN value.");
3529 Printf(
" Signals the end of execution.");
3530 Printf(
" The EXIT command first causes Minuit to issue a CALL FCN");
3531 Printf(
" with IFLAG=3, to allow FCN to perform any calculations");
3532 Printf(
" associated with the final fitted parameter values, unless a");
3533 Printf(
" CALL FCN 3 command has already been executed.");
3541 Printf(
" ***>FIX} <parno> [parno] ... [parno]");
3542 Printf(
" Causes parameter(s) <parno> to be removed from the list of");
3543 Printf(
" variable parameters, and their value(s) will remain constant");
3544 Printf(
" during subsequent minimizations, etc., until another command");
3545 Printf(
" changes their value(s) or status.");
3553 Printf(
" ***>HESse [maxcalls]");
3554 Printf(
" Calculate, by finite differences, the Hessian or error matrix.");
3555 Printf(
" That is, it calculates the full matrix of second derivatives");
3556 Printf(
" of the function with respect to the currently variable");
3557 Printf(
" parameters, and inverts it, printing out the resulting error");
3558 Printf(
" matrix. The optional argument [maxcalls] specifies the");
3559 Printf(
" (approximate) maximum number of function calls after which");
3560 Printf(
" the calculation will be stopped.");
3568 Printf(
" ***>IMPROVE [maxcalls]");
3569 Printf(
" If a previous minimization has converged, and the current");
3570 Printf(
" values of the parameters therefore correspond to a local");
3571 Printf(
" minimum of the function, this command requests a search for");
3572 Printf(
" additional distinct local minima.");
3573 Printf(
" The optional argument [maxcalls] specifies the (approximate");
3574 Printf(
" maximum number of function calls after which the calculation");
3575 Printf(
" will be stopped.");
3583 Printf(
" ***>MIGrad [maxcalls] [tolerance]");
3584 Printf(
" Causes minimization of the function by the method of Migrad,");
3585 Printf(
" the most efficient and complete single method, recommended");
3586 Printf(
" for general functions (see also MINImize).");
3587 Printf(
" The minimization produces as a by-product the error matrix");
3588 Printf(
" of the parameters, which is usually reliable unless warning");
3589 Printf(
" messages are produced.");
3590 Printf(
" The optional argument [maxcalls] specifies the (approximate)");
3591 Printf(
" maximum number of function calls after which the calculation");
3592 Printf(
" will be stopped even if it has not yet converged.");
3593 Printf(
" The optional argument [tolerance] specifies required tolerance");
3594 Printf(
" on the function value at the minimum.");
3595 Printf(
" The default tolerance is 0.1, and the minimization will stop");
3596 Printf(
" when the estimated vertical distance to the minimum (EDM) is");
3597 Printf(
" less than 0.001*[tolerance]*UP (see [SET ERRordef]).");
3605 Printf(
" ***>MINImize [maxcalls] [tolerance]");
3606 Printf(
" Causes minimization of the function by the method of Migrad,");
3607 Printf(
" as does the MIGrad command, but switches to the SIMplex method");
3608 Printf(
" if Migrad fails to converge. Arguments are as for MIGrad.");
3609 Printf(
" Note that command requires four characters to be unambiguous.");
3617 Printf(
" ***>MINOs [maxcalls] [parno] [parno] ...");
3618 Printf(
" Causes a Minos error analysis to be performed on the parameters");
3619 Printf(
" whose numbers [parno] are specified. If none are specified,");
3620 Printf(
" Minos errors are calculated for all variable parameters.");
3621 Printf(
" Minos errors may be expensive to calculate, but are very");
3622 Printf(
" reliable since they take account of non-linearities in the");
3623 Printf(
" problem as well as parameter correlations, and are in general");
3625 Printf(
" The optional argument [maxcalls] specifies the (approximate)");
3626 Printf(
" maximum number of function calls per parameter requested,");
3627 Printf(
" after which the calculation will stop for that parameter.");
3635 Printf(
" ***>MNContour <par1> <par2> [npts]");
3636 Printf(
" Calculates one function contour of FCN with respect to");
3637 Printf(
" parameters par1 and par2, with FCN minimized always with");
3638 Printf(
" respect to all other NPAR-2 variable parameters (if any).");
3639 Printf(
" Minuit will try to find npts points on the contour (default 20)");
3640 Printf(
" If only two parameters are variable at the time, it is not");
3641 Printf(
" necessary to specify their numbers. To calculate more than");
3642 Printf(
" one contour, it is necessary to SET ERRordef to the appropriate");
3643 Printf(
" value and issue the MNContour command for each contour.");
3651 Printf(
" ***>PARameters");
3652 Printf(
" followed by one or more parameter definitions.");
3653 Printf(
" Parameter definitions are of the form:");
3654 Printf(
" <number> ''name'' <value> <step> [lolim] [uplim] ");
3656 Printf(
" 3 ''K width'' 1.2 0.1");
3657 Printf(
" the last definition is followed by a blank line or a zero.");
3665 Printf(
" ***>RELease <parno> [parno] ... [parno]");
3666 Printf(
" If <parno> is the number of a previously variable parameter");
3667 Printf(
" which has been fixed by a command: FIX <parno>, then that");
3668 Printf(
" parameter will return to variable status. Otherwise a warning");
3669 Printf(
" message is printed and the command is ignored.");
3670 Printf(
" Note that this command operates only on parameters which were");
3671 Printf(
" at one time variable and have been FIXed. It cannot make");
3672 Printf(
" constant parameters variable; that must be done by redefining");
3673 Printf(
" the parameter with a PARameters command.");
3681 Printf(
" ***>REStore [code]");
3682 Printf(
" If no [code] is specified, this command restores all previously");
3683 Printf(
" FIXed parameters to variable status. If [code]=1, then only");
3684 Printf(
" the last parameter FIXed is restored to variable status.");
3685 Printf(
" If code is neither zero nor one, the command is ignored.");
3694 Printf(
" Signals the end of a data block, and instructs Minuit to return");
3695 Printf(
" to the program which called it. The RETurn command first");
3696 Printf(
" causes Minuit to CALL FCN with IFLAG=3, in order to allow FCN");
3697 Printf(
" to perform any calculations associated with the final fitted");
3698 Printf(
" parameter values, unless a CALL FCN 3 command has already been");
3699 Printf(
" executed at the current FCN value.");
3708 Printf(
" Causes the current parameter values to be saved on a file in");
3709 Printf(
" such a format that they can be read in again as Minuit");
3710 Printf(
" parameter definitions. If the covariance matrix exists, it is");
3711 Printf(
" also output in such a format. The unit number is by default 7,");
3712 Printf(
" or that specified by the user in their call to MINTIO or");
3713 Printf(
" MNINIT. The user is responsible for opening the file previous");
3714 Printf(
" to issuing the [SAVe] command (except where this can be done");
3715 Printf(
" interactively).");
3723 Printf(
" ***>SCAn [parno] [numpts] [from] [to]");
3724 Printf(
" Scans the value of the user function by varying parameter");
3725 Printf(
" number [parno], leaving all other parameters fixed at the");
3726 Printf(
" current value. If [parno] is not specified, all variable");
3727 Printf(
" parameters are scanned in sequence.");
3728 Printf(
" The number of points [numpts] in the scan is 40 by default,");
3729 Printf(
" and cannot exceed 100. The range of the scan is by default");
3730 Printf(
" 2 standard deviations on each side of the current best value,");
3731 Printf(
" but can be specified as from [from] to [to].");
3732 Printf(
" After each scan, if a new minimum is found, the best parameter");
3733 Printf(
" values are retained as start values for future scans or");
3734 Printf(
" minimizations. The curve resulting from each scan is plotted");
3735 Printf(
" on the output unit in order to show the approximate behaviour");
3736 Printf(
" of the function.");
3737 Printf(
" This command is not intended for minimization, but is sometimes");
3738 Printf(
" useful for debugging the user function or finding a");
3739 Printf(
" reasonable starting point.");
3747 Printf(
" ***>SEEk [maxcalls] [devs]");
3748 Printf(
" Causes a Monte Carlo minimization of the function, by choosing");
3749 Printf(
" random values of the variable parameters, chosen uniformly");
3750 Printf(
" over a hypercube centered at the current best value.");
3751 Printf(
" The region size is by default 3 standard deviations on each");
3752 Printf(
" side, but can be changed by specifying the value of [devs].");
3760 Printf(
" ***>SET <option_name>");
3762 Printf(
" Informs Minuit that it is running in batch mode.");
3765 Printf(
" SET EPSmachine <accuracy>");
3766 Printf(
" Informs Minuit that the relative floating point arithmetic");
3767 Printf(
" precision is <accuracy>. Minuit determines the nominal");
3768 Printf(
" precision itself, but the SET EPSmachine command can be");
3769 Printf(
" used to override Minuit own determination, when the user");
3770 Printf(
" knows that the FCN function value is not calculated to");
3771 Printf(
" the nominal machine accuracy. Typical values of <accuracy>");
3772 Printf(
" are between 10**-5 and 10**-14.");
3775 Printf(
" SET ERRordef <up>");
3776 Printf(
" Sets the value of UP (default value= 1.), defining parameter");
3777 Printf(
" errors. Minuit defines parameter errors as the change");
3778 Printf(
" in parameter value required to change the function value");
3779 Printf(
" by UP. Normally, for chisquared fits UP=1, and for negative");
3780 Printf(
" log likelihood, UP=0.5.");
3783 Printf(
" SET GRAdient [force]");
3784 Printf(
" Informs Minuit that the user function is prepared to");
3785 Printf(
" calculate its own first derivatives and return their values");
3786 Printf(
" in the array GRAD when IFLAG=2 (see specs of FCN).");
3787 Printf(
" If [force] is not specified, Minuit will calculate");
3788 Printf(
" the FCN derivatives by finite differences at the current");
3789 Printf(
" point and compare with the user calculation at that point,");
3790 Printf(
" accepting the user values only if they agree.");
3791 Printf(
" If [force]=1, Minuit does not do its own derivative");
3792 Printf(
" calculation, and uses the derivatives calculated in FCN.");
3795 Printf(
" SET INPut [unitno] [filename]");
3796 Printf(
" Causes Minuit, in data-driven mode only, to read subsequent");
3797 Printf(
" commands (or parameter definitions) from a different input");
3798 Printf(
" file. If no [unitno] is specified, reading reverts to the");
3799 Printf(
" previous input file, assuming that there was one.");
3800 Printf(
" If [unitno] is specified, and that unit has not been opened,");
3801 Printf(
" then Minuit attempts to open the file [filename]} if a");
3802 Printf(
" name is specified. If running in interactive mode and");
3803 Printf(
" [filename] is not specified and [unitno] is not opened,");
3804 Printf(
" Minuit prompts the user to enter a file name.");
3805 Printf(
" If the word REWIND is added to the command (note:no blanks");
3806 Printf(
" between INPUT and REWIND), the file is rewound before");
3807 Printf(
" reading. Note that this command is implemented in standard");
3808 Printf(
" Fortran 77 and the results may depend on the system;");
3809 Printf(
" for example, if a filename is given under VM/CMS, it must");
3810 Printf(
" be preceded by a slash.");
3813 Printf(
" SET INTeractive");
3814 Printf(
" Informs Minuit that it is running interactively.");
3817 Printf(
" SET LIMits [parno] [lolim] [uplim]");
3818 Printf(
" Allows the user to change the limits on one or all");
3819 Printf(
" parameters. If no arguments are specified, all limits are");
3820 Printf(
" removed from all parameters. If [parno] alone is specified,");
3821 Printf(
" limits are removed from parameter [parno].");
3822 Printf(
" If all arguments are specified, then parameter [parno] will");
3823 Printf(
" be bounded between [lolim] and [uplim].");
3824 Printf(
" Limits can be specified in either order, Minuit will take");
3825 Printf(
" the smaller as [lolim] and the larger as [uplim].");
3826 Printf(
" However, if [lolim] is equal to [uplim], an error condition");
3830 Printf(
" SET LINesperpage");
3831 Printf(
" Sets the number of lines for one page of output.");
3832 Printf(
" Default value is 24 for interactive mode");
3835 Printf(
" SET NOGradient");
3836 Printf(
" The inverse of SET GRAdient, instructs Minuit not to");
3837 Printf(
" use the first derivatives calculated by the user in FCN.");
3840 Printf(
" SET NOWarnings");
3841 Printf(
" Suppresses Minuit warning messages.");
3844 Printf(
" SET OUTputfile <unitno>");
3845 Printf(
" Instructs Minuit to write further output to unit <unitno>.");
3848 Printf(
" SET PAGethrow <integer>");
3849 Printf(
" Sets the carriage control character for ``new page'' to");
3850 Printf(
" <integer>. Thus the value 1 produces a new page, and 0");
3851 Printf(
" produces a blank line, on some devices (see TOPofpage)");
3855 Printf(
" SET PARameter <parno> <value>");
3856 Printf(
" Sets the value of parameter <parno> to <value>.");
3857 Printf(
" The parameter in question may be variable, fixed, or");
3858 Printf(
" constant, but must be defined.");
3861 Printf(
" SET PRIntout <level>");
3862 Printf(
" Sets the print level, determining how much output will be");
3863 Printf(
" produced. Allowed values and their meanings are displayed");
3864 Printf(
" after a SHOw PRInt command, and are currently <level>=:");
3865 Printf(
" [-1] no output except from SHOW commands");
3866 Printf(
" [0] minimum output");
3867 Printf(
" [1] default value, normal output");
3868 Printf(
" [2] additional output giving intermediate results.");
3869 Printf(
" [3] maximum output, showing progress of minimizations.");
3870 Printf(
" Note: See also the SET WARnings command.");
3873 Printf(
" SET RANdomgenerator <seed>");
3874 Printf(
" Sets the seed of the random number generator used in SEEk.");
3875 Printf(
" This can be any integer between 10000 and 900000000, for");
3876 Printf(
" example one which was output from a SHOw RANdom command of");
3877 Printf(
" a previous run.");
3880 Printf(
" SET STRategy <level>");
3881 Printf(
" Sets the strategy to be used in calculating first and second");
3882 Printf(
" derivatives and in certain minimization methods.");
3883 Printf(
" In general, low values of <level> mean fewer function calls");
3884 Printf(
" and high values mean more reliable minimization.");
3885 Printf(
" Currently allowed values are 0, 1 (default), and 2.");
3889 Printf(
" Informs Minuit that the next input line is to be considered");
3890 Printf(
" the (new) title for this task or sub-task. This is for");
3891 Printf(
" the convenience of the user in reading their output.");
3895 Printf(
" Instructs Minuit to output warning messages when suspicious");
3896 Printf(
" conditions arise which may indicate unreliable results.");
3897 Printf(
" This is the default.");
3900 Printf(
" SET WIDthpage");
3901 Printf(
" Informs Minuit of the output page width.");
3902 Printf(
" Default values are 80 for interactive jobs");
3910 Printf(
" ***>SHOw <option_name>");
3911 Printf(
" All SET XXXX commands have a corresponding SHOw XXXX command.");
3912 Printf(
" In addition, the SHOw commands listed starting here have no");
3913 Printf(
" corresponding SET command for obvious reasons.");
3916 Printf(
" SHOw CORrelations");
3917 Printf(
" Calculates and prints the parameter correlations from the");
3918 Printf(
" error matrix.");
3921 Printf(
" SHOw COVariance");
3922 Printf(
" Prints the (external) covariance (error) matrix.");
3925 Printf(
" SHOw EIGenvalues");
3926 Printf(
" Calculates and prints the eigenvalues of the covariance");
3930 Printf(
" SHOw FCNvalue");
3931 Printf(
" Prints the current value of FCN.");
3939 Printf(
" ***>SIMplex [maxcalls] [tolerance]");
3940 Printf(
" Performs a function minimization using the simplex method of");
3941 Printf(
" Nelder and Mead. Minimization terminates either when the");
3942 Printf(
" function has been called (approximately) [maxcalls] times,");
3943 Printf(
" or when the estimated vertical distance to minimum (EDM) is");
3944 Printf(
" less than [tolerance].");
3945 Printf(
" The default value of [tolerance] is 0.1*UP(see SET ERRordef).");
3962 Printf(
" Same as EXIT.");
3970 Printf(
" ***>TOPofpage");
3971 Printf(
" Causes Minuit to write the character specified in a");
3972 Printf(
" SET PAGethrow command (default = 1) to column 1 of the output");
3973 Printf(
" file, which may or may not position your output medium to");
3974 Printf(
" the top of a page depending on the device and system.");
3978 Printf(
" Unknown MINUIT command. Type HELP for list of commands.");
3997 Double_t df,
aimsag,
fs1,
tlrstp,
fs2,
stpinm,
g2i,
sag=0,
xtf,
xti,
xtj;
3998 Int_t icyc,
ncyc,
ndex,
idrv,
iext,
npar2, i,
j,
ifail,
npard,
nparx,
id,
multpy;
4019 Printf(
" START COVARIANCE MATRIX CALCULATION.");
4035 Printf(
" PAR D GSTEP D G2 GRD SAG ");
4049 for (
id = 1;
id <=
npard; ++
id) {
4052 if (
fG2[i-1] == 0) {
4053 mnwarn(
"W",
"HESSE",
Form(
"Second derivative enters zero, param %d",
iext));
4083 if (
d >= .5)
goto L26;
4085 if (
d > .5)
d = .51;
4124 ndex = i*(i + 1) / 2;
4136 for (i = 1; i <=
fNpar; ++i) {
4137 for (
j = 1;
j <= i-1; ++
j) {
4148 ndex = i*(i-1) / 2 +
j;
4156 for (i = 1; i <=
fNpar; ++i) {
4157 for (
j = 1;
j <= i; ++
j) {
4158 ndex = i*(i-1) / 2 +
j;
4165 mnwarn(
"W",
"HESSE",
"Matrix inversion fails.");
4171 for (i = 1; i <=
fNpar; ++i) {
4174 for (
j = 1;
j <= i-1; ++
j) {
4186 Printf(
" COVARIANCE MATRIX CALCULATED SUCCESSFULLY");
4195 Printf(
" MNHESS FAILS AND WILL RETURN DIAGONAL MATRIX. ");
4197 for (i = 1; i <=
fNpar; ++i) {
4199 for (
j = 1;
j <= i-1; ++
j) {
4234 for (i = 1; i <=
fNpar; ++i) {
4271 mnwarn(
"D",
"MNHES1",
"Step size too small for 1st drv.");
4307 if (
fNpar <= 0)
return;
4321 for (i = 1; i <=
fNpar; ++i) {
4324 for (
j = 1;
j <= i; ++
j) {
4325 ndex = i*(i-1) / 2 +
j;
4333 for (i = 1; i <=
fNpar; ++i) {
4335 for (
j = 1;
j <= i; ++
j) {
4343 for (i = 1; i <=
fNpar; ++i) {
4351 Printf(
"START ATTEMPT NO.%2d TO FIND NEW MINIMUM",loop);
4361 for (i = 1; i <=
fNpar; ++i) {
4390 for (i = 1; i <=
fNpar; ++i) {
4400 for (i = 1; i <=
fNpar; ++i) {
4419 for (i = 1; i <=
fNpar; ++i) {
4432 Printf(
" AN IMPROVEMENT ON THE PREVIOUS MINIMUM HAS BEEN FOUND");
4439 for (i = 1; i <=
fNpar; ++i) {
4449 for (i = 1; i <=
fNpar; ++i) {
4467 Printf(
" IMPROVE HAS FOUND A TRULY NEW MINIMUM");
4468 Printf(
" *************************************");
4474 Printf(
" COVARIANCE MATRIX WAS NOT POSITIVE-DEFINITE");
4480 for (i = 1; i <=
fNpar; ++i) {
4489 Printf(
" IMPROVE HAS RETURNED TO REGION OF ORIGINAL MINIMUM");
4548 fCovmes[0] =
"NO ERROR MATRIX ";
4549 fCovmes[1] =
"ERR MATRIX APPROXIMATE";
4550 fCovmes[2] =
"ERR MATRIX NOT POS-DEF";
4551 fCovmes[3] =
"ERROR MATRIX ACCURATE ";
4589 for (i = 1; i <= 100; ++i) {
4597 Printf(
" MNINIT UNABLE TO DETERMINE ARITHMETIC PRECISION. WILL ASSUME:%g",
fEpsmac);
4627 if (
i2 > 0)
goto L30;
4638 Printf(
" LIMITS NOT CHANGED FOR FIXED PARAMETER:%4d",
inu);
4645 Printf(
" LIMITS REMOVED FROM PARAMETER :%3d",
inu);
4668 Printf(
" PARAMETER %3d IS NOT VARIABLE.",
i2);
4674 Printf(
" REQUEST TO CHANGE LIMITS ON FIXED PARAMETER:%3d",
i2);
4678 Printf(
" MINUIT BUG IN MNLIMS. SEE F. JAMES");
4686 Printf(
" LIMITS REMOVED FROM PARAMETER %2d",
i2);
4699 Printf(
" NO LIMITS SPECIFIED. PARAMETER %3d IS ALREADY UNLIMITED. NO CHANGE.",
i2);
4712 else fGstep[kint-1] = -.1;
4715 if (
fCstatu !=
"NO CHANGE ") {
4759 Printf(
" MNLINE start point not consistent, F values, parameters=");
4774 for (i = 1; i <=
fNpar; ++i) {
4775 if (step[i-1] != 0) {
4780 fX[i-1] = start[i-1] + step[i-1];
4823 for (i = 1; i <=
fNpar; ++i) {
fX[i-1] = start[i-1] +
slam*step[i-1]; }
4855 if (
coeff[2] <= 0) {
4886 for (i = 1; i <=
fNpar; ++i) {
fX[i-1] = start[i-1] +
slam*step[i-1]; }
4914 }
while (f3 >=
fvmax);
4928 }
while (
nxypt < 12);
4934 cmess =
" LINE SEARCH HAS EXHAUSTED THE LIMIT OF FUNCTION CALLS ";
4935 Printf(
" MNLINE DEBUG: steps=");
4941 if (
l70 &&
ldebug)
cmess =
" LINE SEARCH HAS ATTAINED TOLERANCE ";
4942 if (
l80 &&
ldebug)
cmess =
" STEP SIZE AT ARITHMETICALLY ALLOWED MINIMUM";
4945 for (i = 1; i <=
fNpar; ++i) {
4947 fX[i-1] = start[i-1] +
fDirin[i-1];
4951 mnwarn(
"D",
"MNLINE",
" LINE MINIMUM IN BACKWARDS DIRECTION");
4954 mnwarn(
"D",
"MNLINE",
" LINE SEARCH FINDS NO IMPROVEMENT ");
4981 Printf(
" MNMATU: NPAR=0");
4995 if (
fNpar <= 1)
return;
5001 Printf(
" PARAMETER CORRELATION COEFFICIENTS ");
5002 ctemp =
" NO. GLOBAL";
5003 for (
id = 1;
id <=
nparm; ++
id) {
5007 for (i = 1; i <=
fNpar; ++i) {
5009 ndi = i*(i + 1) / 2;
5014 ndj =
j*(
j + 1) / 2;
5019 for (it = 1; it <=
nparm; ++it) {
5023 if (i <=
nparm)
continue;
5032 if (i <=
nparm)
break;
5059 if (
fNpar <= 0)
return;
5076 Printf(
" START MIGRAD MINIMIZATION. STRATEGY %2d. CONVERGENCE WHEN EDM .LT.%9.2e",
fIstrat,
rhotol);
5101 for (i = 1; i <=
fNpar; ++i) {
5108 for (i = 1; i <=
fNpar; ++i) {
5109 if (
fG2[i-1] > 0)
continue;
5115 mnwarn(
"D",
"MNMIGR",
"Negative G2 line search");
5124 for (i = 1; i <=
fNpar; ++i) {
5126 for (
j = 1;
j <= i-1; ++
j) {
5131 if (
fG2[i-1] <= 0)
fG2[i-1] = 1;
5136 Printf(
" DEBUG MNMIGR, STARTING MATRIX DIAGONAL, VHMAT=");
5151 for (i = 1; i <=
fNpar; ++i) {
5155 for (
j = 1;
j <= i-1; ++
j) {
5164 mnwarn(
"W",
"MIGRAD",
"STARTING MATRIX NOT POS-DEFINITE.");
5180 for (i = 1; i <=
fNpar; ++i) {
5193 mnwarn(
"D",
"MIGRAD",
" FIRST DERIVATIVES OF FCN ARE ALL ZERO");
5198 mnwarn(
"D",
"MIGRAD",
" NEWTON STEP NOT DESCENT.");
5199 if (
npsdf == 1)
goto L1;
5223 for (i = 1; i <=
fNpar; ++i) {
5243 mnwarn(
"D",
"MIGRAD",
"NOT POS-DEF. EDM OR GVG NEGATIVE.");
5252 if (
iswtr >= 3 || (
iswtr == 2 && iter % 10 == 1)) {
5257 mnwarn(
"D",
"MIGRAD",
"NO CHANGE IN FIRST DERIVATIVES OVER LAST STEP");
5260 mnwarn(
"D",
"MIGRAD",
"FIRST DERIVATIVES INCREASING ALONG SEARCH LINE");
5266 for (
kk = 1;
kk <= 10; ++
kk) {
5272 for (i = 1; i <=
fNpar; ++i) {
5273 for (
j = 1;
j <= i; ++
j) {
5277 ndex = i*(i-1) / 2 +
j;
5285 Printf(
" RELATIVE CHANGE IN COV. MATRIX=%5.1f per cent",
fDcovar*100);
5289 for (
kk = 1;
kk <= 10; ++
kk) {
5294 for (i = 1; i <=
fNpar; ++i) {
5297 for (i = 1; i <=
fNpar; ++i) {
5298 for (
j = 1;
j <= i; ++
j) {
5299 ndex = i*(i-1) / 2 +
j;
5307 for (i = 1; i <=
fNpar; ++i) {
5321 Printf(
" CALL LIMIT EXCEEDED IN MIGRAD.");
5328 Printf(
" MIGRAD FAILS TO FIND IMPROVEMENT");
5334 Printf(
" MACHINE ACCURACY LIMITS FURTHER IMPROVEMENT.");
5340 Printf(
" MIGRAD FAILS WITH STRATEGY=0. WILL TRY WITH STRATEGY=1.");
5348 Printf(
" MIGRAD TERMINATED WITHOUT CONVERGENCE.");
5356 Printf(
" MIGRAD MINIMIZATION HAS CONVERGED.");
5361 Printf(
" MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX.");
5403 if (
knt >= 7)
break;
5405 if (
ilax == 0)
break;
5409 Printf(
" PARAMETER NUMBER %3d NOT A VARIABLE. IGNORED.",
ilax);
5442 Printf(
" NEW MINIMUM FOUND. GO BACK TO MINIMIZATION STEP.");
5443 Printf(
" =================================================");
5453 Printf(
" THERE ARE NO MINOS ERRORS TO CALCULATE.");
5487 for (i = 1; i <=
mpar; ++i) {
fXt[i-1] =
fX[i-1]; }
5490 for (i = 1; i <=
mpar; ++i) {
5503 ndex = it*(it + 1) / 2;
5506 for (i = 1; i <=
mpar; ++i) {
5507 if (i == it)
continue;
5516 Printf(
" MINUIT ERROR. CANNOT FIX PARAMETER %4d INTERNAL %3d",
ilax,it);
5532 Printf(
" DETERMINATION OF %sTIVE MINOS ERROR FOR PARAMETER %d %s"
5537 mnwarn(
"D",
"MINOS",
"NO COVARIANCE MATRIX.");
5548 if ( (
delu == 0 &&
ut == 0) ||
5551 for (i = 1; i <=
fNpar; ++i) {
5573 Printf(
" THE %4sTIVE MINOS ERROR OF PARAMETER %3d %10s, IS %12.4e"
5581 Printf(
" THE %4sTIVE MINOS ERROR OF PARAMETER %3d, %s EXCEEDS ITS LIMIT."
5589 Printf(
" THE %4sTIVE MINOS ERROR %4d REQUIRES MORE THAN %5d FUNCTION CALLS."
5596 Printf(
" %4sTIVE MINOS ERROR NOT CALCULATED FOR PARAMETER %d"
5603 Printf(
" **************************************************************************");
5619 for (i = 1; i <=
mpar; ++i) {
5677 Printf(
" MINUIT USER ERROR. PARAMETER NUMBER IS %3d ALLOWED RANGE IS ONE TO %4d",k,
fMaxext);
5689 mnwarn(
"W",
"PARAM DEF",
"REDEFINING A FIXED PARAMETER.");
5691 Printf(
" CANNOT RELEASE. MAX NPAR EXCEEDED.");
5702 Printf(
" PARAMETER DEFINITIONS:");
5703 Printf(
" NO. NAME VALUE STEP SIZE LIMITS");
5709 Printf(
" %5d %-10s %13.5e constant",k,(
const char*)
cnamk,
uk);
5714 if (
a == 0 &&
b == 0) {
5718 Printf(
" %5d %-10s %13.5e%13.5e no limits",k,(
const char*)
cnamk,
uk,
wk);
5731 Printf(
" MINUIT USER ERROR. TOO MANY VARIABLE PARAMETERS.");
5736 Printf(
" USER ERROR IN MINUIT PARAMETER");
5738 Printf(
" UPPER AND LOWER LIMITS EQUAL.");
5745 mnwarn(
"W",
"PARAM DEF",
"PARAMETER LIMITS WERE REVERSED.");
5754 mnwarn(
"W",
"PARAM DEF",
"STARTING VALUE OUTSIDE LIMITS.");
5757 mnwarn(
"W",
"PARAM DEF",
"STARTING VALUE IS AT LIMIT.");
5794 for (in =
lastin + 1; in <= kint; ++in) {
5819 fXt[in-1] =
fX[in-1];
5894 if (k <= 0)
goto L210;
5929 if (k == 0)
goto L210;
5959 Double_t a,
f, s, t,
y,
s2,
x2,
x3,
x4,
y2,
cz[3],
xm,
xy,
x2y;
5969 for (i = 1; i <= 3; ++i) {
cz[i-1] = 0; }
5984 for (i = 1; i <=
npar2p; ++i) {
5997 if (
a == 0)
goto L10;
6009 for (i = 1; i <= 3; ++i) {
coef2p[i] =
cz[i-1]; }
6036 chbuf2 =
" IS AT ITS LOWER ALLOWED LIMIT.";
6039 chbuf2 =
" IS AT ITS UPPER ALLOWED LIMIT.";
6044 if (
yy2 > 1)
chbuf2 =
" BROUGHT BACK INSIDE LIMITS.";
6073 if ((
h =
gROOT->GetPluginManager()->FindHandler(
"TMinuitGraph"))) {
6075 if (
h->LoadPlugin() != -1)
6098 if (
nxypt <= 1)
return;
6104 for (i = 1; i <=
km1; ++i) {
6107 for (
j = 1;
j <=
ni; ++
j) {
6108 if (ypt[
j-1] > ypt[
j])
continue;
6120 if (
iquit == 0)
break;
6125 for (i = 1; i <=
nxypt; ++i) {
6126 if (xpt[i-1] >
xmax)
xmax = xpt[i-1];
6127 if (xpt[i-1] <
xmin)
xmin = xpt[i-1];
6152 for (i = 1; i <=
nxypt; ++i) {
6153 xpt[i-1] =
ax*xpt[i-1] +
bx;
6154 ypt[i-1] =
any -
ay*ypt[i-1] -
by;
6164 for (i = 1; i <=
ny; ++i) {
6284 chnam =
"undefined";
6319 Printf(
" THERE ARE CURRENTLY NO PARAMETERS DEFINED");
6329 for (k = 1; k <= 6; ++k) {
6330 colhdu[k-1] =
"UNDEFINED";
6331 colhdl[k-1] =
"COLUMN HEAD";
6345 Printf(
" FCN=%s FROM %8s STATUS=%10s %6d CALLS %9d TOTAL"
6351 Printf(
" EDM=%s STRATEGY=%2d %s"
6357 Printf(
" EDM=%s STRATEGY=%2d ERROR MATRIX UNCERTAINTY %5.1f per cent"
6361 if (
ikode == 0)
return;
6364 for (i = 1; i <=
fNu; ++i) {
6365 if (
fNvarl[i-1] < 0)
continue;
6366 for (
ic = 10;
ic >= 1; --
ic) {
6380 colhdl[1] =
" NEGATIVE ";
6381 colhdl[2] =
" POSITIVE ";
6386 colhdu[1] =
" INTERNAL ";
6387 colhdl[1] =
" STEP SIZE ";
6388 colhdu[2] =
" INTERNAL ";
6397 colhdl[2] =
" DERIVATIVE ";
6400 colhdu[0] =
" PARABOLIC ";
6404 colhdl[1] =
" NEGATIVE ";
6405 colhdl[2] =
" POSITIVE ";
6409 if (
fISW[1] < 3)
colhdu[0] =
" APPROXIMATE ";
6410 if (
fISW[1] < 1)
colhdu[0] =
" CURRENT GUESS";
6412 Printf(
" EXT PARAMETER %-14s%-14s%-14s",(
const char*)
colhdu[0]
6414 ,(
const char*)
colhdu[2]);
6415 Printf(
" NO. NAME VALUE %-14s%-14s%-14s",(
const char*)
colhdl[0]
6417 ,(
const char*)
colhdl[2]);
6419 for (i = 1; i <=
fNu; ++i) {
6420 if (
fNvarl[i-1] < 0)
continue;
6423 if (
l == 0)
goto L55;
6426 cx2 =
"PLEASE GET X..";
6427 cx3 =
"PLEASE GET X..";
6445 cx3 =
"** at limit **";
6450 if (
x2 == 0)
cx2 =
" ";
6453 if (
x3 == 0)
cx3 =
" ";
6456 if (
cx2 ==
"PLEASE GET X..")
cx2.Form(
"%14.5e",
x2);
6457 if (
cx3 ==
"PLEASE GET X..")
cx3.Form(
"%14.5e",
x3);
6458 Printf(
"%4d %-11s%14.5e%14.5e%-14s%-14s",i
6460 ,(
const char*)
cx2,(
const char*)
cx3);
6465 Printf(
" WARNING - - ABOVE PARAMETER IS AT LIMIT.");
6471 colhdu[0] =
" constant ";
6474 Printf(
"%4d %-11s%14.5e%-14s%14.5e%14.5e",i
6478 Printf(
"%4d %-11s%14.5e%s",i
6505 for (i = 1; i <=
fNpar; ++i) {
6506 ndex = i*(i + 1) / 2;
6519 for (i = 1; i <=
fNpar; ++i) {
6528 for (
j = 1;
j <= i; ++
j) {
6543 Printf(
" EIGENVALUES OF SECOND-DERIVATIVE MATRIX:");
6578 for (i = 1; i <=
fNpar; ++i) {
fX[i-1] =
pnew[i-1]; }
6589 for (i = 1; i <=
fNpar; ++i) {
6602 Printf(
" FUNCTION VALUE DOES NOT SEEM TO DEPEND ON ANY OF THE %d VARIABLE PARAMETERS.",
fNpar);
6603 Printf(
" VERIFY THAT STEP SIZES ARE BIG ENOUGH AND CHECK FCN LOGIC.");
6604 Printf(
" *******************************************************************************");
6605 Printf(
" *******************************************************************************");
6623 static std::atomic<Int_t>
g_iseed( 12345 );
6676 for (i = 1; i <=
fNpar; ++i) {
6697 Printf(
"mnsave is dummy in TMinuit");
6794 Printf(
"%dSCAN OF PARAMETER NO. %d, %s"
6799 Printf(
" REQUESTED RANGE OUTSIDE LIMITS FOR PARAMETER %d",ipar);
6830 if (alpha <= 0) alpha = 3;
6832 Printf(
" MNSEEK: MONTE CARLO MINIMIZATION USING METROPOLIS ALGORITHM");
6834 Printf(
" MAXIMUM STEP SIZE IS %9.3f ERROR BARS.",alpha);
6846 for (ipar = 1; ipar <=
fNpar; ++ipar) {
6855 fDirin[ipar-1] = 6.2831859999999997;
6864 for (ipar = 1; ipar <=
fNpar; ++ipar) {
6894 Printf(
" MNSEEK: %5d SUCCESSIVE UNSUCCESSFUL TRIALS.",
ifail);
6917 static const char *
const cname[30] = {
6952 "-1: NO OUTPUT EXCEPT FROM SHOW ",
6953 " 0: REDUCED OUTPUT ",
6954 " 1: NORMAL OUTPUT ",
6955 " 2: EXTRA OUTPUT FOR PROBLEM CASES",
6956 " 3: MAXIMUM OUTPUT "};
6959 " 0: MINIMIZE THE NUMBER OF CALLS TO FUNCTION",
6960 " 1: TRY TO BALANCE SPEED AGAINST RELIABILITY",
6961 " 2: MAKE SURE MINIMUM TRUE, ERRORS CORRECT "};
6964 "REPORT ALL EXCEPTIONAL CONDITIONS ",
6965 "MNLINE: LINE SEARCH MINIMIZATION ",
6966 "MNDERI: FIRST DERIVATIVE CALCULATIONS ",
6967 "MNHESS: SECOND DERIVATIVE CALCULATIONS ",
6968 "MNMIGR: COVARIANCE MATRIX UPDATES ",
6969 "MNHES1: FIRST DERIVATIVE UNCERTAINTIES ",
6970 "MNCONT: MNCONTOUR PLOT (MNCROS SEARCH) "};
6982 for (i = 1; i <=
nntot; ++i) {
7002 switch ((
int)
kname) {
7020 case 18:
goto L3000;
7022 case 20:
goto L3000;
7027 case 25:
goto L3000;
7028 case 26:
goto L1900;
7052 Printf(
" UNDEFINED PARAMETER NUMBER. IGNORED.");
7083 for (i = 1; i <=
fNpar; ++i) {
7111 mnwarn(
"W",
"SHO",
"SHO");
7119 Printf(
" MINUIT RANDOM NUMBER SEED SET TO %d",
jseed);
7179 mnwarn(
"D",
"SHO",
"SHO");
7182 Printf(
" UNKNOWN DEBUG OPTION %d REQUESTED. IGNORED",
idbopt);
7195 switch ((
int)
kname) {
7205 case 10:
goto L1100;
7206 case 11:
goto L1110;
7207 case 12:
goto L1120;
7208 case 13:
goto L1130;
7209 case 14:
goto L1130;
7210 case 15:
goto L1150;
7211 case 16:
goto L1160;
7212 case 17:
goto L1170;
7213 case 18:
goto L1180;
7214 case 19:
goto L1190;
7215 case 20:
goto L1200;
7216 case 21:
goto L1210;
7217 case 22:
goto L1220;
7218 case 23:
goto L1100;
7219 case 24:
goto L1100;
7220 case 25:
goto L1250;
7221 case 26:
goto L1900;
7222 case 27:
goto L1270;
7223 case 28:
goto L1270;
7224 case 29:
goto L1290;
7225 case 30:
goto L1300;
7255 Printf(
" ALLOWED PRINT LEVELS ARE:");
7266 Printf(
" NOGRAD IS SET. DERIVATIVES NOT COMPUTED IN FCN.");
7268 Printf(
" GRAD IS SET. USER COMPUTES DERIVATIVES IN FCN.");
7273 Printf(
" ERRORS CORRESPOND TO FUNCTION CHANGE OF %g",
fUp);
7297 cmode =
"BATCH MODE ";
7298 if (
fISW[5] == 1)
cmode =
"INTERACTIVE MODE";
7300 Printf(
" INPUT NOW BEING READ IN %s FROM UNIT NO. %d FILENAME: %s"
7313 cwarn =
"SUPPRESSED";
7330 Printf(
" TITLE OF CURRENT TASK IS:%s",(
const char*)
fCtitl);
7334 Printf(
" ALLOWED STRATEGIES ARE:");
7356 Printf(
" NO PAGE THROWS IN MINUIT OUTPUT");
7364 Printf(
" THERE ARE NO MINOS ERRORS CURRENTLY VALID.");
7371 Printf(
" FLOATING-POINT NUMBERS ASSUMED ACCURATE TO %g",
fEpsmac);
7379 Printf(
" THIS IS MINUIT VERSION:%s",(
const char*)
fCvrsn);
7383 for (
id = 0;
id <= 6; ++
id) {
7386 Printf(
" DEBUG OPTION %3d IS %3s :%s"
7387 ,
id,(
const char*)
copt,(
const char*)
cdbopt[
id]);
7402 Printf(
" THE COMMAND:%10s IS UNKNOWN.",(
const char*)
fCword);
7411 Printf(
" THE FORMAT OF THE %4s COMMAND IS:",(
const char*)
ckind);
7412 Printf(
" %s xxx [numerical arguments if any]",(
const char*)
ckind);
7413 Printf(
" WHERE xxx MAY BE ONE OF THE FOLLOWING:");
7421 Printf(
" ABOVE COMMAND IS ILLEGAL. IGNORED");
7435 static constexpr Double_t alpha = 1;
7436 static constexpr Double_t beta = .5;
7437 static constexpr Double_t gamma = 2;
7448 if (
fNpar <= 0)
return;
7457 rho2 = rho1 + alpha*gamma;
7460 Printf(
" START SIMPLEX MINIMIZATION. CONVERGENCE WHEN EDM .LT. %g",
fEpsi);
7462 for (i = 1; i <=
fNpar; ++i) {
7475 for (i = 1; i <=
fNpar; ++i) {
7488 if (kg == 1)
goto L8;
7492 if (
nf < 3)
goto L4;
7502 if (ns < 6)
goto L4;
7527 for (i = 1; i <=
fNpar; ++i) {
7537 for (i = 1; i <=
fNpar; ++i) {
7545 rho = (rho2*
y1 - rho1*
y2)*.5 / (
y1 -
y2);
7548 for (i = 1; i <=
fNpar; ++i) {
7581 for (i = 1; i <=
fNpar; ++i) {
7594 Printf(
" SIMPLEX MINIMIZATION HAS CONVERGED.");
7600 Printf(
" SIMPLEX TERMINATES WITHOUT CONVERGENCE.");
7606 for (i = 1; i <=
fNpar; ++i) {
7674 static const TString cpt =
" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890./;:[]$%*_!@#&+()";
7678 for (i = 1; i <=
l; ++i) {
7679 for (
ic = 1;
ic <= 80; ++
ic) {
7711 if (
n < 1)
goto L100;
7714 for (i = 1; i <=
n; ++i) {
7719 for (i = 1; i <=
n; ++i) {
7720 for (
j = 1;
j <=
n; ++
j) {
7725 for (i = 1; i <=
n; ++i) {
7728 if (
a[k + k*
l] != 0)
fVERTq[k-1] = 1 /
a[k + k*
l];
7735 else if (
km1 == 0)
goto L50;
7738 for (
j = 1;
j <=
km1; ++
j) {
7744 if (k -
n < 0)
goto L51;
7745 else if (k -
n == 0)
goto L60;
7755 for (
j = 1;
j <=
n; ++
j) {
7760 for (
j = 1;
j <=
n; ++
j) {
7761 for (k = 1; k <=
j; ++k) {
7794 if (
corg(0,3) !=
"SHO" ||
cmes(0,3) !=
"SHO") {
7800 Printf(
" MINUIT WARNING IN %s",(
const char*)
corg);
7801 Printf(
" ============== %s",(
const char*)
cmes);
7807 Printf(
" MINUIT DEBUG FOR %s",(
const char*)
corg);
7808 Printf(
" =============== %s ",(
const char*)
cmes);
7833 englsh =
" WAS SUPPRESSED. ";
7840 Printf(
" ONLY THE MOST RECENT 10 WILL BE LISTED BELOW.");
7844 Printf(
" CALLS ORIGIN MESSAGE");
7845 for (i = 1; i <= nm; ++i) {
7885 for (i = 1; i <=
fNpar; ++i) {
7888 for (
j = 1;
j <= i; ++
j) {
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
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 r
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 result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
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 x2
Option_t Option_t TPoint TPoint const char x1
Option_t Option_t TPoint xy
Option_t Option_t TPoint TPoint const char y2
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize fs
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void reg
Option_t Option_t TPoint TPoint const char y1
static const char charal[29]
void InteractiveFCNm(Int_t &npar, Double_t *gin, Double_t &f, Double_t *u, Int_t flag)
Static function called when SetFCN is called in interactive mode.
R__EXTERN TMinuit * gMinuit
R__EXTERN TVirtualMutex * gROOTMutex
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.
#define R__LOCKGUARD(mutex)
Method or function calling interface.
virtual void mnderi()
Calculates the first derivatives of FCN (GRD)
virtual void mnvert(Double_t *a, Int_t l, Int_t m, Int_t n, Int_t &ifail)
Inverts a symmetric matrix.
virtual Int_t GetParameter(Int_t parNo, Double_t ¤tValue, Double_t ¤tError) const
return parameter value and error
virtual Int_t FixParameter(Int_t parNo)
fix a parameter
virtual void mnbins(Double_t a1, Double_t a2, Int_t naa, Double_t &bl, Double_t &bh, Int_t &nb, Double_t &bwid)
Compute reasonable histogram intervals.
virtual Int_t GetNumPars() const
returns the total number of parameters that have been defined as fixed or free.
virtual void mnpsdf()
Calculates the eigenvalues of v to see if positive-def.
virtual Int_t GetNumFixedPars() const
returns the number of currently fixed parameters
virtual void mnpfit(Double_t *parx2p, Double_t *pary2p, Int_t npar2p, Double_t *coef2p, Double_t &sdev2p)
To fit a parabola to npar2p points.
virtual Int_t Release(Int_t parNo)
release a parameter
virtual void mnpars(TString &crdbuf, Int_t &icondn)
Implements one parameter definition.
virtual void mnimpr()
Attempts to improve on a good local minimum.
virtual void BuildArrays(Int_t maxpar=15)
Create internal Minuit arrays for the maxpar parameters.
virtual void mnwerr()
Calculates the WERR, external parameter errors.
virtual void mnrset(Int_t iopt)
Resets function value and errors to UNDEFINED.
virtual void mneig(Double_t *a, Int_t ndima, Int_t n, Int_t mits, Double_t *work, Double_t precis, Int_t &ifault)
Compute matrix eigen values.
virtual void mnsimp()
Minimization using the simplex method of Nelder and Mead.
TMethodCall * GetMethodCall() const
TMinuit()
Minuit normal constructor.
virtual void mnamin()
Initialize AMIN.
virtual Int_t SetErrorDef(Double_t up)
To get the n-sigma contour the error def parameter "up" has to set to n^2.
virtual void mncler()
Resets the parameter list to UNDEFINED.
virtual void mnplot(Double_t *xpt, Double_t *ypt, char *chpt, Int_t nxypt, Int_t npagwd, Int_t npagln)
Plots points in array xypt onto one page with labelled axes.
virtual Int_t Migrad()
invokes the MIGRAD minimizer
virtual void mncomd(const char *crdbin, Int_t &icondn)
Reads a command string and executes.
TString * fCpnam
Character to be plotted at the X,Y contour positions.
TMethodCall * fMethodCall
virtual void mngrad()
Interprets the SET GRAD command.
~TMinuit() override
Minuit default destructor.
virtual void mnrazz(Double_t ynew, Double_t *pnew, Double_t *y, Int_t &jh, Int_t &jl)
Called only by MNSIMP (and MNIMPR) to add a new point.
virtual void mnmnos()
Performs a MINOS error analysis.
virtual void mnline(Double_t *start, Double_t fstart, Double_t *step, Double_t slope, Double_t toler)
Perform a line search from position START.
virtual void mncuve()
Makes sure that the current point is a local minimum.
virtual void mnscan()
Scans the values of FCN as a function of one parameter.
virtual void DeleteArrays()
Delete internal Minuit arrays.
TObject * Clone(const char *newname="") const override
Make a clone of an object using the Streamer facility.
TString fWarmes[kMAXWARN]
virtual void mnsave()
Writes current parameter values and step sizes onto file ISYSSA.
virtual void mnmatu(Int_t kode)
Prints the covariance matrix v when KODE=1.
virtual void mnlims()
Interprets the SET LIM command, to reset the parameter limits.
void(* fFCN)(Int_t &npar, Double_t *gin, Double_t &f, Double_t *u, Int_t flag)
virtual void SetMaxIterations(Int_t maxiter=500)
virtual void SetFCN(void(*fcn)(Int_t &, Double_t *, Double_t &f, Double_t *, Int_t))
To set the address of the minimization function.
virtual void mncont(Int_t ke1, Int_t ke2, Int_t nptu, Double_t *xptu, Double_t *yptu, Int_t &ierrf)
Find points along a contour where FCN is minimum.
virtual void mninit(Int_t i1, Int_t i2, Int_t i3)
Main initialization member function for MINUIT.
virtual void mnseek()
Performs a rough (but global) minimization by monte carlo search.
virtual void mncalf(Double_t *pvec, Double_t &ycalf)
Transform FCN to find further minima.
virtual Int_t Command(const char *command)
Execute a Minuit command.
virtual void mnpout(Int_t iuext, TString &chnam, Double_t &val, Double_t &err, Double_t &xlolim, Double_t &xuplim, Int_t &iuint) const
Provides the user with information concerning the current status.
virtual Int_t Eval(Int_t npar, Double_t *grad, Double_t &fval, Double_t *par, Int_t flag)
Evaluate the minimisation function Input parameters:
virtual void mnmigr()
Performs a local function minimization.
virtual void mnemat(Double_t *emat, Int_t ndim)
Calculates the external error matrix from the internal matrix.
virtual void mnrn15(Double_t &val, Int_t &inseed)
This is a super-portable random number generator.
virtual void mnerrs(Int_t number, Double_t &eplus, Double_t &eminus, Double_t &eparab, Double_t &gcc)
Utility routine to get MINOS errors.
virtual void mnexin(Double_t *pint)
Transforms the external parameter values U to internal values.
virtual void mnexcm(const char *comand, Double_t *plist, Int_t llist, Int_t &ierflg)
Interprets a command and takes appropriate action.
virtual void mnhelp(TString comd)
HELP routine for MINUIT interactive commands.
virtual Int_t SetPrintLevel(Int_t printLevel=0)
set Minuit print level.
Bool_t mnunpt(TString &cfname)
Returns .TRUE.
virtual void mnhess()
Calculates the full second-derivative matrix of FCN.
virtual void mneval(Double_t anext, Double_t &fnext, Int_t &ierev)
Evaluates the function being analysed by MNCROS.
virtual void mnset()
Interprets the commands that start with SET and SHOW.
virtual void mndxdi(Double_t pint, Int_t ipar, Double_t &dxdi)
Calculates the transformation factor between ext/internal values.
virtual void mntiny(Double_t epsp1, Double_t &epsbak)
To find the machine precision.
virtual void mninex(Double_t *pint)
Transforms from internal coordinates (PINT) to external (U)
virtual void mnpint(Double_t &pexti, Int_t i, Double_t &pinti)
Calculates the internal parameter value PINTI.
virtual void mnfixp(Int_t iint, Int_t &ierr)
Removes parameter IINT from the internal parameter list.
virtual void mnmnot(Int_t ilax, Int_t ilax2, Double_t &val2pl, Double_t &val2mi)
Performs a MINOS error analysis on one parameter.
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)
Cracks the free-format input.
virtual Int_t DefineParameter(Int_t parNo, const char *name, Double_t initVal, Double_t initErr, Double_t lowerLimit, Double_t upperLimit)
Define a parameter.
virtual void mnstat(Double_t &fmin, Double_t &fedm, Double_t &errdef, Int_t &npari, Int_t &nparx, Int_t &istat)
Returns concerning the current status of the minimization.
virtual void mnwarn(const char *copt, const char *corg, const char *cmes)
Prints Warning messages.
virtual void mnprin(Int_t inkode, Double_t fval)
Prints the values of the parameters at the time of the call.
TString fOrigin[kMAXWARN]
virtual void mncros(Double_t &aopt, Int_t &iercr)
Find point where MNEVAL=AMIN+UP.
virtual Int_t GetNumFreePars() const
returns the number of currently free parameters
virtual void mnhes1()
Calculate first derivatives (GRD) and uncertainties (DGRD)
virtual void mnfree(Int_t k)
Restores one or more fixed parameter(s) to variable status.
virtual void mncntr(Int_t ke1, Int_t ke2, Int_t &ierrf)
Print function contours in two variables, on line printer.
virtual TObject * Contour(Int_t npoints=10, Int_t pa1=0, Int_t pa2=1)
Creates a TGraph object describing the n-sigma contour of a TMinuit fit.
virtual void mnparm(Int_t k, TString cnamj, Double_t uk, Double_t wk, Double_t a, Double_t b, Int_t &ierflg)
Implements one parameter definition.
The TNamed class is the base class for all named ROOT classes.
TObject * Clone(const char *newname="") const override
Make a clone of an object using the Streamer facility.
Mother of all ROOT objects.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void Execute(const char *method, const char *params, Int_t *error=nullptr)
Execute method on this object with the given parameter string, e.g.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
void ToUpper()
Change string to upper case.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
Double_t ASin(Double_t)
Returns the principal value of the arc sine of x, expressed in radians.
Double_t ATan(Double_t)
Returns the principal value of the arc tangent of x, expressed in radians.
Double_t Log(Double_t x)
Returns the natural logarithm of x.
Double_t Sqrt(Double_t x)
Returns the square root of x.
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
Returns x raised to the power y.
Short_t Min(Short_t a, Short_t b)
Returns the smallest of a and b.
Double_t Cos(Double_t)
Returns the cosine of an angle of x radians.
Double_t Sin(Double_t)
Returns the sine of an angle of x radians.
Double_t Log10(Double_t x)
Returns the common (base-10) logarithm of x.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.