From 1cd0af1aee1dbeaaae5ce7d2ef4a69ff12fcf436 Mon Sep 17 00:00:00 2001 From: Markus Frank <markus.frank@cern.ch> Date: Thu, 27 Nov 2014 20:03:56 +0000 Subject: [PATCH] Add default handle constructors to VolSurface and VolPlane --- DDRec/include/DDRec/Surface.h | 38 ++++++++++++++++++++++++++++------- DDRec/src/Surface.cpp | 26 +++++++++++++++--------- 2 files changed, 48 insertions(+), 16 deletions(-) diff --git a/DDRec/include/DDRec/Surface.h b/DDRec/include/DDRec/Surface.h index 55d96a39c..c30aad479 100644 --- a/DDRec/include/DDRec/Surface.h +++ b/DDRec/include/DDRec/Surface.h @@ -73,14 +73,16 @@ namespace DD4hep { double _th_i ; double _th_o ; SurfaceMaterial _innerMat ; - SurfaceMaterial _outerMat ; + SurfaceMaterial _outerMat ; + Geometry::Volume _vol ; /// default c'tor. SurfaceData(); /// Standard c'tor for initialization. SurfaceData( SurfaceType type, double thickness_inner ,double thickness_outer, - Vector3D u ,Vector3D v ,Vector3D n ,Vector3D o ) ; + Vector3D u ,Vector3D v ,Vector3D n ,Vector3D o, + Geometry::Volume vol /*= Geometry::Volume() */); /// Default destructor virtual ~SurfaceData() {} @@ -96,6 +98,7 @@ namespace DD4hep { _th_o = c._th_o ; _innerMat = c._innerMat ; _outerMat = c._innerMat ; + _vol = c._vol; } } ; @@ -110,8 +113,6 @@ namespace DD4hep { protected: - Geometry::Volume _vol ; - /// setter for daughter classes virtual void setU(const Vector3D& u) { object<SurfaceData>()._u = u ; } @@ -128,13 +129,26 @@ namespace DD4hep { ///default c'tor VolSurface() { } - + + /// Constructor to be used with an existing object + VolSurface(SurfaceData* p) + : Geometry::Handle< SurfaceData >(p) { + } + /// Constructor to be used with an existing object + VolSurface(const VolSurface& e) + : Geometry::Handle< SurfaceData >(e) { + } + + /// Constructor to be used with an existing object + template <typename Q> VolSurface(const Handle<Q>& e) + : Geometry::Handle< SurfaceData >(e) { + } + /// Standrad c'tor for initialization. VolSurface( Geometry::Volume vol, SurfaceType type, double thickness_inner ,double thickness_outer, Vector3D u ,Vector3D v ,Vector3D n , Vector3D o = Vector3D(0.,0.,0.) ) ; - /// the volume to which this surface is attached. - Geometry::Volume volume() const { return _vol ; } + Geometry::Volume volume() const { return ptr()->_vol; } /// The id of this surface - always 0 for VolSurfaces virtual long64 id() const { return 0 ; } @@ -262,6 +276,16 @@ namespace DD4hep { ///default c'tor VolPlane() : VolSurface() { } + /// Constructor to be used with an existing object + VolPlane(SurfaceData* p) + : VolSurface(p) { + } + + /// Constructor to be used with an existing object + template <typename Q> VolPlane(const Handle<Q>& e) + : VolSurface(e) { + } + /// copy c'tor VolPlane(const VolSurface& vs ) : VolSurface( vs ) { } diff --git a/DDRec/src/Surface.cpp b/DDRec/src/Surface.cpp index 70f1d7743..864220a43 100644 --- a/DDRec/src/Surface.cpp +++ b/DDRec/src/Surface.cpp @@ -38,12 +38,14 @@ namespace DD4hep { _th_i( 0. ), _th_o( 0. ), _innerMat( MaterialData() ), - _outerMat( MaterialData() ) { + _outerMat( MaterialData() ), + _vol() + { } SurfaceData::SurfaceData( SurfaceType type , double thickness_inner ,double thickness_outer, - Vector3D u ,Vector3D v ,Vector3D n ,Vector3D o ) : _type(type ) , + Vector3D u ,Vector3D v ,Vector3D n ,Vector3D o, Volume vol ) : _type(type ) , _u( u ) , _v( v ) , _n( n ) , @@ -51,7 +53,9 @@ namespace DD4hep { _th_i( thickness_inner ), _th_o( thickness_outer ), _innerMat( MaterialData() ), - _outerMat( MaterialData() ) { + _outerMat( MaterialData() ), + _vol(vol) + { } @@ -60,9 +64,7 @@ namespace DD4hep { VolSurface::VolSurface( Volume vol, SurfaceType type, double thickness_inner ,double thickness_outer, Vector3D u ,Vector3D v ,Vector3D n ,Vector3D o ) : - Geometry::Handle< SurfaceData >( new SurfaceData( type, thickness_inner ,thickness_outer, u,v,n,o) ) , - - _vol( vol ) { + Geometry::Handle< SurfaceData >( new SurfaceData(type, thickness_inner ,thickness_outer, u,v,n,o, vol) ) { } @@ -238,7 +240,7 @@ namespace DD4hep { list = det.extension< VolSurfaceList >() ; - } catch( std::runtime_error e){ + } catch(const std::runtime_error& e){ list = det.addExtension<VolSurfaceList >( new VolSurfaceList ) ; } @@ -421,8 +423,9 @@ namespace DD4hep { Volume theVol = _volSurf.volume() ; if( ! findVolume( pv, theVol , pVList ) ){ - std::stringstream sst ; sst << " ***** ERROR: Volume " << theVol.name() << " not found for DetElement " << _det.name() << " with surface " ; - throw std::runtime_error( sst.str() ) ; + theVol = _volSurf.volume() ; + std::stringstream sst ; sst << " ***** ERROR: Volume " << theVol.name() << " not found for DetElement " << _det.name() << " with surface " ; + throw std::runtime_error( sst.str() ) ; } // std::cout << " **** Surface::initialize() # placements for surface = " << pVList.size() @@ -831,3 +834,8 @@ namespace DD4hep { } // namespace } // namespace + + +#include "DD4hep/Handle.inl" +typedef DD4hep::DDRec::SurfaceData SurfaceData; +DD4HEP_INSTANTIATE_HANDLE_UNNAMED(SurfaceData); -- GitLab