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