00001 // @(#)root/minuit2:$Id: BasicMinimumSeed.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_BasicMinimumSeed 00011 #define ROOT_Minuit2_BasicMinimumSeed 00012 00013 #include "Minuit2/MinimumState.h" 00014 #include "Minuit2/MinimumParameters.h" 00015 #include "Minuit2/MinimumError.h" 00016 #include "Minuit2/FunctionGradient.h" 00017 #include "Minuit2/MnUserTransformation.h" 00018 00019 #include "Minuit2/StackAllocator.h" 00020 00021 namespace ROOT { 00022 00023 namespace Minuit2 { 00024 00025 00026 //extern StackAllocator gStackAllocator; 00027 00028 class BasicMinimumSeed { 00029 00030 public: 00031 00032 BasicMinimumSeed(const MinimumState& state, const MnUserTransformation& trafo) : fState(state), fTrafo(trafo), fValid(true) {} 00033 00034 ~BasicMinimumSeed() {} 00035 00036 BasicMinimumSeed(const BasicMinimumSeed& seed) : fState(seed.fState), fTrafo(seed.fTrafo), fValid(seed.fValid) {} 00037 00038 BasicMinimumSeed& operator=(const BasicMinimumSeed& seed) { 00039 fState = seed.fState; 00040 fTrafo = seed.fTrafo; 00041 fValid = seed.fValid; 00042 return *this; 00043 } 00044 00045 void* operator new(size_t nbytes) { 00046 return StackAllocatorHolder::Get().Allocate(nbytes); 00047 } 00048 00049 void operator delete(void* p, size_t /*nbytes*/) { 00050 StackAllocatorHolder::Get().Deallocate(p); 00051 } 00052 00053 const MinimumState& State() const {return fState;} 00054 const MinimumParameters& Parameters() const {return State().Parameters();} 00055 const MinimumError& Error() const {return State().Error();}; 00056 const FunctionGradient& Gradient() const {return State().Gradient();} 00057 const MnUserTransformation& Trafo() const {return fTrafo;} 00058 const MnMachinePrecision& Precision() const {return fTrafo.Precision();} 00059 double Fval() const {return State().Fval();} 00060 double Edm() const {return State().Edm();} 00061 unsigned int NFcn() const {return State().NFcn();} 00062 bool IsValid() const {return fValid;} 00063 00064 private: 00065 00066 MinimumState fState; 00067 MnUserTransformation fTrafo; 00068 bool fValid; 00069 }; 00070 00071 } // namespace Minuit2 00072 00073 } // namespace ROOT 00074 00075 #endif // ROOT_Minuit2_BasicMinimumSeed