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 mat(i, i) =
st.IntCovariance()(i, i) >
prec.Eps() ?
st.IntCovariance()(i, i)
70 for (
unsigned int j = i + 1;
j <
n;
j++)
71 mat(i,
j) =
st.IntCovariance()(i,
j);
75 for (
unsigned int i = 0; i <
n; i++)
86 if (!
st.HasCovariance()) {
89 print.
Debug(
"Negative G2 Found",
"\n point:",
x,
"\n grad :",
dgrad.Grad(),
"\n g2 :",
dgrad.G2());
93 print.
Info(
"Negative G2 found - new state:", state);
97 if (
stra.Strategy() == 2 && !
st.HasCovariance()) {
100 print.
Debug(
"calling MnHesse");
104 print.
Info(
"run Hesse - Initial seeding state:", tmp);
109 print.
Info(
"Initial state ",state);
117 MnPrint print(
"MnSeedGenerator");
124 if (!
gc.CanComputeG2()) {
125 print.
Info(
"Using analytical (external) gradient calculator but cannot compute G2 - use then numerical gradient for G2");
132 if (
gc.CanComputeHessian())
133 print.
Info(
"Computing seed using analytical (external) gradients and Hessian calculator");
135 print.
Info(
"Computing seed using analytical (external) gradients and G2 calculator");
140 unsigned int n =
st.VariableParameters();
145 for (
unsigned int i = 0; i <
n; i++)
146 x(i) =
st.IntParameters()[i];
161 print.
Error(
"Cannot compute G2 and Hessian");
166 for (
unsigned int i = 0; i <
n; i++)
170 print.
Debug(
"Computed analytical G2",
g2);
178 print.
Info(
"Use full Hessian as seed");
180 print.
Debug(
"computed Error matrix (H^-1)",
mat);
187 if (
st.HasCovariance()) {
188 print.
Info(
"Using existing covariance matrix");
189 for (
unsigned int i = 0; i <
n; i++) {
190 mat(i, i) =
st.IntCovariance()(i, i) >
prec.Eps() ?
st.IntCovariance()(i, i)
191 : grad.
G2()(i) >
prec.Eps() ? 1. / grad.
G2()(i)
193 for (
unsigned int j = i + 1;
j <
n;
j++)
194 mat(i,
j) =
st.IntCovariance()(i,
j);
198 for (
unsigned int i = 0; i <
n; i++) {
200 mat(i, i) = grad.
G2()(i) >
prec.Eps() ? 1. / grad.
G2()(i) : 1.0;
205 print.
Info(
"Computing seed using full Hessian");
212 print.
Error(
"Cannot compute seed because G2 is not computed");
216 if (!
st.HasCovariance()) {
229 print.
Info(
"Compute full Hessian: Initial seeding state is ",
tmpState);
233 print.
Info(
"Initial seeding state ",state);
254 std::pair<FunctionGradient, MnAlgebraicVector>
hgrd =
hgc.DeltaGradient(
pa,
dgrad);
255 for (
unsigned int i = 0; i <
n; i++) {
256 if (std::fabs(
hgrd.first.Grad()(i) -
grd.Grad()(i)) >
hgrd.second(i)) {
259 print.Warn(
"Gradient discrepancy of external Parameter too large:"
266 print.Error(
"Minuit does not accept user specified Gradient. To force acceptance, override 'virtual bool "
267 "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...