Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
MinimumError.h
Go to the documentation of this file.
1 // @(#)root/minuit2:$Id$
2 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei 2003-2005
3 
4 /**********************************************************************
5  * *
6  * Copyright (c) 2005 LCG ROOT Math team, CERN/PH-SFT *
7  * *
8  **********************************************************************/
9 
10 #ifndef ROOT_Minuit2_MinimumError
11 #define ROOT_Minuit2_MinimumError
12 
15 
16 namespace ROOT {
17 
18  namespace Minuit2 {
19 
20 
21 /** MinimumError keeps the inv. 2nd derivative (inv. Hessian) used for
22  calculating the Parameter step size (-V*g) and for the covariance Update
23  (ErrorUpdator). The covariance matrix is equal to twice the inv. Hessian.
24  */
25 
26 class MinimumError {
27 
28 public:
29 
30  class MnNotPosDef {};
31  class MnMadePosDef {};
32  class MnHesseFailed {};
33  class MnInvertFailed {};
34 
35 public:
36 
37  MinimumError(unsigned int n) : fData(MnRefCountedPointer<BasicMinimumError>(new BasicMinimumError(n))) {}
38 
39  MinimumError(const MnAlgebraicSymMatrix& mat, double dcov) : fData(MnRefCountedPointer<BasicMinimumError>(new BasicMinimumError(mat, dcov))) {}
40 
41  MinimumError(const MnAlgebraicSymMatrix& mat, MnHesseFailed) : fData(MnRefCountedPointer<BasicMinimumError>(new BasicMinimumError(mat, BasicMinimumError::MnHesseFailed()))) {}
42 
43  MinimumError(const MnAlgebraicSymMatrix& mat, MnMadePosDef) : fData(MnRefCountedPointer<BasicMinimumError>(new BasicMinimumError(mat, BasicMinimumError::MnMadePosDef()))) {}
44 
45  MinimumError(const MnAlgebraicSymMatrix& mat, MnInvertFailed) : fData(MnRefCountedPointer<BasicMinimumError>(new BasicMinimumError(mat, BasicMinimumError::MnInvertFailed()))) {}
46 
47  MinimumError(const MnAlgebraicSymMatrix& mat, MnNotPosDef) : fData(MnRefCountedPointer<BasicMinimumError>(new BasicMinimumError(mat, BasicMinimumError::MnNotPosDef()))) {}
48 
49  ~MinimumError() {}
50 
51  MinimumError(const MinimumError& e) : fData(e.fData) {}
52 
53  MinimumError& operator=(const MinimumError& err) {
54  fData = err.fData;
55  return *this;
56  }
57 
58  MnAlgebraicSymMatrix Matrix() const {return fData->Matrix();}
59 
60  const MnAlgebraicSymMatrix& InvHessian() const {return fData->InvHessian();}
61 
62  MnAlgebraicSymMatrix Hessian() const {return fData->Hessian();}
63 
64  double Dcovar() const {return fData->Dcovar();}
65  bool IsAccurate() const {return fData->IsAccurate();}
66  bool IsValid() const {return fData->IsValid();}
67  bool IsPosDef() const {return fData->IsPosDef();}
68  bool IsMadePosDef() const {return fData->IsMadePosDef();}
69  bool HesseFailed() const {return fData->HesseFailed();}
70  bool InvertFailed() const {return fData->InvertFailed();}
71  bool IsAvailable() const {return fData->IsAvailable();}
72 
73 private:
74 
75  MnRefCountedPointer<BasicMinimumError> fData;
76 };
77 
78  } // namespace Minuit2
79 
80 } // namespace ROOT
81 
82 #endif // ROOT_Minuit2_MinimumError