40 unsigned int nfcn = 0;
43 print.
Debug(
"MnContours: finding ",
npoints,
" contours points for ",px,py,
" at level ",
fFCN.Up(),
" from value ",
fMinimum.Fval());
45 std::vector<std::pair<double, double>>
result;
47 std::vector<MnUserParameterState> states;
64 print.
Debug(
"Run Minos to find first 4 contour points. Current minimum is : ",
valx,
valy);
68 if (!
mnex.IsValid()) {
69 print.
Error(
"unable to find first two points");
72 std::pair<double, double>
ex =
mnex();
74 print.
Debug(
"Minos error for p0: ",
ex.first,
ex.second);
78 if (!
mney.IsValid()) {
79 print.
Error(
"unable to find second two points");
82 std::pair<double, double>
ey =
mney();
84 print.
Debug(
"Minos error for p0: ",
ey.first,
ey.second);
96 std::vector<unsigned int>
vpar(1, ipar);
102 print.
Debug(
"result of findCrossValue for par",ipar,
"status: ",status,
" searching from ",
vmid[0],
"dir",
vdir[0],
120 return std::vector<double>();
156 print.
Error(
"unable to find Lower y Value for x Parameter", px);
161 if (
mnex.AtLowerLimit()) {
165 print.
Error(
"unable to find corresponding value for ",py,
"when Parameter",px,
"is at lower limit: ",
ustate.Value(px));
177 print.
Error(
"unable to find Upper y Value for x Parameter", px);
182 if (
mnex.AtUpperLimit()) {
186 print.
Error(
"unable to find corresponding value for ",py,
"when Parameter",px,
"is at upper limit: ",
ustate.Value(px));
200 print.
Error(
"unable to find Lower x Value for y Parameter", py);
205 if (
mney.AtLowerLimit()) {
209 print.
Error(
"unable to find corresponding value for ",px,
"when Parameter",py,
"is at lower limit: ",
ustate.Value(py));
220 print.
Error(
"unable to find Upper x Value for y Parameter", py);
225 if (
mney.AtUpperLimit()) {
229 print.
Error(
"unable to find corresponding value for ",px,
"when Parameter",py,
"is at upper limit: ",
ustate.Value(py));
251 print.
Debug([&](std::ostream &os){
252 os <<
"List of first " <<
result.size() <<
" points found: \n";
253 os <<
"Parameters : " <<
upar.Name(px) <<
"\t" <<
upar.Name(py) << std::endl;
254 for (
auto &
p :
result) os <<
p << std::endl;
257 double scalx = 1. / (
ex.second -
ex.first);
258 double scaly = 1. / (
ey.second -
ey.first);
263 std::vector<unsigned int> par(2);
270 for (
unsigned int i =
np0; i <
npoints; i++) {
284 if (
distx == 0. &&
upar.Parameter(px).HasLimits() &&
285 (
ipair->first ==
upar.Parameter(px).LowerLimit() ||
ipair->first ==
upar.Parameter(px).UpperLimit() ) )
287 if (
disty == 0. &&
upar.Parameter(py).HasLimits() &&
288 (
ipair->second ==
upar.Parameter(py).LowerLimit() ||
ipair->second ==
upar.Parameter(py).UpperLimit() ) )
307 print.
Error(
"maximum number of function calls exhausted");
311 print.
Debug(
"Find new contour point between points with max sep: (",
idist1->first,
", ",
idist1->second,
") and (",
324 std::vector<double>
pmid(2);
327 std::vector<double>
pdir(2);
339 print.
Info(
"Unable to find point on Contour", i + 1,
'\n',
"found only", i,
"points");
341 }
else if (
a1 > 0.5) {
344 print.
Debug(
"Unable to find point, try closer to p2 with weight values",
a1,
a2);
348 print.
Debug(
"Unable to find point, try closer to p1 with weight values",
a1,
a2);
364 print.
Info(
"Found new point - pos: ",pos,
result[pos],
"fcn = ",opt.
State().Fval());
371 print.
Info(
"Number of contour points =",
result.size());
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
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 result
Option_t Option_t TPoint TPoint const char y2
Option_t Option_t TPoint TPoint const char y1
class holding the full result of the minimization; both internal and external (MnUserParameterState) ...
Class holding the result of Minos (lower and upper values) for a specific parameter.
std::vector< std::pair< double, double > > operator()(unsigned int, unsigned int, unsigned int npoints=20) const
ask for one Contour (points only) from number of points (>=4) and parameter indices
ContoursError Contour(unsigned int, unsigned int, unsigned int npoints=20) const
ask for one Contour ContoursError (MinosErrors + points) from number of points (>=4) and parameter in...
const FunctionMinimum & fMinimum
const MnUserParameterState & State() const
unsigned int NFcn() const
API class for minimization using Variable Metric technology ("MIGRAD"); allows for user interaction: ...
API class for Minos Error analysis (asymmetric errors); minimization has to be done before and Minimu...
MinosError Minos(unsigned int, unsigned int maxcalls=0, double toler=0.1) const
ask for MinosError (Lower + Upper) can be printed via std::cout
void Debug(const Ts &... args)
void Error(const Ts &... args)
void Info(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
class which holds the external user and/or internal Minuit representation of the parameters and error...
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...