// @(#)root/minuit2:$Id$
// Author:  L. Moneta 2012  

/**********************************************************************
 *                                                                    *
 * Copyright (c) 2012 LCG ROOT Math team,  CERN/PH-SFT                *
 *                                                                    *
 **********************************************************************/

#ifndef ROOT_TMinuit2TraceObject
#define ROOT_TMinuit2TraceObject

#include "TNamed.h"
#include "Minuit2/MnTraceObject.h"

class TH1; 
class TVirtualPad;
class TList;

namespace ROOT {

   namespace Minuit2 {

      class MinimumState;
      class MnUserParameterState; 

   }  // namespace Minuit2
}  // namespace ROOT

class TMinuit2TraceObject : public ROOT::Minuit2::MnTraceObject, public TNamed { 

public: 

   TMinuit2TraceObject(int parNumber = -1);

   virtual ~TMinuit2TraceObject();

   virtual void Init(const ROOT::Minuit2::MnUserParameterState & state);

   virtual void operator() (int i, const ROOT::Minuit2::MinimumState & state); 

   ClassDef(TMinuit2TraceObject,1) // Example Trace Object for Minuit2

private: 

   int fIterOffset;                //! offset in iteration in case of combined minimizers
   TH1 * fHistoFval;               //! Function value histogram
   TH1 * fHistoEdm;                //! Edm histogram
   TList * fHistoParList;          //! list of parameter values histograms
   TVirtualPad * fOldPad;          //! old existing current pad
   TVirtualPad * fMinuitPad;       //! new pad with trace histograms
   

};


#endif  // ROOT_TMinuit2TraceObject