45 MnPrint print(
"MnSeedGenerator");
48 const unsigned int n =
st.VariableParameters();
51 print.
Info(
"Computing seed using NumericalGradient calculator");
53 print.
Debug(
n,
"free parameters, FCN pointer", &
fcn);
57 for (
unsigned int i = 0; i <
n; i++)
58 x(i) =
st.IntParameters()[i];
65 if (
st.HasCovariance()) {
66 for (
unsigned int i = 0; i <
n; i++)
67 for (
unsigned int j = i;
j <
n;
j++)
68 mat(i,
j) =
st.IntCovariance()(i,
j);
71 for (
unsigned int i = 0; i <
n; i++)
84 print.
Debug(
"Negative G2 Found",
"\n point:",
x,
"\n grad :",
dgrad.Grad(),
"\n g2 :",
dgrad.G2());
88 print.
Info(
"Negative G2 found - new state:", state);
91 if (
stra.Strategy() == 2 && !
st.HasCovariance()) {
94 print.
Debug(
"calling MnHesse");
98 print.
Info(
"run Hesse - Initial seeding state:", tmp);
103 print.
Info(
"Initial state ",state);
111 MnPrint print(
"MnSeedGenerator");
118 if (!
gc.CanComputeG2()) {
119 print.
Info(
"Using analytical (external) gradient calculator but cannot compute G2 - use then numerical gradient for G2");
126 if (
gc.CanComputeHessian())
127 print.
Info(
"Computing seed using analytical (external) gradients and Hessian calculator");
129 print.
Info(
"Computing seed using analytical (external) gradients and G2 calculator");
134 unsigned int n =
st.VariableParameters();
139 for (
unsigned int i = 0; i <
n; i++)
140 x(i) =
st.IntParameters()[i];
155 print.
Error(
"Cannot compute G2 and Hessian");
160 for (
unsigned int i = 0; i <
n; i++)
164 print.
Debug(
"Computed analytical G2",
g2);
172 print.
Info(
"Use full Hessian as seed");
174 print.
Debug(
"computed Error matrix (H^-1)",
mat);
181 if (
st.HasCovariance()) {
182 print.
Info(
"Using existing covariance matrix");
183 for (
unsigned int i = 0; i <
n; i++)
184 for (
unsigned int j = i;
j <
n;
j++)
185 mat(i,
j) =
st.IntCovariance()(i,
j);
188 for (
unsigned int i = 0; i <
n; i++) {
190 mat(i, i) = std::fabs(grad.
G2()(i)) >
prec.Eps() ? 1. / grad.
G2()(i)
196 print.
Info(
"Computing seed using full Hessian");
203 print.
Error(
"Cannot compute seed because G2 is not computed");
217 print.
Info(
"Compute full Hessian: Initial seeding state is ",
tmpState);
221 print.
Info(
"Initial seeding state ",state);
242 std::pair<FunctionGradient, MnAlgebraicVector>
hgrd =
hgc.DeltaGradient(
pa,
dgrad);
243 for (
unsigned int i = 0; i <
n; i++) {
244 if (std::fabs(
hgrd.first.Grad()(i) -
grd.Grad()(i)) >
hgrd.second(i)) {
247 print.Warn(
"Gradient discrepancy of external Parameter too large:"
254 print.Error(
"Minuit does not accept user specified Gradient. To force acceptance, override 'virtual bool "
255 "CheckGradient() const' of FCNGradientBase.h in the derived class.");
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 gc
const MnAlgebraicVector & Grad() const
const MnAlgebraicVector & G2() const
interface class for gradient calculators
HessianGradientCalculator: class to calculate Gradient for Hessian.
Class to calculate an initial estimate of the gradient.
Class describing a symmetric matrix of size n.
MinimumError keeps the inv.
static MnAlgebraicSymMatrix InvertMatrix(const MnAlgebraicSymMatrix &matrix, int &ifail)
MinimumState keeps the information (position, Gradient, 2nd deriv, etc) after one minimization step (...
Wrapper class to FCNBase interface used internally by Minuit.
API class for calculating the numerical covariance matrix (== 2x Inverse Hessian == 2x Inverse 2nd de...
Sets the relative floating point (double) arithmetic precision.
void Debug(const Ts &... args)
void Error(const Ts &... args)
void Info(const Ts &... args)
MinimumSeed operator()(const MnFcn &, const GradientCalculator &, const MnUserParameterState &, const MnStrategy &) const override
API class for defining four levels of strategies: low (0), medium (1), high (2), very high (>=3); act...
class which holds the external user and/or internal Minuit representation of the parameters and error...
In case that one of the components of the second derivative g2 calculated by the numerical Gradient c...
class performing the numerical gradient calculation
double Estimate(const FunctionGradient &, const MinimumError &) const
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...