From 6a767e83e5eec76b58feb9f1d8ae0af93c7f5308 Mon Sep 17 00:00:00 2001 From: Florian Uhlig <f.uhlig@gsi.de> Date: Fri, 3 Dec 2021 15:12:36 +0100 Subject: [PATCH] Fix linker problem with template function The implementation of the function was in the source file. Since the function was also used in a qa class no code code be created at that place. This results in a missing symbol during linking. Put the template code properly in the header solves the problem. --- reco/littrack/cbm/base/CbmLitFieldFitter.cxx | 15 --------------- reco/littrack/cbm/base/CbmLitFieldFitter.h | 14 +++++++++++++- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/reco/littrack/cbm/base/CbmLitFieldFitter.cxx b/reco/littrack/cbm/base/CbmLitFieldFitter.cxx index 71c49c2f24..18d7698583 100644 --- a/reco/littrack/cbm/base/CbmLitFieldFitter.cxx +++ b/reco/littrack/cbm/base/CbmLitFieldFitter.cxx @@ -801,21 +801,6 @@ CbmLitFieldFitter::CbmLitFieldFitter(unsigned int polynomDegree) CbmLitFieldFitter::~CbmLitFieldFitter() {} -template<class T> -void CbmLitFieldFitter::FitSlice(float Z, lit::parallel::LitFieldSlice<T>& slice) -{ - std::vector<double> aparBx, aparBy, aparBz; - FitSlice(Z, aparBx, aparBy, aparBz); - - std::vector<T> aparBxT, aparByT, aparBzT; - aparBxT.assign(aparBx.begin(), aparBx.end()); - aparByT.assign(aparBy.begin(), aparBy.end()); - aparBzT.assign(aparBz.begin(), aparBz.end()); - - slice.SetZ(Z); - slice.SetCoefficients(aparBxT, aparByT, aparBzT); -} - void CbmLitFieldFitter::FitSliceScal(float Z, lit::parallel::LitFieldSlice<fscal>& slice) { FitSlice<fscal>(Z, slice); } void CbmLitFieldFitter::FitSliceVec(float Z, lit::parallel::LitFieldSlice<fvec>& slice) { FitSlice<fvec>(Z, slice); } diff --git a/reco/littrack/cbm/base/CbmLitFieldFitter.h b/reco/littrack/cbm/base/CbmLitFieldFitter.h index fa6c95ed30..d0d5195b5f 100644 --- a/reco/littrack/cbm/base/CbmLitFieldFitter.h +++ b/reco/littrack/cbm/base/CbmLitFieldFitter.h @@ -81,7 +81,19 @@ public: * \param[out] slice Output approximated field slice. */ template<class T> - void FitSlice(float Z, lit::parallel::LitFieldSlice<T>& slice); + void FitSlice(float Z, lit::parallel::LitFieldSlice<T>& slice) + { + std::vector<double> aparBx, aparBy, aparBz; + FitSlice(Z, aparBx, aparBy, aparBz); + + std::vector<T> aparBxT, aparByT, aparBzT; + aparBxT.assign(aparBx.begin(), aparBx.end()); + aparByT.assign(aparBy.begin(), aparBy.end()); + aparBzT.assign(aparBz.begin(), aparBz.end()); + + slice.SetZ(Z); + slice.SetCoefficients(aparBxT, aparByT, aparBzT); + } /** * \brief FitSlice implementation using fscal data type. -- GitLab