Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
FunctionMinimum.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_FunctionMinimum
11 #define ROOT_Minuit2_FunctionMinimum
12 
14 
15 #ifdef G__DICTIONARY
16 typedef ROOT::Minuit2::MinimumState MinimumState;
17 #endif
18 
19 namespace ROOT {
20 
21  namespace Minuit2 {
22 
23 //______________________________________________________________________________________________
24 /**
25  class holding the full result of the minimization;
26  both internal and external (MnUserParameterState) representation available
27  for the parameters at the Minimum
28  */
29 
30 class FunctionMinimum {
31 
32 public:
33 
34  class MnReachedCallLimit {};
35  class MnAboveMaxEdm {};
36 
37 public:
38 
39 
40  /// constructor from only MinimumSeed. Minimum is only from seed result not full minimization
41  FunctionMinimum(const MinimumSeed& seed, double up) : fData(MnRefCountedPointer<BasicFunctionMinimum>(new BasicFunctionMinimum(seed, up))) {}
42 
43  /// constructor at the end of a successfull minimization from seed and vector of states
44  FunctionMinimum(const MinimumSeed& seed, const std::vector<MinimumState>& states, double up) : fData(MnRefCountedPointer<BasicFunctionMinimum>(new BasicFunctionMinimum(seed, states, up))) {}
45 
46  /// constructor at the end of a failed minimization due to exceeding function call limit
47  FunctionMinimum(const MinimumSeed& seed, const std::vector<MinimumState>& states, double up, MnReachedCallLimit) : fData(MnRefCountedPointer<BasicFunctionMinimum>(new BasicFunctionMinimum(seed, states, up, BasicFunctionMinimum::MnReachedCallLimit()))) {}
48 
49  /// constructor at the end of a failed minimization due to edm above maximum value
50  FunctionMinimum(const MinimumSeed& seed, const std::vector<MinimumState>& states, double up, MnAboveMaxEdm) : fData(MnRefCountedPointer<BasicFunctionMinimum>(new BasicFunctionMinimum(seed, states, up, BasicFunctionMinimum::MnAboveMaxEdm()))) {}
51 
52  /// copy constructo
53  FunctionMinimum(const FunctionMinimum& min) : fData(min.fData) {}
54 
55  FunctionMinimum& operator=(const FunctionMinimum& min) {
56  fData = min.fData;
57  return *this;
58  }
59 
60  ~FunctionMinimum() {}
61 
62  // add new state
63  void Add(const MinimumState& state) {fData->Add(state);}
64 
65  // add new state
66  void Add(const MinimumState& state, MnAboveMaxEdm) {fData->Add(state,BasicFunctionMinimum::MnAboveMaxEdm());}
67 
68  const MinimumSeed& Seed() const {return fData->Seed();}
69  const std::vector<ROOT::Minuit2::MinimumState>& States() const {return fData->States();}
70 
71 // user representation of state at Minimum
72  const MnUserParameterState& UserState() const {
73  return fData->UserState();
74  }
75  const MnUserParameters& UserParameters() const {
76  return fData->UserParameters();
77  }
78  const MnUserCovariance& UserCovariance() const {
79  return fData->UserCovariance();
80  }
81 
82 // forward interface of last state
83  const MinimumState& State() const {return fData->State();}
84  const MinimumParameters& Parameters() const {return fData->Parameters();}
85  const MinimumError& Error() const {return fData->Error();}
86  const FunctionGradient& Grad() const {return fData->Grad();}
87  double Fval() const {return fData->Fval();}
88  double Edm() const {return fData->Edm();}
89  int NFcn() const {return fData->NFcn();}
90 
91  double Up() const {return fData->Up();}
92  bool IsValid() const {return fData->IsValid();}
93  bool HasValidParameters() const {return fData->HasValidParameters();}
94  bool HasValidCovariance() const {return fData->HasValidCovariance();}
95  bool HasAccurateCovar() const {return fData->HasAccurateCovar();}
96  bool HasPosDefCovar() const {return fData->HasPosDefCovar();}
97  bool HasMadePosDefCovar() const {return fData->HasMadePosDefCovar();}
98  bool HesseFailed() const {return fData->HesseFailed();}
99  bool HasCovariance() const {return fData->HasCovariance();}
100  bool IsAboveMaxEdm() const {return fData->IsAboveMaxEdm();}
101  bool HasReachedCallLimit() const {return fData->HasReachedCallLimit();}
102 
103  void SetErrorDef( double up) { return fData->SetErrorDef(up);}
104 
105 private:
106 
107  MnRefCountedPointer<BasicFunctionMinimum> fData;
108 };
109 
110  } // namespace Minuit2
111 
112 } // namespace ROOT
113 
114 #endif // ROOT_Minuit2_FunctionMinimum