#ifndef ROOT_Minuit2_FumiliMinimizer
#define ROOT_Minuit2_FumiliMinimizer
#include "Minuit2/ModularFunctionMinimizer.h"
#include "Minuit2/MnSeedGenerator.h"
#include "Minuit2/FumiliBuilder.h"
namespace ROOT {
namespace Minuit2 {
class MinimumSeedGenerator;
class MinimumBuilder;
class MinimumSeed;
class MnFcn;
class FumiliFcnBase;
class GradientCalculator;
class MnUserParameterState;
class MnUserParameters;
class MnUserCovariance;
class MnStrategy;
class FumiliMinimizer : public ModularFunctionMinimizer {
public:
FumiliMinimizer() : fMinSeedGen(MnSeedGenerator()),
fMinBuilder(FumiliBuilder()) {}
~FumiliMinimizer() {}
const MinimumSeedGenerator& SeedGenerator() const {return fMinSeedGen;}
const FumiliBuilder& Builder() const {return fMinBuilder;}
FumiliBuilder& Builder() {return fMinBuilder;}
FunctionMinimum Minimize(const FCNBase&, const MnUserParameterState&, const MnStrategy&, unsigned int maxfcn = 0, double toler = 0.1) const;
virtual FunctionMinimum Minimize(const FCNGradientBase&, const MnUserParameterState&, const MnStrategy&, unsigned int maxfcn = 0, double toler = 0.1) const;
virtual FunctionMinimum Minimize(const FCNBase& fcn, const std::vector<double>& par, const std::vector<double>& err, unsigned int stra = 1, unsigned int maxfcn = 0, double toler = 0.1) const {
return ModularFunctionMinimizer::Minimize(fcn, par, err, stra, maxfcn,toler);
}
virtual FunctionMinimum Minimize(const FCNGradientBase&fcn, const std::vector<double>&par, const std::vector<double>&err, unsigned int stra=1, unsigned int maxfcn = 0, double toler = 0.1) const {
return ModularFunctionMinimizer::Minimize(fcn,par,err,stra,maxfcn,toler);
}
virtual FunctionMinimum Minimize(const FCNBase& fcn, const std::vector<double>&par, unsigned int nrow, const std::vector<double>&cov, unsigned int stra=1, unsigned int maxfcn = 0, double toler = 0.1) const {
return ModularFunctionMinimizer::Minimize(fcn,par,nrow,cov,stra,maxfcn,toler);
}
virtual FunctionMinimum Minimize(const FCNGradientBase& fcn, const std::vector<double>&par, unsigned int nrow, const std::vector<double>&cov, unsigned int stra=1, unsigned int maxfcn = 0, double toler = 0.1) const {
return ModularFunctionMinimizer::Minimize(fcn,par,nrow,cov,stra,maxfcn,toler);
}
virtual FunctionMinimum Minimize(const FCNBase& fcn, const MnUserParameters& par, const MnStrategy& stra, unsigned int maxfcn = 0, double toler = 0.1) const {
return ModularFunctionMinimizer::Minimize(fcn,par,stra,maxfcn,toler);
}
virtual FunctionMinimum Minimize(const FCNGradientBase& fcn, const MnUserParameters& par, const MnStrategy& stra, unsigned int maxfcn = 0, double toler = 0.1) const {
return ModularFunctionMinimizer::Minimize(fcn,par,stra,maxfcn,toler);
}
virtual FunctionMinimum Minimize(const FCNBase& fcn, const MnUserParameters& par, const MnUserCovariance& cov, const MnStrategy& stra, unsigned int maxfcn = 0, double toler = 0.1) const {
return ModularFunctionMinimizer::Minimize(fcn,par,cov,stra,maxfcn,toler);
}
virtual FunctionMinimum Minimize(const FCNGradientBase& fcn, const MnUserParameters& par, const MnUserCovariance& cov, const MnStrategy& stra, unsigned int maxfcn = 0, double toler = 0.1) const {
return ModularFunctionMinimizer::Minimize(fcn,par,cov,stra,maxfcn,toler);
}
virtual FunctionMinimum Minimize(const MnFcn& mfcn, const GradientCalculator& gc, const MinimumSeed& seed, const MnStrategy& stra, unsigned int maxfcn, double toler) const {
return ModularFunctionMinimizer::Minimize(mfcn, gc, seed, stra, maxfcn, toler);
}
private:
MnSeedGenerator fMinSeedGen;
FumiliBuilder fMinBuilder;
};
}
}
#endif // ROOT_Minuit2_FumiliMinimizer