From 47e4904f8ca284ac9c97b679b00996d465ee3f1d Mon Sep 17 00:00:00 2001 From: Jürgen Knödlseder Date: Wed, 22 Jun 2016 16:24:52 +0200 Subject: [PATCH] Add C++ unit test for CTA On/Off fitting --- inst/cta/test/data/onoff_arf.fits | Bin 0 -> 8640 bytes inst/cta/test/data/onoff_obs.xml | 11 +++++++++++ inst/cta/test/data/onoff_pha_off.fits | Bin 0 -> 14400 bytes inst/cta/test/data/onoff_pha_on.fits | Bin 0 -> 14400 bytes inst/cta/test/data/onoff_region_off.reg | 4 ++++ inst/cta/test/data/onoff_region_on.reg | 4 ++++ inst/cta/test/data/onoff_rmf.fits | Bin 0 -> 14400 bytes inst/cta/test/test_CTA.cpp | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ inst/cta/test/test_CTA.hpp | 3 +++ 9 files changed, 101 insertions(+), 0 deletions(-) create mode 100644 inst/cta/test/data/onoff_arf.fits create mode 100644 inst/cta/test/data/onoff_obs.xml create mode 100644 inst/cta/test/data/onoff_pha_off.fits create mode 100644 inst/cta/test/data/onoff_pha_on.fits create mode 100644 inst/cta/test/data/onoff_region_off.reg create mode 100644 inst/cta/test/data/onoff_region_on.reg create mode 100644 inst/cta/test/data/onoff_rmf.fits diff --git a/inst/cta/test/data/onoff_arf.fits b/inst/cta/test/data/onoff_arf.fits new file mode 100644 index 0000000..77ff424 Binary files /dev/null and b/inst/cta/test/data/onoff_arf.fits differ diff --git a/inst/cta/test/data/onoff_obs.xml b/inst/cta/test/data/onoff_obs.xml new file mode 100644 index 0000000..8874f90 --- /dev/null +++ b/inst/cta/test/data/onoff_obs.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/inst/cta/test/data/onoff_pha_off.fits b/inst/cta/test/data/onoff_pha_off.fits new file mode 100644 index 0000000..064660b Binary files /dev/null and b/inst/cta/test/data/onoff_pha_off.fits differ diff --git a/inst/cta/test/data/onoff_pha_on.fits b/inst/cta/test/data/onoff_pha_on.fits new file mode 100644 index 0000000..d3e5718 Binary files /dev/null and b/inst/cta/test/data/onoff_pha_on.fits differ diff --git a/inst/cta/test/data/onoff_region_off.reg b/inst/cta/test/data/onoff_region_off.reg new file mode 100644 index 0000000..30a1080 --- /dev/null +++ b/inst/cta/test/data/onoff_region_off.reg @@ -0,0 +1,4 @@ +# Region file format: DS9 version 4.1 +global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 +fk5 +circle(83.6331, 23.5145, 0.5) diff --git a/inst/cta/test/data/onoff_region_on.reg b/inst/cta/test/data/onoff_region_on.reg new file mode 100644 index 0000000..07a1d4e --- /dev/null +++ b/inst/cta/test/data/onoff_region_on.reg @@ -0,0 +1,4 @@ +# Region file format: DS9 version 4.1 +global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 +fk5 +circle(83.6331, 22.0145, 0.2) diff --git a/inst/cta/test/data/onoff_rmf.fits b/inst/cta/test/data/onoff_rmf.fits new file mode 100644 index 0000000..599ad91 Binary files /dev/null and b/inst/cta/test/data/onoff_rmf.fits differ diff --git a/inst/cta/test/test_CTA.cpp b/inst/cta/test/test_CTA.cpp index 585e1f8..4106daa 100644 --- a/inst/cta/test/test_CTA.cpp +++ b/inst/cta/test/test_CTA.cpp @@ -77,6 +77,10 @@ const std::string cta_stacked_psfcube = datadir+"/stacked_psfcube.fits"; const std::string cta_stacked_edispcube = datadir+"/stacked_edispcube.fits"; const std::string cta_stacked_bkgcube = datadir+"/stacked_bkgcube.fits"; +/* __ Test files for On/Off analysis _____________________________________ */ +const std::string cta_onoff_xml = datadir+"/onoff_obs.xml"; +const std::string cta_onoff_model = datadir+"/onoff_model.xml"; + /***********************************************************************//** * @brief Set CTA response test methods @@ -187,6 +191,8 @@ void TestGCTAObservation::set(void) "Test binned observation"); append(static_cast(&TestGCTAObservation::test_stacked_obs), "Test stacked observation"); + append(static_cast(&TestGCTAObservation::test_onoff_obs), + "Test On/Off observation"); // Return return; @@ -220,6 +226,8 @@ void TestGCTAOptimize::set(void) "Test binned optimizer"); append(static_cast(&TestGCTAOptimize::test_stacked_optimizer), "Test stacked optimizer"); + append(static_cast(&TestGCTAOptimize::test_onoff_optimizer), + "Test On/Off optimizer"); // Return return; @@ -1802,6 +1810,25 @@ void TestGCTAObservation::test_stacked_obs(void) /***********************************************************************//** + * @brief Test On/Off observation handling + * + * @todo Unit test to be implemented + ***************************************************************************/ +void TestGCTAObservation::test_onoff_obs(void) +{ + // Load On/Off observation into container + GObservations obs(cta_onoff_xml); + //std::cout << *(obs[0]) << std::endl; + + // Save observation container into XML file + obs.save("test_cta_onoff_obs.xml"); + + // Return + return; +} + + +/***********************************************************************//** * @brief Test unbinned optimizer ***************************************************************************/ void TestGCTAOptimize::test_unbinned_optimizer(void) @@ -1965,6 +1992,58 @@ void TestGCTAOptimize::test_stacked_optimizer(void) } +/***********************************************************************//** + * @brief Test On/Off optimizer + ***************************************************************************/ +void TestGCTAOptimize::test_onoff_optimizer(void) +{ + // Set reference result + double fit_results[] = {83.6331, 0, + 22.0145, 0, + 5.95777e-16, 2.02034e-17, + -2.50932, 0.0304839, + 300000, 0, + 1, 0, + 1.09509, 0.140468, + 0.54909, 0.0872644, + 1.0e6, 0, + 1, 0}; + + // Load On/Off CTA observation + GObservations obs(cta_onoff_xml); + + // Load models from XML file + obs.models(cta_onoff_model); + + // Perform LM optimization + GOptimizerLM opt; + opt.max_iter(100); + obs.optimize(opt); + obs.errors(opt); + //std::cout << opt << std::endl; + //std::cout << obs << std::endl; + //std::cout << obs.models() << std::endl; + + // Verify fit results + 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], + std::abs(1.0e-4*fit_results[j]), msg); + j++; + test_value(par.error(), fit_results[j], + std::abs(1.0e-4*fit_results[j]), msg); + j++; + } + } + + // Return + return; +} + + /*************************************************************************** * @brief Main entry point for test executable ***************************************************************************/ diff --git a/inst/cta/test/test_CTA.hpp b/inst/cta/test/test_CTA.hpp index aeecc00..c7f859d 100644 --- a/inst/cta/test/test_CTA.hpp +++ b/inst/cta/test/test_CTA.hpp @@ -119,6 +119,7 @@ public: void test_unbinned_obs(void); void test_binned_obs(void); void test_stacked_obs(void); + void test_onoff_obs(void); }; @@ -142,8 +143,10 @@ public: void test_unbinned_optimizer(void); void test_binned_optimizer(void); void test_stacked_optimizer(void); + void test_onoff_optimizer(void); }; + /***********************************************************************//** * @class TestGCTAPointing * -- libgit2 0.21.4