File SeedFinderOrthogonal.hpp¶
-
namespace Acts
Note
This file is foreseen for the
Geometry
module to replaceExtent
Note
this is foreseen for the ‘Geometry’ module
-
template<typename external_spacepoint_t>
class SeedFinderOrthogonal - #include <Acts/Seeding/SeedFinderOrthogonal.hpp>
Public Types
-
using internal_sp_t = InternalSpacePoint<external_spacepoint_t>
The spacepoint type used by this seeder internally.
-
using seed_t = Seed<external_spacepoint_t>
The seed type used by this seeder internally.
-
using tree_t = KDTree<NDims, internal_sp_t*, ActsScalar, std::array, 4>
The k-d tree type used by this seeder internally, which is three-dimensional, contains internal spacepoint pointers, uses the Acts scalar type for coordinates, stores its coordinates in std::arrays, and has leaf size 4.
Public Functions
-
SeedFinderOrthogonal(const Acts::SeedFinderOrthogonalConfig<external_spacepoint_t> &config)
Construct a new orthogonal seed finder.
- Parameters
config – The configuration parameters for this seed finder.
-
SeedFinderOrthogonal() = default
-
SeedFinderOrthogonal(const SeedFinderOrthogonal<external_spacepoint_t>&) = delete
-
~SeedFinderOrthogonal() = default
Destroy the orthogonal seed finder object.
-
template<typename input_container_t, typename output_container_t, typename callable_t>
void createSeeds(const Acts::SeedFinderOptions &options, const input_container_t &spacePoints, output_container_t &out_cont, callable_t &&extract_coordinates) const Perform seed finding, appending seeds to a container.
This method performs seed finding through an orthogonal range search strategy. This strategy differs from binning approaches because it selects seeds constructively rather than destructively; instead of trying a large number of possible space point combinations and then rejecting many of them, this algorithm tries to only consider valid seed candidates to reduce combinatorics.
In addition, this algorithm replaces the binning step used in other seed finding algorithms with the construction of a k-d tree, which allows us to efficiently search for space points within a given range.
The core idea behind this algorithm is to create axis-aligned bounding boxes around the region of validity for a seed candidate (be it a bottom spacepoint for a given middle, a top for a given middle, a middle for a given bottom, or any other combination), and then searching the detector volume for points that lie inside that AABB.
- Template Parameters
input_container_t – The type of the input spacepoint container.
output_container_t – The type of the output seed container.
- Parameters
options – frequently changing configuration (like beam position)
spacePoints – The input spacepoints from which to create seeds.
out_cont – The output container to write seeds to.
extract_coordinates – User-defined function for extracting global position and covariance of the external space point
-
template<typename input_container_t, typename callable_t>
std::vector<seed_t> createSeeds(const Acts::SeedFinderOptions &options, const input_container_t &spacePoints, callable_t &&extract_coordinates) const Perform seed finding, returning a new container of seeds.
This is a filterCandidates method for scenarios where a non-inserter API is more ergonomic. In general, the inserter-based method should be preferred as it is more flexible and usually more performant. For more information about the seeding algorithm, please see that function.
- Template Parameters
input_container_t – The type of the input spacepoint container.
- Parameters
options – frequently changing configuration (like beam position)
spacePoints – The input spacepoints from which to create seeds.
extract_coordinates – User-defined function for extracting global position and covariance of the external space point
- Returns
A vector of seeds.
-
SeedFinderOrthogonal<external_spacepoint_t> &operator=(const SeedFinderOrthogonal<external_spacepoint_t>&) = default
Public Static Attributes
-
static constexpr std::size_t NDims = 3
Set the number of dimensions in which to embed points.
This is just 3 for now (phi, r, and z), but we might want to increase or decrease this number in the future.
Private Types
Private Functions
-
tree_t createTree(const std::vector<internal_sp_t*> &spacePoints) const¶
Create a k-d tree from a set of spacepoints.
- Parameters
spacePoints – The spacepoints to create a tree from.
- Returns
A k-d tree containing the given spacepoints.
-
void filterCandidates(const SeedFinderOptions &options, internal_sp_t &middle, std::vector<internal_sp_t*> &bottom, std::vector<internal_sp_t*> &top, SeedFilterState seedFilterState, CandidatesForMiddleSp<InternalSpacePoint<external_spacepoint_t>> &candidates_collector) const¶
Filter potential candidate pairs, and output seeds into an iterator.
- Parameters
options – frequently changing configuration (like beam position)
middle – The (singular) middle spacepoint.
bottom – The (vector of) candidate bottom spacepoints.
top – The (vector of) candidate top spacepoints.
seedFilterState – holds quantities used in seed filter
candidates_collector – The container to write the resulting seed candidates to.
-
template<typename output_container_t>
void processFromMiddleSP(const SeedFinderOptions &options, const tree_t &tree, output_container_t &out_cont, const typename tree_t::pair_t &middle_p) const¶ Search for seeds starting from a given middle space point.
- Parameters
options – frequently changing configuration (like beam position)
tree – The k-d tree to use for searching.
out_cont – The container write output seeds to.
middle_p – The middle spacepoint to find seeds for.
- Template Parameters
NDims – Number of dimensions for our spatial embedding (probably 3).
output_container_t – Type of the output container.
-
bool validTuple(const SeedFinderOptions &options, const internal_sp_t &low, const internal_sp_t &high) const¶
Check whether two spacepoints form a valid tuple.
This method checks whether the cuts that we have for pairs of space points hold.
Warning
This method checks ONLY those constraints that cannot be exactly represented as bounding boxes. Thus, this method should not be used on pairs of points that were not generated using a constrained spatial search strategy.
- Parameters
options – frequently changing configuration (like beam position)
low – The lower spacepoint.
high – The upper spacepoint.
- Returns
True if the two points form a valid pair, false otherwise.
-
tree_t::range_t validTupleOrthoRangeHL(const internal_sp_t &high) const¶
Return the AABB rearch range for a given spacepoint, searching downward.
This function calculates an axis-aligned bounding box around the volume of validity for the next spacepoint in a pair, given that the upper spacepoint is given. Thus, this method either takes a middle spacepoint and returns a range for the bottom spacepoint, or it takes a top spacepoint and returns the range for the middle spacepoint.
- Parameters
high – The upper spacepoint to find a partner for.
- Returns
An N-dimensional axis-aligned search range.
-
tree_t::range_t validTupleOrthoRangeLH(const internal_sp_t &low) const¶
Return the AABB rearch range for a given spacepoint, searching upwards.
This function calculates an axis-aligned bounding box around the volume of validity for the next spacepoint in a pair, given that the lower spacepoint is given. Thus, this method either takes a bottom spacepoint and returns a range for the middle spacepoint, or it takes a middle spacepoint and returns the range for the top spacepoint.
- Parameters
low – The lower spacepoint to find a partner for.
- Returns
An N-dimensional axis-aligned search range.
Private Members
-
Acts::SeedFinderOrthogonalConfig<external_spacepoint_t> m_config¶
The configuration for the seeding algorithm.
-
using internal_sp_t = InternalSpacePoint<external_spacepoint_t>
-
template<typename external_spacepoint_t>