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