From 252ad2dc2d10b23e18a196b6b9ed2573a78de2a1 Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Fri, 7 Oct 2016 10:35:56 +0200 Subject: [PATCH] Fixed response computations for composite model --- inst/cta/src/GCTAResponseCube.cpp | 12 ++++++++++++ inst/cta/src/GCTAResponseIrf.cpp | 19 +++++++++++-------- src/model/GModelSpatialComposite.cpp | 2 +- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/inst/cta/src/GCTAResponseCube.cpp b/inst/cta/src/GCTAResponseCube.cpp index 634acf2..9b06df1 100644 --- a/inst/cta/src/GCTAResponseCube.cpp +++ b/inst/cta/src/GCTAResponseCube.cpp @@ -1516,13 +1516,25 @@ double GCTAResponseCube::irf_composite(const GEvent& event, // Initialise IRF double irf = 0.0; + // Get pointer to composite model const GModelSpatialComposite* model = dynamic_cast(source.model()); + // Loop over model components for (int i=0;icomponents();++i) { + + // Get pointer to spatial component GModelSpatial* spat = const_cast(model->component(i)); + + // Create new GSource object GSource src(source.name(), spat, source.energy(), source.time()); + + // Compute irf value irf += this->irf(event, source, obs); } + // Divide by number of model components + irf /= (double)model->components(); + + return irf; } diff --git a/inst/cta/src/GCTAResponseIrf.cpp b/inst/cta/src/GCTAResponseIrf.cpp index f9fe033..cc029ca 100644 --- a/inst/cta/src/GCTAResponseIrf.cpp +++ b/inst/cta/src/GCTAResponseIrf.cpp @@ -2882,9 +2882,12 @@ double GCTAResponseIrf::irf_composite(const GEvent& event, GSource src(source.name(), spat, source.energy(), source.time()); // Compute irf value - irf = this->irf(event, source, obs); + irf += this->irf(event, src, obs); } + // Divide by number of model components + irf /= (double)model->components(); + // Return IRF value return irf; } @@ -3516,24 +3519,24 @@ double GCTAResponseIrf::nroi_composite(const GModelSky& model, double nroi = 0.0; // Get composite model - const GModelSpatialComposite* comp = dynamic_cast(model.spatial()); + GModelSpatialComposite* comp = dynamic_cast(model.spatial()); // Loop over model components - for (int i=0;icomponents();++i) { - - // Retrieve pointer to spatial component - GModelSpatial* spat = const_cast(comp->component(i)); + for (int i = 0; i < comp->components(); ++i) { // Create new sky model GModelSky sky = GModelSky(model); // Assign spatial part - sky.spatial(spat); + sky.spatial(comp->component(i)); // Compute nroi - nroi = this->nroi(sky, srcEng, srcTime, obsEng, obsTime, obs); + nroi += this->nroi(sky, srcEng, srcTime, obsEng, obsTime, obs); } + // Divide by number of model components + nroi /= (double)comp->components(); + // Return nroi return nroi; diff --git a/src/model/GModelSpatialComposite.cpp b/src/model/GModelSpatialComposite.cpp index 375c6a7..227cf9e 100644 --- a/src/model/GModelSpatialComposite.cpp +++ b/src/model/GModelSpatialComposite.cpp @@ -628,7 +628,7 @@ const GModelSpatial* GModelSpatialComposite::component(const std::string& name) void GModelSpatialComposite::init_members(void) { // Initialise model type - m_type = "SpatialComposite"; + m_type = "Composite"; // Initialise models vector m_components.clear(); -- libgit2 0.21.4