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;
46 std::is_const< typename value_type::ValueType >::value,
47 typename std::remove_const< typename value_type::ValueType >::type,
48 typename value_type::ValueType
53 const std::string& name,
54 const IInterface* parent);
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<
71 std::is_pointer< typename spacepoint_iterator_t::value_type >::value,
72 typename std::remove_const< typename std::remove_pointer< typename spacepoint_iterator_t::value_type >::type >
::type,
73 typename std::remove_const< typename spacepoint_iterator_t::value_type >::type
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"};
103 Gaudi::Property< float >
m_minPt {
this,
"minPt", 900. * Acts::UnitConstants::MeV,
104 "lower pT cutoff for seeds"};
106 "cot of maximum theta angle"};
107 Gaudi::Property< float >
m_zMin {
this,
"zMin", -3000. * Acts::UnitConstants::mm,
108 "limiting location of measurements"};
109 Gaudi::Property< float >
m_zMax {
this,
"zMax", 3000. * Acts::UnitConstants::mm,
110 "limiting location of measurements"};
111 Gaudi::Property< float >
m_deltaRMax {
this,
"deltaRMax", 280. * Acts::UnitConstants::mm,
112 "maximum distance in r between two measurements within one seed"};
113 Gaudi::Property< float >
m_impactMax {
this,
"impactMax", 2. * Acts::UnitConstants::mm,
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"};
118 Gaudi::Property< std::vector< float > >
m_rBinEdges {
this,
"rBinEdges", {0., 1100 * Acts::UnitConstants::mm},
119 "enable non equidistant binning in radius"};
120 Gaudi::Property< float >
m_gridRMax {
this,
"gridRMax", 320. * Acts::UnitConstants::mm,
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"};
131 Gaudi::Property< float >
m_rMax {
this,
"rMax", 320. * Acts::UnitConstants::mm,
132 "limiting location of measurements"};
133 Gaudi::Property< float >
m_binSizeR {
this,
"binSizeR", 1. * Acts::UnitConstants::mm,
134 "defining radial bin for space point sorting"};
135 Gaudi::Property< float >
m_deltaRMin {
this,
"deltaRMin", 20. * Acts::UnitConstants::mm,
136 "minimum distance in r between two measurements within one seed"};
137 Gaudi::Property< float >
m_deltaRMinTopSP {
this,
"deltaRMinTopSP", 6. * Acts::UnitConstants::mm,
138 "minimum distance in r between middle and top SP"};
139 Gaudi::Property< float >
m_deltaRMaxTopSP {
this,
"deltaRMaxTopSP", 280. * Acts::UnitConstants::mm,
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"};
227 Gaudi::Property<float>
m_toleranceParam {
this,
"toleranceParam", 1.1 * Acts::UnitConstants::mm,
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>,
""};
231 Gaudi::Property<float>
m_rMin {
this,
"rMin", 0 * Acts::UnitConstants::mm,
""};
232 Gaudi::Property<float>
m_zAlign {
this,
"zAlign", 0 * Acts::UnitConstants::mm,
""};
233 Gaudi::Property<float>
m_rAlign {
this,
"rAlign", 0 * Acts::UnitConstants::mm,
""};
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};
292 Gaudi::Property<float>
m_ExpCutrMin {
this,
"SpSelectionExpCutrMin", 45. * Acts::UnitConstants::mm};
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);
373 if (isBottomCandidate and other.radius() <
m_ExpCutrMin and
374 absCotTheta > cotThetaEta120 and
375 absCotTheta < cotThetaEta360) {
This is an Identifier helper class for the Pixel subdetector.
This is an Identifier helper class for the Pixel subdetector.
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...