ATLAS Offline Software
Loading...
Searching...
No Matches
ActsLayerBuilder.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef ACTSGEOMETRY_ACTSLAYERBUILDER_H
6#define ACTSGEOMETRY_ACTSLAYERBUILDER_H
7
8// PACKAGE
11
12// ATHENA
14
15// ACTS
16#include "Acts/Geometry/ILayerBuilder.hpp"
17#include "Acts/Utilities/Logger.hpp"
18#include "Acts/Utilities/BinningType.hpp"
19#include "Acts/Utilities/AxisDefinitions.hpp"
20#include "Acts/Geometry/GeometryContext.hpp"
21#include "Acts/Definitions/Units.hpp"
22
23#include <mutex>
24#include <array>
25
26class ActsTrackingGeomtrySvc;
27
28namespace InDetDD {
30}
31
32namespace Acts {
33class Surface;
34class LayerCreator;
35}
36
38class ActsLayerBuilder : public Acts::ILayerBuilder
39{
40public:
44
46
49
50 struct Config
51 {
53 std::string configurationName = "undefined";
56 std::shared_ptr<const Acts::LayerCreator> layerCreator = nullptr;
59 Acts::BinningType bTypePhi = Acts::equidistant;
62 Acts::BinningType bTypeR = Acts::equidistant;
65 Acts::BinningType bTypeZ = Acts::equidistant;
66 std::shared_ptr<ElementVector> elementStore;
67
68 std::array<double, 2> endcapEnvelopeR = {2 * Acts::UnitConstants::mm,
69 2 * Acts::UnitConstants::mm};
70 std::array<double, 2> endcapEnvelopeZ = {2 * Acts::UnitConstants::mm,
71 2 * Acts::UnitConstants::mm};
72
73 std::array<double, 2> barrelEnvelopeR = {2 * Acts::UnitConstants::mm,
74 2 * Acts::UnitConstants::mm};
75 std::array<double, 2> barrelEnvelopeZ = {2 * Acts::UnitConstants::mm,
76 2 * Acts::UnitConstants::mm};
77
82 std::vector<float> passiveBarrelLayerRadii = {};
83 std::vector<float> passiveBarrelLayerHalflengthZ = {};
84 std::vector<float> passiveBarrelLayerThickness = {};
85
86 std::pair<size_t, size_t> endcapMaterialBins = {20, 5};
87 std::pair<size_t, size_t> barrelMaterialBins = {10, 10};
88
89 std::function<bool(const Acts::GeometryContext &, Acts::AxisDirection,
90 const Acts::Surface *, const Acts::Surface *)>
92
94
95 bool objDebugOutput = false;
96
100 double numberOfBinsFactor = 5.0;
101
104
105 };
106
110 ActsLayerBuilder(const Config& cfg,
111 std::unique_ptr<const Acts::Logger> logger
112 = Acts::getDefaultLogger("GMLayBldr", Acts::Logging::INFO));
113
116
117 const Acts::LayerVector
118 negativeLayers(const Acts::GeometryContext& gctx) const override;
119
120 const Acts::LayerVector
121 centralLayers(const Acts::GeometryContext& gctx) const override;
122
123 const Acts::LayerVector
124 positiveLayers(const Acts::GeometryContext& gctx) const override;
125
126
128 // const std::string&
129 // identification() const final;
130
133 void
135
137 // Config
138 // getConfiguration() const;
139
142 {
143 return m_cfg;
144 }
145
146 virtual
147 const std::string&
148 identification() const override
149 {
150 return m_cfg.configurationName;
151 }
152
154 void
155 setLogger(std::unique_ptr<const Acts::Logger> logger);
156
157private:
160
162 const Acts::Logger&
163 logger() const
164 {
165 return *m_logger;
166 }
167
168 std::vector<std::shared_ptr<const ActsDetectorElement>>
169 getDetectorElements() const;
170
172 std::unique_ptr<const Acts::Logger> m_logger;
173
175 //std::vector<std::shared_ptr<const ActsDetectorElement>> m_elementStore;
176
177
178 // Private helper method : build layers
179 // @param layers is goint to be filled
180 // @param type is the indication which ones to build -1 | 0 | 1
181 void
182 buildBarrel(const Acts::GeometryContext& gctx, Acts::LayerVector& layersOutput) const;
183
184 void
185 buildEndcap(const Acts::GeometryContext& gctx, Acts::LayerVector& layersOutput, int type = 0) const;
186
187};
188
189std::ostream& operator<<(std::ostream& os, const ActsLayerBuilder::Mode& mode);
190
191#endif
Helper to hold elements for deletion.
std::ostream & operator<<(std::ostream &os, const ActsLayerBuilder::Mode &mode)
Define macros for attributes used to control the static checker.
Helper to hold elements for deletion.
ActsElementVector ElementVector
void setConfiguration(const Config &cfg)
Name identification.
const ActsLayerBuilder::Config & getConfiguration() const
get the configuration object
void buildBarrel(const Acts::GeometryContext &gctx, Acts::LayerVector &layersOutput) const
~ActsLayerBuilder()
Destructor.
void setLogger(std::unique_ptr< const Acts::Logger > logger)
set logging instance
const Acts::LayerVector centralLayers(const Acts::GeometryContext &gctx) const override
void buildEndcap(const Acts::GeometryContext &gctx, Acts::LayerVector &layersOutput, int type=0) const
std::unique_ptr< const Acts::Logger > m_logger
logging instance
const Acts::LayerVector positiveLayers(const Acts::GeometryContext &gctx) const override
const Acts::LayerVector negativeLayers(const Acts::GeometryContext &gctx) const override
std::vector< std::shared_ptr< const ActsDetectorElement > > getDetectorElements() const
virtual const std::string & identification() const override
const Acts::Logger & logger() const
Private access to the logger.
ActsLayerBuilder(const Config &cfg, std::unique_ptr< const Acts::Logger > logger=Acts::getDefaultLogger("GMLayBldr", Acts::Logging::INFO))
Constructor.
Config m_cfg
configuration object
Base class for Pixel and SCT Detector managers.
Message Stream Member.
Definition HitInfo.h:33
nested configuration struct for steering of the layer builder
std::string configurationName
string based identification
std::array< double, 2 > endcapEnvelopeZ
std::vector< float > passiveBarrelLayerHalflengthZ
std::vector< float > passiveBarrelLayerThickness
double numberOfBinsFactor
controls how many bins are created for the sensitive surface grid.
Acts::BinningType bTypeZ
the binning type of the contained surfaces in z (equidistant/arbitrary)
std::pair< size_t, size_t > endcapMaterialBins
std::vector< float > passiveBarrelLayerRadii
the specifications for building additional passive cylinders in the barrel region: for each cylinder ...
std::shared_ptr< const Acts::LayerCreator > layerCreator
std::array< double, 2 > barrelEnvelopeZ
const InDetDD::SiDetectorManager * mng
std::array< double, 2 > barrelEnvelopeR
Acts::BinningType bTypeR
the binning type of the contained surfaces in r (equidistant/arbitrary)
std::shared_ptr< ElementVector > elementStore
std::array< double, 2 > endcapEnvelopeR
std::pair< size_t, size_t > barrelMaterialBins
Acts::BinningType bTypePhi
the binning type of the contained surfaces in phi (equidistant/arbitrary)
double numberOfInnermostLayerBinsFactor
Special treatment for the innermost pixel layer to have more control on bin size to account for shall...
std::function< bool(const Acts::GeometryContext &, Acts::AxisDirection, const Acts::Surface *, const Acts::Surface *)> surfaceMatcher