ATLAS Offline Software
Loading...
Searching...
No Matches
TrackingGeometry.h
Go to the documentation of this file.
1 /*
2 Copyright (C) 2002-2026 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#include <memory>
26
28
29class MsgStream;
30
31// must be known to declare friend class
32namespace Muon {
34}
35
36namespace Trk {
37
41
48
49class TrackingVolume;
50class Layer;
51class MaterialProperties;
52
67{
68
70 friend class GeometryBuilder;
71
72 friend class GeometryBuilderCond;
73
74public:
75
77 TrackingGeometry(TrackingVolume* highestVolume,
78 NavigationLevel navlevel = globalSearch);
80 virtual ~TrackingGeometry();
81
85
86
89
91 std::vector<const Trk::DetachedTrackingVolume*>
93
96 const Amg::Vector3D& gp) const;
97
99 const TrackingVolume* trackingVolume(const std::string& name) const;
100
102 const Layer* associatedLayer(const Amg::Vector3D& gp) const;
103
105 const Layer* nextLayer(const Amg::Vector3D& gp,
106 const Amg::Vector3D& mom,
107 bool skipNavLayer = false) const;
108
110 template<class T>
113 const BoundaryCheck& bchk = true) const;
115 static bool atVolumeBoundary(const Amg::Vector3D& gp,
116 const TrackingVolume* vol,
117 double tol);
118
120 static bool atVolumeBoundary(const Amg::Vector3D& gp,
121 const Amg::Vector3D& mom,
122 const TrackingVolume* vol,
123 const TrackingVolume*& nextVol,
125 double tol);
126
128 const std::map<Layer*, int>& boundaryLayers() ;
129 auto boundaryLayers() const;
130
131 size_t numBoundaryLayers() const;
135
137 void printVolumeHierarchy(MsgStream& msgstream) const;
138
141 void indexStaticLayers(GeometrySignature geosit, int offset = 0);
142
143 void dump(MsgStream& out, const std::string& head) const;
144
145 // get ownership of Muon Tracking Geometry Elements
146 void addToGarbage(std::vector<std::unique_ptr<Trk::DetachedTrackingVolume>>&& garbageVec);
147 void addToGarbage(std::vector<std::unique_ptr<Trk::TrackingVolume>>&& garbageVec);
148
149
150 private:
153 void sign(GeometrySignature geosit, GeometryType geotype = Static);
154
159 void compactify(MsgStream& msgstream, TrackingVolume* vol = nullptr);
160
163 void synchronizeLayers(MsgStream& msgstream, TrackingVolume* vol = nullptr);
164
167
170 TrackingVolume* mvol = nullptr,
171 int lvl = 0);
172
176
178 void printVolumeInformation(MsgStream& msgstream,
179 const TrackingVolume& tvol,
180 int lvl) const;
181
182 static void dumpLayer(MsgStream& out,
183 const std::string& head,
184 const Layer* layer);
185
187 std::unique_ptr<TrackingVolume> m_world;
188
190 std::map<Layer*, int> m_boundaryLayers;
191
193 std::map<const std::string, const TrackingVolume*> m_trackingVolumes;
194
197
204 std::vector<std::unique_ptr<DetachedTrackingVolume>> m_detachedVolGarbage{};
205 std::vector<std::unique_ptr<TrackingVolume>> m_trkVolumeGarbage{};
206
207};
208
209} // end of namespace
211CLASS_DEF(Trk::TrackingGeometry, 167645219, 1)
212#include "AthenaKernel/CondCont.h"
214
215#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.
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.
std::unique_ptr< TrackingVolume > m_world
The known world - and the beam.
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