Commit 4d59929659cc2c2e3b7af2d852f8f0c9c38109da

Authored by Jürgen Knödlseder
1 parent 9a088680

Copy log-likelihood function in GObservations copy_members()

The result of the log-likelihood computation was lost in a copy of the GObservations class. Now it is conserved.
src/obs/GObservations.cpp
... ... @@ -955,10 +955,9 @@ void GObservations::init_members(void)
955 955 ***************************************************************************/
956 956 void GObservations::copy_members(const GObservations& obs)
957 957 {
958   - // Copy attributes. WARNING: The member m_fct SHALL not be copied to not
959   - // corrupt its m_this pointer which should always point to the proper
960   - // observation. See note in init_members().
  958 + // Copy attributes
961 959 m_models = obs.m_models;
  960 + m_fct = obs.m_fct;
962 961  
963 962 // Copy observations
964 963 m_obs.clear();
... ... @@ -966,6 +965,10 @@ void GObservations::copy_members(const GObservations& obs)
966 965 m_obs.push_back((obs.m_obs[i]->clone()));
967 966 }
968 967  
  968 + // Set likelihood function pointer to this instance. This makes sure
  969 + // that the optimizer points to this instance
  970 + m_fct.set(this);
  971 +
969 972 // Return
970 973 return;
971 974 }
... ...
src/obs/GObservations_likelihood.cpp
... ... @@ -614,15 +614,19 @@ void GObservations::likelihood::init_members(void)
614 614 void GObservations::likelihood::copy_members(const likelihood& fct)
615 615 {
616 616 // Copy attributes
617   - m_value = fct.m_value;
618   - m_npred = fct.m_npred;
619   - m_this = fct.m_this;
  617 + m_value = fct.m_value;
  618 + m_npred = fct.m_npred;
  619 + m_this = fct.m_this;
620 620  
621 621 // Clone gradient if it exists
622   - if (fct.m_gradient != NULL) m_gradient = new GVector(*fct.m_gradient);
  622 + if (fct.m_gradient != NULL) {
  623 + m_gradient = new GVector(*fct.m_gradient);
  624 + }
623 625  
624 626 // Clone curvature matrix if it exists
625   - if (fct.m_curvature != NULL) m_curvature = new GMatrixSparse(*fct.m_curvature);
  627 + if (fct.m_curvature != NULL) {
  628 + m_curvature = new GMatrixSparse(*fct.m_curvature);
  629 + }
626 630  
627 631 // Return
628 632 return;
... ...