From e47a5b502ae350bdb41c74e16502eda9a1cda257 Mon Sep 17 00:00:00 2001 From: Jürgen Knödlseder Date: Sat, 20 Jun 2015 21:55:19 +0200 Subject: [PATCH] cterror now applies to all model types, not only sky models. --- src/cterror/cterror.cpp | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/cterror/cterror.cpp b/src/cterror/cterror.cpp index 8aca943..6734dec 100644 --- a/src/cterror/cterror.cpp +++ b/src/cterror/cterror.cpp @@ -37,7 +37,6 @@ #define G_GET_PARAMETERS "cterror::get_parameters()" #define G_ERR_BISECTION "cterror::error_bisection(double&, double&)" #define G_EVALUATE "cterror::evaluate(double&)" -#define G_RUN "cterror::run()" /* __ Debug definitions __________________________________________________ */ @@ -241,6 +240,9 @@ void cterror::run(void) m_obs.errors(*m_opt); m_best_logL = m_obs.logL(); + // Store optimizer for later recovery + GOptimizerLM best_opt = *m_opt; + // Write optimised model into logger if (logTerse()) { log << *m_opt << std::endl; @@ -255,14 +257,8 @@ void cterror::run(void) // Save best fitting models GModels models_best = m_obs.models(); - // Get pointer on sky model - GModelSky* model = dynamic_cast(models_best[m_srcname]); - if (model == NULL) { - std::string msg = "Source \""+m_srcname+"\" is not a sky model. " - "Please specify the name of a sky model for " - "parameter error computation."; - throw GException::invalid_value(G_RUN, msg); - } + // Get pointer on model + GModel* model = models_best[m_srcname]; // Get number of parameters int npars = model->size(); @@ -278,10 +274,9 @@ void cterror::run(void) // Initialise with best fitting models m_obs.models(models_best); - // Get pointer on sky model parameter - GModels& current_models = const_cast(m_obs.models()); - GModelSky* current_model = dynamic_cast(current_models[m_srcname]); - m_model_par = &(current_model->at(i)); + // Get pointer on model parameter + GModels& current_models = const_cast(m_obs.models()); + m_model_par = &(current_models[m_srcname]->at(i)); // Extract current value m_value = m_model_par->factor_value(); @@ -360,6 +355,9 @@ void cterror::run(void) } // endif: source model exists + // Recover optimizer + *m_opt = best_opt; + // Return return; } -- libgit2 0.21.4