ATLAS Offline Software
CuboidVolumeBounds.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // CuboidVolumeBounds.cxx, (c) ATLAS Detector software
8 
9 // Trk
11 // TrkSurfaces
14 #include "TrkSurfaces/Surface.h"
15 // Gaudi
16 #include "GaudiKernel/MsgStream.h"
17 #include "GaudiKernel/SystemOfUnits.h"
18 // STD
19 #include <cmath>
20 #include <iostream>
21 
23  : VolumeBounds()
24  , m_halfX(0.)
25  , m_halfY(0.)
26  , m_halfZ(0.)
27  , m_objectAccessor()
28 {}
29 
31  double halex,
32  double haley,
33  double halez)
34  : VolumeBounds()
35  , m_halfX(halex)
36  , m_halfY(haley)
37  , m_halfZ(halez)
38  , m_objectAccessor()
39 {}
40 
42  : VolumeBounds()
43  , m_halfX(bobo.m_halfX)
44  , m_halfY(bobo.m_halfY)
45  , m_halfZ(bobo.m_halfZ)
46  , m_objectAccessor(bobo.m_objectAccessor)
47 {}
48 
50 
53 {
54  if (this != &bobo) {
55  m_halfX = bobo.m_halfX;
56  m_halfY = bobo.m_halfY;
57  m_halfZ = bobo.m_halfZ;
58  m_objectAccessor = bobo.m_objectAccessor;
59  }
60  return *this;
61 }
62 
63 const std::vector<const Trk::Surface*>*
66 {
67 
68  std::vector<const Trk::Surface*>* retsf =
69  new std::vector<const Trk::Surface*>;
70  // memory optimisation
71  retsf->reserve(6);
72  // face surfaces xy
73  // (1) - at negative local z
74  retsf->push_back(new Trk::PlaneSurface(
76  transform *
77  Amg::AngleAxis3D(180. * Gaudi::Units::deg, Amg::Vector3D(0., 1., 0.)) *
78  Amg::Translation3D(Amg::Vector3D(0., 0., this->halflengthZ()))),
79  this->faceXYRectangleBounds()));
80  // (2) - at positive local z
81  retsf->push_back(new Trk::PlaneSurface(
83  transform *
84  Amg::Translation3D(Amg::Vector3D(0., 0., this->halflengthZ()))),
85  this->faceXYRectangleBounds()));
86  // face surfaces yz
87  // transmute cyclical
88  // (3) - at negative local x
89  retsf->push_back(new Trk::PlaneSurface(
91  transform *
92  Amg::AngleAxis3D(180. * Gaudi::Units::deg, Amg::Vector3D(0., 0., 1.)) *
93  Amg::Translation3D(Amg::Vector3D(this->halflengthX(), 0., 0)) *
96  this->faceYZRectangleBounds()));
97  // (4) - at positive local x
98  retsf->push_back(new Trk::PlaneSurface(
100  transform *
101  Amg::Translation3D(Amg::Vector3D(this->halflengthX(), 0., 0.)) *
102  Amg::AngleAxis3D(90. * Gaudi::Units::deg, Amg::Vector3D(0., 1., 0.)) *
103  Amg::AngleAxis3D(90. * Gaudi::Units::deg, Amg::Vector3D(0., 0., 1.))),
104  this->faceYZRectangleBounds()));
105  // face surfaces zx
106  // (5) - at negative local y
107  retsf->push_back(new Trk::PlaneSurface(
109  transform *
110  Amg::AngleAxis3D(180. * Gaudi::Units::deg, Amg::Vector3D(1., 0., 0.)) *
111  Amg::Translation3D(Amg::Vector3D(0., this->halflengthY(), 0.)) *
112  Amg::AngleAxis3D(-90 * Gaudi::Units::deg, Amg::Vector3D(0., 1., 0.)) *
113  Amg::AngleAxis3D(-90. * Gaudi::Units::deg, Amg::Vector3D(1., 0., 0.))),
114  this->faceZXRectangleBounds()));
115  // (6) - at positive local y
116  retsf->push_back(new Trk::PlaneSurface(
118  transform *
119  Amg::Translation3D(Amg::Vector3D(0., this->halflengthY(), 0.)) *
120  Amg::AngleAxis3D(-90 * Gaudi::Units::deg, Amg::Vector3D(0., 1., 0.)) *
121  Amg::AngleAxis3D(-90. * Gaudi::Units::deg, Amg::Vector3D(1., 0., 0.))),
122  this->faceZXRectangleBounds()));
123 
124  return retsf;
125 }
126 
129 {
130  return new Trk::RectangleBounds(m_halfX, m_halfY);
131 }
132 
135 {
136  return new Trk::RectangleBounds(m_halfY, m_halfZ);
137 }
138 
141 {
142  return new Trk::RectangleBounds(m_halfZ, m_halfX);
143 }
144 
145 // ostream operator overload
146 
147 MsgStream&
148 Trk::CuboidVolumeBounds::dump(MsgStream& sl) const
149 {
150 
151  std::stringstream temp_sl;
152  temp_sl << std::setiosflags(std::ios::fixed);
153  temp_sl << std::setprecision(7);
154  temp_sl << "Trk::CuboidVolumeBounds: (halfX, halfY, halfZ) = ";
155  temp_sl << "(" << m_halfX << ", " << m_halfY << ", " << m_halfZ << ")";
156  sl << temp_sl.str();
157  return sl;
158 }
159 
160 std::ostream&
161 Trk::CuboidVolumeBounds::dump(std::ostream& sl) const
162 {
163  std::stringstream temp_sl;
164  temp_sl << std::setiosflags(std::ios::fixed);
165  temp_sl << std::setprecision(7);
166  temp_sl << "Trk::CuboidVolumeBounds: (halfX, halfY, halfZ) = ";
167  temp_sl << "(" << m_halfX << ", " << m_halfY << ", " << m_halfZ << ")";
168  sl << temp_sl.str();
169  return sl;
170 }
171 
Trk::RectangleBounds
Definition: RectangleBounds.h:38
Trk::CuboidVolumeBounds::operator=
CuboidVolumeBounds & operator=(const CuboidVolumeBounds &bobo)
Assignment operator.
Definition: CuboidVolumeBounds.cxx:52
RectangleBounds.h
Surface.h
Trk::CuboidVolumeBounds
Definition: CuboidVolumeBounds.h:52
deg
#define deg
Definition: SbPolyhedron.cxx:17
Trk::CuboidVolumeBounds::m_halfX
double m_halfX
Definition: CuboidVolumeBounds.h:113
Trk::VolumeBounds
Definition: VolumeBounds.h:45
Trk::CuboidVolumeBounds::faceYZRectangleBounds
RectangleBounds * faceYZRectangleBounds() const
This method returns the associated RecantleBounds of the face PlaneSurface parallel to local yz plane...
Definition: CuboidVolumeBounds.cxx:134
Trk::CuboidVolumeBounds::decomposeToSurfaces
const std::vector< const Trk::Surface * > * decomposeToSurfaces(const Amg::Transform3D &transform) override final
Method to decompose the Bounds into boundarySurfaces.
Definition: CuboidVolumeBounds.cxx:65
Trk::CuboidVolumeBounds::m_objectAccessor
SixObjectsAccessor m_objectAccessor
There's only one single object Acessor for the moment has to be implemented if Cuboids are used more ...
Definition: CuboidVolumeBounds.h:119
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
Trk::CuboidVolumeBounds::faceXYRectangleBounds
RectangleBounds * faceXYRectangleBounds() const
This method returns the associated RecantleBounds of the face PlaneSurface parallel to local xy plane...
Definition: CuboidVolumeBounds.cxx:128
Trk::CuboidVolumeBounds::~CuboidVolumeBounds
virtual ~CuboidVolumeBounds()
Destructor.
Trk::CuboidVolumeBounds::faceZXRectangleBounds
RectangleBounds * faceZXRectangleBounds() const
This method returns the associated RecantleBounds of the face PlaneSurface parallel to local zx plane...
Definition: CuboidVolumeBounds.cxx:140
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::CuboidVolumeBounds::m_halfZ
double m_halfZ
Definition: CuboidVolumeBounds.h:115
Trk::PlaneSurface
Definition: PlaneSurface.h:64
PlaneSurface.h
Amg::Translation3D
Eigen::Translation< double, 3 > Translation3D
Definition: GeoPrimitives.h:44
Trk::CuboidVolumeBounds::dump
MsgStream & dump(MsgStream &sl) const override final
Output Method for MsgStream.
Definition: CuboidVolumeBounds.cxx:148
Trk::CuboidVolumeBounds::CuboidVolumeBounds
CuboidVolumeBounds()
Default Constructor.
Definition: CuboidVolumeBounds.cxx:22
Amg::AngleAxis3D
Eigen::AngleAxisd AngleAxis3D
Definition: GeoPrimitives.h:45
Trk::CuboidVolumeBounds::m_halfY
double m_halfY
Definition: CuboidVolumeBounds.h:114
CuboidVolumeBounds.h