From 0a4328da7a80642f0cb8c2436020f8dc55472fd6 Mon Sep 17 00:00:00 2001 From: christos <christos@cern.ch> Date: Wed, 18 Nov 2020 23:15:27 +0100 Subject: [PATCH] ParametersBase . Add direct setters , fix TrackParticleAthenaPool test --- .../TrkParametersBase/ParametersBase.h | 18 +++++++++---- .../TrkParametersBase/ParametersBase.icc | 27 ++++++++++++++++--- .../TrkParameters/mungeZeroQOverP.h | 2 +- 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.h b/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.h index e722c952b5b..2988e0fce85 100644 --- a/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.h +++ b/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.h @@ -10,11 +10,11 @@ #define TRKPARAMETERSBASE_PARAMETERSBASE_H // Amg +#include "CxxUtils/checker_macros.h" #include "EventPrimitives/EventPrimitives.h" #include "GeoPrimitives/GeoPrimitives.h" #include "TrkParametersBase/Charged.h" #include "TrkParametersBase/Neutral.h" -#include "CxxUtils/checker_macros.h" #include <memory> #include <type_traits> @@ -84,8 +84,7 @@ public: /** Access method for the covariance matrix - returns nullptr if no covariance * matrix is given */ const AmgSymMatrix(DIM) * covariance() const; - AmgSymMatrix(DIM)* covariance(); - + AmgSymMatrix(DIM) * covariance(); /** Access method for transverse momentum */ double pT() const; @@ -100,10 +99,17 @@ public: local parameter definitions differ for each surface type. */ Amg::Vector2D localPosition() const; + /** set parameters*/ + void setParameters(const AmgVector(DIM) & param); + + /** set covariance */ + void setCovariance(const AmgSymMatrix(DIM) & cov); + /** Update parameters and covariance. - * * Derived classes override the * implementation via updateParametersHelper + * as this could possibly lead to updating + * other data members */ void updateParameters(const AmgVector(DIM) &, AmgSymMatrix(DIM) * = nullptr); @@ -113,9 +119,11 @@ public: * * Derived classes override the * implementation via updateParametersHelper + * as this could possibly lead to updating + * other data members */ void updateParameters(const AmgVector(DIM) &, const AmgSymMatrix(DIM) &); - + /** Returns the charge */ virtual double charge() const = 0; diff --git a/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.icc b/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.icc index 468cc9f00c8..a6817ce5c89 100644 --- a/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.icc +++ b/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.icc @@ -52,25 +52,25 @@ Trk::ParametersBase<DIM, T>::ParametersBase(const AmgVector(DIM) & parameters, {} template<int DIM, class T> -const AmgVector(DIM)& ParametersBase<DIM, T>::parameters() const + const AmgVector(DIM) & ParametersBase<DIM, T>::parameters() const { return m_parameters; } template<int DIM, class T> -AmgVector(DIM)& ParametersBase<DIM, T>::parameters() + 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() + AmgSymMatrix(DIM) * ParametersBase<DIM, T>::covariance() { return m_covariance.get(); } @@ -107,6 +107,25 @@ ParametersBase<DIM, T>::localPosition() const return Amg::Vector2D(parameters()[Trk::loc1], parameters()[Trk::loc2]); } +template<int DIM, class T> +void +ParametersBase<DIM, T>::setParameters(const AmgVector(DIM) & param) +{ + m_parameters = param; +} + +template<int DIM, class T> +void +ParametersBase<DIM, T>::setCovariance(const AmgSymMatrix(DIM) & cov) +{ + // if the covariance is there update in place + if (m_covariance) { + (*m_covariance) = cov; + } else { // otherwise create one + m_covariance = std::make_unique<AmgSymMatrix(DIM)>(cov); + } +} + template<int DIM, class T> void ParametersBase<DIM, T>::updateParameters(const AmgVector(DIM) & diff --git a/Tracking/TrkEventCnv/TrkEventTPCnv/TrkEventTPCnv/TrkParameters/mungeZeroQOverP.h b/Tracking/TrkEventCnv/TrkEventTPCnv/TrkEventTPCnv/TrkParameters/mungeZeroQOverP.h index 720c85b6a3b..d6756f66a23 100644 --- a/Tracking/TrkEventCnv/TrkEventTPCnv/TrkEventTPCnv/TrkParameters/mungeZeroQOverP.h +++ b/Tracking/TrkEventCnv/TrkEventTPCnv/TrkEventTPCnv/TrkParameters/mungeZeroQOverP.h @@ -29,7 +29,7 @@ NO_SANITIZE_UNDEFINED(Trk::ParametersT<DIM, T, S>& p) { AmgVector(DIM) newParam = p.parameters(); newParam[Trk::qOverP] = 0; - p.updateParameters(newParam); + p.setParameters(newParam); } } -- GitLab