From 4d59929659cc2c2e3b7af2d852f8f0c9c38109da Mon Sep 17 00:00:00 2001 From: Jürgen Knödlseder Date: Sat, 13 Aug 2016 03:00:14 +0200 Subject: [PATCH] Copy log-likelihood function in GObservations copy_members() --- src/obs/GObservations.cpp | 9 ++++++--- src/obs/GObservations_likelihood.cpp | 14 +++++++++----- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/obs/GObservations.cpp b/src/obs/GObservations.cpp index 12cb69d..3310f2b 100644 --- a/src/obs/GObservations.cpp +++ b/src/obs/GObservations.cpp @@ -955,10 +955,9 @@ void GObservations::init_members(void) ***************************************************************************/ void GObservations::copy_members(const GObservations& obs) { - // Copy attributes. WARNING: The member m_fct SHALL not be copied to not - // corrupt its m_this pointer which should always point to the proper - // observation. See note in init_members(). + // Copy attributes m_models = obs.m_models; + m_fct = obs.m_fct; // Copy observations m_obs.clear(); @@ -966,6 +965,10 @@ void GObservations::copy_members(const GObservations& obs) m_obs.push_back((obs.m_obs[i]->clone())); } + // Set likelihood function pointer to this instance. This makes sure + // that the optimizer points to this instance + m_fct.set(this); + // Return return; } diff --git a/src/obs/GObservations_likelihood.cpp b/src/obs/GObservations_likelihood.cpp index 5f8b4f2..3ae1d93 100644 --- a/src/obs/GObservations_likelihood.cpp +++ b/src/obs/GObservations_likelihood.cpp @@ -614,15 +614,19 @@ void GObservations::likelihood::init_members(void) void GObservations::likelihood::copy_members(const likelihood& fct) { // Copy attributes - m_value = fct.m_value; - m_npred = fct.m_npred; - m_this = fct.m_this; + m_value = fct.m_value; + m_npred = fct.m_npred; + m_this = fct.m_this; // Clone gradient if it exists - if (fct.m_gradient != NULL) m_gradient = new GVector(*fct.m_gradient); + if (fct.m_gradient != NULL) { + m_gradient = new GVector(*fct.m_gradient); + } // Clone curvature matrix if it exists - if (fct.m_curvature != NULL) m_curvature = new GMatrixSparse(*fct.m_curvature); + if (fct.m_curvature != NULL) { + m_curvature = new GMatrixSparse(*fct.m_curvature); + } // Return return; -- libgit2 0.21.4