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