Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
BasicFunctionMinimum.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_BasicFunctionMinimum
11#define ROOT_Minuit2_BasicFunctionMinimum
12
13#include "Minuit2/MinimumSeed.h"
17
19
20#include <vector>
21
22namespace ROOT {
23
24namespace Minuit2 {
25
26// extern StackAllocator gStackAllocator;
27
28/** result of the minimization;
29 both internal and external (MnUserParameterState) representation available
30 For the parameters at the Minimum
31 */
32
34
35public:
37 };
39 };
40
41public:
42 /// Constructor from only MinimumSeed. Minimum is only from seed result not the full minimization
43 BasicFunctionMinimum(const MinimumSeed &seed, double up)
44 : fSeed(seed), fStates(std::vector<MinimumState>(1, MinimumState(seed.Parameters(), seed.Error(), seed.Gradient(),
45 seed.Parameters().Fval(), seed.NFcn()))),
47 {
48 }
49
50 /// Constructor at the end of a successfull minimization from seed and vector of states
51 BasicFunctionMinimum(const MinimumSeed &seed, const std::vector<MinimumState> &states, double up)
52 : fSeed(seed), fStates(states), fErrorDef(up), fAboveMaxEdm(false), fReachedCallLimit(false),
54 {
55 }
56
57 /// Constructor at the end of a failed minimization due to exceeding function call limit
58 BasicFunctionMinimum(const MinimumSeed &seed, const std::vector<MinimumState> &states, double up, MnReachedCallLimit)
59 : fSeed(seed), fStates(states), fErrorDef(up), fAboveMaxEdm(false), fReachedCallLimit(true),
61 {
62 }
63
64 /// Constructor at the end of a failed minimization due to edm above maximum value
65 BasicFunctionMinimum(const MinimumSeed &seed, const std::vector<MinimumState> &states, double up, MnAboveMaxEdm)
66 : fSeed(seed), fStates(states), fErrorDef(up), fAboveMaxEdm(true), fReachedCallLimit(false),
68 {
69 }
70
71 /// Copy constructor
75 {
76 }
77
79 {
80 fSeed = min.fSeed;
81 fStates = min.fStates;
82 fErrorDef = min.fErrorDef;
86 return *this;
87 }
88
90
91 /// add latest minimization state (for example add Hesse result after Migrad)
92 void Add(const MinimumState &state)
93 {
94 fStates.push_back(state);
95 // LM : update also the user state
96 fUserState = MnUserParameterState(State(), Up(), Seed().Trafo());
97 // reset maxedm flag. If new state has edm over max other method must be used
98 fAboveMaxEdm = false;
99 }
100
101 /// Add a new state and flag that edm is above maximum
102 void Add(const MinimumState &state, MnAboveMaxEdm)
103 {
104 Add(state);
105 fAboveMaxEdm = true;
106 }
107
108 const MinimumSeed &Seed() const { return fSeed; }
109 const std::vector<MinimumState> &States() const { return fStates; }
110
111 // user representation of state at Minimum
113 {
114 if (!fUserState.IsValid())
115 fUserState = MnUserParameterState(State(), Up(), Seed().Trafo());
116 return fUserState;
117 }
119 {
120 if (!fUserState.IsValid())
121 fUserState = MnUserParameterState(State(), Up(), Seed().Trafo());
122 return fUserState.Parameters();
123 }
125 {
126 if (!fUserState.IsValid())
127 fUserState = MnUserParameterState(State(), Up(), Seed().Trafo());
128 return fUserState.Covariance();
129 }
130
131 void *operator new(size_t nbytes) { return StackAllocatorHolder::Get().Allocate(nbytes); }
132
133 void operator delete(void *p, size_t /*nbytes */) { StackAllocatorHolder::Get().Deallocate(p); }
134
135 // forward interface of last state
136 const MinimumState &State() const { return fStates.back(); }
137 const MinimumParameters &Parameters() const { return fStates.back().Parameters(); }
138 const MinimumError &Error() const { return fStates.back().Error(); }
139 const FunctionGradient &Grad() const { return fStates.back().Gradient(); }
140 double Fval() const { return fStates.back().Fval(); }
141 double Edm() const { return fStates.back().Edm(); }
142 int NFcn() const { return fStates.back().NFcn(); }
143
144 double Up() const { return fErrorDef; }
145 bool IsValid() const { return State().IsValid() && !IsAboveMaxEdm() && !HasReachedCallLimit(); }
146 bool HasValidParameters() const { return State().Parameters().IsValid(); }
147 bool HasValidCovariance() const { return State().Error().IsValid(); }
148 bool HasAccurateCovar() const { return State().Error().IsAccurate(); }
149 bool HasPosDefCovar() const { return State().Error().IsPosDef(); }
150 bool HasMadePosDefCovar() const { return State().Error().IsMadePosDef(); }
151 bool HesseFailed() const { return State().Error().HesseFailed(); }
152 bool HasCovariance() const { return State().Error().IsAvailable(); }
153 bool IsAboveMaxEdm() const { return fAboveMaxEdm; }
154 bool HasReachedCallLimit() const { return fReachedCallLimit; }
155
156 void SetErrorDef(double up)
157 {
158 fErrorDef = up;
159 // update user state for new valeu of up (scaling of errors)
160 fUserState = MnUserParameterState(State(), up, Seed().Trafo());
161 }
162
163private:
165 std::vector<MinimumState> fStates;
166 double fErrorDef;
170};
171
172} // namespace Minuit2
173
174} // namespace ROOT
175
176#endif // ROOT_Minuit2_BasicFunctionMinimum
result of the minimization; both internal and external (MnUserParameterState) representation availabl...
const MnUserParameterState & UserState() const
const MinimumParameters & Parameters() const
BasicFunctionMinimum(const MinimumSeed &seed, const std::vector< MinimumState > &states, double up, MnReachedCallLimit)
Constructor at the end of a failed minimization due to exceeding function call limit.
BasicFunctionMinimum & operator=(const BasicFunctionMinimum &min)
const std::vector< MinimumState > & States() const
BasicFunctionMinimum(const MinimumSeed &seed, double up)
Constructor from only MinimumSeed. Minimum is only from seed result not the full minimization.
BasicFunctionMinimum(const MinimumSeed &seed, const std::vector< MinimumState > &states, double up)
Constructor at the end of a successfull minimization from seed and vector of states.
const MnUserCovariance & UserCovariance() const
void Add(const MinimumState &state)
add latest minimization state (for example add Hesse result after Migrad)
const MnUserParameters & UserParameters() const
BasicFunctionMinimum(const BasicFunctionMinimum &min)
Copy constructor.
BasicFunctionMinimum(const MinimumSeed &seed, const std::vector< MinimumState > &states, double up, MnAboveMaxEdm)
Constructor at the end of a failed minimization due to edm above maximum value.
const FunctionGradient & Grad() const
void Add(const MinimumState &state, MnAboveMaxEdm)
Add a new state and flag that edm is above maximum.
MinimumError keeps the inv.
MinimumSeed contains the starting values for the minimization produced by the SeedGenerator.
Definition MinimumSeed.h:31
MinimumState keeps the information (position, Gradient, 2nd deriv, etc) after one minimization step (...
const MinimumError & Error() const
const MinimumParameters & Parameters() const
Class containing the covariance matrix data represented as a vector of size n*(n+1)/2 Used to hide in...
class which holds the external user and/or internal Minuit representation of the parameters and error...
const MnUserParameters & Parameters() const
const MnUserCovariance & Covariance() const
API class for the user interaction with the parameters; serves as input to the minimizer as well as o...
static StackAllocator & Get()
void * Allocate(size_t nBytes)
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...