ATLAS Offline Software
CombinedVolumeBounds.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // CombinedVolumeBounds.h, (c) ATLAS Detector software
8 
9 #ifndef TRKVOLUMES_COMBINEDVOLUMEBOUNDS_H
10 #define TRKVOLUMES_COMBINEDVOLUMEBOUNDS_H
11 
12 // Trk
14 #include "TrkVolumes/Volume.h"
16 
17 // Eigen
19 //
20 #include <memory>
21 
22 class MsgStream;
23 
24 namespace Trk {
25 
26 class SurfaceBounds;
27 class Volume;
28 class Surface;
29 
45  public:
48 
50  CombinedVolumeBounds(std::unique_ptr<Volume> first,
51  std::unique_ptr<Volume> second,
52  bool intersection);
53 
56 
59 
62 
64  virtual CombinedVolumeBounds* clone() const override final;
65 
68  virtual bool inside(const Amg::Vector3D&, double tol = 0.) const override final;
69 
71  virtual std::vector<std::unique_ptr<Trk::Surface>> decomposeToSurfaces
72  (const Amg::Transform3D& transform) override final;
73 
77  bool forceInside = false) const override final;
78 
81 
84 
86  bool intersection() const;
87 
89  const std::vector<bool>& boundsOrientation() const;
90 
92  virtual MsgStream& dump(MsgStream& sl) const override final;
93 
95  virtual std::ostream& dump(std::ostream& sl) const override final;
96 
97  private:
99  const Trk::Volume* subtrVol);
100 
101  std::unique_ptr<Volume> m_first{};
102  std::unique_ptr<Volume> m_second{};
105  std::vector<bool> m_boundsOrientation{};
106 };
107 
109  return new CombinedVolumeBounds(*this);
110 }
111 
112 inline bool CombinedVolumeBounds::inside(const Amg::Vector3D& pos, double tol) const {
113  if (m_intersection) {
114  return (m_first->inside(pos, tol) && m_second->inside(pos, tol));
115  }
116  return (m_first->inside(pos, tol) || m_second->inside(pos, tol));
117 }
118 
119 inline const Volume* CombinedVolumeBounds::first() const {
120  return m_first.get();
121 }
122 
123 inline const Volume* CombinedVolumeBounds::second() const {
124  return m_second.get();
125 }
126 
128  return m_intersection;
129 }
130 
132  const Amg::Vector3D&, const Amg::Vector3D&, bool) const {
134 }
135 
136 inline const std::vector<bool>& CombinedVolumeBounds::boundsOrientation() const {
137  return (m_boundsOrientation);
138 }
139 
140 } // namespace Trk
141 
142 #endif // TRKVOLUMES_COMBINEDVOLUMEBOUNDS_H
143 
Trk::CombinedVolumeBounds::intersection
bool intersection() const
This method distinguishes between Union(0) and Intersection(1)
Definition: CombinedVolumeBounds.h:127
Trk::CombinedVolumeBounds::createSubtractedVolume
static Trk::Volume * createSubtractedVolume(const Amg::Transform3D &transf, const Trk::Volume *subtrVol)
Definition: CombinedVolumeBounds.cxx:341
Trk::CombinedVolumeBounds::boundarySurfaceAccessor
virtual ObjectAccessor boundarySurfaceAccessor(const Amg::Vector3D &gp, const Amg::Vector3D &dir, bool forceInside=false) const override final
Provide accessor for BoundarySurfaces.
Definition: CombinedVolumeBounds.h:131
Trk::CombinedVolumeBounds::m_boundsOrientation
std::vector< bool > m_boundsOrientation
Definition: CombinedVolumeBounds.h:105
Trk::CombinedVolumeBounds::operator=
CombinedVolumeBounds & operator=(const CombinedVolumeBounds &bobo)
Assignment operator.
Definition: CombinedVolumeBounds.cxx:61
Trk::EightObjectsAccessor
std::array< ObjectAccessor::value_type, 8 > EightObjectsAccessor
Definition: ObjectsAccessor.h:18
Surface
Definition: Trigger/TrigAccel/TrigCudaFitter/src/Surface.h:8
Trk::CombinedVolumeBounds::m_intersection
bool m_intersection
Definition: CombinedVolumeBounds.h:103
Trk::CombinedVolumeBounds::clone
virtual CombinedVolumeBounds * clone() const override final
Virtual constructor.
Definition: CombinedVolumeBounds.h:108
VolumeBounds.h
ObjectsAccessor.h
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:560
Trk::CombinedVolumeBounds::first
const Volume * first() const
This method returns the first VolumeBounds.
Definition: CombinedVolumeBounds.h:119
Trk::CombinedVolumeBounds::boundsOrientation
const std::vector< bool > & boundsOrientation() const
This method returns bounds orientation.
Definition: CombinedVolumeBounds.h:136
Trk::CombinedVolumeBounds::m_second
std::unique_ptr< Volume > m_second
Definition: CombinedVolumeBounds.h:102
GeoPrimitives.h
Trk::VolumeBounds
Definition: VolumeBounds.h:45
Volume.h
Trk::CombinedVolumeBounds::~CombinedVolumeBounds
virtual ~CombinedVolumeBounds()
Destructor.
Trk::CombinedVolumeBounds::dump
virtual MsgStream & dump(MsgStream &sl) const override final
Output Method for MsgStream.
Definition: CombinedVolumeBounds.cxx:315
vector
Definition: MultiHisto.h:13
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::CombinedVolumeBounds::m_objectAccessor
EightObjectsAccessor m_objectAccessor
Definition: CombinedVolumeBounds.h:104
Trk::CombinedVolumeBounds::CombinedVolumeBounds
CombinedVolumeBounds()
Default Constructor.
columnar::final
CM final
Definition: ColumnAccessor.h:106
beamspotman.dir
string dir
Definition: beamspotman.py:621
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Amg
Definition of ATLAS Math & Geometry primitives (Amg)
Definition: AmgStringHelpers.h:19
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:16
Trk::ObjectAccessor
Definition: ObjectAccessor.h:15
Trk::CombinedVolumeBounds::inside
virtual bool inside(const Amg::Vector3D &, double tol=0.) const override final
This method checks if position in the 3D volume frame is inside the volume.
Definition: CombinedVolumeBounds.h:112
private
#define private
Definition: xAODTruthCnvAlg.h:20
Trk::CombinedVolumeBounds::decomposeToSurfaces
virtual std::vector< std::unique_ptr< Trk::Surface > > decomposeToSurfaces(const Amg::Transform3D &transform) override final
Method to decompose the Bounds into boundarySurfaces.
Definition: CombinedVolumeBounds.cxx:74
Trk::CombinedVolumeBounds::m_first
std::unique_ptr< Volume > m_first
Definition: CombinedVolumeBounds.h:101
Trk::CombinedVolumeBounds
Definition: CombinedVolumeBounds.h:44
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:79
Trk::CombinedVolumeBounds::second
const Volume * second() const
This method returns the second VolumeBounds.
Definition: CombinedVolumeBounds.h:123
Trk::Volume
Definition: Volume.h:36