From 8f831e2636c251ffbed79787db18a4d893f39d7f Mon Sep 17 00:00:00 2001 From: Atlas-Software Librarian <Atlas-Software.Librarian@cern.ch> Date: Fri, 8 Apr 2016 17:18:55 +0200 Subject: [PATCH] 'CMakeLists.txt' (ISF_FatrasEvent-00-00-02) * Tagging ISF_FatrasEvent-00-00-02. * Fix clang warnings: a null reference is not valid C++. * Tagging ISF_FatrasEvent-00-00-01. * ISF_FatrasEvent/PlanarCluster.h, src/PlanarCluster.cxx: Fix assignment op (wasn't copying base class). Ctor with move args, move operator. --- .../ISF_Fatras/ISF_FatrasEvent/CMakeLists.txt | 31 +++++++++++++++++++ .../ISF_FatrasEvent/PlanarCluster.h | 20 ++++++++++-- .../ISF_FatrasEvent/PlanarClusterOnTrack.h | 11 +++++-- .../ISF_FatrasEvent/src/PlanarCluster.cxx | 30 ++++++++++++++++-- .../src/PlanarClusterOnTrack.cxx | 4 +-- 5 files changed, 88 insertions(+), 8 deletions(-) create mode 100644 Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/CMakeLists.txt diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/CMakeLists.txt b/Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/CMakeLists.txt new file mode 100644 index 00000000000..5cb2fd8c030 --- /dev/null +++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/CMakeLists.txt @@ -0,0 +1,31 @@ +################################################################################ +# Package: ISF_FatrasEvent +################################################################################ + +# Declare the package name: +atlas_subdir( ISF_FatrasEvent ) + +# Declare the package's dependencies: +atlas_depends_on_subdirs( PUBLIC + Control/AthLinks + Control/DataModel + Control/SGTools + DetectorDescription/Identifier + InnerDetector/InDetRecEvent/InDetPrepRawData + Simulation/ISF/ISF_Fatras/ISF_FatrasDetDescrModel + Tracking/TrkEvent/TrkPrepRawData + Tracking/TrkEvent/TrkRIO_OnTrack + PRIVATE + GaudiKernel ) + +# External dependencies: +find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) + +# Component(s) in the package: +atlas_add_library( ISF_FatrasEvent + src/*.cxx + PUBLIC_HEADERS ISF_FatrasEvent + INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} + LINK_LIBRARIES ${ROOT_LIBRARIES} AthLinks DataModel SGTools Identifier InDetPrepRawData ISF_FatrasDetDescrModel TrkPrepRawData TrkRIO_OnTrack + PRIVATE_LINK_LIBRARIES GaudiKernel ) + diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/ISF_FatrasEvent/PlanarCluster.h b/Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/ISF_FatrasEvent/PlanarCluster.h index b67099fb463..109269279d3 100644 --- a/Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/ISF_FatrasEvent/PlanarCluster.h +++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/ISF_FatrasEvent/PlanarCluster.h @@ -43,6 +43,7 @@ namespace iFatras { PlanarCluster( const PlanarCluster &); PlanarCluster &operator=(const PlanarCluster &); + PlanarCluster &operator=( PlanarCluster &&); PlanarCluster( const Identifier& RDOId, const Amg::Vector2D& locpos, @@ -51,12 +52,22 @@ namespace iFatras { const iFatras::PlanarDetElement* detEl, const Amg::MatrixX* locErrMat ); + PlanarCluster( const Identifier& RDOId, + const Amg::Vector2D& locpos, + std::vector<Identifier>&& rdoList, + const InDet::SiWidth& width, + const iFatras::PlanarDetElement* detEl, + std::unique_ptr<const Amg::MatrixX> locErrMat ); + // Deconstructor: virtual ~PlanarCluster(); /** return width class reference */ const InDet::SiWidth& width() const; + /** return global position as a pointer. */ + const Amg::Vector3D* globalPositionPtr() const; + /** return global position reference */ const Amg::Vector3D& globalPosition() const; @@ -87,9 +98,14 @@ namespace iFatras { } // return globalPosition: - inline const Amg::Vector3D& PlanarCluster::globalPosition() const { + inline const Amg::Vector3D* PlanarCluster::globalPositionPtr() const { if (m_globalPosition==0) m_globalPosition = m_detEl->surface(identify()).localToGlobal(localPosition()); - return *m_globalPosition; + return m_globalPosition; + } + + // return globalPosition: + inline const Amg::Vector3D& PlanarCluster::globalPosition() const { + return *globalPositionPtr(); } inline const iFatras::PlanarDetElement* PlanarCluster::detectorElement() const { diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/ISF_FatrasEvent/PlanarClusterOnTrack.h b/Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/ISF_FatrasEvent/PlanarClusterOnTrack.h index 2036bb893c8..98768385442 100644 --- a/Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/ISF_FatrasEvent/PlanarClusterOnTrack.h +++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/ISF_FatrasEvent/PlanarClusterOnTrack.h @@ -85,6 +85,10 @@ namespace iFatras { - fullfills Trk::MeasurementBase interface */ const Amg::Vector3D& globalPosition() const; + /** returns global position (gathered through Surface constraint) + - fullfills Trk::MeasurementBase interface */ + const Amg::Vector3D* globalPositionPtr() const; + /** returns the DE hashID* - fullfills Trk::RIO_OnTrack interface */ IdentifierHash idDE() const; @@ -119,9 +123,12 @@ namespace iFatras { inline const Trk::Surface& PlanarClusterOnTrack::associatedSurface() const { return ( detectorElement()->surface()); } - inline const Amg::Vector3D& PlanarClusterOnTrack::globalPosition() const { + inline const Amg::Vector3D* PlanarClusterOnTrack::globalPositionPtr() const { if (!m_globalPosition) m_globalPosition = associatedSurface().localToGlobal(localParameters()); - return (*m_globalPosition); } + return m_globalPosition; } + + inline const Amg::Vector3D& PlanarClusterOnTrack::globalPosition() const { + return *globalPositionPtr(); } inline PlanarClusterOnTrack* PlanarClusterOnTrack::clone() const { return new PlanarClusterOnTrack(*this); } diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/src/PlanarCluster.cxx b/Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/src/PlanarCluster.cxx index 6610fbf2848..524f8f8f4e7 100644 --- a/Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/src/PlanarCluster.cxx +++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/src/PlanarCluster.cxx @@ -28,6 +28,17 @@ namespace iFatras { m_globalPosition(0), m_detEl(detEl) {} + PlanarCluster::PlanarCluster( const Identifier& RDOId, + const Amg::Vector2D& locpos, + std::vector<Identifier>&& rdoList, + const InDet::SiWidth& width, + const iFatras::PlanarDetElement* detEl, + std::unique_ptr<const Amg::MatrixX> locErrMat ) : + PrepRawData(RDOId, locpos, std::move(rdoList), std::move(locErrMat)), //call base class constructor + m_width(width), + m_globalPosition(0), + m_detEl(detEl) {} + // Destructor: PlanarCluster::~PlanarCluster() { @@ -56,6 +67,7 @@ namespace iFatras { //assignment operator PlanarCluster& PlanarCluster::operator=(const PlanarCluster& RIO){ if (&RIO !=this) { + static_cast<Trk::PrepRawData&>(*this) = RIO; delete m_globalPosition; m_width = RIO.m_width; m_globalPosition = (RIO.m_globalPosition) ? new Amg::Vector3D(*RIO.m_globalPosition) : 0; @@ -64,11 +76,24 @@ namespace iFatras { return *this; } + //move operator + PlanarCluster& PlanarCluster::operator=(PlanarCluster&& RIO){ + if (&RIO !=this) { + static_cast<Trk::PrepRawData&>(*this) = std::move(RIO); + delete m_globalPosition; + m_globalPosition = RIO.m_globalPosition; + RIO.m_globalPosition = nullptr; + m_width = RIO.m_width; + m_detEl = RIO.m_detEl ; + } + return *this; + } + MsgStream& PlanarCluster::dump( MsgStream& stream) const { stream << "PlanarCluster object"<<std::endl; // have to do a lot of annoying checking to make sure that PRD is valid. - if ( &(this->globalPosition() )!=0 ) + if ( this->globalPositionPtr() ) { stream << "at global coordinates (x,y,z) = ("<<this->globalPosition().x()<<", " <<this->globalPosition().y()<<", " @@ -86,7 +111,8 @@ namespace iFatras { stream << "PlanarCluster object"<<std::endl; // have to do a lot of annoying checking to make sure that PRD is valid. - if ( &(this->globalPosition() )!=0 ) + this->globalPosition(); + if ( this->globalPositionPtr() ) { stream << "at global coordinates (x,y,z) = ("<<this->globalPosition().x()<<", " <<this->globalPosition().y()<<", " diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/src/PlanarClusterOnTrack.cxx b/Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/src/PlanarClusterOnTrack.cxx index 118ad62819e..e017e85dd39 100644 --- a/Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/src/PlanarClusterOnTrack.cxx +++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasEvent/src/PlanarClusterOnTrack.cxx @@ -91,7 +91,7 @@ namespace iFatras { Trk::RIO_OnTrack::dump(sl); sl << "Global position (x,y,z) = ("; - if ( &(this->globalPosition() )!=0 ) + if ( this->globalPositionPtr() ) { sl <<this->globalPosition().x()<<", " <<this->globalPosition().y()<<", " @@ -110,7 +110,7 @@ namespace iFatras { Trk::RIO_OnTrack::dump(sl); sl << "Global position (x,y,z) = ("; - if ( &(this->globalPosition() )!=0 ) + if ( this->globalPositionPtr() ) { sl <<this->globalPosition().x()<<", " <<this->globalPosition().y()<<", " -- GitLab