/*************************************************************************** * test_GOptimizer.cpp - test GOptimizer class * * ----------------------------------------------------------------------- * * copyright (C) 2009 by Jurgen Knodlseder * * ----------------------------------------------------------------------- * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * * * ***************************************************************************/ /* __ Includes ___________________________________________________________ */ #include #include "test_GOptimizer.hpp" /* __ Namespaces _________________________________________________________ */ /* __ Globals ____________________________________________________________ */ /*************************************************************************** * Test: Optimizer * ***************************************************************************/ void test_optimizer(void) { // Write header std::cout << "Test GOptimizer: "; // Number of observations in data int nobs = 1; // Setup GData for optimizing GData data; GLATObservation obs; try { obs.load_binned("data/lat/cntmap.fits.gz", "", ""); for (int i = 0; i < nobs; ++i) data.add(obs); } catch (std::exception &e) { std::cout << std::endl << "TEST ERROR: Unable setup GData for optimizing." << std::endl; std::cout << e.what() << std::endl; throw; } std::cout << "."; //std::cout << data << std::endl; // Setup GModels for optimizing GModelSpatialPtsrc point_source; GModelSpectralPlaw power_law; GModel crab; GModels models; try { GSkyDir dir; dir.radec_deg(83.6331, +22.0145); point_source = GModelSpatialPtsrc(dir); power_law = GModelSpectralPlaw(1.0e-7, -2.1); crab = GModel(point_source, power_law); crab.name("Crab"); models.add(crab); data.models(models); } catch (std::exception &e) { std::cout << std::endl << "TEST ERROR: Unable setup GModels for optimizing." << std::endl; std::cout << e.what() << std::endl; throw; } std::cout << "."; //std::cout << models << std::endl; // Setup parameters for optimizing GOptimizerPars pars; try { pars = GOptimizerPars(models); } catch (std::exception &e) { std::cout << std::endl << "TEST ERROR: Unable setup GOptimizerPars for optimizing." << std::endl; std::cout << e.what() << std::endl; throw; } std::cout << "."; //std::cout << pars << std::endl; // Time simple GData iterator double t_elapse; try { clock_t t_start = clock(); int num = 0; int sum = 0; for (GData::iterator event = data.begin(); event != data.end(); ++event) { num++; sum += (int)event->counts(); } t_elapse = double(clock() - t_start)/double(CLOCKS_PER_SEC); } catch (std::exception &e) { std::cout << std::endl << "TEST ERROR: Unable to iterate GData." << std::endl; std::cout << e.what() << std::endl; throw; } std::cout << "." << std::endl; std::cout << " - Reference time for GData::iterator: " << t_elapse << std::endl; // Setup LM optimizer GOptimizerLM opt; try { data.optimize(opt); } catch (std::exception &e) { std::cout << std::endl << "TEST ERROR: Unable setup optimizer." << std::endl; std::cout << e.what() << std::endl; throw; } std::cout << "."; //std::cout << opt << std::endl; std::cout << data << std::endl; // Plot final test success std::cout << " ok." << std::endl; // Exit test return; } /*************************************************************************** * Main test function * ***************************************************************************/ int main(void) { // Dump header std::cout << std::endl; std::cout << "****************************" << std::endl; std::cout << "* GOptimizer class testing *" << std::endl; std::cout << "****************************" << std::endl; // Execute the tests test_optimizer(); // Return return 0; }