File indexing completed on 2026-03-28 07:45:25
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/Seeding2/GbtsLayerConnection.hpp"
0012
0013 #include <cstdint>
0014 #include <map>
0015 #include <unordered_map>
0016 #include <vector>
0017
0018 namespace Acts::Experimental {
0019
0020
0021 enum class GbtsLayerType { Barrel = 0, Endcap = 1 };
0022
0023
0024 struct GbtsLayerDescription final {
0025
0026 std::int32_t id{};
0027
0028 GbtsLayerType type{};
0029
0030 float refCoord{};
0031
0032 float minBound{};
0033
0034 float maxBound{};
0035 };
0036
0037
0038 class GbtsLayer final {
0039 public:
0040
0041
0042
0043 GbtsLayer(const GbtsLayerDescription& layerDescription, float etaBinWidth,
0044 std::int32_t bin0);
0045
0046
0047
0048
0049
0050 std::int32_t getEtaBin(float zh, float rh) const;
0051
0052
0053
0054 std::int32_t numOfBins() const { return m_bins.size(); }
0055
0056
0057
0058 const std::vector<std::int32_t>& bins() const { return m_bins; }
0059
0060
0061
0062 const GbtsLayerDescription& layerDescription() const {
0063 return m_layerDescription;
0064 }
0065
0066
0067
0068
0069
0070
0071
0072
0073 bool checkCompatibility(const GbtsLayer& otherLayer, std::uint32_t b1,
0074 std::uint32_t b2, float minZ0, float maxZ0) const;
0075
0076 private:
0077
0078 GbtsLayerDescription m_layerDescription;
0079
0080
0081 std::vector<std::int32_t> m_bins;
0082
0083 std::vector<float> m_minRadius;
0084
0085 std::vector<float> m_maxRadius;
0086
0087 std::vector<float> m_minBinCoord;
0088
0089 std::vector<float> m_maxBinCoord;
0090
0091
0092 float m_minEta{};
0093
0094 float m_maxEta{};
0095
0096 float m_etaBin{};
0097
0098 float m_r1{};
0099
0100 float m_z1{};
0101
0102 float m_r2{};
0103
0104 float m_z2{};
0105
0106 std::uint32_t m_nBins{};
0107 };
0108
0109
0110 class GbtsGeometry final {
0111
0112
0113
0114 using BinConnections =
0115 std::unordered_map<std::uint32_t, std::pair<std::vector<std::uint32_t>,
0116 std::vector<std::uint32_t>>>;
0117
0118 public:
0119
0120
0121
0122 GbtsGeometry(const std::vector<GbtsLayerDescription>& layerDescriptions,
0123 const GbtsLayerConnectionMap& layerConnections);
0124
0125
0126
0127 std::uint32_t numBins() const { return m_nEtaBins; }
0128
0129
0130
0131 std::uint32_t numLayers() const { return m_layers.size(); }
0132
0133
0134
0135 const std::vector<std::pair<std::uint32_t, std::vector<std::uint32_t>>>&
0136 binGroups() const {
0137 return m_binGroups;
0138 }
0139
0140
0141
0142
0143 const GbtsLayer* layerById(std::uint32_t id) const;
0144
0145
0146
0147
0148 const GbtsLayer& layerByIndex(std::int32_t idx) const;
0149
0150
0151
0152
0153 inline std::uint32_t layerIdByIndex(std::uint32_t idx) const {
0154 return m_layers.at(idx).layerDescription().id;
0155 }
0156
0157 private:
0158
0159
0160
0161 const GbtsLayer& createLayer(const GbtsLayerDescription& layerDescription,
0162 std::uint32_t bin0);
0163
0164
0165 float m_etaBinWidth{};
0166
0167
0168 std::vector<GbtsLayer> m_layers;
0169
0170 std::map<std::uint32_t, std::uint32_t> m_layerFromUserIdMap;
0171
0172 std::uint32_t m_nEtaBins{};
0173
0174
0175 std::vector<std::pair<std::uint32_t, std::vector<std::uint32_t>>> m_binGroups;
0176 };
0177
0178 }