Commit e99f033eecada40bbb9455b84052797400988376
1 parent
ad7ffe86
Make TS computation optional.
Showing
3 changed files
with
40 additions
and
47 deletions
src/ctlike/ctlike.cpp
| ... | ... | @@ -267,39 +267,46 @@ void ctlike::run(void) |
| 267 | 267 | |
| 268 | 268 | // Optimize model parameters using LM optimizer |
| 269 | 269 | optimize_lm(); |
| 270 | + | |
| 271 | + // Optionally perform TS computation | |
| 272 | + if (m_tscalc) { | |
| 270 | 273 | |
| 271 | - // Store original models and max. likelihood | |
| 272 | - double logL_src=m_logL; | |
| 273 | - GModels* models_orig = m_obs.models().clone(); | |
| 274 | + // Store original models and max. likelihood | |
| 275 | + double logL_src = m_logL; | |
| 276 | + GModels* models_orig = m_obs.models().clone(); | |
| 274 | 277 | |
| 275 | - //Store models whith free parameters | |
| 276 | - std::vector<std::string> free_srcs; | |
| 277 | - GModels models = m_obs.models(); | |
| 278 | - for (int ii=0; ii < models.size();ii++){ | |
| 279 | - GModel* model = models[ii]; | |
| 280 | - for(int jj=0; jj < model->size();jj++){ | |
| 281 | - GModelPar par = model->at(jj); | |
| 282 | - if (par.is_free()){ | |
| 283 | - free_srcs.push_back(model->name()); | |
| 284 | - break; | |
| 278 | + // Store models whith free parameters | |
| 279 | + std::vector<std::string> free_srcs; | |
| 280 | + GModels models = m_obs.models(); | |
| 281 | + for (int i = 0; i < models.size(); ++i) { | |
| 282 | + GModel* model = models[i]; | |
| 283 | + for(int j = 0; j < model->size(); ++j) { | |
| 284 | + GModelPar par = model->at(j); | |
| 285 | + if (par.is_free()){ | |
| 286 | + free_srcs.push_back(model->name()); | |
| 287 | + break; | |
| 288 | + } | |
| 285 | 289 | } |
| 286 | 290 | } |
| 287 | - } | |
| 288 | - //Loop over stored models, remove source and refit | |
| 289 | - for (int ii=0; ii < free_srcs.size();ii++){ | |
| 290 | - models.remove(free_srcs[ii]); | |
| 291 | - m_obs.models(models); | |
| 291 | + | |
| 292 | + // Loop over stored models, remove source and refit | |
| 293 | + for (int i = 0; i < free_srcs.size(); ++i) { | |
| 294 | + models.remove(free_srcs[i]); | |
| 295 | + m_obs.models(models); | |
| 296 | + optimize_lm(); | |
| 297 | + double logL_nosrc = m_logL; | |
| 298 | + double ts = 2.0 * (logL_src-logL_nosrc); | |
| 299 | + std::string name = free_srcs[i]; | |
| 300 | + (*models_orig)[name]->ts(ts); | |
| 301 | + models = *models_orig; | |
| 302 | + } | |
| 303 | + | |
| 304 | + // Restore best fit values | |
| 305 | + // TODO: store fit results before and avoid refitting | |
| 306 | + m_obs.models(*models_orig); | |
| 292 | 307 | optimize_lm(); |
| 293 | - double logL_nosrc=m_logL; | |
| 294 | - double TS = 2* (logL_src-logL_nosrc); | |
| 295 | - std::string name = free_srcs[ii]; | |
| 296 | - (*models_orig)[name]->ts(TS); | |
| 297 | - models = *models_orig; | |
| 298 | - } | |
| 299 | - // Restore best fit values | |
| 300 | - // TODO: store fit results before and avoid refitting | |
| 301 | - m_obs.models(*models_orig); | |
| 302 | - optimize_lm(); | |
| 308 | + | |
| 309 | + } // endif: did optional TS computation | |
| 303 | 310 | |
| 304 | 311 | // Compute number of observed events in all observations |
| 305 | 312 | double num_events = 0.0; |
| ... | ... | @@ -392,25 +399,6 @@ void ctlike::get_parameters(void) |
| 392 | 399 | // Try first to open as FITS file |
| 393 | 400 | try { |
| 394 | 401 | |
| 395 | - // Determine whether FITS file has EVENTS extension | |
| 396 | - /* | |
| 397 | - GFits fits(filename); | |
| 398 | - bool is_unbinned = fits.contains("EVENTS"); | |
| 399 | - fits.close(); | |
| 400 | - */ | |
| 401 | - | |
| 402 | - // If FITS file has an events header then load as unbinned | |
| 403 | - /* | |
| 404 | - if (is_unbinned) { | |
| 405 | - obs.load_unbinned(filename); | |
| 406 | - } | |
| 407 | - | |
| 408 | - // ... otherwise load as binned | |
| 409 | - else { | |
| 410 | - obs.load_binned(filename); | |
| 411 | - } | |
| 412 | - */ | |
| 413 | - | |
| 414 | 402 | // Load data |
| 415 | 403 | obs.load(filename); |
| 416 | 404 | |
| ... | ... | @@ -504,6 +492,7 @@ void ctlike::get_parameters(void) |
| 504 | 492 | |
| 505 | 493 | // Get other parameters |
| 506 | 494 | m_refit = (*this)["refit"].boolean(); |
| 495 | + m_tscalc = (*this)["tscalc"].boolean(); | |
| 507 | 496 | m_apply_edisp = (*this)["edisp"].boolean(); |
| 508 | 497 | |
| 509 | 498 | // Optionally read ahead parameters so that they get correctly |
| ... | ... | @@ -587,6 +576,7 @@ void ctlike::init_members(void) |
| 587 | 576 | m_outmdl.clear(); |
| 588 | 577 | m_obs.clear(); |
| 589 | 578 | m_refit = false; |
| 579 | + m_tscalc = false; | |
| 590 | 580 | m_max_iter = 100; // Set maximum number of iterations |
| 591 | 581 | m_max_stall = 10; // Set maximum number of stalls |
| 592 | 582 | m_logL = 0.0; |
| ... | ... | @@ -612,6 +602,7 @@ void ctlike::copy_members(const ctlike& app) |
| 612 | 602 | // Copy attributes |
| 613 | 603 | m_stat = app.m_stat; |
| 614 | 604 | m_refit = app.m_refit; |
| 605 | + m_tscalc = app.m_tscalc; | |
| 615 | 606 | m_caldb = app.m_caldb; |
| 616 | 607 | m_irf = app.m_irf; |
| 617 | 608 | m_outmdl = app.m_outmdl; | ... | ... |
src/ctlike/ctlike.hpp
| ... | ... | @@ -73,6 +73,7 @@ protected: |
| 73 | 73 | // User parameters |
| 74 | 74 | std::string m_stat; //!< Optimisation statistics (poisson/gaussian) |
| 75 | 75 | bool m_refit; //!< Refitting |
| 76 | + bool m_tscalc; //!< TS computation | |
| 76 | 77 | std::string m_caldb; //!< Calibration database |
| 77 | 78 | std::string m_irf; //!< Instrument response functions |
| 78 | 79 | std::string m_outmdl; //!< Source model output XML file | ... | ... |
src/ctlike/ctlike.par
| ... | ... | @@ -21,6 +21,7 @@ infile, f, a, "events.fits",,, "Event list, counts map or observation definition |
| 21 | 21 | stat, s, h, "POISSON",,, "Optimization statistics" |
| 22 | 22 | edisp, b, h, no,,, "Apply energy dispersion?" |
| 23 | 23 | refit, b, h, no,,, "Do refitting?" |
| 24 | +tscalc, b, h, no,,, "Compute TS values?" | |
| 24 | 25 | caldb, s, a, "dummy",,, "Calibration database" |
| 25 | 26 | irf, s, a, "cta_dummy_irf",,, "Instrument response function" |
| 26 | 27 | srcmdl, f, a, "$CTOOLS/share/models/crab.xml",,, "Source model" | ... | ... |