From a91bd550a43e29e6238e4c8a440e55658d76d007 Mon Sep 17 00:00:00 2001 From: Markus Frank <Markus.Frank@cern.ch> Date: Mon, 31 Aug 2020 12:53:43 +0200 Subject: [PATCH] Add basic geometrical accessors to shapes. Implement comments according to reviewers --- DDCore/include/DD4hep/Shapes.h | 38 ++++++++++++++++++++++---------- DDCore/src/Shapes.cpp | 40 ++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 11 deletions(-) diff --git a/DDCore/include/DD4hep/Shapes.h b/DDCore/include/DD4hep/Shapes.h index ced30d22e..35fb5feab 100644 --- a/DDCore/include/DD4hep/Shapes.h +++ b/DDCore/include/DD4hep/Shapes.h @@ -454,7 +454,7 @@ namespace dd4hep { /// Accessor: delta-phi value double deltaPhi() const { return access()->GetDphi()*dd4hep::deg; } - /// Accessor: r-min value + /// Accessor: z value double z(int which) const { return access()->GetZ(which); } /// Accessor: r-min value double rMin(int which) const { return access()->GetRmin(which); } @@ -750,6 +750,22 @@ namespace dd4hep { TruncatedTube& operator=(TruncatedTube&& copy) = default; /// Copy Assignment operator TruncatedTube& operator=(const TruncatedTube& copy) = default; + /// Accessor: z-half value + double zHalf() const; + /// Accessor: r-min value + double rMin() const; + /// Accessor: r-max value + double rMax() const; + /// Accessor: start-phi value + double startPhi() const; + /// Accessor: delta-phi value + double deltaPhi() const; + /// Accessor: cut at start value + double cutAtStart() const; + /// Accessor: cut at delta value + double cutAtDelta() const; + /// Accessor: cut-inside value + bool cutInside() const; }; /// Class describing a twisted tube shape @@ -805,9 +821,9 @@ namespace dd4hep { /// Accessor: delta-z value double dZ() const { return access()->GetDz(); } - /// Accessor: r-min value + /// Accessor: a value (semi axis along x) double a() const { return access()->GetA(); } - /// Accessor: r-max value + /// Accessor: b value (semi axis along y) double b() const { return access()->GetB(); } }; @@ -950,9 +966,9 @@ namespace dd4hep { double phi() const { return access()->GetPhi()*dd4hep::deg; } /// Accessor: theta value double theta() const { return access()->GetTheta()*dd4hep::deg; } - /// Angle between centers of x edges an y axis at low z + /// Angle between centers of x edges and y axis at low z double alpha1() const { return access()->GetAlpha1()*dd4hep::deg; } - /// Angle between centers of x edges an y axis at low z + /// Angle between centers of x edges and y axis at low z double alpha2() const { return access()->GetAlpha2()*dd4hep::deg; } /// Half length in x at low z and y low edge double bottomLow1() const { return access()->GetBl1(); } @@ -1191,11 +1207,11 @@ namespace dd4hep { /// Accessor: delta-phi value double deltaPhi() const { return access()->GetDphi()*dd4hep::deg; } - /// Accessor: r-min value + /// Accessor: r value (torus axial radius) double r() const { return access()->GetR(); } - /// Accessor: r-min value + /// Accessor: r-min value (inner radius) double rMin() const { return access()->GetRmin(); } - /// Accessor: r-max value + /// Accessor: r-max value (outer radius) double rMax() const { return access()->GetRmax(); } }; @@ -1555,7 +1571,7 @@ namespace dd4hep { /// Accessor: delta-phi value double deltaPhi() const { return access()->GetDphi()*dd4hep::deg; } - /// Accessor: r-min value + /// Accessor: z value double z(int which) const { return access()->GetZ(which); } /// Accessor: r-min value double rMin(int which) const { return access()->GetRmin(which); } @@ -1672,12 +1688,12 @@ namespace dd4hep { /// Accessor: delta-z value double dZ() const { return access()->GetDz(); } - /// Accessor: vertices + /// Accessor: all vertices as STL vector std::vector<double> vertices() const { const double* values = access()->GetVertices(); return detail::_make_vector(values, 8*2); } - /// Accessor: singlke vertex + /// Accessor: single vertex std::pair<double, double> vertex(int which) const { const double* values = access()->GetVertices(); return std::make_pair(values[2*which], values[2*which+1]); diff --git a/DDCore/src/Shapes.cpp b/DDCore/src/Shapes.cpp index 09c03d548..164311697 100644 --- a/DDCore/src/Shapes.cpp +++ b/DDCore/src/Shapes.cpp @@ -433,6 +433,46 @@ void TruncatedTube::make(const string& nam, #endif } +/// Accessor: z-half value +double TruncatedTube::zHalf() const { + return dd4hep::dimensions<TruncatedTube>(*this)[0]; +} + +/// Accessor: r-min value +double TruncatedTube::rMin() const { + return dd4hep::dimensions<TruncatedTube>(*this)[1]; +} + +/// Accessor: r-max value +double TruncatedTube::rMax() const { + return dd4hep::dimensions<TruncatedTube>(*this)[2]; +} + +/// Accessor: start-phi value +double TruncatedTube::startPhi() const { + return dd4hep::dimensions<TruncatedTube>(*this)[3]; +} + +/// Accessor: delta-phi value +double TruncatedTube::deltaPhi() const { + return dd4hep::dimensions<TruncatedTube>(*this)[4]; +} + +/// Accessor: cut at start value +double TruncatedTube::cutAtStart() const { + return dd4hep::dimensions<TruncatedTube>(*this)[5]; +} + +/// Accessor: cut at delta value +double TruncatedTube::cutAtDelta() const { + return dd4hep::dimensions<TruncatedTube>(*this)[6]; +} + +/// Accessor: cut-inside value +bool TruncatedTube::cutInside() const { + return std::abs(dd4hep::dimensions<TruncatedTube>(*this)[7]) > std::numeric_limits<double>::epsilon(); +} + /// Constructor to be used when creating a new object with attribute initialization void EllipticalTube::make(const string& nam, double a, double b, double dz) { _assign(new TGeoEltu(nam.c_str(), a, b, dz), "", ELLIPTICALTUBE_TAG, true); -- GitLab