10 #ifndef ROOT_Minuit2_VariableMetricBuilder
11 #define ROOT_Minuit2_VariableMetricBuilder
34 class VariableMetricBuilder :
public MinimumBuilder {
38 enum ErrorUpdatorType { kDavidon, kBFGS };
40 VariableMetricBuilder(ErrorUpdatorType type = kDavidon) :
41 fEstimator(VariableMetricEDMEstimator())
43 if (type == kBFGS) fErrorUpdator = std::unique_ptr<MinimumErrorUpdator>(
new BFGSErrorUpdator());
44 else fErrorUpdator = std::unique_ptr<MinimumErrorUpdator>(
new DavidonErrorUpdator());
47 ~VariableMetricBuilder() {}
49 virtual FunctionMinimum Minimum(
const MnFcn&,
const GradientCalculator&,
const MinimumSeed&,
const MnStrategy&,
unsigned int,
double)
const;
51 FunctionMinimum Minimum(
const MnFcn&,
const GradientCalculator&,
const MinimumSeed&, std::vector<MinimumState> &,
unsigned int,
double)
const;
53 const VariableMetricEDMEstimator& Estimator()
const {
return fEstimator;}
54 const MinimumErrorUpdator& ErrorUpdator()
const {
return *fErrorUpdator;}
56 void AddResult(std::vector<MinimumState>& result,
const MinimumState & state)
const;
60 VariableMetricEDMEstimator fEstimator;
61 std::shared_ptr<MinimumErrorUpdator> fErrorUpdator;
68 #endif // ROOT_Minuit2_VariableMetricBuilder