Warning, file /include/Acts/Seeding/SeedFinder.hpp was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/Definitions/Units.hpp"
0012 #include "Acts/EventData/SpacePointData.hpp"
0013 #include "Acts/Geometry/Extent.hpp"
0014 #include "Acts/Seeding/CandidatesForMiddleSp.hpp"
0015 #include "Acts/Seeding/InternalSeed.hpp"
0016 #include "Acts/Seeding/InternalSpacePoint.hpp"
0017 #include "Acts/Seeding/Neighbour.hpp"
0018 #include "Acts/Seeding/SeedFilter.hpp"
0019 #include "Acts/Seeding/SeedFinderConfig.hpp"
0020 #include "Acts/Seeding/SeedFinderUtils.hpp"
0021
0022 #include <array>
0023 #include <limits>
0024 #include <list>
0025 #include <map>
0026 #include <memory>
0027 #include <set>
0028 #include <string>
0029 #include <utility>
0030 #include <vector>
0031
0032 namespace Acts {
0033
0034 enum class SpacePointCandidateType : short { eBottom, eTop };
0035
0036 enum class DetectorMeasurementInfo : short { eDefault, eDetailed };
0037
0038 template <typename external_spacepoint_t, typename grid_t,
0039 typename platform_t = void*>
0040 class SeedFinder {
0041
0042
0043
0044
0045 public:
0046 struct SeedingState {
0047
0048 std::vector<InternalSpacePoint<external_spacepoint_t>*> compatBottomSP;
0049 std::vector<InternalSpacePoint<external_spacepoint_t>*> compatTopSP;
0050
0051
0052 std::vector<LinCircle> linCircleBottom;
0053
0054 std::vector<LinCircle> linCircleTop;
0055
0056
0057 std::vector<const InternalSpacePoint<external_spacepoint_t>*> topSpVec;
0058 std::vector<float> curvatures;
0059 std::vector<float> impactParameters;
0060
0061
0062 CandidatesForMiddleSp<const InternalSpacePoint<external_spacepoint_t>>
0063 candidates_collector;
0064
0065
0066 boost::container::small_vector<Acts::Neighbour<grid_t>,
0067 Acts::detail::ipow(3, grid_t::DIM)>
0068 bottomNeighbours;
0069 boost::container::small_vector<Acts::Neighbour<grid_t>,
0070 Acts::detail::ipow(3, grid_t::DIM)>
0071 topNeighbours;
0072
0073
0074 Acts::SpacePointData spacePointData;
0075 };
0076
0077
0078
0079 SeedFinder(const Acts::SeedFinderConfig<external_spacepoint_t>& config);
0080 ~SeedFinder() = default;
0081
0082
0083 SeedFinder() = default;
0084 SeedFinder(const SeedFinder<external_spacepoint_t, grid_t, platform_t>&) =
0085 delete;
0086 SeedFinder<external_spacepoint_t, grid_t, platform_t>& operator=(
0087 const SeedFinder<external_spacepoint_t, grid_t, platform_t>&) = default;
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102 template <template <typename...> typename container_t, typename sp_range_t>
0103 void createSeedsForGroup(
0104 const Acts::SeedFinderOptions& options, SeedingState& state,
0105 const grid_t& grid,
0106 std::back_insert_iterator<container_t<Seed<external_spacepoint_t>>> outIt,
0107 const sp_range_t& bottomSPs, const std::size_t middleSPs,
0108 const sp_range_t& topSPs,
0109 const Acts::Range1D<float>& rMiddleSPRange) const;
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130 template <typename sp_range_t>
0131 std::vector<Seed<external_spacepoint_t>> createSeedsForGroup(
0132 const Acts::SeedFinderOptions& options, const grid_t& grid,
0133 const sp_range_t& bottomSPs, const std::size_t middleSPs,
0134 const sp_range_t& topSPs) const;
0135
0136 private:
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152 template <Acts::SpacePointCandidateType candidateType, typename out_range_t>
0153 void getCompatibleDoublets(
0154 Acts::SpacePointData& spacePointData,
0155 const Acts::SeedFinderOptions& options, const grid_t& grid,
0156 boost::container::small_vector<Acts::Neighbour<grid_t>,
0157 Acts::detail::ipow(3, grid_t::DIM)>&
0158 otherSPsNeighbours,
0159 const InternalSpacePoint<external_spacepoint_t>& mediumSP,
0160 std::vector<LinCircle>& linCircleVec, out_range_t& outVec,
0161 const float deltaRMinSP, const float deltaRMaxSP, const float uIP,
0162 const float uIP2, const float cosPhiM, const float sinPhiM) const;
0163
0164
0165
0166
0167
0168
0169
0170
0171 template <Acts::DetectorMeasurementInfo detailedMeasurement>
0172 void filterCandidates(Acts::SpacePointData& spacePointData,
0173 const InternalSpacePoint<external_spacepoint_t>& SpM,
0174 const Acts::SeedFinderOptions& options,
0175 SeedFilterState& seedFilterState,
0176 SeedingState& state) const;
0177
0178 private:
0179 Acts::SeedFinderConfig<external_spacepoint_t> m_config;
0180 };
0181
0182 }
0183
0184 #ifndef DOXYGEN
0185 #include "Acts/Seeding/SeedFinder.ipp"
0186 #endif