// @(#)root/minuit2:$Id: FunctionMinimum.h 21530 2007-12-20 11:14:35Z moneta $ // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei 2003-2005 /********************************************************************** * * * Copyright (c) 2005 LCG ROOT Math team, CERN/PH-SFT * * * **********************************************************************/ #ifndef ROOT_Minuit2_FunctionMinimum #define ROOT_Minuit2_FunctionMinimum #include "Minuit2/BasicFunctionMinimum.h" #ifdef G__DICTIONARY typedef ROOT::Minuit2::MinimumState MinimumState; #endif namespace ROOT { namespace Minuit2 { //______________________________________________________________________________________________ /** class holding the full result of the minimization; both internal and external (MnUserParameterState) representation available for the parameters at the Minimum */ class FunctionMinimum { public: class MnReachedCallLimit {}; class MnAboveMaxEdm {}; public: FunctionMinimum(const MinimumSeed& seed, double up) : fData(MnRefCountedPointer(new BasicFunctionMinimum(seed, up))) {} FunctionMinimum(const MinimumSeed& seed, const std::vector& states, double up) : fData(MnRefCountedPointer(new BasicFunctionMinimum(seed, states, up))) {} FunctionMinimum(const MinimumSeed& seed, const std::vector& states, double up, MnReachedCallLimit) : fData(MnRefCountedPointer(new BasicFunctionMinimum(seed, states, up, BasicFunctionMinimum::MnReachedCallLimit()))) {} FunctionMinimum(const MinimumSeed& seed, const std::vector& states, double up, MnAboveMaxEdm) : fData(MnRefCountedPointer(new BasicFunctionMinimum(seed, states, up, BasicFunctionMinimum::MnAboveMaxEdm()))) {} FunctionMinimum(const FunctionMinimum& min) : fData(min.fData) {} FunctionMinimum& operator=(const FunctionMinimum& min) { fData = min.fData; return *this; } ~FunctionMinimum() {} // why not void Add(const MinimumState& state) {fData->Add(state);} const MinimumSeed& Seed() const {return fData->Seed();} const std::vector& States() const {return fData->States();} // user representation of state at Minimum const MnUserParameterState& UserState() const { return fData->UserState(); } const MnUserParameters& UserParameters() const { return fData->UserParameters(); } const MnUserCovariance& UserCovariance() const { return fData->UserCovariance(); } // forward interface of last state const MinimumState& State() const {return fData->State();} const MinimumParameters& Parameters() const {return fData->Parameters();} const MinimumError& Error() const {return fData->Error();} const FunctionGradient& Grad() const {return fData->Grad();} double Fval() const {return fData->Fval();} double Edm() const {return fData->Edm();} int NFcn() const {return fData->NFcn();} double Up() const {return fData->Up();} bool IsValid() const {return fData->IsValid();} bool HasValidParameters() const {return fData->HasValidParameters();} bool HasValidCovariance() const {return fData->HasValidCovariance();} bool HasAccurateCovar() const {return fData->HasAccurateCovar();} bool HasPosDefCovar() const {return fData->HasPosDefCovar();} bool HasMadePosDefCovar() const {return fData->HasMadePosDefCovar();} bool HesseFailed() const {return fData->HesseFailed();} bool HasCovariance() const {return fData->HasCovariance();} bool IsAboveMaxEdm() const {return fData->IsAboveMaxEdm();} bool HasReachedCallLimit() const {return fData->HasReachedCallLimit();} void SetErrorDef( double up) { return fData->SetErrorDef(up);} private: MnRefCountedPointer fData; }; } // namespace Minuit2 } // namespace ROOT #endif // ROOT_Minuit2_FunctionMinimum