Commit e47a5b502ae350bdb41c74e16502eda9a1cda257

Authored by Jürgen Knödlseder
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 }