diff --git a/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.h b/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.h index 700ea2f4f76d4d28b8afa3863c601708ee390cd2..fdda820cd531028904510b898e6ebf0b2b51bf7f 100644 --- a/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.h +++ b/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.h @@ -77,12 +77,15 @@ public: /** virtual Destructor */ virtual ~ParametersBase() = default; - /** Access method for the parameters */ + /** Access methods for the parameters */ const AmgVector(DIM) & parameters() const; + AmgVector(DIM) & parameters(); /** Access method for the covariance matrix - returns nullptr if no covariance * matrix is given */ const AmgSymMatrix(DIM) * covariance() const; + AmgSymMatrix(DIM)* covariance(); + /** Access method for transverse momentum */ double pT() const; diff --git a/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.icc b/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.icc index 9521d9e9b3535aad263d2a6558e51a9d9e310689..468cc9f00c821351924e237caaba3fe06fb8a7ad 100644 --- a/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.icc +++ b/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.icc @@ -49,17 +49,28 @@ Trk::ParametersBase<DIM, T>::ParametersBase(const AmgVector(DIM) & parameters, : m_parameters(parameters) , m_covariance(covariance) , m_chargeDef{} +{} + +template<int DIM, class T> +const AmgVector(DIM)& ParametersBase<DIM, T>::parameters() const { + return m_parameters; } template<int DIM, class T> - const AmgVector(DIM) & ParametersBase<DIM, T>::parameters() const +AmgVector(DIM)& ParametersBase<DIM, T>::parameters() { return m_parameters; } template<int DIM, class T> - const AmgSymMatrix(DIM) * ParametersBase<DIM, T>::covariance() const +const AmgSymMatrix(DIM)* ParametersBase<DIM, T>::covariance() const +{ + return m_covariance.get(); +} + +template<int DIM, class T> +AmgSymMatrix(DIM)* ParametersBase<DIM, T>::covariance() { return m_covariance.get(); } @@ -89,7 +100,6 @@ ParametersBase<DIM, T>::isCharged() const } } - template<int DIM, class T> Amg::Vector2D ParametersBase<DIM, T>::localPosition() const diff --git a/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersT.h b/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersT.h index d0bb0c51506e1532ed6e4ea8394593a1cdf70d25..6f0b97f87295e6a2a0de74b4a01426efebf12152 100644 --- a/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersT.h +++ b/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersT.h @@ -47,7 +47,7 @@ class MaterialEffectsEngine; @author Christos Anastopoulos (Athena MT modifications) */ template<int DIM, class T, class S> -class ParametersT : public ParametersBase<DIM, T> +class ParametersT final : public ParametersBase<DIM, T> { public: static_assert( diff --git a/Tracking/TrkEventCnv/TrkEventTPCnv/TrkEventTPCnv/TrkParameters/mungeZeroQOverP.h b/Tracking/TrkEventCnv/TrkEventTPCnv/TrkEventTPCnv/TrkParameters/mungeZeroQOverP.h index e9fec4de3e8e52fda9e30c283bd0f856befccd17..720c85b6a3bbb4187cd5edfc01dc9216c174a15e 100644 --- a/Tracking/TrkEventCnv/TrkEventTPCnv/TrkEventTPCnv/TrkParameters/mungeZeroQOverP.h +++ b/Tracking/TrkEventCnv/TrkEventTPCnv/TrkEventTPCnv/TrkParameters/mungeZeroQOverP.h @@ -19,27 +19,18 @@ #ifndef TRKEVENTTPCNV_MUNGEZEROQOVERP_H #define TRKEVENTTPCNV_MUNGEZEROQOVERP_H - #include "CxxUtils/no_sanitize_undefined.h" - namespace TrkEventTPCnv { - -template <int DIM, class T, class S> -class MungeZeroQOverP - : public Trk::ParametersT<DIM, T, S> +template<int DIM, class T, class S> +void mungeZeroQOverP +NO_SANITIZE_UNDEFINED(Trk::ParametersT<DIM, T, S>& p) { -public: - void setZero() { this->m_parameters[Trk::qOverP] = 0; } -}; - -template <int DIM, class T, class S> -void mungeZeroQOverP NO_SANITIZE_UNDEFINED (Trk::ParametersT<DIM, T, S>& p) -{ - static_cast<MungeZeroQOverP<DIM, T, S>&>(p).setZero(); + AmgVector(DIM) newParam = p.parameters(); + newParam[Trk::qOverP] = 0; + p.updateParameters(newParam); } - } diff --git a/Tracking/TrkEventCnv/TrkEventTPCnv/src/TrkNeutralParameters/MeasuredNeutralAtaSurfaceCnv_p1.cxx b/Tracking/TrkEventCnv/TrkEventTPCnv/src/TrkNeutralParameters/MeasuredNeutralAtaSurfaceCnv_p1.cxx index 407e49e737531122d93949f20a836bb64567fd41..e7a932b1687c008468f9bb4318ebbd41c45c31b1 100644 --- a/Tracking/TrkEventCnv/TrkEventTPCnv/src/TrkNeutralParameters/MeasuredNeutralAtaSurfaceCnv_p1.cxx +++ b/Tracking/TrkEventCnv/TrkEventTPCnv/src/TrkNeutralParameters/MeasuredNeutralAtaSurfaceCnv_p1.cxx @@ -13,30 +13,18 @@ #include "TrkEventTPCnv/helpers/EigenHelpers.h" -namespace { - -template <class ATA_SURFACE> -class SurfaceGetCovariance : public ATA_SURFACE -{ -public: - AmgSymMatrix(ATA_SURFACE::dim)* getCovariance() { return this->m_covariance.get(); } -}; - -} - - template< class SURFACE_CNV, class ATA_SURFACE > void MeasuredNeutralAtaSurfaceCnv_p1< SURFACE_CNV, ATA_SURFACE >:: persToTrans( const Trk::MeasuredAtaSurface_p1 *persObj, ATA_SURFACE *transObj, MsgStream &log ) { m_surfaceCnv.persToTrans( persObj, transObj, log ); - + Trk::ErrorMatrix dummy; this->fillTransFromPStore( &m_errorMxCnv, persObj->m_errorMatrix, &dummy, log ); - AmgSymMatrix(ATA_SURFACE::dim)* cov = static_cast<SurfaceGetCovariance<ATA_SURFACE>*>(transObj)->getCovariance(); + AmgSymMatrix(ATA_SURFACE::dim)* cov = transObj->covariance(); EigenHelpers::vectorToEigenMatrix(dummy.values, *cov, "MeasuredNeutralAtaSurfaceCnv_p1"); - + }