26 const std::vector<double> &
pdir,
double tlr,
unsigned int maxcalls)
const
34 unsigned int npar = par.size();
35 unsigned int nfcn = 0;
54 std::vector<double>
alsb(3, 0.),
flsb(3, 0.);
56 MnPrint print(
"MnFunctionCross");
58 print.
Debug([&](std::ostream &os) {
59 for (
unsigned int i = 0; i < par.size(); ++i)
60 os <<
"Parameter " << par[i] <<
" value " <<
pmid[i] <<
" dir " <<
pdir[i] <<
" function min = " <<
aminsv
61 <<
" contour value aim = (fmin + up) = " <<
aim;
67 for (
unsigned int i = 0; i < par.size(); i++) {
68 unsigned int kex = par[i];
75 if (std::fabs(
zdir) <
fState.Precision().Eps()) {
82 }
else if (
zdir < 0. &&
fState.Parameter(
kex).HasLowerLimit()) {
84 if (std::fabs(
zdir) <
fState.Precision().Eps()) {
99 print.
Warn(
"Parameter is at limit",
pmid[0],
"delta",
pdir[0]);
108 print.
Info([&](std::ostream &os) {
109 os <<
"Run Migrad with fixed parameters:";
110 for (
unsigned i = 0; i <
npar; ++i)
111 os <<
"\n Pos " << par[i] <<
": " <<
fState.Name(par[i]) <<
" = " <<
pmid[i];
114 for (
unsigned int i = 0; i <
npar; i++)
127 print.
Warn(
"New minimum found while scanning parameter", par.front(),
"new value =",
min0.Fval(),
128 "old value =",
fFval);
131 if (
min0.HasReachedCallLimit())
158 print.
Info([&](std::ostream &os) {
159 os <<
"Run Migrad again (2nd) with fixed parameters:";
160 for (
unsigned i = 0; i <
npar; ++i)
161 os <<
"\n Pos " << par[i] <<
": " <<
fState.Name(par[i]) <<
" = " <<
pmid[i] + (
aopt)*
pdir[i];
164 for (
unsigned int i = 0; i <
npar; i++)
174 if (
min1.HasReachedCallLimit())
195 for (
unsigned int it = 0; it <
maxlk; it++) {
206 print.
Info([&](std::ostream &os) {
207 os <<
"Run Migrad again (iteration " << it <<
" ) :";
208 for (
unsigned i = 0; i <
npar; ++i)
209 os <<
"\n parameter " << par[i] <<
" (" <<
fState.Name(par[i]) <<
") fixed to "
213 for (
unsigned int i = 0; i <
npar; i++)
223 if (
min1.HasReachedCallLimit())
252 double fdist = std::min(std::fabs(
aim -
flsb[0]), std::fabs(
aim -
flsb[1]));
255 if (std::fabs(
aopt) > 1.)
274 print.
Info([&](std::ostream &os) {
275 os <<
"Run Migrad again (3rd) with fixed parameters:";
276 for (
unsigned i = 0; i <
npar; ++i)
277 os <<
"\n Pos " << par[i] <<
": " <<
fState.Name(par[i]) <<
" = " <<
pmid[i] + (
aopt)*
pdir[i];
280 for (
unsigned int i = 0; i <
npar; i++)
290 if (
min2.HasReachedCallLimit())
305 unsigned int ibest = 2;
309 for (
unsigned int i = 0; i < 3; i++) {
339 print.
Debug(
"All three points below - look again fir positive slope");
349 print.
Debug(
"New straight line using point 1-2; dfda",
dfda);
363 print.
Debug(
"Parabola fit: iteration",
ipt);
381 print.
Debug(
"Parabola fit: x1",
x1,
"x2",
x2,
"s1",
s1,
"s2",
s2);
384 print.
Warn(
"Problem 1");
398 if (std::fabs(
aopt) > 1.)
412 unsigned int ileft = 3;
414 unsigned int iout = 3;
418 for (
unsigned int i = 0; i < 3; i++) {
435 }
else if (
ileft == 3)
475 print.
Info([&](std::ostream &os) {
476 os <<
"Run Migrad again at new point (#iter = " <<
ipt+1 <<
" ):";
477 for (
unsigned i = 0; i <
npar; ++i)
478 os <<
"\n\t - parameter " << par[i] <<
" fixed to " <<
pmid[i] + (
aopt)*
pdir[i];
481 for (
unsigned int i = 0; i <
npar; i++)
491 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
class holding the full result of the minimization; both internal and external (MnUserParameterState) ...
void SetValue(unsigned int, double)
const MnUserParameterState & fState
const MnStrategy & fStrategy
MnCross operator()(const std::vector< unsigned int > &, const std::vector< double > &, const std::vector< double > &, double, unsigned int) const
Sets the relative floating point (double) arithmetic precision.
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...
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...