26namespace TestStatistics {
34 double operator()(std::vector<double>
const &
v)
const override {
return _fcn(
v.data()); }
35 double Up()
const override {
return _up; }
36 void SetErrorDef(
double val)
override {
_up = val; }
37 bool HasGradient()
const override {
return true; }
38 std::vector<double>
Gradient(std::vector<double>
const ¶ms)
const override
40 std::vector<double> grad(
_fcn.getNDim());
41 _fcn.Gradient(params.data(), grad.data());
47 using FCNBase::GradientWithPrevResult;
51 std::vector<double> output(
v.size());
62 bool SecondDerivativeAlwaysVanishes(
unsigned int ,
unsigned int )
const override {
return false; }
96 std::vector<ROOT::Fit::ParameterSettings> ¶meters,
LikelihoodMode likelihoodMode,
100 synchronizeParameterSettings(parameters);
120 _gradient->synchronizeParameterSettingsImpl(parameters);
160 std::cout <<
"\nprevFCN" << (
likelihoodHere.isOffsetting() ?
"-offset" :
"") <<
" = " << std::setprecision(10)
161 <<
fvalue << std::setprecision(4) <<
" ";
211 throw std::logic_error(
"Updating Minuit-internal parameters only makes sense for (gradient) calculators that "
212 "are defined in Minuit-internal parameter space.");
215 for (std::size_t ix = 0; ix <
getNDim(); ++ix) {
231 for (std::size_t ix = 0; ix <
getNDim(); ++ix) {
277 bool returnee = synchronizeParameterSettings(parameters);
279 _gradient->synchronizeParameterSettings(parameters);
282 _gradient->synchronizeWithMinimizer(
_context->fitter()->Config().MinimizerOptions());
289 minuit.SetFCN(
getNDim(), std::make_unique<MinuitGradFunctor>(*
this,
minim.ErrorDef()));
MinuitFcnGrad const & _fcn
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Abstract Minimizer class, defining the interface for the various minimizer (like Minuit2,...
Interface (abstract class) defining the function to be minimized, which has to be implemented by the ...
Minuit2Minimizer class implementing the ROOT::Math::Minimizer interface for Minuit2 minimization algo...
static std::unique_ptr< LikelihoodGradientWrapper > create(LikelihoodGradientMode likelihoodGradientMode, std::shared_ptr< RooAbsL > likelihood, std::shared_ptr< WrapperCalculationCleanFlags > calculationIsClean, std::size_t nDim, RooMinimizer *minimizer, SharedOffset offset)
Factory method.
static std::unique_ptr< LikelihoodWrapper > create(LikelihoodMode likelihoodMode, std::shared_ptr< RooAbsL > likelihood, std::shared_ptr< WrapperCalculationCleanFlags > calculationIsClean, SharedOffset offset)
Factory method.
double operator()(const double *x) const
bool Synchronize(std::vector< ROOT::Fit::ParameterSettings > ¶meter_settings) override
Overridden from RooAbsMinimizerFcn to include gradient strategy synchronization.
void Gradient(const double *x, double *grad) const
IMultiGradFunction overrides necessary for Minuit.
std::vector< double > _minuitInternalX
std::shared_ptr< LikelihoodWrapper > _likelihood
bool syncParameterValuesFromMinuitCalls(const double *x, bool minuit_internal) const
Minuit calls (via FcnAdapters etc) DoEval or Gradient with a set of parameters x.
bool _minuitInternalRooFitXMismatch
std::unique_ptr< LikelihoodGradientWrapper > _gradient
void syncOffsets() const
Make sure the offsets are up to date.
std::shared_ptr< WrapperCalculationCleanFlags > _calculationIsClean
bool _calculatingGradient
std::vector< double > _minuitExternalX
void initMinimizer(ROOT::Math::Minimizer &, RooMinimizer *context) override
std::shared_ptr< LikelihoodWrapper > _likelihoodInGradient
void applyToLikelihood(Func &&func) const
void GradientWithPrevResult(const double *x, double *grad, double *previous_grad, double *previous_g2, double *previous_gstep, double fValAtX) const
MinuitFcnGrad(const std::shared_ptr< RooFit::TestStatistics::RooAbsL > &absL, RooMinimizer *context, std::vector< ROOT::Fit::ParameterSettings > ¶meters, LikelihoodMode likelihoodMode, LikelihoodGradientMode likelihoodGradientMode)
bool returnsInMinuit2ParameterSpace() const
Wrapper class around ROOT::Math::Minimizer that provides a seamless interface between the minimizer f...
The namespace RooFit contains mostly switches that change the behaviour of functions of PDFs (or othe...
T * Gradient(Long64_t n, T const *f, double h=1)
Calculate the one-dimensional finite gradient of an array with length n.