diff --git a/src/cterror/cterror.cpp b/src/cterror/cterror.cpp index afb2420..f06f82e 100644 --- a/src/cterror/cterror.cpp +++ b/src/cterror/cterror.cpp @@ -233,16 +233,16 @@ void cterror::run(void) } // Optimize and save best log-likelihood - m_obs.optimize(*m_opt); - m_obs.errors(*m_opt); + m_obs.optimize(m_opt); + m_obs.errors(m_opt); m_best_logL = m_obs.logL(); // Store optimizer for later recovery - GOptimizerLM best_opt = *m_opt; + GOptimizerLM best_opt = m_opt; // Write optimised model into logger if (logTerse()) { - log << *m_opt << std::endl; + log << m_opt << std::endl; log << gammalib::parformat("Maximum log likelihood"); log << gammalib::str(m_best_logL,3) << std::endl; log << m_obs.models() << std::endl; @@ -353,7 +353,7 @@ void cterror::run(void) } // endif: source model exists // Recover optimizer - *m_opt = best_opt; + m_opt = best_opt; // Return return; @@ -406,20 +406,14 @@ void cterror::init_members(void) // Initialise protected members m_obs.clear(); + m_opt.clear(); m_dlogL = 0.0; m_best_logL = 0.0; m_model_par = NULL; - m_opt = NULL; - - // Allocate LM optimizer - GOptimizerLM* opt = new GOptimizerLM(); // Set optimizer parameters - opt->max_iter(m_max_iter); - opt->max_stalls(10); - - // Set optimizer pointer - m_opt = opt; + m_opt.max_iter(m_max_iter); + m_opt.max_stalls(10); // Return return; @@ -443,7 +437,7 @@ void cterror::copy_members(const cterror& app) m_obs = app.m_obs; m_dlogL = app.m_dlogL; m_best_logL = app.m_best_logL; - m_opt = app.m_opt->clone(); + m_opt = app.m_opt; m_model_par = NULL; // Return @@ -666,7 +660,7 @@ double cterror::evaluate(const double& value) m_model_par->fix(); // Re-optimize - m_obs.optimize(*m_opt); + m_obs.optimize(m_opt); // Retrieve likelihood logL = m_obs.logL(); diff --git a/src/cterror/cterror.hpp b/src/cterror/cterror.hpp index e92f987..206231b 100644 --- a/src/cterror/cterror.hpp +++ b/src/cterror/cterror.hpp @@ -84,7 +84,7 @@ protected: double m_dlogL; //!< Likelihood difference for upper limit computation GModelPar* m_model_par; //!< Pointer to model parameter double m_best_logL; //!< Best fit log likelihood of given model - GOptimizerLM* m_opt; //!< Optimizer + GOptimizerLM m_opt; //!< Optimizer }; @@ -92,7 +92,7 @@ protected: /***********************************************************************//** * @brief Return observation container * - * @return Reference to observation container + * @return Reference to observation container. ***************************************************************************/ inline const GObservations& cterror::obs(void) const @@ -100,15 +100,16 @@ const GObservations& cterror::obs(void) const return m_obs; } + /***********************************************************************//** * @brief Return optimizer * - * @return Pointer to optimizer + * @return Pointer to optimizer. ***************************************************************************/ inline const GOptimizer* cterror::opt(void) const { - return m_opt; + return &m_opt; } #endif /* CTERROR_HPP */ diff --git a/src/ctulimit/ctulimit.cpp b/src/ctulimit/ctulimit.cpp index 25e1043..eb0258a 100644 --- a/src/ctulimit/ctulimit.cpp +++ b/src/ctulimit/ctulimit.cpp @@ -247,16 +247,16 @@ void ctulimit::run(void) } // Optimize and save best log-likelihood - m_obs.optimize(*m_opt); - m_obs.errors(*m_opt); + m_obs.optimize(m_opt); + m_obs.errors(m_opt); m_best_logL = m_obs.logL(); // Store optimizer for later recovery - best_opt = *m_opt; + best_opt = m_opt; // Write optimised model into logger if (logTerse()) { - log << *m_opt << std::endl; + log << m_opt << std::endl; log << gammalib::parformat("Maximum log likelihood"); log << gammalib::str(m_best_logL,3) << std::endl; log << m_obs.models() << std::endl; @@ -341,7 +341,7 @@ void ctulimit::run(void) m_obs.models(models_orig); // Recover optimizer - *m_opt = best_opt; + m_opt = best_opt; // Return return; @@ -408,6 +408,7 @@ void ctulimit::init_members(void) // Initialise protected members m_obs.clear(); + m_opt.clear(); m_dlogL = 0.0; m_skymodel = NULL; m_model_par = NULL; @@ -415,17 +416,10 @@ void ctulimit::init_members(void) m_flux_ulimit = 0.0; m_diff_ulimit = 0.0; m_eflux_ulimit = 0.0; - m_opt = NULL; - - // Allocate LM optimizer - GOptimizerLM* opt = new GOptimizerLM(); // Set optimizer parameters - opt->max_iter(m_max_iter); - opt->max_stalls(10); - - // Set optimizer pointer - m_opt = opt; + m_opt.max_iter(m_max_iter); + m_opt.max_stalls(10); // Return return; @@ -458,7 +452,7 @@ void ctulimit::copy_members(const ctulimit& app) m_diff_ulimit = app.m_diff_ulimit; m_flux_ulimit = app.m_flux_ulimit; m_eflux_ulimit = app.m_eflux_ulimit; - m_opt = app.m_opt->clone(); + m_opt = app.m_opt; // Extract model parameter get_model_parameter(); @@ -697,7 +691,7 @@ double ctulimit::evaluate(const double& value) m_model_par->fix(); // Re-optimize - m_obs.optimize(*m_opt); + m_obs.optimize(m_opt); // Retrieve likelihood logL = m_obs.logL(); diff --git a/src/ctulimit/ctulimit.hpp b/src/ctulimit/ctulimit.hpp index df2f01a..2635d2d 100644 --- a/src/ctulimit/ctulimit.hpp +++ b/src/ctulimit/ctulimit.hpp @@ -103,14 +103,14 @@ protected: double m_diff_ulimit; //!< Differential upper limit value double m_flux_ulimit; //!< Flux upper limit value double m_eflux_ulimit; //!< Energy flux upper limits - GOptimizerLM* m_opt; //!< Optimizer + GOptimizerLM m_opt; //!< Optimizer }; /***********************************************************************//** * @brief Return observation container * - * @return Reference to observation container + * @return Reference to observation container. ***************************************************************************/ inline const GObservations& ctulimit::obs(void) const @@ -118,10 +118,23 @@ const GObservations& ctulimit::obs(void) const return m_obs; } + +/***********************************************************************//** + * @brief Return optimizer + * + * @return Pointer to optimizer. + ***************************************************************************/ +inline +const GOptimizer* ctulimit::opt(void) const +{ + return &m_opt; +} + + /***********************************************************************//** * @brief Return differential upper limit * - * @return differential upper limit + * @return Differential upper flux limit. ***************************************************************************/ inline const double& ctulimit::diff_ulimit(void) const @@ -129,10 +142,11 @@ const double& ctulimit::diff_ulimit(void) const return m_diff_ulimit; } + /***********************************************************************//** * @brief Return flux upper limit * - * @return flux upper limit + * @return Upper flux limit. ***************************************************************************/ inline const double& ctulimit::flux_ulimit(void) const @@ -140,10 +154,11 @@ const double& ctulimit::flux_ulimit(void) const return m_flux_ulimit; } + /***********************************************************************//** * @brief return energy flux upper limit * - * @return energy flux upper limits + * @return Upper energy flux limit. ***************************************************************************/ inline const double& ctulimit::eflux_ulimit(void) const