10 #ifndef ROOT_Minuit2_BasicMinimumError 
   11 #define ROOT_Minuit2_BasicMinimumError 
   30 class BasicMinimumError {
 
   35   class MnMadePosDef {};
 
   36   class MnHesseFailed {};
 
   37   class MnInvertFailed {};
 
   41   BasicMinimumError(
unsigned int n) :
 
   42     fMatrix(MnAlgebraicSymMatrix(n)), fDCovar(1.), fValid(false), fPosDef(false), fMadePosDef(false), fHesseFailed(false), fInvertFailed(false), fAvailable(false) {}
 
   44   BasicMinimumError(
const MnAlgebraicSymMatrix& mat, 
double dcov) :
 
   45     fMatrix(mat), fDCovar(dcov), fValid(true), fPosDef(true), fMadePosDef(false), fHesseFailed(false), fInvertFailed(false), fAvailable(true) {}
 
   47   BasicMinimumError(
const MnAlgebraicSymMatrix& mat, MnHesseFailed) :
 
   48     fMatrix(mat), fDCovar(1.), fValid(false), fPosDef(false), fMadePosDef(false), fHesseFailed(true), fInvertFailed(false), fAvailable(true) {}
 
   50   BasicMinimumError(
const MnAlgebraicSymMatrix& mat, MnMadePosDef) :
 
   51     fMatrix(mat), fDCovar(1.), fValid(true), fPosDef(false), fMadePosDef(true), fHesseFailed(false), fInvertFailed(false), fAvailable(true) {}
 
   53   BasicMinimumError(
const MnAlgebraicSymMatrix& mat, MnInvertFailed) :
 
   54     fMatrix(mat), fDCovar(1.), fValid(false), fPosDef(true), fMadePosDef(false), fHesseFailed(false), fInvertFailed(true), fAvailable(true) {}
 
   56   BasicMinimumError(
const MnAlgebraicSymMatrix& mat, MnNotPosDef) :
 
   57     fMatrix(mat), fDCovar(1.), fValid(false), fPosDef(false), fMadePosDef(false), fHesseFailed(false), fInvertFailed(false), fAvailable(true) {}
 
   59   ~BasicMinimumError() {}
 
   61   BasicMinimumError(
const BasicMinimumError& e) : fMatrix(e.fMatrix), fDCovar(e.fDCovar), fValid(e.fValid), fPosDef(e.fPosDef), fMadePosDef(e.fMadePosDef), fHesseFailed(e.fHesseFailed), fInvertFailed(e.fInvertFailed), fAvailable(e.fAvailable) {}
 
   63   BasicMinimumError& operator=(
const BasicMinimumError& err) {
 
   64     fMatrix = err.fMatrix;
 
   65     fDCovar = err.fDCovar;
 
   67     fPosDef = err.fPosDef;
 
   68     fMadePosDef = err.fMadePosDef;
 
   69     fHesseFailed = err.fHesseFailed;
 
   70     fInvertFailed = err.fInvertFailed;
 
   71     fAvailable = err.fAvailable;
 
   75   void* 
operator new(
size_t nbytes) {
 
   76     return StackAllocatorHolder::Get().Allocate(nbytes);
 
   79   void operator delete(
void* p, 
size_t ) {
 
   80     StackAllocatorHolder::Get().Deallocate(p);
 
   83   MnAlgebraicSymMatrix Matrix()
 const {
return 2.*fMatrix;}
 
   85   const MnAlgebraicSymMatrix& InvHessian()
 const {
return fMatrix;}
 
   87   MnAlgebraicSymMatrix Hessian() 
const;
 
   89   double Dcovar()
 const {
return fDCovar;}
 
   90   bool IsAccurate()
 const {
return fDCovar < 0.1;}
 
   91   bool IsValid()
 const {
return fValid;}
 
   92   bool IsPosDef()
 const {
return fPosDef;}
 
   93   bool IsMadePosDef()
 const {
return fMadePosDef;}
 
   94   bool HesseFailed()
 const {
return fHesseFailed;}
 
   95   bool InvertFailed()
 const {
return fInvertFailed;}
 
   96   bool IsAvailable()
 const {
return fAvailable;}
 
  100   MnAlgebraicSymMatrix fMatrix;
 
  114 #endif  // ROOT_Minuit2_BasicMinimumError