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,
280 this,
"spacePointVarianceScale", 1.,
281 "scale factor applied to the space point varianceR and varianceZ before "
282 "they enter the triplet compatibility check"};
286 this,
"impactWeightFactor", 100.,
287 "the impact parameters (d0) is multiplied by this factor and subtracted "
291 this,
"compatSeedWeight", 100.,
292 "seed weight increased by this value if a compatible seed has been "
295 this,
"compatSeedLimit", 3,
296 "how often do you want to increase the weight of a seed for finding a "
299 this,
"seedWeightIncrement", 0.,
"increment in seed weight if needed"};
301 this,
"numSeedIncrement", 10e6,
302 "increment in seed weight is applied if the number of compatible seeds "
303 "is larger than numSeedIncrement"};
305 this,
"seedConfirmationInFilter",
true,
"run seed confirmation"};
307 this,
"maxSeedsPerSpMConf", 5,
308 "Maximum number of lower quality seeds in seed confirmation."};
310 this,
"maxQualitySeedsPerSpMConf", 5,
311 "Maximum number of quality seeds for each middle-bottom SP-duplet in "
312 "seed confirmation."};
314 this,
"useDeltaRorTopRadius",
true,
315 "use deltaR (top radius - middle radius) instead of top radius"};
317 this,
"deltaInvHelixDiameter", 0.00003 * 1. / Acts::UnitConstants::mm,
318 "the allowed delta between two inverted seed radii for them to be "
319 "considered compatible"};
321 this,
"absDeltaEtaWeightFactor", 0.,
322 "weight factor for abs(delta-eta) penalty between seed direction and "
323 "beamspot-to-PCA direction (0 = disabled, typical LRT value: 10)"};
325 this,
"absDeltaEtaMinImpact", 2. * Acts::UnitConstants::mm,
326 "minimum impact parameter to apply abs(delta-eta) weight"};
345 "vector containing the map of z bins in the top layers"};
348 "zBinNeighborsBottom",
362 "vector containing the map of z bins in the top layers"};
365 this,
"numPhiNeighbors", 0,
366 "number of eta bin neighbors at each side of the current bin that will "
367 "be used to search for SPs"};
373 "vector containing the map of radius bins in the top layers"};
376 "rBinNeighborsBottom",
378 "vector containing the map of radius bins in the bottom layers"};
380 this,
"numPhiNeighbors", 1,
381 "number of phi bin neighbors at each side of the current bin that will "
382 "be used to search for SPs"};
391 this,
"doubletDPhiCut",
false,
392 "apply the per-pair azimuthal-swing doublet cut"};
394 this,
"doubletDPhiD0Max", -1.,
395 "impact parameter bounding the doublet phi swing; negative uses "
398 this,
"doubletDPhiCap", 10.,
"cap on the displaced phi-swing term [rad]"};
400 this,
"doubletDPhiConst", 0.015,
401 "constant term of the prompt doublet phi window [rad]"};
403 this,
"doubletDPhiSlope", 2.0e-4,
404 "curvature term of the prompt doublet phi window [rad/mm]"};
408 this,
"doubletStripCalibrationCut",
false,
409 "reject strip doublets whose chord misses either strip pair"};
411 this,
"doubletStripCalibrationTolerance", 2.,
412 "strip calibration doublet cut tolerance [half strip lengths]"};
414 this,
"stripCalibrationTolerance", -1.,
415 "if positive, ACTS calibrates both strip SPs of a doublet against their "
416 "chord with this tolerance [half strip lengths] and uses the calibrated "
417 "positions for the doublet. Negative values disable it"};
420 this,
"stateVectorReserveSize", 500,
421 "Size of the initial Seeding State internal vectors"};
424 45. * Acts::UnitConstants::mm};
427 std::variant<Acts::CylindricalSpacePointGrid::Config,
428 Acts::Experimental::SphericalSpacePointGrid::Config>
451 const std::vector<float> &spAsinD0OverR,
452 const Acts::ConstSpacePointProxy &middle,
453 const Acts::ConstSpacePointProxy &other,
454 float cotTheta,
bool isBottomCandidate)
const;
457 const Acts::ConstSpacePointProxy &spM,
458 const Acts::Range1D<float> &rMiddleSpRange)
const;
460 template <
typename Gr
idType>
462 const std::vector<const xAOD::SpacePointContainer *>
463 &spacePointCollections,
464 const Eigen::Vector3f &beamSpotPos,
float bFieldInZ,
466 GridType::Config gridCfg)
const;
469 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...