Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-26 08:01:18

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
0008 
0009 #pragma once
0010 
0011 #include "Acts/Definitions/Units.hpp"
0012 #include "Acts/Seeding/GbtsBinning.hpp"
0013 #include "Acts/Seeding/GbtsLayerConnection.hpp"
0014 #include "Acts/Seeding/GbtsLayerDescription.hpp"
0015 #include "Acts/Seeding/detail/GbtsLayer.hpp"
0016 #include "Acts/Utilities/Logger.hpp"
0017 
0018 #include <cstdint>
0019 #include <map>
0020 #include <optional>
0021 #include <span>
0022 #include <vector>
0023 
0024 namespace Acts::Experimental {
0025 
0026 class GbtsNodeStorage;
0027 class GbtsTrackingFilter;
0028 class GraphBasedTrackSeeder;
0029 
0030 /// z0 range two eta bins must share a trajectory within, which fixes the bin
0031 /// table. A separate cut from `GraphBasedTrackSeeder::Config::minZ0`.
0032 struct GbtsZ0Range final {
0033   /// Minimum z0.
0034   float min = -168.0f * UnitConstants::mm;
0035   /// Maximum z0.
0036   float max = 168.0f * UnitConstants::mm;
0037 };
0038 
0039 /// Geometry helper built from layers and connectors.
0040 class GbtsGeometry final {
0041  public:
0042   /// Constructor
0043   /// @param layerDescriptions Layer descriptions for the layers
0044   /// @param layerConnections Pairs of layers the seeder may connect
0045   /// @param etaBinWidth Width of the eta bins each layer is split into
0046   /// @param z0Range z0 range the bin table is built against
0047   /// @param logger Logging instance, only used during construction
0048   GbtsGeometry(std::span<const GbtsLayerDescription> layerDescriptions,
0049                std::span<const GbtsLayerConnection> layerConnections,
0050                float etaBinWidth, const GbtsZ0Range& z0Range = {},
0051                const Logger& logger = getDummyLogger());
0052 
0053   /// Get the number of layers the geometry was built from
0054   /// @return The layer count
0055   std::size_t numLayers() const { return m_layers.size(); }
0056 
0057   /// Get the number of eta bins across all layers
0058   /// @return The bin count
0059   std::uint32_t numBins() const { return m_nEtaBins; }
0060 
0061   /// Resolve a layer id into the index GbtsNodeStorage::insert takes.
0062   /// @param id Layer id, as the layer descriptions carry it
0063   /// @return The layer's index, or nullopt if this geometry has no such layer
0064   std::optional<GbtsLayerIndex> layerIndex(GbtsExperimentLayerId id) const;
0065 
0066   /// Get the description a layer was built from
0067   /// @param idx Layer index
0068   /// @return Reference to the layer description
0069   const GbtsLayerDescription& layerDescription(GbtsLayerIndex idx) const {
0070     return layerByIndex(idx).layerDescription();
0071   }
0072 
0073   /// Get the eta binning the geometry gave a layer
0074   /// @param idx Layer index
0075   /// @return Reference to the layer's binning
0076   const GbtsLayerBinning& layerBinning(GbtsLayerIndex idx) const {
0077     return layerByIndex(idx).binning();
0078   }
0079 
0080   /// Get the eta bin pairs the graph is built over, in build order
0081   /// @return The bin groups
0082   std::span<const GbtsBinGroup> binGroups() const { return m_binGroups; }
0083 
0084  private:
0085   // The layer object is shared only with the classes that build the graph.
0086   friend class GbtsNodeStorage;
0087   friend class GbtsTrackingFilter;
0088   friend class GraphBasedTrackSeeder;
0089 
0090   /// Get layer by ID
0091   /// @param id Layer ID
0092   /// @return Pointer to layer or nullptr
0093   const detail::GbtsLayer* layerById(GbtsExperimentLayerId id) const;
0094 
0095   /// Get layer by index
0096   /// @param idx Layer index
0097   /// @return Reference to layer
0098   const detail::GbtsLayer& layerByIndex(GbtsLayerIndex idx) const;
0099 
0100   /// @param layerDescription Layer description for the layer
0101   /// @param bin0 Starting bin index
0102   /// @return Reference to the newly added layer
0103   const detail::GbtsLayer& createLayer(
0104       const GbtsLayerDescription& layerDescription, std::uint32_t bin0);
0105 
0106   /// Eta bin width
0107   float m_etaBinWidth{};
0108 
0109   /// Layer array
0110   std::vector<detail::GbtsLayer> m_layers;
0111   /// Layer per user ID map
0112   std::map<GbtsExperimentLayerId, GbtsLayerIndex> m_layerFromUserIdMap;
0113   /// Number of eta bins
0114   std::uint32_t m_nEtaBins{};
0115 
0116   /// Bin groups
0117   std::vector<GbtsBinGroup> m_binGroups;
0118 };
0119 
0120 }  // namespace Acts::Experimental