ATLAS Offline Software
Loading...
Searching...
No Matches
TrackingGeometry.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4
6// TrackingGeometry.h, (c) ATLAS Detector software
8
9#ifndef TRKGEOMETRY_TRACKINGGEOMETRY_H
10#define TRKGEOMETRY_TRACKINGGEOMETRY_H
11
12// Amg
14// Trk
17// CLASS DEF
19// STL
20#include <map>
21// ATH_MSG macros
23//boost
24#include <ranges>
25
27
28class MsgStream;
29
30// must be known to declare friend class
31namespace Muon {
33}
34
35namespace Trk {
36
40
47
48class TrackingVolume;
49class Layer;
50class MaterialProperties;
51
66{
67
69 friend class GeometryBuilder;
70
71 friend class GeometryBuilderCond;
72
73public:
74
76 TrackingGeometry(TrackingVolume* highestVolume,
77 NavigationLevel navlevel = globalSearch);
79 virtual ~TrackingGeometry();
80
84
85
88
90 std::vector<const Trk::DetachedTrackingVolume*>
92
95 const Amg::Vector3D& gp) const;
96
98 const TrackingVolume* trackingVolume(const std::string& name) const;
99
101 const Layer* associatedLayer(const Amg::Vector3D& gp) const;
102
104 const Layer* nextLayer(const Amg::Vector3D& gp,
105 const Amg::Vector3D& mom,
106 bool skipNavLayer = false) const;
107
109 template<class T>
112 const BoundaryCheck& bchk = true) const;
114 static bool atVolumeBoundary(const Amg::Vector3D& gp,
115 const TrackingVolume* vol,
116 double tol);
117
119 static bool atVolumeBoundary(const Amg::Vector3D& gp,
120 const Amg::Vector3D& mom,
121 const TrackingVolume* vol,
122 const TrackingVolume*& nextVol,
124 double tol);
125
127 const std::map<Layer*, int>& boundaryLayers() ;
128 auto boundaryLayers() const;
129
130 size_t numBoundaryLayers() const;
134
136 void printVolumeHierarchy(MsgStream& msgstream) const;
137
140 void indexStaticLayers(GeometrySignature geosit, int offset = 0);
141
142 void dump(MsgStream& out, const std::string& head) const;
143
144 // get ownership of Muon Tracking Geometry Elements
145 void addToGarbage(std::vector<std::unique_ptr<Trk::DetachedTrackingVolume>>&& garbageVec);
146 void addToGarbage(std::vector<std::unique_ptr<Trk::TrackingVolume>>&& garbageVec);
147
148
149 private:
152 void sign(GeometrySignature geosit, GeometryType geotype = Static);
153
158 void compactify(MsgStream& msgstream, TrackingVolume* vol = nullptr);
159
162 void synchronizeLayers(MsgStream& msgstream, TrackingVolume* vol = nullptr);
163
166
169 TrackingVolume* mvol = nullptr,
170 int lvl = 0);
171
175
177 void printVolumeInformation(MsgStream& msgstream,
178 const TrackingVolume& tvol,
179 int lvl) const;
180
181 static void dumpLayer(MsgStream& out,
182 const std::string& head,
183 const Layer* layer);
184
187
189 std::map<Layer*, int> m_boundaryLayers;
190
192 std::map<const std::string, const TrackingVolume*> m_trackingVolumes;
193
196
203 std::vector<std::unique_ptr<DetachedTrackingVolume>> m_detachedVolGarbage{};
204 std::vector<std::unique_ptr<TrackingVolume>> m_trkVolumeGarbage{};
205
206};
207
208} // end of namespace
210CLASS_DEF(Trk::TrackingGeometry, 167645219, 1)
211#include "AthenaKernel/CondCont.h"
213
214#endif // TRKGEOMETRY_TRACKINGGEOMETRY_H
#define CONDCONT_MIXED_DEF(...)
Definition CondCont.h:1446
macros to associate a CLID to a type
#define CLASS_DEF(NAME, CID, VERSION)
associate a clid and a version to a type eg
Define macros for attributes used to control the static checker.
The Muon::MuonTrackingGeometryBuilderCond retrieves MuonStationBuilder and MuonInertMaterialBuilder f...
The BoundaryCheck class allows to steer the way surface boundaries are used for inside/outside checks...
Base Class for a Detector Layer in the Tracking realm.
Definition Layer.h:72
The TrackingGeometry class is the owner of the constructed TrackingVolumes.
std::vector< const Trk::DetachedTrackingVolume * > lowestDetachedTrackingVolumes(const Amg::Vector3D &gp) const
return the vector of lowest detached tracking Volume(->overlaps)
const TrackingVolume * trackingVolume(const std::string &name) const
return the tracking Volume by name, 0 if it doesn't exist
virtual ~TrackingGeometry()
Destructor.
LayerIntersection< Amg::Vector3D > closestMaterialLayer(const T &pars, PropDirection pDir=Trk::alongMomentum, const BoundaryCheck &bchk=true) const
Closest Material Layer - used for the mapping option.
void addToGarbage(std::vector< std::unique_ptr< Trk::DetachedTrackingVolume > > &&garbageVec)
NavigationLevel navigationLevel() const
Return the Navigation Level - only one TrackingGeometry can have full association to GeoModel.
TrackingVolume * m_world
The known world - and the beam.
const Layer * nextLayer(const Amg::Vector3D &gp, const Amg::Vector3D &mom, bool skipNavLayer=false) const
Forward the next Layer information.
auto boundaryLayers() const
const Layer * associatedLayer(const Amg::Vector3D &gp) const
Forward the associated Layer information.
static bool atVolumeBoundary(const Amg::Vector3D &gp, const TrackingVolume *vol, double tol)
check position at volume boundary
std::map< Layer *, int > m_boundaryLayers
The unique boundary Layers.
static void dumpLayer(MsgStream &out, const std::string &head, const Layer *layer)
const std::map< Layer *, int > & boundaryLayers()
Return the unique BoundarySurfaces with MaterialInformation.
friend class GeometryBuilder
Give the GeometryBuilder friend rights.
void registerTrackingVolumes(TrackingVolume &tvol, TrackingVolume *mvol=nullptr, int lvl=0)
private method to register recursively the tracking volumes
friend class GeometryBuilderCond
const TrackingVolume * highestTrackingVolume() const
return the world
std::vector< std::unique_ptr< DetachedTrackingVolume > > m_detachedVolGarbage
In some cases the Tracking Geometry needs to keep certain objectss alive delete them at the end of it...
std::vector< std::unique_ptr< TrackingVolume > > m_trkVolumeGarbage
void registerNavigationLevel(NavigationLevel navlevel)
private method the Navigation Level
void indexStaticLayers(GeometrySignature geosit, int offset=0)
indexLayers : method to re-set the index of the layers, depending on geometrySignature
void compactify(MsgStream &msgstream, TrackingVolume *vol=nullptr)
Geometry Builder busineess: set all contained surfaces TG owned - this should save memory and avoid s...
const TrackingVolume * lowestTrackingVolume(const Amg::Vector3D &gp) const
return the lowest tracking Volume
const TrackingVolume * lowestStaticTrackingVolume(const Amg::Vector3D &gp) const
return the lowest static tracking Volume
void sign(GeometrySignature geosit, GeometryType geotype=Static)
Geometry Builder busineess: the geometry builder has to sign.
void synchronizeLayers(MsgStream &msgstream, TrackingVolume *vol=nullptr)
Geometry Builder business: synchronize all layers to enclosed volume dimensions.
void printVolumeInformation(MsgStream &msgstream, const TrackingVolume &tvol, int lvl) const
print VolumeInformation with Level
NavigationLevel m_navigationLevel
The Navigation level for identification.
TrackingVolume * highestTrackingVolume()
void printVolumeHierarchy(MsgStream &msgstream) const
Print the summary of volume Hierarchy of the TrackingGeometry.
size_t numBoundaryLayers() const
TrackingVolume * checkoutHighestTrackingVolume()
private method to be called from GeometryBuilder: return the world with ownership
std::map< const std::string, const TrackingVolume * > m_trackingVolumes
The Volumes in a map for later finding.
TrackingGeometry(TrackingVolume *highestVolume, NavigationLevel navlevel=globalSearch)
Constructor.
Full Volume description used in Tracking, it inherits from Volume to get the geometrical structure,...
std::string head(std::string s, const std::string &pattern)
head of a string
Eigen::Matrix< double, 3, 1 > Vector3D
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
Ensure that the ATLAS eigen extensions are properly loaded.
PropDirection
PropDirection, enum for direction of the propagation.
@ alongMomentum
NavigationLevel
destinguishes an association TrackingGeometry with one for global search
FullIntersection< Layer, Surface, T > LayerIntersection
-event-from-file