36 unsigned int npar = par.size();
37 unsigned int nfcn = 0;
56 std::array<double, 3>
alsb{0., 0., 0.};
57 std::array<double, 3>
flsb{0., 0., 0.};
59 MnPrint print(
"MnFunctionCross");
61 print.
Debug([&](std::ostream &os) {
62 for (
unsigned int i = 0; i < par.size(); ++i)
63 os <<
"Parameter " << par[i] <<
" value " <<
pmid[i] <<
" dir " <<
pdir[i] <<
" function min = " <<
aminsv
64 <<
" contour value aim = (fmin + up) = " <<
aim;
70 for (
unsigned int i = 0; i < par.size(); i++) {
71 unsigned int kex = par[i];
102 print.
Warn(
"Parameter is at limit",
pmid[0],
"delta",
pdir[0]);
111 print.
Info([&](std::ostream &os) {
112 os <<
"Run Migrad with fixed parameters:";
113 for (
unsigned i = 0; i <
npar; ++i)
114 os <<
"\n Pos " << par[i] <<
": " <<
fState.
Name(par[i]) <<
" = " <<
pmid[i];
117 for (
unsigned int i = 0; i <
npar; i++)
130 print.
Warn(
"New minimum found while scanning parameter", par.front(),
"new value =",
min0.Fval(),
131 "old value =",
fFval);
134 if (
min0.HasReachedCallLimit())
161 print.
Info([&](std::ostream &os) {
162 os <<
"Run Migrad again (2nd) with fixed parameters:";
163 for (
unsigned i = 0; i <
npar; ++i)
167 for (
unsigned int i = 0; i <
npar; i++)
177 if (
min1.HasReachedCallLimit())
198 for (
unsigned int it = 0; it <
maxlk; it++) {
209 print.
Info([&](std::ostream &os) {
210 os <<
"Run Migrad again (iteration " << it <<
" ) :";
211 for (
unsigned i = 0; i <
npar; ++i)
212 os <<
"\n parameter " << par[i] <<
" (" <<
fState.
Name(par[i]) <<
") fixed to "
216 for (
unsigned int i = 0; i <
npar; i++)
226 if (
min1.HasReachedCallLimit())
255 double fdist = std::min(std::fabs(
aim -
flsb[0]), std::fabs(
aim -
flsb[1]));
258 if (std::fabs(
aopt) > 1.)
277 print.
Info([&](std::ostream &os) {
278 os <<
"Run Migrad again (3rd) with fixed parameters:";
279 for (
unsigned i = 0; i <
npar; ++i)
283 for (
unsigned int i = 0; i <
npar; i++)
293 if (
min2.HasReachedCallLimit())
308 unsigned int ibest = 2;
312 for (
unsigned int i = 0; i < 3; i++) {
342 print.
Debug(
"All three points below - look again fir positive slope");
352 print.
Debug(
"New straight line using point 1-2; dfda",
dfda);
366 print.
Debug(
"Parabola fit: iteration",
ipt);
384 print.
Debug(
"Parabola fit: x1",
x1,
"x2",
x2,
"s1",
s1,
"s2",
s2);
387 print.
Warn(
"Problem 1");
401 if (std::fabs(
aopt) > 1.)
415 unsigned int ileft = 3;
417 unsigned int iout = 3;
421 for (
unsigned int i = 0; i < 3; i++) {
438 }
else if (
ileft == 3)
478 print.
Info([&](std::ostream &os) {
479 os <<
"Run Migrad again at new point (#iter = " <<
ipt+1 <<
" ):";
480 for (
unsigned i = 0; i <
npar; ++i)
481 os <<
"\n\t - parameter " << par[i] <<
" fixed to " <<
pmid[i] + (
aopt)*
pdir[i];
484 for (
unsigned int i = 0; i <
npar; i++)
494 if (
min2.HasReachedCallLimit())
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 x2
Option_t Option_t TPoint TPoint const char x1
virtual double Up() const =0
Error definition of the function.
class holding the full result of the minimization; both internal and external (MnUserParameterState) ...
double LowerLimit() const
double UpperLimit() const
bool HasLowerLimit() const
bool HasUpperLimit() const
void SetValue(unsigned int, double)
MnCross operator()(std::span< const unsigned int >, std::span< const double >, std::span< const double >, double, unsigned int) const
const MnUserParameterState & fState
const MnStrategy & fStrategy
Sets the relative floating point (double) arithmetic precision.
double Eps() const
eps returns the smallest possible number so that 1.+eps > 1.
API class for minimization using Variable Metric technology ("MIGRAD"); allows for user interaction: ...
This class defines a parabola of the form a*x*x + b*x + c.
void Debug(const Ts &... args)
void Info(const Ts &... args)
void Warn(const Ts &... args)
API class for defining four levels of strategies: low (0), medium (1), high (2), very high (>=3); act...
unsigned int Strategy() const
const MnMachinePrecision & Precision() const
const MinuitParameter & Parameter(unsigned int i) const
const char * Name(unsigned int) const
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...