BasicMinimumState.h

Go to the documentation of this file.
00001 // @(#)root/minuit2:$Id: BasicMinimumState.h 20880 2007-11-19 11:23:41Z rdm $
00002 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei   2003-2005  
00003 
00004 /**********************************************************************
00005  *                                                                    *
00006  * Copyright (c) 2005 LCG ROOT Math team,  CERN/PH-SFT                *
00007  *                                                                    *
00008  **********************************************************************/
00009 
00010 #ifndef ROOT_Minuit2_BasicMinimumState
00011 #define ROOT_Minuit2_BasicMinimumState
00012 
00013 #include "Minuit2/MinimumParameters.h"
00014 #include "Minuit2/MinimumError.h"
00015 #include "Minuit2/FunctionGradient.h"
00016 
00017 #include "Minuit2/StackAllocator.h"
00018 
00019 namespace ROOT {
00020 
00021    namespace Minuit2 {
00022 
00023 
00024 //extern StackAllocator gStackAllocator;
00025 
00026 class BasicMinimumState {
00027 
00028 public:
00029 
00030   BasicMinimumState(unsigned int n) : 
00031     fParameters(MinimumParameters(n)), fError(MinimumError(n)), 
00032     fGradient(FunctionGradient(n)), fEDM(0.), fNFcn(0) {}
00033   BasicMinimumState(const MinimumParameters& states, const MinimumError& err, 
00034                const FunctionGradient& grad, double edm, int nfcn) : 
00035     fParameters(states), fError(err), fGradient(grad), fEDM(edm), fNFcn(nfcn) {}
00036   
00037   BasicMinimumState(const MinimumParameters& states, double edm, int nfcn) : fParameters(states), fError(MinimumError(states.Vec().size())), fGradient(FunctionGradient(states.Vec().size())), fEDM(edm), fNFcn(nfcn) {}
00038   
00039   ~BasicMinimumState() {}
00040 
00041   BasicMinimumState(const BasicMinimumState& state) : 
00042     fParameters(state.fParameters), fError(state.fError), fGradient(state.fGradient), fEDM(state.fEDM), fNFcn(state.fNFcn) {}
00043   
00044   BasicMinimumState& operator=(const BasicMinimumState& state) {
00045     fParameters = state.fParameters; 
00046     fError = state.fError;
00047     fGradient = state.fGradient;
00048     fEDM = state.fEDM;
00049     fNFcn = state.fNFcn;
00050     return *this;
00051   }
00052 
00053   void* operator new(size_t nbytes) {
00054     return StackAllocatorHolder::Get().Allocate(nbytes);
00055   }
00056   
00057   void operator delete(void* p, size_t /*nbytes */) {
00058     StackAllocatorHolder::Get().Deallocate(p);
00059   }
00060 
00061   const MinimumParameters& Parameters() const {return fParameters;}
00062   const MnAlgebraicVector& Vec() const {return fParameters.Vec();}
00063   int size() const {return fParameters.Vec().size();}
00064 
00065   const MinimumError& Error() const {return fError;}
00066   const FunctionGradient& Gradient() const {return fGradient;}
00067   double Fval() const {return fParameters.Fval();}
00068   double Edm() const {return fEDM;}
00069   int NFcn() const {return fNFcn;}
00070 
00071   bool IsValid() const {    
00072     if(HasParameters() && HasCovariance()) 
00073       return Parameters().IsValid() && Error().IsValid();
00074     else if(HasParameters()) return Parameters().IsValid();
00075     else return false;
00076   }  
00077   bool HasParameters() const {return fParameters.IsValid();}
00078   bool HasCovariance() const {return fError.IsAvailable();}
00079   
00080 private:
00081   
00082   MinimumParameters fParameters;
00083   MinimumError fError;
00084   FunctionGradient fGradient;
00085   double fEDM;
00086   int fNFcn;
00087 };
00088 
00089   }  // namespace Minuit2
00090 
00091 }  // namespace ROOT
00092 
00093 #endif  // ROOT_Minuit2_BasicMinimumState

Generated on Tue Jul 5 14:25:41 2011 for ROOT_528-00b_version by  doxygen 1.5.1