//////////////////////////////////////////////////////////////////////// /// \class RAT::Optimisers::Minuit /// /// \brief Minuit based optimiser /// /// \author Phil G Jones /// \author Matt Mottram < m.mottram@qmul.ac.uk> -- contact person /// /// REVISION HISTORY:\n /// 26/04/2011 : P G Jones - New file \n /// 29/05/2013 : W J Heintzelman Add variable fTol; change name of \n /// fMaxInterations to fMaxCalls for consistency with \n /// Minuit documentation; add SetD function. \n /// 24/11/2014 : W J Heintzelman Add option to select Minuit method \n /// /// \details This is a dumb optimiser, Minuit just optimises the numbers /// //////////////////////////////////////////////////////////////////////// #ifndef __RAT_Optimiser_Minuit_ #define __RAT_Optimiser_Minuit_ #include #include #include #include using namespace ROOT::Minuit2; namespace RAT { namespace Optimisers { class Minuit : public Optimiser, public FCNBase { public: virtual std::string GetName() const { return Minuit::Name(); } static std::string Name() { return std::string( "minuit" ); } /// Initialise the Minuit Optimiser void Initialise( const std::string& param ); void BeginOfRun( DS::Run& run ); void EndOfRun( DS::Run& ) { } void SetD( const std::string& param, double value ); void SetI( const std::string& param, int value ); void SetS( const std::string& param, const std::string& value ); virtual double Minimise(); virtual double Maximise(); // Below follows the required Minuit functions virtual double operator()( const std::vector& lParams ) const; ///< Vector of values to be optimised double Up() const { return fUp; } // End Minuit functions protected: /// Invoke the Minuit optimiser double MinuitOptimise(); std::string fIndex; ///< Optional ratdb index string double fTol; ///< Minuit fit tolerance; 0.1 is Minuit default. int fMaxCalls; ///< Maximum number of user function calls. ///< For fMaxCalls=0, Minuit uses formula to set limit. double fMinFactor; ///< Always minimises, thus to maximise set this to -1 double fUp; ///< Error definition 0.5 for likelihood 1 for chi? std::string fMethod; ///< Method, either "Migrad", "Minimize", or ///< "Simplex". Default is "Migrad". }; } //::Optimiser } //::RAT #endif