27 #ifndef ROOT_Math_GSLSimAnnealing 
   28 #define ROOT_Math_GSLSimAnnealing 
   38       class GSLRandomEngine;
 
   56    GSLSimAnFunc(
const ROOT::Math::IMultiGenFunction & func, 
const double * x);
 
   63    GSLSimAnFunc(
const ROOT::Math::IMultiGenFunction & func, 
const double * x, 
const double * scale);
 
   78    virtual ~GSLSimAnFunc() { } 
 
   86    virtual GSLSimAnFunc & FastCopy(
const GSLSimAnFunc & f);
 
   92    virtual GSLSimAnFunc * Clone()
 const {
 
   93       return new GSLSimAnFunc(*
this);
 
  100    virtual double Energy() 
const;
 
  107    virtual void Step(
const GSLRandomEngine & r, 
double maxstep);
 
  114    virtual double Distance(
const GSLSimAnFunc & func) 
const;
 
  121    virtual void Print();
 
  126    void SetX(
const double * x) {
 
  127       std::copy(x, x+ fX.size(), fX.begin() );
 
  131    void SetX(IT begin, IT end) {
 
  132       std::copy(begin, end, fX.begin() );
 
  135    unsigned int NDim()
 const { 
return fX.size(); }
 
  137    double X(
unsigned int i)
 const { 
return fX[i]; }
 
  139    const std::vector<double> &  X()
 const { 
return fX; }
 
  141    double Scale(
unsigned int i)
 const { 
return fScale[i]; }
 
  143    void SetX(
unsigned int i, 
double x) { fX[i] = x; }
 
  149    std::vector<double>  fX;
 
  150    std::vector<double>  fScale;
 
  151    const ROOT::Math::IMultiGenFunction * fFunc;
 
  161 struct GSLSimAnParams {
 
  193 class GSLSimAnnealing {
 
  205    ~GSLSimAnnealing ()  {}
 
  213    GSLSimAnnealing(
const GSLSimAnnealing &) {}
 
  218    GSLSimAnnealing & operator = (
const GSLSimAnnealing & rhs)  {
 
  219       if (
this == &rhs) 
return *
this;  
 
  230    int Solve(
const ROOT::Math::IMultiGenFunction & func, 
const double * x0, 
const double * scale, 
double * xmin, 
bool debug = 
false);
 
  236    int Solve(GSLSimAnFunc & func, 
bool debug = 
false);
 
  239    GSLSimAnParams & Params() { 
return fParams; }
 
  240    const GSLSimAnParams & Params()
 const { 
return fParams; }
 
  241    void SetParams(
const GSLSimAnParams & params) { fParams = params; }
 
  249    GSLSimAnParams fParams;