5#ifndef ACTSTRK_GRIDTRIPLETSEEDINGTOOL_GRIDTRIPLETSEEDINGTOOL_H
6#define ACTSTRK_GRIDTRIPLETSEEDINGTOOL_GRIDTRIPLETSEEDINGTOOL_H
17#include "Acts/EventData/SeedContainer.hpp"
18#include "Acts/EventData/SpacePointContainer.hpp"
19#include "Acts/Seeding/BroadTripletSeedFilter.hpp"
20#include "Acts/Seeding/CylindricalSpacePointGrid.hpp"
21#include "Acts/Seeding/SphericalSpacePointGrid.hpp"
22#include "Acts/Seeding/TripletSeeder.hpp"
33 :
public extends<AthAlgTool, ActsTrk::ISeedingTool> {
36 const IInterface *parent);
41 const std::vector<const xAOD::SpacePointContainer *>
42 &spacePointCollections,
43 const Eigen::Vector3f &beamSpotPos,
float bFieldInZ,
48 this,
"doSeedQualitySelection",
true,
49 "Select seed according to quality criteria"};
53 this,
"sphericalGrid",
false,
54 "Use spherical grid instead of cylindrical grid for seeding"};
58 Gaudi::Property<float>
m_minPt{
this,
"minPt", 900. * Acts::UnitConstants::MeV,
59 "lower pT cutoff for seeds"};
61 "cot of maximum theta angle"};
62 Gaudi::Property<float>
m_zMin{
this,
"zMin", -3000. * Acts::UnitConstants::mm,
63 "limiting location of measurements"};
64 Gaudi::Property<float>
m_zMax{
this,
"zMax", 3000. * Acts::UnitConstants::mm,
65 "limiting location of measurements"};
68 this,
"etaMin", -3.,
"Eta range minimum (for spherical grid only)"};
70 this,
"etaMax", 3.,
"Eta range maximum (for spherical grid only)"};
73 this,
"deltaRMax", 280. * Acts::UnitConstants::mm,
74 "maximum distance in r between two measurements within one "
77 2. * Acts::UnitConstants::mm,
78 "maximum impact parameter"};
82 {-3000., -2700., -2500., -1400., -925., -500., -250., 250., 500., 925.,
83 1400., 2500., 2700, 3000.},
84 "enable non equidistant binning in z"};
88 {-3., -1.8, -0.6, 0.6, 1.8, 3.},
89 "enable non equidistant binning in eta (for spherical grid only)"};
93 {0., 1100 * Acts::UnitConstants::mm},
94 "enable non equidistant binning in radius"};
96 this,
"gridRMax", 320. * Acts::UnitConstants::mm,
97 "radial extension of subdetector to be used in grid building"};
99 -std::numbers::pi_v<float>,
100 "phi min for space point grid formation"};
102 std::numbers::pi_v<float>,
103 "phi max for space point grid formation"};
105 this,
"phiBinDeflectionCoverage", 3,
106 "sets of consecutive phi bins to cover full deflection of minimum pT "
109 "max number of bins"};
112 Gaudi::Property<float>
m_rMax{
this,
"rMax", 320. * Acts::UnitConstants::mm,
113 "limiting location of measurements"};
115 this,
"binSizeR", 1. * Acts::UnitConstants::mm,
116 "defining radial bin for space point sorting"};
118 this,
"deltaRMin", 20. * Acts::UnitConstants::mm,
119 "minimum distance in r between two measurements within one "
122 this,
"deltaRMinTopSP", 6. * Acts::UnitConstants::mm,
123 "minimum distance in r between middle and top SP"};
125 this,
"deltaRMaxTopSP", 280. * Acts::UnitConstants::mm,
126 "maximum distance in r between middle and top SP"};
128 this,
"deltaRMinBottomSP", 6. * Acts::UnitConstants::mm,
129 "minimum distance in r between middle and top SP"};
131 this,
"deltaRMaxBottomSP", 150. * Acts::UnitConstants::mm,
132 "maximum distance in r between middle and top SP"};
134 this,
"deltaZMax", 600,
135 "maximum distance in z between two measurements within one seed"};
137 this,
"collisionRegionMin", -200. * Acts::UnitConstants::mm,
138 "limiting location of collision region in z"};
140 this,
"collisionRegionMax", 200. * Acts::UnitConstants::mm,
141 "limiting location of collision region in z"};
143 this,
"useHVCollisionRegion",
false,
144 "restrict collision region by Hough vertex position"};
146 this,
"hvCollisionRegionTolerance", 10. * Acts::UnitConstants::mm,
147 "size of collision region when using Hough vertex"};
149 this,
"sigmaScattering", 2.,
150 "how many sigmas of scattering angle should be considered"};
152 this,
"maxPtScattering", 10e6,
153 "Upper pt limit for scattering calculation"};
155 this,
"radLengthPerSeed", 0.098045,
156 "average radiation lengths of material on the length of a seed. used for "
159 this,
"maxSeedsPerSpM", 4,
160 "In dense environments many seeds may be found per middle space point. "
161 "Only seeds with the highest weight will be kept if this limit is "
164 this,
"interactionPointCut",
true,
165 "Enable cut on the compatibility between interaction point and SPs"};
168 "zBinsCustomLooping",
169 {2, 3, 4, 5, 12, 11, 10, 9, 7, 6, 8},
170 "defines order of z bins for looping; entries are 1-based local bin "
171 "indices, i.e. within 1..(zBinEdges.size()-1), and must not repeat. "
172 "Listing a subset skips the remaining bins, empty means all bins in "
173 "their natural order"};
176 "rBinsCustomLooping",
178 "defines order of r bins for looping; entries are 1-based local bin "
179 "indices, i.e. within 1..(rBinEdges.size()-1), and must not repeat. "
180 "Listing a subset skips the remaining bins, empty means all bins in "
181 "their natural order"};
183 this,
"useVariableMiddleSPRange",
true,
184 "Enable variable range to search for middle SPs"};
201 "radial range for middle SP"};
203 this,
"deltaRMiddleMinSPRange", 10.,
"delta R for middle SP range (min)"};
205 this,
"deltaRMiddleMaxSPRange", 10.,
"delta R for middle SP range (max)"};
207 "run seed confirmation"};
209 this,
"seedConfCentralZMin", -250. * Acts::UnitConstants::mm,
210 "minimum z for central seed confirmation "};
212 this,
"seedConfCentralZMax", 250. * Acts::UnitConstants::mm,
213 "maximum z for central seed confirmation "};
215 this,
"seedConfCentralRMax", 140. * Acts::UnitConstants::mm,
216 "maximum r for central seed confirmation "};
218 this,
"seedConfCentralNTopLargeR", 1,
219 "nTop for large R central seed confirmation"};
221 this,
"seedConfCentralNTopSmallR", 2,
222 "nTop for small R central seed confirmation"};
224 this,
"seedConfCentralMinBottomRadius", 60 * Acts::UnitConstants::mm,
225 "Minimum radius for bottom SP in seed confirmation"};
227 this,
"seedConfCentralMaxZOrigin", 150 * Acts::UnitConstants::mm,
228 "Maximum zOrigin in seed confirmation"};
230 this,
"seedConfCentralMinImpact", 1. * Acts::UnitConstants::mm,
231 "Minimum impact parameter for seed confirmation"};
233 this,
"seedConfForwardZMin", -3000. * Acts::UnitConstants::mm,
234 "minimum z for forward seed confirmation "};
236 this,
"seedConfForwardZMax", 3000. * Acts::UnitConstants::mm,
237 "maximum z for forward seed confirmation "};
239 this,
"seedConfForwardRMax", 140. * Acts::UnitConstants::mm,
240 "maximum r for forward seed confirmation "};
242 this,
"seedConfForwardNTopLargeR", 1,
243 "nTop for large R forward seed confirmation"};
245 this,
"seedConfForwardNTopSmallR", 2,
246 "nTop for small R forward seed confirmation"};
248 this,
"seedConfForwardMinBottomRadius", 60 * Acts::UnitConstants::mm,
249 "Minimum radius for bottom SP in seed confirmation"};
251 this,
"seedConfForwardMaxZOrigin", 150 * Acts::UnitConstants::mm,
252 "Maximum zOrigin in seed confirmation"};
254 this,
"seedConfForwardMinImpact", 1. * Acts::UnitConstants::mm,
255 "Minimum impact parameter for seed confirmation"};
257 this,
"useDetailedDoubleMeasurementInfo",
false,
258 "enable use of double measurement details"};
261 this,
"toleranceParam", 1.1 * Acts::UnitConstants::mm,
262 "tolerance parameter used to check the compatibility of SPs coordinates "
265 this,
"maxStripDeltaCotTheta", 1e10f,
266 "maximum allowed |cotTheta_bottom - cotTheta_top| pre-filter for strip "
267 "triplets before expensive coordinate checks"};
269 Gaudi::Property<float>
m_phiMin{
this,
"phiMin", -std::numbers::pi_v<float>,
271 Gaudi::Property<float>
m_phiMax{
this,
"phiMax", std::numbers::pi_v<float>,
273 Gaudi::Property<float>
m_rMin{
this,
"rMin", 0 * Acts::UnitConstants::mm,
""};
274 Gaudi::Property<float>
m_zAlign{
this,
"zAlign", 0 * Acts::UnitConstants::mm,
276 Gaudi::Property<float>
m_rAlign{
this,
"rAlign", 0 * Acts::UnitConstants::mm,
282 this,
"impactWeightFactor", 100.,
283 "the impact parameters (d0) is multiplied by this factor and subtracted "
287 this,
"compatSeedWeight", 100.,
288 "seed weight increased by this value if a compatible seed has been "
291 this,
"compatSeedLimit", 3,
292 "how often do you want to increase the weight of a seed for finding a "
295 this,
"seedWeightIncrement", 0.,
"increment in seed weight if needed"};
297 this,
"numSeedIncrement", 10e6,
298 "increment in seed weight is applied if the number of compatible seeds "
299 "is larger than numSeedIncrement"};
301 this,
"seedConfirmationInFilter",
true,
"run seed confirmation"};
303 this,
"maxSeedsPerSpMConf", 5,
304 "Maximum number of lower quality seeds in seed confirmation."};
306 this,
"maxQualitySeedsPerSpMConf", 5,
307 "Maximum number of quality seeds for each middle-bottom SP-duplet in "
308 "seed confirmation."};
310 this,
"useDeltaRorTopRadius",
true,
311 "use deltaR (top radius - middle radius) instead of top radius"};
313 this,
"deltaInvHelixDiameter", 0.00003 * 1. / Acts::UnitConstants::mm,
314 "the allowed delta between two inverted seed radii for them to be "
315 "considered compatible"};
317 this,
"absDeltaEtaWeightFactor", 0.,
318 "weight factor for abs(delta-eta) penalty between seed direction and "
319 "beamspot-to-PCA direction (0 = disabled, typical LRT value: 10)"};
321 this,
"absDeltaEtaMinImpact", 2. * Acts::UnitConstants::mm,
322 "minimum impact parameter to apply abs(delta-eta) weight"};
341 "vector containing the map of z bins in the top layers"};
344 "zBinNeighborsBottom",
358 "vector containing the map of z bins in the top layers"};
361 this,
"numPhiNeighbors", 0,
362 "number of eta bin neighbors at each side of the current bin that will "
363 "be used to search for SPs"};
369 "vector containing the map of radius bins in the top layers"};
372 "rBinNeighborsBottom",
374 "vector containing the map of radius bins in the bottom layers"};
376 this,
"numPhiNeighbors", 1,
377 "number of phi bin neighbors at each side of the current bin that will "
378 "be used to search for SPs"};
387 this,
"doubletDPhiCut",
false,
388 "apply the per-pair azimuthal-swing doublet cut"};
390 this,
"doubletDPhiD0Max", -1.,
391 "impact parameter bounding the doublet phi swing; negative uses "
394 this,
"doubletDPhiCap", 10.,
"cap on the displaced phi-swing term [rad]"};
396 this,
"doubletDPhiConst", 0.015,
397 "constant term of the prompt doublet phi window [rad]"};
399 this,
"doubletDPhiSlope", 2.0e-4,
400 "curvature term of the prompt doublet phi window [rad/mm]"};
403 this,
"stateVectorReserveSize", 500,
404 "Size of the initial Seeding State internal vectors"};
407 45. * Acts::UnitConstants::mm};
410 std::variant<Acts::CylindricalSpacePointGrid::Config,
411 Acts::Experimental::SphericalSpacePointGrid::Config>
434 const std::vector<float> &spAsinD0OverR,
435 const Acts::ConstSpacePointProxy &middle,
436 const Acts::ConstSpacePointProxy &other,
437 float cotTheta,
bool isBottomCandidate)
const;
440 const Acts::ConstSpacePointProxy &spM,
441 const Acts::Range1D<float> &rMiddleSpRange)
const;
443 template <
typename Gr
idType>
445 const std::vector<const xAOD::SpacePointContainer *>
446 &spacePointCollections,
447 const Eigen::Vector3f &beamSpotPos,
float bFieldInZ,
449 GridType::Config gridCfg)
const;
452 this,
"inputHoughVtx",
"",
"input vertex container"};
This is an Identifier helper class for the Pixel subdetector.
Property holding a SG store/key/clid from which a ReadHandle is made.
This is an Identifier helper class for the Pixel subdetector.
Property holding a SG store/key/clid from which a ReadHandle is made.
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...