Commit 6955c7c078e36e4c39b83a13153114ec33ce9c38

Authored by Jürgen Knödlseder
1 parent 9a63587e

Allocate optimizer in ctlike upon construction and adapt cttsmap to new GOptimiz…

…erLM logger constructor interface (now takes a pointer instead of a reference).
ChangeLog
1   -2015-06-02 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu>
  1 +2015-06-05 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu>
2 2  
3 3 * Version 0.10.0 released
4 4 =========================
5 5  
  6 + Allocate optimizer in ctlike upon construction (#1471)
6 7 Move cscripts into the ctools Python module (#1470)
7 8  
8 9  
... ...
... ... @@ -2,7 +2,7 @@ New Features and Important Changes in ctools 0.10.0
2 2  
3 3 Author(s) : Juergen Knoedlseder
4 4  
5   -2 June 2015
  5 +5 June 2015
6 6  
7 7  
8 8 1. Introduction
... ... @@ -45,7 +45,8 @@ None
45 45  
46 46 8. ctlike - Maximum likelihood fitting
47 47 --------------------------------------
48   -None
  48 +The optimizer is now allocated upon construction so that ctlike always returns a
  49 +meaningful object using the opt() method.
49 50  
50 51  
51 52 9. cttsmap - Generation of Test Statistics map
... ...
src/ctlike/ctlike.cpp
... ... @@ -401,6 +401,14 @@ void ctlike::get_parameters(void)
401 401 m_outmodel = (*this)["outmodel"].filename();
402 402 }
403 403  
  404 + // Set optimizer logger
  405 + if (logTerse()) {
  406 + static_cast<GOptimizerLM*>(m_opt)->logger(&log);
  407 + }
  408 + else {
  409 + static_cast<GOptimizerLM*>(m_opt)->logger(NULL);
  410 + }
  411 +
404 412 // Return
405 413 return;
406 414 }
... ... @@ -411,22 +419,6 @@ void ctlike::get_parameters(void)
411 419 ***************************************************************************/
412 420 void ctlike::optimize_lm(void)
413 421 {
414   - // Free any existing optimizer
415   - if (m_opt != NULL) delete m_opt;
416   - m_opt = NULL;
417   -
418   - // Allocate optimizer. The logger is only passed to the optimizer
419   - // constructor if optimizer logging is requested.
420   - GOptimizerLM* opt = (logTerse()) ? new GOptimizerLM(log)
421   - : new GOptimizerLM();
422   -
423   - // Assign optimizer
424   - m_opt = opt;
425   -
426   - // Set optimizer parameters
427   - opt->max_iter(m_max_iter);
428   - opt->max_stalls(m_max_stall);
429   -
430 422 // Write Header for optimization and indent for optimizer logging
431 423 if (logTerse()) {
432 424 log << std::endl;
... ... @@ -435,7 +427,7 @@ void ctlike::optimize_lm(void)
435 427 }
436 428  
437 429 // Perform LM optimization
438   - m_obs.optimize(*opt);
  430 + m_obs.optimize(*m_opt);
439 431  
440 432 // Optionally refit
441 433 if (m_refit) {
... ... @@ -449,15 +441,15 @@ void ctlike::optimize_lm(void)
449 441 }
450 442  
451 443 // Optimise again
452   - m_obs.optimize(*opt);
  444 + m_obs.optimize(*m_opt);
453 445  
454 446 }
455 447  
456 448 // Compute errors
457   - m_obs.errors(*opt);
  449 + m_obs.errors(*m_opt);
458 450  
459 451 // Store maximum log likelihood value
460   - m_logL = -(opt->value());
  452 + m_logL = -(m_opt->value());
461 453  
462 454 // Remove indent
463 455 log.indent(0);
... ... @@ -473,15 +465,6 @@ void ctlike::optimize_lm(void)
473 465 ***************************************************************************/
474 466 double ctlike::reoptimize_lm(void)
475 467 {
476   - // Allocate optimizer. The logger is only passed to the optimizer
477   - // constructor if optimizer logging is requested.
478   - GOptimizerLM* opt = (logTerse()) ? new GOptimizerLM(log)
479   - : new GOptimizerLM();
480   -
481   - // Set optimizer parameters
482   - opt->max_iter(m_max_iter);
483   - opt->max_stalls(m_max_stall);
484   -
485 468 // Write Header for optimization and indent for optimizer logging
486 469 if (logTerse()) {
487 470 log << std::endl;
... ... @@ -490,22 +473,22 @@ double ctlike::reoptimize_lm(void)
490 473 }
491 474  
492 475 // Perform LM optimization
493   - m_obs.optimize(*opt);
  476 + m_obs.optimize(*m_opt);
494 477  
495 478 // Optionally refit
496 479 if (m_refit) {
497   - m_obs.optimize(*opt);
  480 + m_obs.optimize(*m_opt);
498 481 }
499 482  
500 483 // Store maximum log likelihood value
501   - double logL = -(opt->value());
  484 + double logL = -(m_opt->value());
502 485  
503 486 // Write optimization results
504 487 log.indent(0);
505 488 if (logTerse()) {
506 489 log << std::endl;
507 490 log.header1("Maximum likelihood re-optimization results");
508   - log << *opt << std::endl;
  491 + log << *m_opt << std::endl;
509 492 }
510 493  
511 494 // Return
... ... @@ -537,6 +520,16 @@ void ctlike::init_members(void)
537 520 // Set logger properties
538 521 log.date(true);
539 522  
  523 + // Allocate LM optimizer
  524 + GOptimizerLM* opt = new GOptimizerLM();
  525 +
  526 + // Set optimizer parameters
  527 + opt->max_iter(m_max_iter);
  528 + opt->max_stalls(m_max_stall);
  529 +
  530 + // Set optimizer pointer
  531 + m_opt = opt;
  532 +
540 533 // Return
541 534 return;
542 535 }
... ... @@ -551,7 +544,7 @@ void ctlike::copy_members(const ctlike&amp; app)
551 544 {
552 545 // Copy attributes
553 546 m_refit = app.m_refit;
554   - m_outmodel = app.m_outmodel;
  547 + m_outmodel = app.m_outmodel;
555 548 m_obs = app.m_obs;
556 549 m_max_iter = app.m_max_iter;
557 550 m_max_stall = app.m_max_stall;
... ...
src/cttsmap/cttsmap.cpp
... ... @@ -242,7 +242,7 @@ void cttsmap::run(void)
242 242 int binmax = (m_binmax == -1) ? m_tsmap.npix() : m_binmax;
243 243  
244 244 // Initialise optimizer
245   - GOptimizerLM* opt = (logExplicit()) ? new GOptimizerLM(log)
  245 + GOptimizerLM* opt = (logExplicit()) ? new GOptimizerLM(&log)
246 246 : new GOptimizerLM();
247 247  
248 248 // Store initial models
... ...