Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
TrackingVolumeManipulator.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // TrackingVolumeManipulator.cxx, (c) ATLAS Detector software
8 
10 
11 #include <utility>
12 
15 
16 void
18  Trk::TrackingVolume& firstVol,
19  Trk::BoundarySurfaceFace firstFace,
20  Trk::TrackingVolume& secondVol,
21  Trk::BoundarySurfaceFace secondFace) const
22 {
23  // check if it is a cylinder volume
24  const Trk::CylinderVolumeBounds* cylBounds =
25  dynamic_cast<const Trk::CylinderVolumeBounds*>(&(firstVol.volumeBounds()));
26 
27  if (firstFace == Trk::tubeOuterCover && secondFace == Trk::tubeInnerCover)
28  return glueVolumes(secondVol, secondFace, firstVol, firstFace);
29 
30  // the second volume gets the face of the first volume assigned
31  (secondVol.m_boundarySurfaces)[secondFace] =
32  (firstVol.m_boundarySurfaces)[firstFace];
33  // the face of the first volume has been an inner tube
34  if (cylBounds && firstFace == Trk::tubeInnerCover &&
35  secondFace == Trk::tubeOuterCover) {
36  (secondVol.m_boundarySurfaces)[secondFace]->setInsideVolume(&secondVol);
37  } else {
38  (secondVol.m_boundarySurfaces)[secondFace]->setOutsideVolume(&secondVol);
39  }
40 }
41 
42 void
44  Trk::TrackingVolume& tvol,
45  std::shared_ptr<Trk::BoundarySurface<Trk::TrackingVolume>> bsurf,
47 {
48  (tvol.m_boundarySurfaces)[face] = std::move(bsurf);
49 }
50 
51 void
54  Trk::TrackingVolume* insidevol)
55 {
56 
57  (tvol.m_boundarySurfaces)[face]->setInsideVolume(insidevol);
58 }
59 
60 void
62  Trk::TrackingVolume& tvol,
64  const std::shared_ptr<Trk::BinnedArray<Trk::TrackingVolume>>&
65  insidevolarray)
66 {
67  (tvol.m_boundarySurfaces)[face]->setInsideVolumeArray(insidevolarray);
68 }
69 
70 void
72  Trk::TrackingVolume& tvol,
74  Trk::TrackingVolume* outsidevol)
75 {
76  (tvol.m_boundarySurfaces)[face]->setOutsideVolume(outsidevol);
77 }
78 
79 void
81  Trk::TrackingVolume& tvol,
83  const std::shared_ptr<Trk::BinnedArray<Trk::TrackingVolume>>&
84  outsidevolarray)
85 {
86  (tvol.m_boundarySurfaces)[face]->setOutsideVolumeArray(outsidevolarray);
87 }
88 
89 void
91  TrackingVolume* outsideVol)
92 {
93 
94  const auto& bounds = tvol.boundarySurfaces();
95  for (const auto & bound : bounds) {
96  if (bound->outsideVolume() == nullptr) {
97  bound->setOutsideVolume(outsideVol);
98  }
99  if (bound->insideVolume() == nullptr) {
100  bound->setInsideVolume(outsideVol);
101  }
102  }
103 }
Trk::BoundarySurface< Trk::TrackingVolume >
Trk::TrackingVolume::m_boundarySurfaces
std::vector< std::shared_ptr< BoundarySurface< TrackingVolume > > > m_boundarySurfaces
Definition: TrackingVolume.h:444
Trk::TrackingVolumeManipulator::setOutsideVolume
static void setOutsideVolume(TrackingVolume &tvol, BoundarySurfaceFace face, TrackingVolume *outsidevol)
protected method to set outside Volume of a BoundarySurface: input:
Definition: TrackingVolumeManipulator.cxx:71
Trk::BoundarySurfaceFace
BoundarySurfaceFace
Definition: BoundarySurfaceFace.h:31
CylinderVolumeBounds.h
Trk::TrackingVolumeManipulator::setInsideVolumeArray
static void setInsideVolumeArray(TrackingVolume &tvol, BoundarySurfaceFace face, const std::shared_ptr< BinnedArray< TrackingVolume >> &insidevolarray)
protected method to set inside VolumeArray of a BoundarySurface: input:
Definition: TrackingVolumeManipulator.cxx:61
Trk::TrackingVolume::boundarySurfaces
std::vector< std::shared_ptr< BoundarySurface< TrackingVolume > > > & boundarySurfaces()
Method to return the BoundarySurfaces.
Definition: TrackingVolume.cxx:810
Trk::CylinderVolumeBounds
Definition: CylinderVolumeBounds.h:70
Trk::TrackingVolumeManipulator::setBoundarySurface
static void setBoundarySurface(TrackingVolume &tvol, std::shared_ptr< BoundarySurface< TrackingVolume >> bsurf, BoundarySurfaceFace face)
protected method to set the boundary surface of a tracking volume
Definition: TrackingVolumeManipulator.cxx:43
TrackingVolumeManipulator.h
Trk::TrackingVolumeManipulator::setInsideVolume
static void setInsideVolume(TrackingVolume &tvol, BoundarySurfaceFace face, TrackingVolume *insidevol)
protected method to set inside Volume of a BoundarySurface: input:
Definition: TrackingVolumeManipulator.cxx:52
TrackingVolume.h
Trk::TrackingVolumeManipulator::setOutsideVolumeArray
static void setOutsideVolumeArray(TrackingVolume &tvol, BoundarySurfaceFace face, const std::shared_ptr< BinnedArray< TrackingVolume >> &outsidevolarray)
protected method to set outside VolumeArray of a BoundarySurface: input:
Definition: TrackingVolumeManipulator.cxx:80
Trk::TrackingVolumeManipulator::glueVolumes
void glueVolumes(TrackingVolume &firstVol, BoundarySurfaceFace firstFace, TrackingVolume &secondVol, BoundarySurfaceFace secondFace) const
protected method to glue two Volumes together input:
Definition: TrackingVolumeManipulator.cxx:17
Trk::TrackingVolumeManipulator::confineVolume
static void confineVolume(TrackingVolume &tvol, TrackingVolume *outsidevol)
protected method to confine (dense) volumes: input:
Definition: TrackingVolumeManipulator.cxx:90
Trk::Volume::volumeBounds
const VolumeBounds & volumeBounds() const
returns the volumeBounds()
Definition: Volume.h:96
Trk::tubeOuterCover
@ tubeOuterCover
Definition: BoundarySurfaceFace.h:40
Trk::tubeInnerCover
@ tubeInnerCover
Definition: BoundarySurfaceFace.h:39
Trk::BinnedArray
Definition: BinnedArray.h:38
Trk::TrackingVolume
Definition: TrackingVolume.h:119