/***********************************************************************//** * @brief Test binned optimizer * * @param[in] datadir Directory of test data. * @param[in] irf Instrument response function. * @param[in] fit_results Expected fit result. * * Verifies the ability optimize binned Fermi/LAT data. ***************************************************************************/ void TestGLATOptimize::test_one_binned_optimizer(const std::string& datadir, const std::string& irf, const double* fit_results) { // Set filenames std::string lat_srcmap = datadir+"/srcmap.fits"; std::string lat_expmap = datadir+"/binned_expmap.fits"; std::string lat_ltcube = datadir+"/ltcube.fits"; std::string lat_model_xml = datadir+"/source_model.xml"; // Setup GObservations for optimizing GObservations obs; GLATObservation run; test_try("Setup for optimization"); try { run.load_binned(lat_srcmap, lat_expmap, lat_ltcube); run.response(irf, lat_caldb); obs.append(run); test_try_success(); } catch (std::exception &e) { test_try_failure(e); } // Load models from XML file obs.models(lat_model_xml); // Setup LM optimizer test_try("Perform LM optimization"); try { GOptimizerLM opt; opt.max_iter(1000); obs.optimize(opt); obs.errors(opt); test_try_success(); for (int i = 0, j = 0; i < obs.models().size(); ++i) { const GModel* model = obs.models()[i]; for (int k = 0; k < model->size(); ++k) { GModelPar par = (*model)[k]; std::string msg = "Verify optimization result for " + par.print(); test_value(par.value(), fit_results[j++], 5.0e-5, msg); test_value(par.error(), fit_results[j++], 5.0e-5, msg); } } } catch (std::exception &e) { test_try_failure(e); } // Exit test return; }