Commit e47a5b502ae350bdb41c74e16502eda9a1cda257
1 parent
4677209a
cterror now applies to all model types, not only sky models.
Showing
1 changed file
with
11 additions
and
13 deletions
src/cterror/cterror.cpp
| @@ -37,7 +37,6 @@ | @@ -37,7 +37,6 @@ | ||
| 37 | #define G_GET_PARAMETERS "cterror::get_parameters()" | 37 | #define G_GET_PARAMETERS "cterror::get_parameters()" |
| 38 | #define G_ERR_BISECTION "cterror::error_bisection(double&, double&)" | 38 | #define G_ERR_BISECTION "cterror::error_bisection(double&, double&)" |
| 39 | #define G_EVALUATE "cterror::evaluate(double&)" | 39 | #define G_EVALUATE "cterror::evaluate(double&)" |
| 40 | -#define G_RUN "cterror::run()" | ||
| 41 | 40 | ||
| 42 | /* __ Debug definitions __________________________________________________ */ | 41 | /* __ Debug definitions __________________________________________________ */ |
| 43 | 42 | ||
| @@ -241,6 +240,9 @@ void cterror::run(void) | @@ -241,6 +240,9 @@ void cterror::run(void) | ||
| 241 | m_obs.errors(*m_opt); | 240 | m_obs.errors(*m_opt); |
| 242 | m_best_logL = m_obs.logL(); | 241 | m_best_logL = m_obs.logL(); |
| 243 | 242 | ||
| 243 | + // Store optimizer for later recovery | ||
| 244 | + GOptimizerLM best_opt = *m_opt; | ||
| 245 | + | ||
| 244 | // Write optimised model into logger | 246 | // Write optimised model into logger |
| 245 | if (logTerse()) { | 247 | if (logTerse()) { |
| 246 | log << *m_opt << std::endl; | 248 | log << *m_opt << std::endl; |
| @@ -255,14 +257,8 @@ void cterror::run(void) | @@ -255,14 +257,8 @@ void cterror::run(void) | ||
| 255 | // Save best fitting models | 257 | // Save best fitting models |
| 256 | GModels models_best = m_obs.models(); | 258 | GModels models_best = m_obs.models(); |
| 257 | 259 | ||
| 258 | - // Get pointer on sky model | ||
| 259 | - GModelSky* model = dynamic_cast<GModelSky*>(models_best[m_srcname]); | ||
| 260 | - if (model == NULL) { | ||
| 261 | - std::string msg = "Source \""+m_srcname+"\" is not a sky model. " | ||
| 262 | - "Please specify the name of a sky model for " | ||
| 263 | - "parameter error computation."; | ||
| 264 | - throw GException::invalid_value(G_RUN, msg); | ||
| 265 | - } | 260 | + // Get pointer on model |
| 261 | + GModel* model = models_best[m_srcname]; | ||
| 266 | 262 | ||
| 267 | // Get number of parameters | 263 | // Get number of parameters |
| 268 | int npars = model->size(); | 264 | int npars = model->size(); |
| @@ -278,10 +274,9 @@ void cterror::run(void) | @@ -278,10 +274,9 @@ void cterror::run(void) | ||
| 278 | // Initialise with best fitting models | 274 | // Initialise with best fitting models |
| 279 | m_obs.models(models_best); | 275 | m_obs.models(models_best); |
| 280 | 276 | ||
| 281 | - // Get pointer on sky model parameter | ||
| 282 | - GModels& current_models = const_cast<GModels&>(m_obs.models()); | ||
| 283 | - GModelSky* current_model = dynamic_cast<GModelSky*>(current_models[m_srcname]); | ||
| 284 | - m_model_par = &(current_model->at(i)); | 277 | + // Get pointer on model parameter |
| 278 | + GModels& current_models = const_cast<GModels&>(m_obs.models()); | ||
| 279 | + m_model_par = &(current_models[m_srcname]->at(i)); | ||
| 285 | 280 | ||
| 286 | // Extract current value | 281 | // Extract current value |
| 287 | m_value = m_model_par->factor_value(); | 282 | m_value = m_model_par->factor_value(); |
| @@ -360,6 +355,9 @@ void cterror::run(void) | @@ -360,6 +355,9 @@ void cterror::run(void) | ||
| 360 | 355 | ||
| 361 | } // endif: source model exists | 356 | } // endif: source model exists |
| 362 | 357 | ||
| 358 | + // Recover optimizer | ||
| 359 | + *m_opt = best_opt; | ||
| 360 | + | ||
| 363 | // Return | 361 | // Return |
| 364 | return; | 362 | return; |
| 365 | } | 363 | } |