File indexing completed on 2025-07-05 08:11:30
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "Acts/Geometry/PassiveLayerBuilder.hpp"
0010
0011 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/Geometry/CylinderLayer.hpp"
0013 #include "Acts/Geometry/DiscLayer.hpp"
0014 #include "Acts/Geometry/Layer.hpp"
0015 #include "Acts/Surfaces/CylinderBounds.hpp"
0016 #include "Acts/Surfaces/RadialBounds.hpp"
0017 #include "Acts/Surfaces/Surface.hpp"
0018
0019 #include <cstddef>
0020 #include <ostream>
0021 #include <utility>
0022
0023 namespace Acts {
0024
0025 PassiveLayerBuilder::PassiveLayerBuilder(
0026 const PassiveLayerBuilder::Config& plConfig,
0027 std::unique_ptr<const Logger> logger)
0028 : m_cfg(), m_logger(std::move(logger)) {
0029 setConfiguration(plConfig);
0030 }
0031
0032 void PassiveLayerBuilder::setConfiguration(
0033 const PassiveLayerBuilder::Config& plConfig) {
0034
0035 m_cfg = plConfig;
0036 }
0037
0038 void PassiveLayerBuilder::setLogger(std::unique_ptr<const Logger> newLogger) {
0039 m_logger = std::move(newLogger);
0040 }
0041
0042 const LayerVector PassiveLayerBuilder::positiveLayers(
0043 const GeometryContext& gctx) const {
0044 return endcapLayers(gctx, 1);
0045 }
0046
0047 const LayerVector PassiveLayerBuilder::negativeLayers(
0048 const GeometryContext& gctx) const {
0049 return endcapLayers(gctx, -1);
0050 }
0051
0052 const LayerVector PassiveLayerBuilder::endcapLayers(
0053 const GeometryContext& , int side) const {
0054 LayerVector eLayers;
0055
0056 std::size_t numpnLayers = m_cfg.posnegLayerPositionZ.size();
0057 if (numpnLayers != 0u) {
0058 ACTS_DEBUG("Configured to build " << numpnLayers
0059 << " passive layers on side :" << side);
0060 eLayers.reserve(numpnLayers);
0061
0062 for (std::size_t ipnl = 0; ipnl < numpnLayers; ++ipnl) {
0063
0064 ACTS_VERBOSE("- build layers "
0065 << (ipnl)
0066 << " at = " << side * m_cfg.posnegLayerPositionZ.at(ipnl)
0067 << " and rMin/rMax = " << m_cfg.posnegLayerRmin.at(ipnl)
0068 << " / " << m_cfg.posnegLayerRmax.at(ipnl));
0069
0070 std::shared_ptr<const DiscBounds> dBounds =
0071 std::make_shared<const RadialBounds>(m_cfg.posnegLayerRmin.at(ipnl),
0072 m_cfg.posnegLayerRmax.at(ipnl));
0073
0074 const Transform3 eTransform(
0075 Translation3(0., 0., side * m_cfg.posnegLayerPositionZ.at(ipnl)));
0076
0077 MutableLayerPtr eLayer = DiscLayer::create(
0078 eTransform, dBounds, nullptr, m_cfg.posnegLayerThickness.at(ipnl));
0079
0080
0081 std::shared_ptr<const ISurfaceMaterial> material = nullptr;
0082
0083 if (!m_cfg.posnegLayerMaterial.empty()) {
0084
0085 material = m_cfg.posnegLayerMaterial.at(ipnl);
0086
0087 eLayer->surfaceRepresentation().assignSurfaceMaterial(material);
0088 }
0089
0090 eLayers.push_back(eLayer);
0091 }
0092 }
0093 return eLayers;
0094 }
0095
0096 const LayerVector PassiveLayerBuilder::centralLayers(
0097 const GeometryContext& ) const {
0098 LayerVector cLayers;
0099
0100 std::size_t numcLayers = m_cfg.centralLayerRadii.size();
0101 if (numcLayers != 0u) {
0102 ACTS_DEBUG("Configured to build " << numcLayers
0103 << " passive central layers.");
0104 cLayers.reserve(numcLayers);
0105
0106 for (std::size_t icl = 0; icl < numcLayers; ++icl) {
0107
0108 ACTS_VERBOSE("- build layer "
0109 << icl
0110 << " with radius = " << m_cfg.centralLayerRadii.at(icl)
0111 << " and halfZ = " << m_cfg.centralLayerHalflengthZ.at(icl));
0112
0113 auto cBounds = std::make_shared<const CylinderBounds>(
0114 m_cfg.centralLayerRadii[icl], m_cfg.centralLayerHalflengthZ.at(icl));
0115
0116 MutableLayerPtr cLayer =
0117 CylinderLayer::create(Transform3::Identity(), cBounds, nullptr,
0118 m_cfg.centralLayerThickness.at(icl));
0119
0120 std::shared_ptr<const ISurfaceMaterial> material = nullptr;
0121
0122 if (!m_cfg.centralLayerMaterial.empty()) {
0123
0124 material = m_cfg.centralLayerMaterial.at(icl);
0125
0126 cLayer->surfaceRepresentation().assignSurfaceMaterial(material);
0127 }
0128
0129 cLayers.push_back(cLayer);
0130 }
0131 }
0132 return cLayers;
0133 }
0134
0135 }