10 #ifndef ROOT_Minuit2_BasicMinimumState 
   11 #define ROOT_Minuit2_BasicMinimumState 
   26 class BasicMinimumState {
 
   31    BasicMinimumState(
unsigned int n, 
double fval, 
double edm, 
int nfcn) :
 
   32       fParameters(MinimumParameters(n,fval)), fError(MinimumError(n)),
 
   33     fGradient(FunctionGradient(n)), fEDM(edm), fNFcn(nfcn) {}
 
   35   BasicMinimumState(
const MinimumParameters& states, 
const MinimumError& err,
 
   36                     const FunctionGradient& grad, 
double edm, 
int nfcn) :     
 
   37      fParameters(states), fError(err), fGradient(grad), fEDM(edm), fNFcn(nfcn) {}
 
   39    BasicMinimumState(
const MinimumParameters& states, 
double edm, 
int nfcn) : fParameters(states), fError(MinimumError(states.Vec().size())),
 
   40                                                                               fGradient(FunctionGradient(states.Vec().size())), fEDM(edm), fNFcn(nfcn)
 
   43   ~BasicMinimumState() {}
 
   45   BasicMinimumState(
const BasicMinimumState& state) :
 
   46      fParameters(state.fParameters), fError(state.fError), fGradient(state.fGradient), fEDM(state.fEDM), fNFcn(state.fNFcn) {}
 
   48   BasicMinimumState& operator=(
const BasicMinimumState& state) {
 
   49     fParameters = state.fParameters;
 
   50     fError = state.fError;
 
   51     fGradient = state.fGradient;
 
   57   void* 
operator new(
size_t nbytes) {
 
   58     return StackAllocatorHolder::Get().Allocate(nbytes);
 
   61   void operator delete(
void* p, 
size_t ) {
 
   62     StackAllocatorHolder::Get().Deallocate(p);
 
   65   const MinimumParameters& Parameters()
 const {
return fParameters;}
 
   66   const MnAlgebraicVector& Vec()
 const {
return fParameters.Vec();}
 
   67   int size()
 const {
return fParameters.Vec().size();}
 
   69   const MinimumError& Error()
 const {
return fError;}
 
   70   const FunctionGradient& Gradient()
 const {
return fGradient;}
 
   71   double Fval()
 const {
return fParameters.Fval();}
 
   72   double Edm()
 const {
return fEDM;}
 
   73   int NFcn()
 const {
return fNFcn;}
 
   76   bool IsValid()
 const {
 
   77     if(HasParameters() && HasCovariance())
 
   78       return Parameters().IsValid() && Error().IsValid();
 
   79     else if(HasParameters()) 
return Parameters().IsValid();
 
   82   bool HasParameters()
 const {
return fParameters.IsValid();}
 
   83   bool HasCovariance()
 const {
return fError.IsAvailable();}
 
   87   MinimumParameters fParameters;
 
   89   FunctionGradient fGradient;
 
   98 #endif  // ROOT_Minuit2_BasicMinimumState