ATLAS Offline Software
Loading...
Searching...
No Matches
ActsSeedingConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
4from AthenaConfiguration.ComponentFactory import CompFactory
5from ActsConfig.ActsConfigFlags import SeedingStrategy
6from AthenaCommon.Utils.unixtools import find_datafile
7from ActsInterop import UnitConstants as ActsUnits
8import AthenaCommon.SystemOfUnits as GaudiUnits
9
10
11# ACTS tools
13 flags, name: str = "ActsPixelGridTripletSeedingTool",
14 **kwargs) -> ComponentAccumulator:
15 acc = ComponentAccumulator()
16
17
18 kwargs.setdefault("numSeedIncrement" , float("inf"))
19 kwargs.setdefault("deltaZMax" , float("inf"))
20 kwargs.setdefault("maxPtScattering", float("inf"))
21 kwargs.setdefault("useVariableMiddleSPRange", False)
22 kwargs.setdefault("rMax", 320. * ActsUnits.mm)
23 kwargs.setdefault("minPt", flags.Tracking.ActiveConfig.minPTSeed *
24 ActsUnits.GeV / GaudiUnits.GeV)
25 kwargs.setdefault("impactMax", flags.Tracking.ActiveConfig.maxPrimaryImpactSeed *
26 ActsUnits.mm / GaudiUnits.mm)
27 kwargs.setdefault("rBinEdges", [0, kwargs['rMax']])
28 kwargs.setdefault("rRangeMiddleSP", [
29 [0,0],
30 [140, 260],
31 [40, 260],
32 [40, 260],
33 [40, 260],
34 [40, 260],
35 [70, 260],
36 [40, 260],
37 [40, 260],
38 [40, 260],
39 [40, 260],
40 [140, 260],
41 [0, 0]])
42
43 kwargs.setdefault("useHVCollisionRegion",
44 flags.Tracking.ActiveConfig.useHoughVertexFilter)
45 kwargs.setdefault("hvCollisionRegionTolerance", 10. * ActsUnits.mm)
46 kwargs.setdefault( "inputHoughVtx",
47 "HoughVertices" if flags.Tracking.ActiveConfig.useHoughVertexFilter else "")
48
49 acc.setPrivateTools(CompFactory.ActsTrk.GridTripletSeedingTool(name, **kwargs))
50 return acc
51
53 name: str = "ActsFastPixelSeedingTool",
54 **kwargs) -> ComponentAccumulator:
55
56 kwargs.setdefault("sigmaScattering", 2.)
57 kwargs.setdefault("maxSeedsPerSpM", 3)
58 kwargs.setdefault("collisionRegionMin", -flags.Tracking.ActiveConfig.maxZImpactSeed *
59 ActsUnits.mm / GaudiUnits.mm)
60 kwargs.setdefault("collisionRegionMax", flags.Tracking.ActiveConfig.maxZImpactSeed *
61 ActsUnits.mm / GaudiUnits.mm)
62 kwargs.setdefault("maxPhiBins", 200)
63 kwargs.setdefault("gridRMax", 250 * ActsUnits.mm)
64 kwargs.setdefault("deltaRMax", 200 * ActsUnits.mm)
65 kwargs.setdefault("zBinsCustomLooping" , [2, 10, 3, 9, 6, 4, 8, 5, 7])
66 kwargs.setdefault("rRangeMiddleSP", [
67 [0.0, 0.0],
68 [60.0, 165.0],
69 [60.0, 200.0],
70 [60.0, 200.0],
71 [60.0, 260.0],
72 [60.0, 260.0],
73 [60.0, 260.0],
74 [60.0, 200.0],
75 [60.0, 200.0],
76 [60.0, 165.0],
77 [0.0, 0.0]])
78
79 kwargs.setdefault("zBinNeighborsTop", [
80 [0, 0], # -3000, -2000
81 [-1, 0], # -2000, -1400
82 [-1, 0], # -1400, -910
83 [-1, 0], # -910, -500
84 [-1, 0], # -500, -250
85 [-1, 1], # -250, 250
86 [0, 1], # 250, 500
87 [0, 1], # 500, 910
88 [0, 1], # 910, 1400
89 [0, 1], # 1400, 2000
90 [0, 0] # 2000, 3000
91 ])
92 kwargs.setdefault("zBinNeighborsBottom", [
93 [0, 0], # -3000, -2000
94 [0, 1], # -2000, -1400
95 [0, 1], # -1400, -910
96 [0, 1], # -910, -500
97 [0, 1], # -500, -250
98 [0, 0], # -250, 250
99 [-1, 0], # 250, 500
100 [-1, 0], # 500, 910
101 [-1, 0], # 910, 1400
102 [-1, 0], # 1400, 2000
103 [0, 0] # 2000, 3000
104 ])
105
106 kwargs.setdefault("zBinEdges", [-3000., -2000, -1400., -910., -500., -250., 250., 500., 910., 1400., 2000, 3000.])
107 kwargs.setdefault("useExperimentCuts", True)
108
109 kwargs.setdefault("deltaRMaxTopSP", 220 * ActsUnits.mm)
110 kwargs.setdefault("deltaRMaxBottomSP", 135 * ActsUnits.mm)
111
112 return ActsPixelGridTripletSeedingToolCfg(flags, name, **kwargs)
113
115 name: str = "ActsStripSeedingTool",
116 **kwargs) -> ComponentAccumulator:
117 acc = ComponentAccumulator()
118
119
120 kwargs.setdefault("doSeedQualitySelection", False)
121 # For SpacePointGridConfig
122 kwargs.setdefault("gridRMax", 1000. * ActsUnits.mm)
123 kwargs.setdefault("deltaRMax", 600. * ActsUnits.mm)
124 # Strip seeds use the SSS impact cut, as the legacy ITk seed maker does
125 # (maxdImpactSSS). maxPrimaryImpactSeed is the pixel seed cut.
126 kwargs.setdefault("impactMax", flags.Tracking.ActiveConfig.maxdImpactSSSSeeds[0] *
127 ActsUnits.mm / GaudiUnits.mm)
128 kwargs.setdefault("minPt", flags.Tracking.ActiveConfig.minPTSeed *
129 ActsUnits.GeV / GaudiUnits.GeV)
130 # For SeedfinderConfig
131 kwargs.setdefault("rMax", flags.Tracking.ActiveConfig.radMax)
132 kwargs.setdefault("deltaRMinTopSP", 20. * ActsUnits.mm)
133 kwargs.setdefault("deltaRMaxTopSP", 300. * ActsUnits.mm)
134 kwargs.setdefault("deltaRMinBottomSP", 20. * ActsUnits.mm)
135 kwargs.setdefault("deltaRMaxBottomSP", 300. * ActsUnits.mm)
136 kwargs.setdefault("deltaZMax", 900. * ActsUnits.mm)
137 kwargs.setdefault("interactionPointCut", False)
138 kwargs.setdefault("zBinsCustomLooping", [7, 8, 6, 9, 5, 10, 4, 11, 3, 12, 2])
139 kwargs.setdefault("deltaRMiddleMinSPRange", 30 * ActsUnits.mm)
140 kwargs.setdefault("deltaRMiddleMaxSPRange", 150 * ActsUnits.mm)
141 kwargs.setdefault("useDetailedDoubleMeasurementInfo", True)
142 kwargs.setdefault("maxPtScattering", float("inf"))
143 # For SeedFilterConfig
144 kwargs.setdefault("useDeltaRorTopRadius", False)
145 kwargs.setdefault("seedConfirmationInFilter", False)
146 kwargs.setdefault("impactWeightFactor", 1.)
147 kwargs.setdefault("compatSeedLimit", 4)
148 kwargs.setdefault("numSeedIncrement", 1.)
149 kwargs.setdefault("seedWeightIncrement", 10100.)
150 kwargs.setdefault("maxSeedsPerSpMConf", 100)
151 kwargs.setdefault("maxQualitySeedsPerSpMConf", 100)
152 # For seeding algorithm
153 kwargs.setdefault("zBinNeighborsBottom", [
154 (0,0),(0,1),(0,1),(0,1),(0,2),(0,1),(0,0),
155 (-1,0),(-2,0),(-1,0),(-1,0),(-1,0),(0,0)] )
156 # Any other
157 kwargs.setdefault("rBinEdges", [0, kwargs['rMax']])
158 kwargs.setdefault("collisionRegionMin", -flags.Tracking.ActiveConfig.maxZImpactSeed *
159 ActsUnits.mm / GaudiUnits.mm)
160 kwargs.setdefault("collisionRegionMax", flags.Tracking.ActiveConfig.maxZImpactSeed *
161 ActsUnits.mm / GaudiUnits.mm)
162 kwargs.setdefault("useHVCollisionRegion",
163 flags.Tracking.ActiveConfig.useHoughVertexFilter)
164 kwargs.setdefault("hvCollisionRegionTolerance", 10. * ActsUnits.mm)
165 kwargs.setdefault("inputHoughVtx",
166 "HoughVertices" if flags.Tracking.ActiveConfig.useHoughVertexFilter else "")
167
168 acc.setPrivateTools(CompFactory.ActsTrk.GridTripletSeedingTool(name, **kwargs))
169 return acc
170
172 name: str = "ActsLargeRadiusStripSeedingTool",
173 **kwargs) -> ComponentAccumulator:
174
175 kwargs.setdefault("interactionPointCut", True)
176 kwargs.setdefault("impactMax", flags.Tracking.ActiveConfig.maxPrimaryImpactSeed *
177 ActsUnits.mm / GaudiUnits.mm)
178
180 kwargs.setdefault("doubletDPhiCut", True)
181 kwargs.setdefault("doubletDPhiCap", 0.10)
182
184 kwargs.setdefault("stripCalibrationTolerance", 1.75)
185
186 kwargs.setdefault("doubletStripCalibrationCut", False)
187 kwargs.setdefault("doubletStripCalibrationTolerance", 2.)
188
192 kwargs.setdefault("deltaRMax", 400. * ActsUnits.mm)
193 kwargs.setdefault("collisionRegionMin", -flags.Tracking.ActiveConfig.maxZImpactSeed *
194 ActsUnits.mm / GaudiUnits.mm)
195 kwargs.setdefault("collisionRegionMax", flags.Tracking.ActiveConfig.maxZImpactSeed *
196 ActsUnits.mm / GaudiUnits.mm)
197 kwargs.setdefault("deltaRMiddleMaxSPRange", 75 * ActsUnits.mm)
198 kwargs.setdefault("deltaRMinTopSP", 50. * ActsUnits.mm)
199 kwargs.setdefault("deltaRMaxTopSP", 250. * ActsUnits.mm)
200 kwargs.setdefault("deltaRMinBottomSP", 50. * ActsUnits.mm)
201 kwargs.setdefault("deltaRMaxBottomSP", 250. * ActsUnits.mm)
202 kwargs.setdefault("deltaZMax", 850. * ActsUnits.mm)
203 kwargs.setdefault("cotThetaMax", 5.0)
204 kwargs.setdefault("maxSeedsPerSpM", 1)
205 kwargs.setdefault("maxStripDeltaCotTheta", 0.1)
206
208 kwargs.setdefault("spacePointVarianceScale", 0.5)
209 kwargs.setdefault("absDeltaEtaWeightFactor", 10.)
210 kwargs.setdefault("absDeltaEtaMinImpact", 2.)
211 kwargs.setdefault("zBinEdges", [-3000., -2500, -1400., -910., -500., -250.,
212 250., 500., 910., 1400., 2500, 3000.])
213 kwargs.setdefault("zBinsCustomLooping" , [2, 10, 3, 9, 6, 4, 8, 5, 7])
214 kwargs.setdefault("useVariableMiddleSPRange", False)
215 kwargs.setdefault("zBinNeighborsTop", [
216 [0, 0], # -3000, -2500
217 [-1, 0], # -2500, -1400
218 [-1, 0], # -1400, -910
219 [-1, 0], # -910, -500
220 [-1, 0], # -500, -250
221 [-1, 1], # -250, 250
222 [0, 1], # 250, 500
223 [0, 1], # 500, 910
224 [0, 1], # 910, 1400
225 [0, 1], # 1400, 2500
226 [0, 0] # 2500, 3000
227 ])
228 kwargs.setdefault("zBinNeighborsBottom", [
229 [0, 0], # -3000, -2500
230 [0, 1], # -2500, -1400
231 [0, 1], # -1400, -910
232 [0, 1], # -910, -500
233 [0, 1], # -500, -250
234 [0, 0], # -250, 250
235 [-1, 0], # 250, 500
236 [-1, 0], # 500, 910
237 [-1, 0], # 910, 1400
238 [-1, 0], # 1400, 2500
239 [0, 0] # 2500, 3000
240 ])
241 kwargs.setdefault("rRangeMiddleSP", [
242 [0.0, 0.0], # -3000, -2500
243 [400.0, 850.0], # -2500, -1400
244 [500.0, 800.0], # -1400, -910
245 [500.0, 800.0], # -910, -500
246 [500.0, 800.0], # -500, -250
247 [500.0, 800.0], # -250, 250
248 [500.0, 800.0], # 250, 500
249 [500.0, 800.0], # 500, 910
250 [500.0, 800.0], # 910, 1400
251 [400.0, 850.0], # 1400, 2500
252 [0.0, 0.0] # 2500, 3000
253 ])
254
255 kwargs.setdefault("seedConfirmation", True)
256 kwargs.setdefault("seedConfirmationInFilter", True)
257 kwargs.setdefault("zOriginWeightFactor", 1.)
258 kwargs.setdefault("maxSeedsPerSpMConf", 1)
259 kwargs.setdefault("maxQualitySeedsPerSpMConf", 1)
260 kwargs.setdefault("seedConfCentralZMin", -1400. * ActsUnits.mm)
261 kwargs.setdefault("seedConfCentralZMax", 1400. * ActsUnits.mm)
262 kwargs.setdefault("seedConfCentralRMax", 140. * ActsUnits.mm)
263 kwargs.setdefault("seedConfCentralNTopLargeR", 1)
264 kwargs.setdefault("seedConfCentralNTopSmallR", 0)
265 kwargs.setdefault("seedConfCentralMinBottomRadius", 0. * ActsUnits.mm)
266 kwargs.setdefault("seedConfCentralMaxZOrigin", 1500. * ActsUnits.mm)
267 kwargs.setdefault("seedConfCentralMinImpact", 200. * ActsUnits.mm)
268 kwargs.setdefault("seedConfForwardZMin", -3000. * ActsUnits.mm)
269 kwargs.setdefault("seedConfForwardZMax", 3000. * ActsUnits.mm)
270 kwargs.setdefault("seedConfForwardRMax", 140. * ActsUnits.mm)
271 kwargs.setdefault("seedConfForwardNTopLargeR", 1)
272 kwargs.setdefault("seedConfForwardNTopSmallR", 0)
273 kwargs.setdefault("seedConfForwardMinBottomRadius", 350. * ActsUnits.mm)
274 kwargs.setdefault("seedConfForwardMaxZOrigin", 1500. * ActsUnits.mm)
275 kwargs.setdefault("seedConfForwardMinImpact", 200. * ActsUnits.mm)
276
277 return ActsStripGridTripletSeedingToolCfg(flags, name, **kwargs)
278
280 name: str = "ActsGbtsLayerTool",
281 **kwargs) -> ComponentAccumulator:
282 """The GBTS layer geometry, built from the ITk readout geometry.
283
284 One instance is shared by every GBTS seeding tool: the layer indices it
285 hands out have to agree with the connection table they all read.
286 """
287 acc = ComponentAccumulator()
288 kwargs.setdefault("dumpGbtsGeometry", flags.Acts.Gbts.dumpGbtsGeometry)
289 kwargs.setdefault("geometryDump", flags.Acts.Gbts.geometryDump)
290 acc.setPrivateTools(CompFactory.ActsTrk.GbtsLayerTool(name, **kwargs))
291 return acc
292
293
295 name: str = "ActsPixelGbtsSeedingTool",
296 **kwargs) -> ComponentAccumulator:
297 acc = ComponentAccumulator()
298 if "layerTool" not in kwargs:
299 kwargs.setdefault(
300 "layerTool",
301 acc.popToolsAndMerge(ActsGbtsLayerToolCfg(flags))
302 )
303
304
305 kwargs.setdefault("usePixelLayers", True)
306 kwargs.setdefault("useStripLayers", False)
307 kwargs.setdefault("connectorInputFile" , find_datafile(flags.Acts.Gbts.connectionTable))
308 kwargs.setdefault("lutInputFile" , find_datafile("gbts_ml_pixel_barrel_loose.lut"))
309 kwargs.setdefault("minPt" , flags.Tracking.ActiveConfig.minPTSeed *
310 ActsUnits.GeV / GaudiUnits.GeV)
311 kwargs.setdefault("d0Max", flags.Tracking.ActiveConfig.maxPrimaryImpactSeed *
312 ActsUnits.mm / GaudiUnits.mm)
313 kwargs.setdefault("addTriplets", False)
314
315
316 kwargs.setdefault("tauRatioCut", 0.007)
317
318
319 kwargs.setdefault("minZ0", -flags.Tracking.ActiveConfig.maxZImpactSeed *
320 ActsUnits.mm / GaudiUnits.mm)
321 kwargs.setdefault("maxZ0", flags.Tracking.ActiveConfig.maxZImpactSeed *
322 ActsUnits.mm / GaudiUnits.mm)
323 kwargs.setdefault("filterMaxZ0", flags.Tracking.ActiveConfig.maxZImpactSeed *
324 ActsUnits.mm / GaudiUnits.mm)
325
326 acc.setPrivateTools(CompFactory.ActsTrk.GbtsSeedingTool(name, **kwargs))
327 return acc
328
330 name: str = "ActsStripGbtsSeedingTool",
331 **kwargs) -> ComponentAccumulator:
332 """GBTS strip seeding for the primary pass. ActsLargeRadiusStripGbtsSeedingToolCfg is the LRT one."""
333 acc = ComponentAccumulator()
334 if "layerTool" not in kwargs:
335 kwargs.setdefault(
336 "layerTool",
337 acc.popToolsAndMerge(ActsGbtsLayerToolCfg(flags))
338 )
339
340 kwargs.setdefault("usePixelLayers", False)
341 kwargs.setdefault("useStripLayers", True)
342 kwargs.setdefault("usePixelConnections", False)
343 kwargs.setdefault("useStripConnections", True)
344
345 kwargs.setdefault("LRTmode", False)
346
347 kwargs.setdefault("useML", False)
348 kwargs.setdefault("connectorInputFile", find_datafile(flags.Acts.Gbts.connectionTable))
349
350 kwargs.setdefault("minPt", flags.Tracking.ActiveConfig.minPTSeed *
351 ActsUnits.GeV / GaudiUnits.GeV)
352 kwargs.setdefault("d0Max", flags.Tracking.ActiveConfig.maxPrimaryImpactSeed *
353 ActsUnits.mm / GaudiUnits.mm)
354
355 kwargs.setdefault("addTriplets", True)
356 kwargs.setdefault("maxEtaAddTriplets", 3.0)
357
358
359 kwargs.setdefault("maxOuterRadius", 1100.0)
360
361 kwargs.setdefault("cutDPhiMax", 0.012)
362 kwargs.setdefault("cutDCurvMax", 0.001)
363
364
365 kwargs.setdefault("tauRatioCut", 0.014)
366 kwargs.setdefault("precutTauRatioMax", 0.018)
367
368
369 kwargs.setdefault("minZ0", -flags.Tracking.ActiveConfig.maxZImpactSeed *
370 ActsUnits.mm / GaudiUnits.mm)
371 kwargs.setdefault("maxZ0", flags.Tracking.ActiveConfig.maxZImpactSeed *
372 ActsUnits.mm / GaudiUnits.mm)
373 kwargs.setdefault("filterMaxZ0", flags.Tracking.ActiveConfig.maxZImpactSeed *
374 ActsUnits.mm / GaudiUnits.mm)
375
376
377
378 acc.setPrivateTools(CompFactory.ActsTrk.GbtsSeedingTool(name, **kwargs))
379 return acc
380
382 name: str = "ActsLargeRadiusStripGbtsSeedingTool",
383 **kwargs) -> ComponentAccumulator:
384
385 kwargs.setdefault("LRTmode", True)
386 kwargs.setdefault("connectorInputFile", find_datafile(flags.Acts.Gbts.connectionTableLrt))
387 kwargs.setdefault("filterMaxZ0", 500. * ActsUnits.mm)
388 kwargs.setdefault("cutDPhiMax", 0.07)
389 kwargs.setdefault("cutDCurvMax", 0.015)
390 kwargs.setdefault("tauRatioCut", 0.015)
391 kwargs.setdefault("minZ0", -flags.Tracking.ActiveConfig.maxZImpactSeed *
392 ActsUnits.mm / GaudiUnits.mm)
393 kwargs.setdefault("maxZ0", flags.Tracking.ActiveConfig.maxZImpactSeed *
394 ActsUnits.mm / GaudiUnits.mm)
395 kwargs.setdefault("maxOuterRadius", 1050.0)
396
397 return ActsStripGbtsSeedingToolCfg(flags, name, **kwargs)
398
399
401 name: str = "ActsGnnSeedingTool",
402 **kwargs) -> ComponentAccumulator:
403 acc = ComponentAccumulator()
404
405 if 'GnnPipelineTool' not in kwargs:
406 from ActsConfig.ActsTrackFindingConfig import ActsGnnPipelineToolCfg
407 kwargs.setdefault('GnnPipelineTool', acc.popToolsAndMerge(
408 ActsGnnPipelineToolCfg(flags, name="GnnSeedingPipeline")))
409
410 acc.setPrivateTools(CompFactory.ActsTrk.GnnSeedingTool(name, **kwargs))
411 return acc
412
413# ACTS algorithm using Athena objects upstream
415 name: str = 'PixelSeedingAlg',
416 **kwargs) -> ComponentAccumulator:
417 acc = ComponentAccumulator()
418
419 # Beam Spot Cond is a requirement
420 from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
421 acc.merge(BeamSpotCondAlgCfg(flags))
422
423 from MagFieldServices.MagFieldServicesConfig import AtlasFieldCacheCondAlgCfg
424 acc.merge(AtlasFieldCacheCondAlgCfg(flags))
425
426 from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelReadoutGeometryCfg
427 acc.merge(ITkPixelReadoutGeometryCfg(flags))
428
429 from InDetConfig.ITkActsHelpers import isFastPrimaryPass
430 useFastTracking = kwargs.get("useFastTracking", isFastPrimaryPass(flags))
431
432 if "SeedTool" not in kwargs:
433 if flags.Tracking.ActiveConfig.PixelSeedingStrategy is SeedingStrategy.Gbts:
434 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(
436 elif flags.Tracking.ActiveConfig.PixelSeedingStrategy is SeedingStrategy.Gnn:
437 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(
438 ActsGnnSeedingToolCfg(flags)))
439 elif flags.Tracking.ActiveConfig.PixelSeedingStrategy is SeedingStrategy.GridTriplet:
440 if useFastTracking:
441 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(
443 else:
444 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(
446
447 kwargs.setdefault("useFastTracking", useFastTracking)
448
449 suffix = '_Cached' if flags.Acts.useCache else ''
450 pixelSpacePoints = ['ITkPixelSpacePoints' + suffix]
451 if flags.Tracking.ActiveConfig.isSecondaryPass:
452 pixelSpacePoints = [
453 'ITk' + flags.Tracking.ActiveConfig.extension.replace("Acts", "") +
454 'PixelSpacePoints' + suffix]
455 kwargs.setdefault('InputSpacePoints', pixelSpacePoints)
456
457 kwargs.setdefault('OutputSeeds',
458 f'{flags.Tracking.ActiveConfig.extension}PixelSeeds')
459 kwargs.setdefault('UsePixel', True)
460
461 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
462 from ActsConfig.ActsMonitoringConfig import ActsITkPixelSeedingMonitoringToolCfg
463 kwargs.setdefault('MonTool', acc.popToolsAndMerge(
464 ActsITkPixelSeedingMonitoringToolCfg(flags)))
465
466 acc.addEventAlgo(CompFactory.ActsTrk.GenericSeedingAlg(
467 flags.Tracking.ActiveConfig.extension + name, **kwargs))
468 return acc
469
470
472 name: str = 'StripSeedingAlg',
473 **kwargs) -> ComponentAccumulator:
474 acc = ComponentAccumulator()
475
476 # Beam Spot Cond is a requirement
477 from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
478 acc.merge(BeamSpotCondAlgCfg(flags))
479
480 from MagFieldServices.MagFieldServicesConfig import AtlasFieldCacheCondAlgCfg
481 acc.merge(AtlasFieldCacheCondAlgCfg(flags))
482
483 from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg
484 acc.merge(ITkStripReadoutGeometryCfg(flags))
485
486 if "SeedTool" not in kwargs:
487 if flags.Tracking.ActiveConfig.StripSeedingStrategy is SeedingStrategy.Gbts:
488 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(
489 ActsLargeRadiusStripGbtsSeedingToolCfg(flags) if flags.Tracking.ActiveConfig.isLargeD0
490 else ActsStripGbtsSeedingToolCfg(flags)))
491 elif flags.Tracking.ActiveConfig.StripSeedingStrategy is SeedingStrategy.GridTriplet:
492 if flags.Tracking.ActiveConfig.isLargeD0:
493 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(
495 else:
496 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(
498
499 suffix = "_Cached" if flags.Acts.useCache else ""
500 stripSpacePoints = ['ITkStripSpacePoints' + suffix,
501 'ITkStripOverlapSpacePoints' + suffix]
502 if flags.Tracking.ActiveConfig.isSecondaryPass:
503 prefix = 'ITk' + flags.Tracking.ActiveConfig.extension.replace("Acts", "")
504 stripSpacePoints = [prefix + 'StripSpacePoints' + suffix,
505 prefix + 'StripOverlapSpacePoints' + suffix]
506 # Conversion pass does not use overlap space points
507 if flags.Tracking.ActiveConfig.extension == 'ActsConversion':
508 stripSpacePoints = [prefix + 'StripSpacePoints' + suffix]
509 kwargs.setdefault('InputSpacePoints', stripSpacePoints)
510
511 kwargs.setdefault('OutputSeeds',
512 f'{flags.Tracking.ActiveConfig.extension}StripSeeds')
513 kwargs.setdefault('UsePixel', False)
514
515 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
516 from ActsConfig.ActsMonitoringConfig import ActsITkStripSeedingMonitoringToolCfg
517 kwargs.setdefault('MonTool', acc.popToolsAndMerge(
518 ActsITkStripSeedingMonitoringToolCfg(flags)))
519
520 acc.addEventAlgo(CompFactory.ActsTrk.GenericSeedingAlg(
521 flags.Tracking.ActiveConfig.extension + name, **kwargs))
522 return acc
523
524
526 name: str = "ActsSeedToTrackCnvAlg",
527 **kwargs: dict) -> ComponentAccumulator:
528 acc = ComponentAccumulator()
529
530 kwargs.setdefault(
531 'ACTSTracksLocation',
532 f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}Tracks')
533
534 acc.addEventAlgo(CompFactory.ActsTrk.SeedToTrackCnvAlg(name, **kwargs))
535 return acc
536
537
538def ActsSeedingCfg(flags) -> ComponentAccumulator:
539 acc = ComponentAccumulator()
540
541 processPixels = flags.Tracking.ActiveConfig.useITkPixelSeeding
542 processStrips = flags.Tracking.ActiveConfig.useITkStripSeeding
543
544 if processPixels:
545 acc.merge(ActsPixelSeedingAlgCfg(flags))
546 if processStrips:
547 acc.merge(ActsStripSeedingAlgCfg(flags))
548
549 prefix = flags.Tracking.ActiveConfig.extension
550 if (flags.Tracking.ActiveConfig.storeTrackSeeds or flags.Acts.Seeds.doAnalysis):
551 if processPixels:
552 from ActsConfig.ActsAnalysisConfig import ActsPixelSeedsToTrackParamsAlgCfg
553 acc.merge(ActsPixelSeedsToTrackParamsAlgCfg(
554 flags, name = prefix + 'PixelSeedsToTrackParamsAlg',
555 InputSeedContainerKey = prefix + 'PixelSeeds',
556 OutputTrackParamsCollectionKey = prefix + 'PixelEstimatedTrackParams'))
557
558 if processStrips:
559 from ActsConfig.ActsAnalysisConfig import ActsStripSeedsToTrackParamsAlgCfg
560 acc.merge(ActsStripSeedsToTrackParamsAlgCfg(
561 flags, name = prefix + 'StripSeedsToTrackParamsAlg',
562 InputSeedContainerKey = prefix + 'StripSeeds',
563 OutputTrackParamsCollectionKey = prefix + 'StripEstimatedTrackParams'))
564
565 if flags.Acts.Seeds.doAnalysis:
566 if processPixels:
567 from ActsConfig.ActsAnalysisConfig import (
568 ActsPixelSeedAnalysisAlgCfg, ActsPixelEstimatedTrackParamsAnalysisAlgCfg)
569 acc.merge(ActsPixelSeedAnalysisAlgCfg(
570 flags, name = prefix + 'PixelSeedAnalysisAlg',
571 extension = prefix, InputSeedCollection = prefix + 'PixelSeeds'))
572
573 acc.merge(ActsPixelEstimatedTrackParamsAnalysisAlgCfg(
574 flags, name = prefix + 'PixelEstimatedTrackParamsAnalysisAlg',
575 extension = prefix,
576 InputTrackParamsCollection = prefix + 'PixelEstimatedTrackParams'))
577
578 if processStrips:
579 from ActsConfig.ActsAnalysisConfig import (
580 ActsStripSeedAnalysisAlgCfg, ActsStripEstimatedTrackParamsAnalysisAlgCfg)
581 acc.merge(ActsStripSeedAnalysisAlgCfg(
582 flags, name = prefix + 'StripSeedAnalysisAlg',
583 extension = prefix, InputSeedCollection = prefix + 'StripSeeds'))
584
585 acc.merge(ActsStripEstimatedTrackParamsAnalysisAlgCfg(
586 flags, name = prefix + 'StripEstimatedTrackParamsAnalysisAlg',
587 extension = prefix,
588 InputTrackParamsCollection = prefix + 'StripEstimatedTrackParams'))
589
590 if flags.Tracking.ActiveConfig.storeTrackSeeds:
591 if processPixels:
592 acc.merge(ActsStoreTrackSeedsCfg(
593 flags, processPixels=True, processStrips=False))
594 if processStrips:
595 acc.merge(ActsStoreTrackSeedsCfg(
596 flags, processPixels=False, processStrips=True))
597 if processPixels and processStrips:
598 acc.merge(ActsStoreTrackSeedsCfg(
599 flags, processPixels=True, processStrips=True))
600
601 # schedules the GBTS training algorithm
602 if flags.Acts.Gbts.Training.enable:
603 from ActsConfig.ActsTruthConfig import ActsGbtsTrainingAlgCfg
604 acc.merge(ActsGbtsTrainingAlgCfg(flags))
605
606 return acc
607
608
610 processPixels: bool,
611 processStrips: bool) -> ComponentAccumulator:
612
613 acc = ComponentAccumulator()
614
615 prefix = flags.Tracking.ActiveConfig.extension
616 if processPixels and not processStrips:
617 prefix = prefix + 'Pixel'
618 if processStrips and not processPixels:
619 prefix = prefix + 'Strip'
620 processBoth = processPixels and processStrips
621 tracks = 'SiSPTracksSeedSegments' + prefix + 'Tracks'
622
623 # Convert seed to Acts track
624 acc.merge(ActsSeedToTrackCnvAlgCfg(
625 flags, name = prefix + 'PixelSeedToTrackCnvAlg',
626 EstimatedTrackParametersKey = (
627 [prefix + 'PixelEstimatedTrackParams', prefix + 'StripEstimatedTrackParams']
628 if processBoth else [prefix + 'EstimatedTrackParams']),
629 SeedContainerKey = (
630 [prefix + 'PixelSeeds', prefix + 'StripSeeds']
631 if processBoth else [prefix + 'Seeds']),
632 ACTSTracksLocation = tracks))
633
634 # Truth
635 if flags.Tracking.doTruth:
636 from ActsConfig.ActsTruthConfig import (
637 ActsTrackToTruthAssociationAlgCfg, ActsTrackFindingValidationAlgCfg)
638 acc.merge(ActsTrackToTruthAssociationAlgCfg(
639 flags, name = prefix + 'SeedTrackToTruthAssociationAlg',
640 ACTSTracksLocation = tracks,
641 AssociationMapOut = tracks + 'ToTruthParticleAssociation'))
642
643 acc.merge(ActsTrackFindingValidationAlgCfg(
644 flags, name = prefix + 'SeedTrackFindingValidationAlg',
645 TrackToTruthAssociationMap = tracks + 'ToTruthParticleAssociation'))
646
647 # Track Particle creation and persistification
648 from InDetConfig.ITkActsParticleCreationConfig import (
649 ITkActsTrackParticleCreationCfg)
650 acc.merge(ITkActsTrackParticleCreationCfg(
651 flags,
652 TrackContainers = [tracks],
653 TrackParticleContainer = 'SiSPSeedSegments' + prefix + 'TrackParticles'))
654
655 return acc
ComponentAccumulator ActsPixelSeedingAlgCfg(flags, str name='PixelSeedingAlg', **kwargs)
ComponentAccumulator ActsGnnSeedingToolCfg(flags, str name="ActsGnnSeedingTool", **kwargs)
ComponentAccumulator ActsStripGridTripletSeedingToolCfg(flags, str name="ActsStripSeedingTool", **kwargs)
ComponentAccumulator ActsGbtsLayerToolCfg(flags, str name="ActsGbtsLayerTool", **kwargs)
ComponentAccumulator ActsSeedingCfg(flags)
ComponentAccumulator ActsSeedToTrackCnvAlgCfg(flags, str name="ActsSeedToTrackCnvAlg", **dict kwargs)
ComponentAccumulator ActsStripGbtsSeedingToolCfg(flags, str name="ActsStripGbtsSeedingTool", **kwargs)
ComponentAccumulator ActsStripSeedingAlgCfg(flags, str name='StripSeedingAlg', **kwargs)
ComponentAccumulator ActsFastPixelSeedingToolCfg(flags, str name="ActsFastPixelSeedingTool", **kwargs)
ComponentAccumulator ActsStoreTrackSeedsCfg(flags, bool processPixels, bool processStrips)
ComponentAccumulator ActsLargeRadiusStripSeedingToolCfg(flags, str name="ActsLargeRadiusStripSeedingTool", **kwargs)
ComponentAccumulator ActsLargeRadiusStripGbtsSeedingToolCfg(flags, str name="ActsLargeRadiusStripGbtsSeedingTool", **kwargs)
ComponentAccumulator ActsPixelGbtsSeedingToolCfg(flags, str name="ActsPixelGbtsSeedingTool", **kwargs)
ComponentAccumulator ActsPixelGridTripletSeedingToolCfg(flags, str name="ActsPixelGridTripletSeedingTool", **kwargs)