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 * Version 0.10.0 released 3 * Version 0.10.0 released
4 ========================= 4 =========================
5 5
  6 + Allocate optimizer in ctlike upon construction (#1471)
6 Move cscripts into the ctools Python module (#1470) 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,7 +2,7 @@ New Features and Important Changes in ctools 0.10.0
2 2
3 Author(s) : Juergen Knoedlseder 3 Author(s) : Juergen Knoedlseder
4 4
5 -2 June 2015 5 +5 June 2015
6 6
7 7
8 1. Introduction 8 1. Introduction
@@ -45,7 +45,8 @@ None @@ -45,7 +45,8 @@ None
45 45
46 8. ctlike - Maximum likelihood fitting 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 9. cttsmap - Generation of Test Statistics map 52 9. cttsmap - Generation of Test Statistics map
src/ctlike/ctlike.cpp
@@ -401,6 +401,14 @@ void ctlike::get_parameters(void) @@ -401,6 +401,14 @@ void ctlike::get_parameters(void)
401 m_outmodel = (*this)["outmodel"].filename(); 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 // Return 412 // Return
405 return; 413 return;
406 } 414 }
@@ -411,22 +419,6 @@ void ctlike::get_parameters(void) @@ -411,22 +419,6 @@ void ctlike::get_parameters(void)
411 ***************************************************************************/ 419 ***************************************************************************/
412 void ctlike::optimize_lm(void) 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 // Write Header for optimization and indent for optimizer logging 422 // Write Header for optimization and indent for optimizer logging
431 if (logTerse()) { 423 if (logTerse()) {
432 log << std::endl; 424 log << std::endl;
@@ -435,7 +427,7 @@ void ctlike::optimize_lm(void) @@ -435,7 +427,7 @@ void ctlike::optimize_lm(void)
435 } 427 }
436 428
437 // Perform LM optimization 429 // Perform LM optimization
438 - m_obs.optimize(*opt); 430 + m_obs.optimize(*m_opt);
439 431
440 // Optionally refit 432 // Optionally refit
441 if (m_refit) { 433 if (m_refit) {
@@ -449,15 +441,15 @@ void ctlike::optimize_lm(void) @@ -449,15 +441,15 @@ void ctlike::optimize_lm(void)
449 } 441 }
450 442
451 // Optimise again 443 // Optimise again
452 - m_obs.optimize(*opt); 444 + m_obs.optimize(*m_opt);
453 445
454 } 446 }
455 447
456 // Compute errors 448 // Compute errors
457 - m_obs.errors(*opt); 449 + m_obs.errors(*m_opt);
458 450
459 // Store maximum log likelihood value 451 // Store maximum log likelihood value
460 - m_logL = -(opt->value()); 452 + m_logL = -(m_opt->value());
461 453
462 // Remove indent 454 // Remove indent
463 log.indent(0); 455 log.indent(0);
@@ -473,15 +465,6 @@ void ctlike::optimize_lm(void) @@ -473,15 +465,6 @@ void ctlike::optimize_lm(void)
473 ***************************************************************************/ 465 ***************************************************************************/
474 double ctlike::reoptimize_lm(void) 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 // Write Header for optimization and indent for optimizer logging 468 // Write Header for optimization and indent for optimizer logging
486 if (logTerse()) { 469 if (logTerse()) {
487 log << std::endl; 470 log << std::endl;
@@ -490,22 +473,22 @@ double ctlike::reoptimize_lm(void) @@ -490,22 +473,22 @@ double ctlike::reoptimize_lm(void)
490 } 473 }
491 474
492 // Perform LM optimization 475 // Perform LM optimization
493 - m_obs.optimize(*opt); 476 + m_obs.optimize(*m_opt);
494 477
495 // Optionally refit 478 // Optionally refit
496 if (m_refit) { 479 if (m_refit) {
497 - m_obs.optimize(*opt); 480 + m_obs.optimize(*m_opt);
498 } 481 }
499 482
500 // Store maximum log likelihood value 483 // Store maximum log likelihood value
501 - double logL = -(opt->value()); 484 + double logL = -(m_opt->value());
502 485
503 // Write optimization results 486 // Write optimization results
504 log.indent(0); 487 log.indent(0);
505 if (logTerse()) { 488 if (logTerse()) {
506 log << std::endl; 489 log << std::endl;
507 log.header1("Maximum likelihood re-optimization results"); 490 log.header1("Maximum likelihood re-optimization results");
508 - log << *opt << std::endl; 491 + log << *m_opt << std::endl;
509 } 492 }
510 493
511 // Return 494 // Return
@@ -537,6 +520,16 @@ void ctlike::init_members(void) @@ -537,6 +520,16 @@ void ctlike::init_members(void)
537 // Set logger properties 520 // Set logger properties
538 log.date(true); 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 // Return 533 // Return
541 return; 534 return;
542 } 535 }
@@ -551,7 +544,7 @@ void ctlike::copy_members(const ctlike&amp; app) @@ -551,7 +544,7 @@ void ctlike::copy_members(const ctlike&amp; app)
551 { 544 {
552 // Copy attributes 545 // Copy attributes
553 m_refit = app.m_refit; 546 m_refit = app.m_refit;
554 - m_outmodel = app.m_outmodel; 547 + m_outmodel = app.m_outmodel;
555 m_obs = app.m_obs; 548 m_obs = app.m_obs;
556 m_max_iter = app.m_max_iter; 549 m_max_iter = app.m_max_iter;
557 m_max_stall = app.m_max_stall; 550 m_max_stall = app.m_max_stall;
src/cttsmap/cttsmap.cpp
@@ -242,7 +242,7 @@ void cttsmap::run(void) @@ -242,7 +242,7 @@ void cttsmap::run(void)
242 int binmax = (m_binmax == -1) ? m_tsmap.npix() : m_binmax; 242 int binmax = (m_binmax == -1) ? m_tsmap.npix() : m_binmax;
243 243
244 // Initialise optimizer 244 // Initialise optimizer
245 - GOptimizerLM* opt = (logExplicit()) ? new GOptimizerLM(log) 245 + GOptimizerLM* opt = (logExplicit()) ? new GOptimizerLM(&log)
246 : new GOptimizerLM(); 246 : new GOptimizerLM();
247 247
248 // Store initial models 248 // Store initial models