5 #ifndef ACTSTRKSEEDINGTOOL_SEEDINGTOOL_H
6 #define ACTSTRKSEEDINGTOOL_SEEDINGTOOL_H
12 # pragma GCC diagnostic ignored "-Wstringop-overread"
22 #include "Acts/Definitions/Units.hpp"
23 #include "Acts/Definitions/Common.hpp"
24 #include "Acts/Definitions/Algebra.hpp"
25 #include "Acts/Seeding/SpacePointGrid.hpp"
26 #include "Acts/Utilities/GridBinFinder.hpp"
27 #include "Acts/Seeding/BinnedGroup.hpp"
28 #include "Acts/Seeding/SeedFinderConfig.hpp"
29 #include "Acts/Seeding/SeedFilterConfig.hpp"
30 #include "Acts/Seeding/SeedFilter.hpp"
31 #include "Acts/Seeding/SeedFinder.hpp"
32 #include "Acts/EventData/Seed.hpp"
41 public extends<AthAlgTool, ActsTrk::ISeedingTool> {
43 using value_type =
typename Acts::SpacePointContainer<ActsTrk::SpacePointCollector, Acts::detail::RefHolder>::SpacePointProxyType;
48 typename value_type::ValueType
53 const std::string&
name,
62 const Acts::SpacePointContainer<ActsTrk::SpacePointCollector, Acts::detail::RefHolder>& spContainer,
63 const Acts::Vector3& beamSpotPos,
64 const Acts::Vector3& bField,
68 template<
typename spacepo
int_iterator_t>
70 using type =
typename std::conditional<
77 template<
typename external_iterator_t >
80 external_iterator_t spEnd,
81 const Acts::Vector3& beamSpotPos,
82 const Acts::Vector3& bField,
94 Acts::SeedFinder< value_type, Acts::CylindricalSpacePointGrid<value_type> >
m_finder;
100 "Select seed according to quality criteria"};
104 "lower pT cutoff for seeds"};
106 "cot of maximum theta angle"};
108 "limiting location of measurements"};
110 "limiting location of measurements"};
112 "maximum distance in r between two measurements within one seed"};
114 "maximum impact parameter"};
115 Gaudi::Property< std::vector< float > >
m_zBinEdges {
this,
"zBinEdges",
116 {-3000., -2700., -2500., -1400., -925., -500., -250., 250., 500., 925., 1400., 2500., 2700, 3000.},
117 "enable non equidistant binning in z"};
119 "enable non equidistant binning in radius"};
121 "radial extension of subdetector to be used in grid building"};
122 Gaudi::Property< float >
m_gridPhiMin {
this,
"gridPhiMin", -std::numbers::pi_v<float>,
123 "phi min for space point grid formation"};
124 Gaudi::Property< float >
m_gridPhiMax {
this,
"gridPhiMax", std::numbers::pi_v<float>,
125 "phi max for space point grid formation"};
127 "sets of consecutive phi bins to cover full deflection of minimum pT particle"};
128 Gaudi::Property< int >
m_maxPhiBins {
this,
"maxPhiBins", 200,
"max number of bins"};
132 "limiting location of measurements"};
134 "defining radial bin for space point sorting"};
136 "minimum distance in r between two measurements within one seed"};
138 "minimum distance in r between middle and top SP"};
140 "maximum distance in r between middle and top SP"};
142 "minimum distance in r between middle and top SP"};
144 "maximum distance in r between middle and top SP"};
146 "maximum distance in z between two measurements within one seed"};
148 "limiting location of collision region in z"};
150 "limiting location of collision region in z"};
152 "how many sigmas of scattering angle should be considered"};
154 "Upper pt limit for scattering calculation"};
156 "average radiation lengths of material on the length of a seed. used for scattering"};
158 "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."};
160 "Enable cut on the compatibility between interaction point and SPs"};
162 {2, 3, 4, 5, 12, 11, 10, 9, 7, 6, 8} ,
"defines order of z bins for looping"};
164 "defines order of r bins for looping"};
166 "Enable variable range to search for middle SPs"};
167 Gaudi::Property< std::vector<std::vector<double>> >
m_rRangeMiddleSP {
this,
"rRangeMiddleSP",
168 {{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}},
169 "radial range for middle SP"};
171 "delta R for middle SP range (min)"};
173 "delta R for middle SP range (max)"};
175 "run seed confirmation"};
177 "minimum z for central seed confirmation "};
180 "maximum z for central seed confirmation "};
183 "maximum r for central seed confirmation "};
186 "nTop for large R central seed confirmation"};
189 "nTop for small R central seed confirmation"};
192 "Minimum radius for bottom SP in seed confirmation"};
195 "Maximum zOrigin in seed confirmation"};
198 "Minimum impact parameter for seed confirmation"};
201 "minimum z for forward seed confirmation "};
204 "maximum z for forward seed confirmation "};
207 "maximum r for forward seed confirmation "};
210 "nTop for large R forward seed confirmation"};
213 "nTop for small R forward seed confirmation"};
216 "Minimum radius for bottom SP in seed confirmation"};
219 "Maximum zOrigin in seed confirmation"};
222 "Minimum impact parameter for seed confirmation"};
225 "enable use of double measurement details"};
228 "tolerance parameter used to check the compatibility of SPs coordinates in xyz"};
229 Gaudi::Property<float>
m_phiMin {
this,
"phiMin", -std::numbers::pi_v<float>,
""};
230 Gaudi::Property<float>
m_phiMax {
this,
"phiMax", std::numbers::pi_v<float>,
""};
238 "the impact parameters (d0) is multiplied by this factor and subtracted from weight"};
241 "seed weight increased by this value if a compatible seed has been found"};
243 "how often do you want to increase the weight of a seed for finding a compatible seed"};
245 "increment in seed weight if needed"};
247 "increment in seed weight is applied if the number of compatible seeds is larger than numSeedIncrement"};
249 "run seed confirmation"};
251 "Maximum number of lower quality seeds in seed confirmation."};
253 "Maximum number of quality seeds for each middle-bottom SP-duplet in seed confirmation."};
255 "use deltaR (top radius - middle radius) instead of top radius"};
257 "the allowed delta between two inverted seed radii for them to be considered compatible"};
263 {{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}},
264 "vector containing the map of z bins in the top layers"};
266 {{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}},
267 "vector containing the map of z bins in the top layers"};
268 Gaudi::Property< std::vector<std::pair<int, int>> >
m_rBinNeighborsTop{
this,
"rBinNeighborsTop", {{0, 0}},
269 "vector containing the map of radius bins in the top layers"};
271 "vector containing the map of radius bins in the bottom layers"};
273 "number of phi bin neighbors at each side of the current bin that will be used to search for SPs"};
277 Gaudi::Property< int >
m_stateVectorReserveSize {
this,
"stateVectorReserveSize", 500,
"Size of the initial Seeding State internal vectors"};
288 std::unique_ptr<const Acts::Logger>
m_logger {
nullptr};
296 float r = sp.radius();
297 float zabs = std::abs(sp.z());
298 float absCotTheta = zabs /
r;
312 static constexpr
float cotThetaEta120 = 1.5095;
313 if (absCotTheta < cotThetaEta120)
317 static constexpr
float cotThetaEta340 = 14.9654;
318 if (absCotTheta < cotThetaEta340 and
325 static constexpr
float cotThetaEta220 = 4.4571;
326 if (absCotTheta > cotThetaEta220 and
331 static constexpr
float cotThetaEta260 = 6.6947;
332 if (absCotTheta > cotThetaEta260 and
337 static constexpr
float cotThetaEta320 = 12.2459;
338 if (absCotTheta > cotThetaEta320 and
343 static constexpr
float cotThetaEta400 = 27.2899;
344 if (absCotTheta > cotThetaEta400)
353 float cotTheta,
bool isBottomCandidate)
const {
359 if (std::abs(middle.z()) > 1500 and
360 middle.radius() > 100 and middle.radius() < 150) {
369 static constexpr
float cotThetaEta120 = 1.5095;
370 static constexpr
float cotThetaEta360 = 18.2855;
372 float absCotTheta = std::abs(
cotTheta);
374 absCotTheta > cotThetaEta120 and
375 absCotTheta < cotThetaEta360) {