diff --git a/src/ctlike/ctlike.cpp b/src/ctlike/ctlike.cpp index d01661e..8dab2b0 100644 --- a/src/ctlike/ctlike.cpp +++ b/src/ctlike/ctlike.cpp @@ -25,6 +25,67 @@ #include "GTools.hpp" +/*========================================================================== + = = + = Constructors/destructors = + = = + ==========================================================================*/ + +/***********************************************************************//** + * @brief Void constructor + ***************************************************************************/ +ctlike::ctlike(void) : GApplication(CTLIKE_NAME, CTLIKE_VERSION) +{ + // Initialise members + init_members(); + + // Return + return; +} + + +/***********************************************************************//** + * @brief Command line constructor + * + * @param[in] argc Number of arguments in command line. + * @param[in] argv Array of command line arguments. + ***************************************************************************/ +ctlike::ctlike(int argc, char *argv[]) : + GApplication(CTLIKE_NAME, CTLIKE_VERSION, argc, argv) +{ + // Initialise members + init_members(); + + // Return + return; +} + + +/***********************************************************************//** + * @brief Destructor + ***************************************************************************/ +ctlike::~ctlike(void) +{ + // Free members + free_members(); + + // Return + return; +} + + +/*========================================================================== + = = + = Operators = + = = + ==========================================================================*/ + +/*========================================================================== + = = + = Public methods = + = = + ==========================================================================*/ + /***********************************************************************//** * @brief Run maximum likelihood analysis ***************************************************************************/ @@ -38,11 +99,11 @@ int ctlike::run(void) m_caldb = par("caldb")->value(); m_irf = par("irf")->value(); m_srcmdl = par("srcmdl")->value(); + m_outmdl = par("outmdl")->value(); m_models = GModels(m_srcmdl); // Set fixed parameters - m_max_iter = 1000; - m_opt = new GOptimizerLM; + m_opt = new GOptimizerLM; // Set optimizer parameters ((GOptimizerLM*)m_opt)->max_iter(m_max_iter); @@ -53,6 +114,13 @@ int ctlike::run(void) else rc = binned(); + // Write result as XML model + if (toupper(m_outmdl) != "NONE") + m_models.save(m_outmdl); + + // Dump results + std::cout << m_models << std::endl; + // Free optimizer delete m_opt; @@ -73,7 +141,6 @@ int ctlike::unbinned(void) std::string evfile = par("evfile")->value(); // Declare observations - GObservations obs; GCTAObservation run; // Setup ROI covered by data @@ -102,14 +169,16 @@ int ctlike::unbinned(void) run.roi(roi); run.gti()->add(tstart, tstop); run.ebounds()->append(emin, emax); - obs.append(run); + m_obs.append(run); // Setup models for optimizing - obs.models(m_models); + m_obs.models(m_models); // Perform LM optimization - obs.optimize(*m_opt); - std::cout << obs << std::endl; + m_obs.optimize(*m_opt); + + // Get models back + m_models = *(m_obs.models()); // Return return rc; @@ -128,21 +197,62 @@ int ctlike::binned(void) std::string cntmap = par("cntmap")->value(); // Declare observations - GObservations obs; GCTAObservation run; // Load binned CTA observation run.load_binned(cntmap); run.response(m_irf, m_caldb); - obs.append(run); + m_obs.append(run); // Setup models for optimizing - obs.models(m_models); + m_obs.models(m_models); // Perform LM optimization - obs.optimize(*m_opt); - std::cout << obs << std::endl; + m_obs.optimize(*m_opt); + + // Get models back + m_models = *(m_obs.models()); // Return return rc; } + + +/*========================================================================== + = = + = Private methods = + = = + ==========================================================================*/ + +/***********************************************************************//** + * @brief Initialise class members + ***************************************************************************/ +void ctlike::init_members(void) +{ + // Initialise members + m_method.clear(); + m_caldb.clear(); + m_irf.clear(); + m_srcmdl.clear(); + m_outmdl.clear(); + m_models.clear(); + //m_obs.clear(); //!< NOT YET IMPLEMENTED + m_max_iter = 1000; + m_opt = NULL; + + // Return + return; +} + + +/***********************************************************************//** + * @brief Delete class members + ***************************************************************************/ +void ctlike::free_members(void) +{ + // Free members + delete m_opt; + + // Return + return; +} diff --git a/src/ctlike/ctlike.hpp b/src/ctlike/ctlike.hpp index c016d58..2cc7ab0 100644 --- a/src/ctlike/ctlike.hpp +++ b/src/ctlike/ctlike.hpp @@ -37,10 +37,9 @@ class ctlike : public GApplication { public: // Constructors and destructors - ctlike(void) : - GApplication(CTLIKE_NAME, CTLIKE_VERSION) { return; } - ctlike(int argc, char *argv[]) : - GApplication(CTLIKE_NAME, CTLIKE_VERSION, argc, argv) { return; } + ctlike(void); + ctlike(int argc, char *argv[]); + ~ctlike(void); // Methods int run(void); @@ -48,16 +47,22 @@ public: int binned(void); protected: + // Protected methods + void init_members(void); + void free_members(void); + // User parameters - std::string m_method; //!< Likelihood fitting method (binned/unbinned) - std::string m_caldb; //!< Calibration database - std::string m_irf; //!< Instrument response functions - std::string m_srcmdl; //!< Source model XML file - GModels m_models; //!< Source models + std::string m_method; //!< Likelihood fitting method (binned/unbinned) + std::string m_caldb; //!< Calibration database + std::string m_irf; //!< Instrument response functions + std::string m_srcmdl; //!< Source model XML file + std::string m_outmdl; //!< Source model output XML file + GModels m_models; //!< Source models + GObservations m_obs; //!< Observations // Fixed parameters - int m_max_iter; //!< Maximum number of iterations - GOptimizer* m_opt; //!< Optimizer + int m_max_iter; //!< Maximum number of iterations + GOptimizer* m_opt; //!< Optimizer }; #endif /* CTLIKE_HPP */