diff --git a/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctor.h b/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctor.h index 0767e5f81eb2d64cee9cdb74e1a5826a33b9a708..948f3925b0c30a0d9721991ac37e957018a2b4d3 100644 --- a/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctor.h +++ b/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctor.h @@ -64,10 +64,10 @@ public: inline TSeriesType operator ()(const TSeriesType& series) { - this->EstimateTimeFunction(series); + TTimeFunction estFunction = this->EstimateTimeFunction(series); TSeriesType outSeries; for(unsigned int i = 0; i < m_DoySeries.Size(); ++i) - outSeries[i] = m_TimeFunction.GetValue( m_DoySeries[i] ); + outSeries[i] = estFunction.GetValue( m_DoySeries[i] ); return outSeries; } @@ -83,15 +83,16 @@ public: m_WeightSeries[i] = weights[i]; } - inline CoefficientsType GetCoefficients() const + inline CoefficientsType GetCoefficients(const TSeriesType& series) const { - return m_TimeFunction.GetCoefficients(); + return (this->EstimateTimeFunction(series)).GetCoefficients(); } - inline void EstimateTimeFunction(const TSeriesType& series) + inline TTimeFunction EstimateTimeFunction(const TSeriesType& series) const { + TTimeFunction estFunction; unsigned int nbDates = m_DoySeries.Size(); - unsigned int nbCoefs = m_TimeFunction.GetCoefficients().Size(); + unsigned int nbCoefs = estFunction.GetCoefficients().Size(); // b = A * c vnl_matrix<double> A(nbDates, nbCoefs); @@ -109,8 +110,8 @@ public: for(unsigned int j = 0; j < nbCoefs; ++j) { tmpCoefs[j] = 1.0; - m_TimeFunction.SetCoefficients(tmpCoefs); - A.put(i, j, m_TimeFunction.GetValue(m_DoySeries[i]) / m_WeightSeries[i]); + estFunction.SetCoefficients(tmpCoefs); + A.put(i, j, estFunction.GetValue(m_DoySeries[i]) / m_WeightSeries[i]); tmpCoefs[j] = 0.0; } } @@ -123,12 +124,13 @@ public: for(unsigned int j = 0; j < nbCoefs; ++j) tmpCoefs[j] = c.get(j, 0); - m_TimeFunction.SetCoefficients(tmpCoefs); + estFunction.SetCoefficients(tmpCoefs); + + return estFunction; } private: /// - TTimeFunction m_TimeFunction; TDateType m_DoySeries; TWeightType m_WeightSeries; }; diff --git a/Testing/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctorTest.cxx b/Testing/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctorTest.cxx index 6df31bd2d1a5787850730d375095ef7c2269cab2..d3b3fcbed0dc3dcaeb02944bcf947d27f1cb4a17 100644 --- a/Testing/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctorTest.cxx +++ b/Testing/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctorTest.cxx @@ -56,9 +56,8 @@ int otbTimeSeriesLeastSquareFittingFunctorTest(int argc, char* argv[]) FunctorType f; f.SetDates( doySeries ); - SeriesType outSeries = f(inSeries); - FunctorType::CoefficientsType outCoefs = f.GetCoefficients(); + FunctorType::CoefficientsType outCoefs = f.GetCoefficients(inSeries); for(unsigned int i=0; i<= Degree; i++) if(fabs((outCoefs[i]-inCoefs[i])/inCoefs[i])>0.01) diff --git a/Testing/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctorWeightsTest.cxx b/Testing/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctorWeightsTest.cxx index ffe1017f5f2a5c68f9d1a0ba65d1260139d8698a..1cffb66e10baacd5930eb42cf077ea591429d988 100644 --- a/Testing/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctorWeightsTest.cxx +++ b/Testing/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctorWeightsTest.cxx @@ -69,9 +69,8 @@ int otbTimeSeriesLeastSquareFittingFunctorWeightsTest(int argc, char* argv[]) FunctorType f; f.SetDates( doySeries ); f.SetWeights (weightSeries); - SeriesType outSeries = f(inSeries); - FunctorType::CoefficientsType outCoefs = f.GetCoefficients(); + FunctorType::CoefficientsType outCoefs = f.GetCoefficients(inSeries); for(unsigned int i=0; i<= Degree; i++) if(fabs((outCoefs[i]-inCoefs[i])/inCoefs[i])>0.01)