5 #ifndef ACTSTRKSEEDINGTOOL_SEEDINGTOOL_H
6 #define ACTSTRKSEEDINGTOOL_SEEDINGTOOL_H
12 # pragma GCC diagnostic ignored "-Wstringop-overread"
23 #include "Acts/Definitions/Units.hpp"
24 #include "Acts/Definitions/Common.hpp"
25 #include "Acts/Definitions/Algebra.hpp"
26 #include "Acts/Seeding/SpacePointGrid.hpp"
27 #include "Acts/Utilities/GridBinFinder.hpp"
28 #include "Acts/Seeding/BinnedGroup.hpp"
29 #include "Acts/Seeding/SeedFinderConfig.hpp"
30 #include "Acts/Seeding/SeedFilterConfig.hpp"
31 #include "Acts/Seeding/SeedFilter.hpp"
32 #include "Acts/Seeding/SeedFinder.hpp"
33 #include "Acts/EventData/Seed.hpp"
40 public extends<AthAlgTool, ActsTrk::ISeedingTool> {
42 using value_type =
typename Acts::SpacePointContainer<ActsTrk::SpacePointCollector, Acts::detail::RefHolder>::SpacePointProxyType;
47 typename value_type::ValueType
52 const std::string&
name,
61 const Acts::SpacePointContainer<ActsTrk::SpacePointCollector, Acts::detail::RefHolder>& spContainer,
62 const Acts::Vector3& beamSpotPos,
63 const Acts::Vector3& bField,
67 template<
typename spacepo
int_iterator_t>
69 using type =
typename std::conditional<
76 template<
typename external_iterator_t >
79 external_iterator_t spEnd,
80 const Acts::Vector3& beamSpotPos,
81 const Acts::Vector3& bField,
82 DataVector< Acts::Seed< external_type, 3ul > >& seeds )
const;
90 Acts::SeedFinder< value_type, Acts::CylindricalSpacePointGrid<value_type> >
m_finder;
96 "Select seed according to quality criteria"};
100 "lower pT cutoff for seeds"};
102 "cot of maximum theta angle"};
104 "limiting location of measurements"};
106 "limiting location of measurements"};
108 "maximum distance in r between two measurements within one seed"};
110 "maximum impact parameter"};
111 Gaudi::Property< std::vector< float > >
m_zBinEdges {
this,
"zBinEdges",
112 {-3000., -2700., -2500., -1400., -925., -500., -250., 250., 500., 925., 1400., 2500., 2700, 3000.},
113 "enable non equidistant binning in z"};
115 "enable non equidistant binning in radius"};
117 "radial extension of subdetector to be used in grid building"};
118 Gaudi::Property< float >
m_gridPhiMin {
this,
"gridPhiMin", -std::numbers::pi_v<float>,
119 "phi min for space point grid formation"};
120 Gaudi::Property< float >
m_gridPhiMax {
this,
"gridPhiMax", std::numbers::pi_v<float>,
121 "phi max for space point grid formation"};
123 "sets of consecutive phi bins to cover full deflection of minimum pT particle"};
124 Gaudi::Property< int >
m_maxPhiBins {
this,
"maxPhiBins", 200,
"max number of bins"};
128 "limiting location of measurements"};
130 "defining radial bin for space point sorting"};
132 "minimum distance in r between two measurements within one seed"};
134 "minimum distance in r between middle and top SP"};
136 "maximum distance in r between middle and top SP"};
138 "minimum distance in r between middle and top SP"};
140 "maximum distance in r between middle and top SP"};
142 "maximum distance in z between two measurements within one seed"};
144 "limiting location of collision region in z"};
146 "limiting location of collision region in z"};
148 "how many sigmas of scattering angle should be considered"};
150 "Upper pt limit for scattering calculation"};
152 "average radiation lengths of material on the length of a seed. used for scattering"};
154 "In dense environments many seeds may be found per middle space point. Only seeds with the highest weight will be kept if this limit is reached."};
156 "Enable cut on the compatibility between interaction point and SPs"};
158 {2, 3, 4, 5, 12, 11, 10, 9, 7, 6, 8} ,
"defines order of z bins for looping"};
160 "defines order of r bins for looping"};
162 "Enable variable range to search for middle SPs"};
163 Gaudi::Property< std::vector<std::vector<double>> >
m_rRangeMiddleSP {
this,
"rRangeMiddleSP",
164 {{40.0, 90.0}, {40.0, 90.0}, {40.0, 200.0}, {46.0, 200.0}, {46.0, 200.0}, {46.0, 250.0}, {46.0, 250.0}, {46.0, 250.0}, {46.0, 200.0}, {46.0, 200.0}, {40.0, 200.0}, {40.0, 90.0}, {40.0, 90.0}},
165 "radial range for middle SP"};
167 "delta R for middle SP range (min)"};
169 "delta R for middle SP range (max)"};
171 "run seed confirmation"};
173 "minimum z for central seed confirmation "};
176 "maximum z for central seed confirmation "};
179 "maximum r for central seed confirmation "};
182 "nTop for large R central seed confirmation"};
185 "nTop for small R central seed confirmation"};
188 "Minimum radius for bottom SP in seed confirmation"};
191 "Maximum zOrigin in seed confirmation"};
194 "Minimum impact parameter for seed confirmation"};
197 "minimum z for forward seed confirmation "};
200 "maximum z for forward seed confirmation "};
203 "maximum r for forward seed confirmation "};
206 "nTop for large R forward seed confirmation"};
209 "nTop for small R forward seed confirmation"};
212 "Minimum radius for bottom SP in seed confirmation"};
215 "Maximum zOrigin in seed confirmation"};
218 "Minimum impact parameter for seed confirmation"};
221 "enable use of double measurement details"};
224 "tolerance parameter used to check the compatibility of SPs coordinates in xyz"};
225 Gaudi::Property<float>
m_phiMin {
this,
"phiMin", -std::numbers::pi_v<float>,
""};
226 Gaudi::Property<float>
m_phiMax {
this,
"phiMax", std::numbers::pi_v<float>,
""};
234 "the impact parameters (d0) is multiplied by this factor and subtracted from weight"};
237 "seed weight increased by this value if a compatible seed has been found"};
239 "how often do you want to increase the weight of a seed for finding a compatible seed"};
241 "increment in seed weight if needed"};
243 "increment in seed weight is applied if the number of compatible seeds is larger than numSeedIncrement"};
245 "run seed confirmation"};
247 "Maximum number of lower quality seeds in seed confirmation."};
249 "Maximum number of quality seeds for each middle-bottom SP-duplet in seed confirmation."};
251 "use deltaR (top radius - middle radius) instead of top radius"};
253 "the allowed delta between two inverted seed radii for them to be considered compatible"};
259 {{0, 0}, {-1, 0}, {-2, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 2} , {0, 1}, {0, 0}},
260 "vector containing the map of z bins in the top layers"};
262 {{0, 0}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 1}, {0, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {0, 0}},
263 "vector containing the map of z bins in the top layers"};
264 Gaudi::Property< std::vector<std::pair<int, int>> >
m_rBinNeighborsTop{
this,
"rBinNeighborsTop", {{0, 0}},
265 "vector containing the map of radius bins in the top layers"};
267 "vector containing the map of radius bins in the bottom layers"};
269 "number of phi bin neighbors at each side of the current bin that will be used to search for SPs"};
282 std::unique_ptr<const Acts::Logger>
m_logger {
nullptr};
288 float r = sp.radius();
289 float zabs = std::abs(sp.z());
306 float fastTrackingCotThetaMax = 1.5;
310 (
cotTheta > fastTrackingCotThetaMax or
311 cotTheta < -fastTrackingCotThetaMax)) {