Commit 8cbd8272839fbe0f9a1d9bba5a1cf0bacecefc19

Authored by Jürgen Knödlseder
1 parent cd1c6455

Add GOptimizerLM::status_string() method

1 1 New Features and Important Changes in GammaLib 2.1.0
2 2  
3   -23 March 2023
  3 +24 March 2023
4 4  
5 5  
6 6 1. Introduction
... ... @@ -33,6 +33,7 @@ The following methods have been added:
33 33 - GResponseVectorCache::load()
34 34 - GResponseVectorCache::save()
35 35 - GResponseVectorCache::read()
  36 +- GOptimizerLM::status_string()
36 37 - GCOMObservation(GCOMDri&, GCOMDri&, GCOMDri&, GCOMDri&, GCOMDri&)
37 38 - GCOMObservation::npred()
38 39 - GCOMObservation::drw()
... ...
include/GOptimizerLM.hpp
1 1 /***************************************************************************
2 2 * GOptimizerLM.hpp - Levenberg Marquardt optimizer *
3 3 * ----------------------------------------------------------------------- *
4   - * copyright (C) 2009-2020 by Juergen Knoedlseder *
  4 + * copyright (C) 2009-2023 by Juergen Knoedlseder *
5 5 * ----------------------------------------------------------------------- *
6 6 * *
7 7 * This program is free software: you can redistribute it and/or modify *
... ... @@ -93,6 +93,7 @@ public:
93 93 const double& lambda(void) const;
94 94 const double& eps(void) const;
95 95 const double& accept_dec(void) const;
  96 + std::string status_string(void) const;
96 97  
97 98 protected:
98 99 // Protected methods
... ...
pyext/GOptimizerLM.i
1 1 /***************************************************************************
2 2 * GOptimizerLM.i - Levenberg Marquardt optimizer class *
3 3 * ----------------------------------------------------------------------- *
4   - * copyright (C) 2009-2020 by Juergen Knoedlseder *
  4 + * copyright (C) 2009-2023 by Juergen Knoedlseder *
5 5 * ----------------------------------------------------------------------- *
6 6 * *
7 7 * This program is free software: you can redistribute it and/or modify *
... ... @@ -73,6 +73,7 @@ public:
73 73 const double& lambda_dec(void) const;
74 74 const double& eps(void) const;
75 75 const double& accept_dec(void);
  76 + std::string status_string(void) const;
76 77 };
77 78  
78 79  
... ...
src/opt/GOptimizerLM.cpp
1 1 /***************************************************************************
2 2 * GOptimizerLM.cpp - Levenberg Marquardt optimizer *
3 3 * ----------------------------------------------------------------------- *
4   - * copyright (C) 2009-2022 by Juergen Knoedlseder *
  4 + * copyright (C) 2009-2023 by Juergen Knoedlseder *
5 5 * ----------------------------------------------------------------------- *
6 6 * *
7 7 * This program is free software: you can redistribute it and/or modify *
... ... @@ -549,6 +549,43 @@ void GOptimizerLM::errors(GOptimizerFunction& fct, GOptimizerPars& pars)
549 549  
550 550  
551 551 /***********************************************************************//**
  552 + * @brief Set fit status string
  553 + *
  554 + * @return Fit status string.
  555 + ***************************************************************************/
  556 +std::string GOptimizerLM::status_string(void) const
  557 +{
  558 + // Initialise status string
  559 + std::string status;
  560 +
  561 + // Set status string
  562 + switch (m_status) {
  563 + case G_LM_CONVERGED:
  564 + status = "converged";
  565 + break;
  566 + case G_LM_STALLED:
  567 + status = "stalled";
  568 + break;
  569 + case G_LM_SINGULAR:
  570 + status = "singular curvature matrix encountered";
  571 + break;
  572 + case G_LM_NOT_POSTIVE_DEFINITE:
  573 + status = "curvature matrix not positive definite";
  574 + break;
  575 + case G_LM_BAD_ERRORS:
  576 + status = "errors are inaccurate";
  577 + break;
  578 + default:
  579 + status = "unknown";
  580 + break;
  581 + }
  582 +
  583 + // Return status
  584 + return status;
  585 +}
  586 +
  587 +
  588 +/***********************************************************************//**
552 589 * @brief Print optimizer information
553 590 *
554 591 * @param[in] chatter Chattiness.
... ... @@ -575,26 +612,7 @@ std::string GOptimizerLM::print(const GChatter& chatter) const
575 612  
576 613 // Append status
577 614 result.append("\n"+gammalib::parformat("Optimization status"));
578   - switch (m_status) {
579   - case G_LM_CONVERGED:
580   - result.append("converged");
581   - break;
582   - case G_LM_STALLED:
583   - result.append("stalled");
584   - break;
585   - case G_LM_SINGULAR:
586   - result.append("singular curvature matrix encountered");
587   - break;
588   - case G_LM_NOT_POSTIVE_DEFINITE:
589   - result.append("curvature matrix not positive definite");
590   - break;
591   - case G_LM_BAD_ERRORS:
592   - result.append("errors are inaccurate");
593   - break;
594   - default:
595   - result.append("unknown");
596   - break;
597   - }
  615 + result.append(status_string());
598 616  
599 617 // Append further information
600 618 result.append("\n"+gammalib::parformat("Number of parameters"));
... ...