ATLAS Offline Software
Loading...
Searching...
No Matches
ActsSeedingConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 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 ActsConfig.ActsUtilities import extractChildKwargs
7from AthenaCommon.Utils.unixtools import find_datafile
8from ActsInterop import UnitConstants as ActsUnits
9import AthenaCommon.SystemOfUnits as GaudiUnits
10
11def ActsGbtsFtfSeedingTrigToolCfg(flags,name: str = "GbtsFtfActsSeedingTool", **kwargs) -> ComponentAccumulator:
12 acc = ComponentAccumulator()
13
14 if "layerNumberTool" not in kwargs:
15 from TrigFastTrackFinder.TrigFastTrackFinderConfig import ITkTrigL2LayerNumberToolCfg
16 ntargs = {"UseNewLayerScheme" : True}
17 kwargs.setdefault("layerNumberTool",acc.popToolsAndMerge(ITkTrigL2LayerNumberToolCfg(flags,**ntargs)))
18
19 kwargs.setdefault("DoPhiFiltering", False) #no phi-filtering for full-scan tracking
20 kwargs.setdefault("UseBeamTilt", False)
21
22 isLargeD0 = flags.Tracking.ActiveConfig.extension in ["LargeD0", "ActsLargeRadius"]
23
24 kwargs.setdefault("pTmin", flags.Tracking.ActiveConfig.minPTSeed)
25 kwargs.setdefault("MaxGraphEdges", 3000000)
26 kwargs.setdefault("ConnectionFileName",
27 "binTables_ITK_RUN4_LRT.txt" if isLargeD0 else "binTables_ITK_RUN4.txt")
28
29 acc.setPrivateTools(CompFactory.GbtsFtfActsSeedingTool(name, **kwargs))
30
31 return acc
32
33
34# ACTS tools
36 name: str = "ActsPixelSeedingTool",
37 **kwargs) -> ComponentAccumulator:
38 acc = ComponentAccumulator()
39
40
41 kwargs.setdefault("numSeedIncrement" , float("inf"))
42 kwargs.setdefault("deltaZMax" , float("inf"))
43 kwargs.setdefault("maxPtScattering", float("inf"))
44 kwargs.setdefault("useVariableMiddleSPRange", False)
45 kwargs.setdefault("rMax", 320. * ActsUnits.mm)
46 kwargs.setdefault("minPt", flags.Tracking.ActiveConfig.minPTSeed / GaudiUnits.GeV * ActsUnits.GeV)
47 kwargs.setdefault("impactMax", flags.Tracking.ActiveConfig.maxPrimaryImpactSeed / GaudiUnits.mm * ActsUnits.mm)
48 kwargs.setdefault("rBinEdges", [0, kwargs['rMax']])
49 kwargs.setdefault("rRangeMiddleSP", [
50 [0,0],
51 [140, 260],
52 [40, 260],
53 [40, 260],
54 [40, 260],
55 [40, 260],
56 [70, 260],
57 [40, 260],
58 [40, 260],
59 [40, 260],
60 [40, 260],
61 [140, 260],
62 [0, 0]])
63 acc.setPrivateTools(CompFactory.ActsTrk.GridTripletSeedingTool(name, **kwargs))
64 return acc
65
67 name: str = "ActsFastPixelSeedingTool",
68 **kwargs) -> ComponentAccumulator:
69
70 kwargs.setdefault("sigmaScattering", 2.)
71 kwargs.setdefault("maxSeedsPerSpM", 3)
72 kwargs.setdefault("collisionRegionMin", -150 * ActsUnits.mm)
73 kwargs.setdefault("collisionRegionMax", 150 * ActsUnits.mm)
74 kwargs.setdefault("maxPhiBins", 200)
75 kwargs.setdefault("gridRMax", 250 * ActsUnits.mm)
76 kwargs.setdefault("deltaRMax", 200 * ActsUnits.mm)
77 kwargs.setdefault("zBinsCustomLooping" , [2, 10, 3, 9, 6, 4, 8, 5, 7])
78 kwargs.setdefault("rRangeMiddleSP", [
79 [0.0, 0.0],
80 [60.0, 165.0],
81 [60.0, 200.0],
82 [60.0, 200.0],
83 [60.0, 260.0],
84 [60.0, 260.0],
85 [60.0, 260.0],
86 [60.0, 200.0],
87 [60.0, 200.0],
88 [60.0, 165.0],
89 [0.0, 0.0]])
90
91 kwargs.setdefault("zBinNeighborsTop", [
92 [0, 0], # -3000, -2000
93 [-1, 0], # -2000, -1400
94 [-1, 0], # -1400, -910
95 [-1, 0], # -910, -500
96 [-1, 0], # -500, -250
97 [-1, 1], # -250, 250
98 [0, 1], # 250, 500
99 [0, 1], # 500, 910
100 [0, 1], # 910, 1400
101 [0, 1], # 1400, 2000
102 [0, 0] # 2000, 3000
103 ])
104 kwargs.setdefault("zBinNeighborsBottom", [
105 [0, 0], # -3000, -2000
106 [0, 1], # -2000, -1400
107 [0, 1], # -1400, -910
108 [0, 1], # -910, -500
109 [0, 1], # -500, -250
110 [0, 0], # -250, 250
111 [-1, 0], # 250, 500
112 [-1, 0], # 500, 910
113 [-1, 0], # 910, 1400
114 [-1, 0], # 1400, 2000
115 [0, 0] # 2000, 3000
116 ])
117
118 kwargs.setdefault("zBinEdges", [-3000., -2000, -1400., -910., -500., -250., 250., 500., 910., 1400., 2000, 3000.])
119 kwargs.setdefault("useExperimentCuts", True)
120
121 kwargs.setdefault("deltaRMaxTopSP", 220 * ActsUnits.mm)
122 kwargs.setdefault("deltaRMaxBottomSP", 135 * ActsUnits.mm)
123
124 return ActsPixelSeedingToolCfg(flags, name, **kwargs)
125
127 name: str = "ActsStripSeedingTool",
128 **kwargs) -> ComponentAccumulator:
129 acc = ComponentAccumulator()
130
131
132 kwargs.setdefault("doSeedQualitySelection", False)
133 # For SpacePointGridConfig
134 kwargs.setdefault("gridRMax", 1000. * ActsUnits.mm)
135 kwargs.setdefault("deltaRMax", 600. * ActsUnits.mm)
136 kwargs.setdefault("impactMax", 20. * ActsUnits.mm)
137 kwargs.setdefault("minPt", flags.Tracking.ActiveConfig.minPTSeed / GaudiUnits.GeV * ActsUnits.GeV)
138 # For SeedfinderConfig
139 kwargs.setdefault("rMax", flags.Tracking.ActiveConfig.radMax)
140 kwargs.setdefault("deltaRMinTopSP", 20. * ActsUnits.mm)
141 kwargs.setdefault("deltaRMaxTopSP", 300. * ActsUnits.mm)
142 kwargs.setdefault("deltaRMinBottomSP", 20. * ActsUnits.mm)
143 kwargs.setdefault("deltaRMaxBottomSP", 300. * ActsUnits.mm)
144 kwargs.setdefault("deltaZMax", 900. * ActsUnits.mm)
145 kwargs.setdefault("interactionPointCut", False)
146 kwargs.setdefault("zBinsCustomLooping", [7, 8, 6, 9, 5, 10, 4, 11, 3, 12, 2])
147 kwargs.setdefault("deltaRMiddleMinSPRange", 30 * ActsUnits.mm)
148 kwargs.setdefault("deltaRMiddleMaxSPRange", 150 * ActsUnits.mm)
149 kwargs.setdefault("useDetailedDoubleMeasurementInfo", True)
150 kwargs.setdefault("maxPtScattering", float("inf"))
151 # For SeedFilterConfig
152 kwargs.setdefault("useDeltaRorTopRadius", False)
153 kwargs.setdefault("seedConfirmationInFilter", False)
154 kwargs.setdefault("impactWeightFactor", 1.)
155 kwargs.setdefault("compatSeedLimit", 4)
156 kwargs.setdefault("numSeedIncrement", 1.)
157 kwargs.setdefault("seedWeightIncrement", 10100.)
158 kwargs.setdefault("maxSeedsPerSpMConf", 100)
159 kwargs.setdefault("maxQualitySeedsPerSpMConf", 100)
160 # For seeding algorithm
161 kwargs.setdefault("zBinNeighborsBottom", [(0,0),(0,1),(0,1),(0,1),(0,2),(0,1),(0,0),(-1,0),(-2,0),(-1,0),(-1,0),(-1,0),(0,0)])
162 # Any other
163 kwargs.setdefault("rBinEdges", [0, kwargs['rMax']])
164 kwargs.setdefault("collisionRegionMin", -200. * ActsUnits.mm)
165 kwargs.setdefault("collisionRegionMax", 200. * ActsUnits.mm)
166
167 acc.setPrivateTools(CompFactory.ActsTrk.GridTripletSeedingTool(name, **kwargs))
168 return acc
169
171 name: str = "ActsLargeRadiusStripSeedingTool",
172 **kwargs) -> ComponentAccumulator:
173
174 kwargs.setdefault("interactionPointCut", True)
175 kwargs.setdefault("impactMax", 300. * ActsUnits.mm)
176 kwargs.setdefault("collisionRegionMin", -500. * ActsUnits.mm)
177 kwargs.setdefault("collisionRegionMax", 500. * ActsUnits.mm)
178 kwargs.setdefault("deltaRMiddleMaxSPRange", 75 * ActsUnits.mm)
179 kwargs.setdefault("deltaRMinTopSP", 50. * ActsUnits.mm)
180 kwargs.setdefault("deltaRMaxTopSP", 250. * ActsUnits.mm)
181 kwargs.setdefault("deltaRMinBottomSP", 50. * ActsUnits.mm)
182 kwargs.setdefault("deltaRMaxBottomSP", 250. * ActsUnits.mm)
183 kwargs.setdefault("deltaZMax", 850. * ActsUnits.mm)
184 kwargs.setdefault("cotThetaMax", 6.0)
185 kwargs.setdefault("maxSeedsPerSpM", 3)
186 kwargs.setdefault("zBinEdges", [-3000., -2500, -1400., -910., -500., -250., 250., 500., 910., 1400., 2500, 3000.])
187 kwargs.setdefault("zBinsCustomLooping" , [2, 10, 3, 9, 6, 4, 8, 5, 7])
188 kwargs.setdefault("useVariableMiddleSPRange", False)
189 kwargs.setdefault("zBinNeighborsTop", [
190 [0, 0], # -3000, -2500
191 [-1, 0], # -2500, -1400
192 [-1, 0], # -1400, -910
193 [-1, 0], # -910, -500
194 [-1, 0], # -500, -250
195 [-1, 1], # -250, 250
196 [0, 1], # 250, 500
197 [0, 1], # 500, 910
198 [0, 1], # 910, 1400
199 [0, 1], # 1400, 2500
200 [0, 0] # 2500, 3000
201 ])
202 kwargs.setdefault("zBinNeighborsBottom", [
203 [0, 0], # -3000, -2500
204 [0, 1], # -2500, -1400
205 [0, 1], # -1400, -910
206 [0, 1], # -910, -500
207 [0, 1], # -500, -250
208 [0, 0], # -250, 250
209 [-1, 0], # 250, 500
210 [-1, 0], # 500, 910
211 [-1, 0], # 910, 1400
212 [-1, 0], # 1400, 2500
213 [0, 0] # 2500, 3000
214 ])
215 kwargs.setdefault("rRangeMiddleSP", [
216 [0.0, 0.0], # -3000, -2500
217 [400.0, 850.0], # -2500, -1400
218 [500.0, 800.0], # -1400, -910
219 [500.0, 800.0], # -910, -500
220 [500.0, 800.0], # -500, -250
221 [500.0, 800.0], # -250, 250
222 [500.0, 800.0], # 250, 500
223 [500.0, 800.0], # 500, 910
224 [500.0, 800.0], # 910, 1400
225 [400.0, 850.0], # 1400, 2500
226 [0.0, 0.0] # 2500, 3000
227 ])
228
229 return ActsStripSeedingToolCfg(flags, name, **kwargs)
230
232 name: str = "ActsPixelGbtsSeedingTool",
233 **kwargs) -> ComponentAccumulator:
234 acc = ComponentAccumulator()
235 if "layerNumberTool" not in kwargs:
236 from TrigFastTrackFinder.TrigFastTrackFinderConfig import ITkTrigL2LayerNumberToolCfg
237 ntargs = {"UseNewLayerScheme": True}
238 kwargs.setdefault(
239 "layerNumberTool",
240 acc.popToolsAndMerge(ITkTrigL2LayerNumberToolCfg(flags, **ntargs))
241 )
242
243 kwargs.setdefault("connectorInputFile" , find_datafile("binTables_ITK_RUN4.txt"))
244 kwargs.setdefault("lutInputFile" , find_datafile("gbts_ml_pixel_barrel_loose.lut"))
245 kwargs.setdefault("minPt" , flags.Tracking.ActiveConfig.minPTSeed / GaudiUnits.GeV * ActsUnits.GeV)
246
247 acc.setPrivateTools(CompFactory.ActsTrk.GbtsSeedingTool(name = name, **kwargs))
248 return acc
249
250# ACTS algorithm using Athena objects upstream
252 name: str = 'ActsPixelSeedingAlg',
253 **kwargs) -> ComponentAccumulator:
254 acc = ComponentAccumulator()
255
256 # Beam Spot Cond is a requirement
257 from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
258 acc.merge(BeamSpotCondAlgCfg(flags))
259
260 from MagFieldServices.MagFieldServicesConfig import AtlasFieldCacheCondAlgCfg
261 acc.merge(AtlasFieldCacheCondAlgCfg(flags))
262
263 from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelReadoutGeometryCfg
264 acc.merge(ITkPixelReadoutGeometryCfg(flags))
265
266 from InDetConfig.ITkActsHelpers import isFastPrimaryPass
267 useFastTracking = kwargs.get("useFastTracking", isFastPrimaryPass(flags))
268
269 if "SeedTool" not in kwargs:
270 if flags.Acts.SeedingStrategy is SeedingStrategy.Gbts:
271 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsPixelGbtsSeedingToolCfg(flags)))
272 elif flags.Acts.SeedingStrategy is SeedingStrategy.GbtsFtf:
273 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsGbtsFtfSeedingTrigToolCfg(flags)))
274 else:
275 if useFastTracking:
276 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsFastPixelSeedingToolCfg(flags)))
277 else:
278 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsPixelSeedingToolCfg(flags)))
279
280 kwargs.setdefault("useFastTracking", useFastTracking)
281 kwargs.setdefault('InputSpacePoints', ['ITkPixelSpacePoints_Cached'] if flags.Acts.useCache else ['ITkPixelSpacePoints'])
282 kwargs.setdefault('OutputSeeds', 'ActsPixelSeeds')
283 kwargs.setdefault('UsePixel', True)
284
285 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
286 from ActsConfig.ActsMonitoringConfig import ActsITkPixelSeedingMonitoringToolCfg
287 kwargs.setdefault('MonTool', acc.popToolsAndMerge(ActsITkPixelSeedingMonitoringToolCfg(flags)))
288
289 acc.addEventAlgo(CompFactory.ActsTrk.GenericSeedingAlg(name, **kwargs))
290 return acc
291
292
294 name: str = 'ActsStripSeedingAlg',
295 **kwargs) -> ComponentAccumulator:
296 acc = ComponentAccumulator()
297
298 # Beam Spot Cond is a requirement
299 from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
300 acc.merge(BeamSpotCondAlgCfg(flags))
301
302 from MagFieldServices.MagFieldServicesConfig import AtlasFieldCacheCondAlgCfg
303 acc.merge(AtlasFieldCacheCondAlgCfg(flags))
304
305 from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg
306 acc.merge(ITkStripReadoutGeometryCfg(flags))
307
308 if "SeedTool" not in kwargs:
309 if flags.Tracking.ActiveConfig.isLargeD0:
310 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsLargeRadiusStripSeedingToolCfg(flags)))
311 else:
312 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsStripSeedingToolCfg(flags)))
313
314 kwargs.setdefault('InputSpacePoints', ['ITkStripSpacePoints_Cached', 'ITkStripOverlapSpacePoints_Cached'] if flags.Acts.useCache else ['ITkStripSpacePoints', 'ITkStripOverlapSpacePoints'])
315 kwargs.setdefault('OutputSeeds', 'ActsStripSeeds')
316 kwargs.setdefault('UsePixel', False)
317
318 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
319 from ActsConfig.ActsMonitoringConfig import ActsITkStripSeedingMonitoringToolCfg
320 kwargs.setdefault('MonTool', acc.popToolsAndMerge(ActsITkStripSeedingMonitoringToolCfg(flags)))
321
322 acc.addEventAlgo(CompFactory.ActsTrk.GenericSeedingAlg(name, **kwargs))
323 return acc
324
325
327 **kwargs) -> ComponentAccumulator:
328 acc = ComponentAccumulator()
329
330 kwargs.setdefault('processPixels', flags.Detector.EnableITkPixel)
331 kwargs.setdefault('processStrips', flags.Detector.EnableITkStrip)
332 kwargs.setdefault('estimateParameters', flags.Acts.Seeds.doAnalysis)
333
334 if kwargs['processPixels']:
335 acc.merge(ActsPixelSeedingAlgCfg(flags, **extractChildKwargs(prefix='PixelSeedingAlg.', **kwargs)))
336 if kwargs['processStrips']:
337 acc.merge(ActsStripSeedingAlgCfg(flags, **extractChildKwargs(prefix='StripSeedingAlg.', **kwargs)))
338
339
340 if kwargs['estimateParameters']:
341 if kwargs['processPixels']:
342 from ActsConfig.ActsAnalysisConfig import ActsPixelSeedsToTrackParamsAlgCfg
343 acc.merge(ActsPixelSeedsToTrackParamsAlgCfg(flags,
344 **extractChildKwargs(prefix='PixelSeedsToTrackParamsAlg.', **kwargs)))
345
346 if kwargs['processStrips']:
347 from ActsConfig.ActsAnalysisConfig import ActsStripSeedsToTrackParamsAlgCfg
348 acc.merge(ActsStripSeedsToTrackParamsAlgCfg(flags,
349 **extractChildKwargs(prefix='StripSeedsToTrackParamsAlg.', **kwargs)))
350
351 if flags.Acts.Seeds.doAnalysis:
352 if kwargs['processPixels']:
353 from ActsConfig.ActsAnalysisConfig import ActsPixelSeedAnalysisAlgCfg, ActsPixelEstimatedTrackParamsAnalysisAlgCfg
354 acc.merge(ActsPixelSeedAnalysisAlgCfg(flags, **extractChildKwargs(prefix='PixelSeedAnalysisAlg.', **kwargs)))
355 acc.merge(ActsPixelEstimatedTrackParamsAnalysisAlgCfg(flags, **extractChildKwargs(prefix='PixelEstimatedTrackParamsAnalysisAlg.', **kwargs)))
356
357 if kwargs['processStrips']:
358 from ActsConfig.ActsAnalysisConfig import ActsStripSeedAnalysisAlgCfg, ActsStripEstimatedTrackParamsAnalysisAlgCfg
359 acc.merge(ActsStripSeedAnalysisAlgCfg(flags, **extractChildKwargs(prefix='StripSeedAnalysisAlg.', **kwargs)))
360 acc.merge(ActsStripEstimatedTrackParamsAnalysisAlgCfg(flags, **extractChildKwargs(prefix='StripEstimatedTrackParamsAnalysisAlg.', **kwargs)))
361
362 return acc
363
364def ActsSeedingCfg(flags,**kwargs) -> ComponentAccumulator:
365 acc = ComponentAccumulator()
366 processPixels = flags.Detector.EnableITkPixel
367 processStrips = flags.Detector.EnableITkStrip
368
369 # For conversion pass we do not process pixels
370 from InDetConfig.ITkActsHelpers import isFastPrimaryPass
371 if flags.Tracking.ActiveConfig.extension in ["ActsConversion", "ActsLargeRadius", "ActsValidateLargeRadiusStandalone"]:
372 processPixels = False
373 # For main pass disable strips if fast tracking configuration
374 elif isFastPrimaryPass(flags):
375 processStrips = False
376
377 kwargs.setdefault('processPixels', processPixels)
378 kwargs.setdefault('processStrips', processStrips)
379 kwargs.setdefault('estimateParameters', flags.Tracking.ActiveConfig.storeTrackSeeds or flags.Acts.Seeds.doAnalysis)
380
381 # TO-DO: refactor this seeding tool configuration
382 if flags.Tracking.ActiveConfig.extension == "ActsHeavyIon" and processPixels:
383 kwargs.setdefault('PixelSeedingAlg.SeedTool', acc.popToolsAndMerge(ActsPixelSeedingToolCfg(flags,
384 name=f'{flags.Tracking.ActiveConfig.extension}PixelSeedingTool')))
385
386 if processStrips and flags.Acts.SeedingStrategy is SeedingStrategy.GridTriplet:
387 if flags.Tracking.ActiveConfig.isLargeD0:
388 kwargs.setdefault('StripSeedingAlg.SeedTool', acc.popToolsAndMerge(ActsLargeRadiusStripSeedingToolCfg(flags,
389 name=f'{flags.Tracking.ActiveConfig.extension}StripSeedingTool')))
390 else:
391 kwargs.setdefault('StripSeedingAlg.SeedTool', acc.popToolsAndMerge(ActsStripSeedingToolCfg(flags,
392 name=f'{flags.Tracking.ActiveConfig.extension}StripSeedingTool')))
393
394 if processPixels:
395 # Seeding algo
396 kwargs.setdefault('PixelSeedingAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSeedingAlg')
397 kwargs.setdefault('PixelSeedingAlg.useFastTracking', isFastPrimaryPass(flags))
398 kwargs.setdefault('PixelSeedingAlg.OutputSeeds', f'{flags.Tracking.ActiveConfig.extension}PixelSeeds')
399
400 pixelSpacePoints = ['ITkPixelSpacePoints_Cached'] if flags.Acts.useCache else ['ITkPixelSpacePoints']
401 if flags.Tracking.ActiveConfig.isSecondaryPass:
402 pixelSpacePoints = [f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}PixelSpacePoints_Cached'] if flags.Acts.useCache else [f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}PixelSpacePoints']
403 kwargs.setdefault('PixelSeedingAlg.InputSpacePoints', pixelSpacePoints)
404
405 # Setup the seed to track parameters algorithms either if we persistify them or we want to run the ActsMonitoring
406 if flags.Tracking.ActiveConfig.storeTrackSeeds or flags.Acts.Seeds.doAnalysis:
407 kwargs.setdefault('PixelSeedsToTrackParamsAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSeedsToTrackParamsAlg')
408 kwargs.setdefault('PixelSeedsToTrackParamsAlg.extension', flags.Tracking.ActiveConfig.extension)
409 kwargs.setdefault('PixelSeedsToTrackParamsAlg.InputSeedContainerKey', kwargs['PixelSeedingAlg.OutputSeeds'])
410 kwargs.setdefault('PixelSeedsToTrackParamsAlg.OutputTrackParamsCollectionKey', f'{flags.Tracking.ActiveConfig.extension}PixelEstimatedTrackParams')
411
412 # Analysis algo(s)
413 if flags.Acts.Seeds.doAnalysis:
414 kwargs.setdefault('PixelSeedAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSeedAnalysisAlg')
415 kwargs.setdefault('PixelSeedAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
416 kwargs.setdefault('PixelSeedAnalysisAlg.InputSeedCollection', kwargs['PixelSeedingAlg.OutputSeeds'])
417
418 kwargs.setdefault('PixelEstimatedTrackParamsAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelEstimatedTrackParamsAnalysisAlg')
419 kwargs.setdefault('PixelEstimatedTrackParamsAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
420 kwargs.setdefault('PixelEstimatedTrackParamsAnalysisAlg.InputTrackParamsCollection', kwargs['PixelSeedsToTrackParamsAlg.OutputTrackParamsCollectionKey'])
421
422 if processStrips:
423 # Seeding algo
424 kwargs.setdefault('StripSeedingAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSeedingAlg')
425 kwargs.setdefault('StripSeedingAlg.OutputSeeds', f'{flags.Tracking.ActiveConfig.extension}StripSeeds')
426 # Conversion pass does not use overlap space points
427 # Space Point naming is not yet fully connected to tracking passes - this will change
428 if flags.Tracking.ActiveConfig.extension == 'ActsConversion':
429 kwargs.setdefault('StripSeedingAlg.InputSpacePoints', ['ITkConversionStripSpacePoints_Cached'] if flags.Acts.useCache else ['ITkConversionStripSpacePoints'])
430 elif flags.Tracking.ActiveConfig.extension == 'ActsLargeRadius':
431 kwargs.setdefault('StripSeedingAlg.InputSpacePoints', ['ITkLargeRadiusStripSpacePoints_Cached',
432 'ITkLargeRadiusStripOverlapSpacePoints_Cached'] if flags.Acts.useCache else ['ITkLargeRadiusStripSpacePoints',
433 'ITkLargeRadiusStripOverlapSpacePoints'])
434 elif flags.Tracking.ActiveConfig.extension == 'ActsLowPt':
435 kwargs.setdefault('StripSeedingAlg.InputSpacePoints', ['ITkLowPtStripSpacePoints_Cached',
436 'ITkLowPtStripOverlapSpacePoints_Cached'] if flags.Acts.useCache else ['ITkLowPtStripSpacePoints',
437 'ITkLowPtStripOverlapSpacePoints'])
438 else:
439 kwargs.setdefault('StripSeedingAlg.InputSpacePoints', ['ITkStripSpacePoints_Cached',
440 'ITkStripOverlapSpacePoints_Cached'] if flags.Acts.useCache else ['ITkStripSpacePoints',
441 'ITkStripOverlapSpacePoints'])
442
443 if flags.Tracking.ActiveConfig.storeTrackSeeds or flags.Acts.Seeds.doAnalysis:
444 kwargs.setdefault('StripSeedsToTrackParamsAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSeedsToTrackParamsAlg')
445 kwargs.setdefault('StripSeedsToTrackParamsAlg.extension', flags.Tracking.ActiveConfig.extension)
446 kwargs.setdefault('StripSeedsToTrackParamsAlg.InputSeedContainerKey', kwargs['StripSeedingAlg.OutputSeeds'])
447 kwargs.setdefault('StripSeedsToTrackParamsAlg.OutputTrackParamsCollectionKey', f'{flags.Tracking.ActiveConfig.extension}StripEstimatedTrackParams')
448
449
450 # Analysis algo(s)
451 if flags.Acts.Seeds.doAnalysis:
452 kwargs.setdefault('StripSeedAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSeedAnalysisAlg')
453 kwargs.setdefault('StripSeedAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
454 kwargs.setdefault('StripSeedAnalysisAlg.InputSeedCollection', kwargs['StripSeedingAlg.OutputSeeds'])
455
456 kwargs.setdefault('StripEstimatedTrackParamsAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripEstimatedTrackParamsAnalysisAlg')
457 kwargs.setdefault('StripEstimatedTrackParamsAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
458 kwargs.setdefault('StripEstimatedTrackParamsAnalysisAlg.InputTrackParamsCollection', kwargs['StripSeedsToTrackParamsAlg.OutputTrackParamsCollectionKey'])
459
460 acc.merge(ActsMainSeedingCfg(flags, **kwargs))
461
462
463 if flags.Tracking.ActiveConfig.storeTrackSeeds:
464 acc.merge(ActsStoreTrackSeedsCfg(flags,
465 processPixels = processPixels,
466 processStrips = processStrips))
467
468 return acc
469
471 *,
472 processPixels: bool,
473 processStrips: bool,
474 **kwargs: dict) -> ComponentAccumulator:
475
476
477 acc = ComponentAccumulator()
478
479 seedKeyPixels = f'{flags.Tracking.ActiveConfig.extension}PixelSeeds'
480 seedKeyStrips = f'{flags.Tracking.ActiveConfig.extension}StripSeeds'
481 paramsKeyPixels = f'{flags.Tracking.ActiveConfig.extension}PixelEstimatedTrackParams'
482 paramsKeyStrips = f'{flags.Tracking.ActiveConfig.extension}StripEstimatedTrackParams'
483 trackKeyPixels = f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}PixelTracks'
484 trackKeyStrips = f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}StripTracks'
485 particleKeyPixels = f'SiSPSeedSegments{flags.Tracking.ActiveConfig.extension}PixelTrackParticles'
486 particleKeyStrips = f'SiSPSeedSegments{flags.Tracking.ActiveConfig.extension}StripTrackParticles'
487
488 trackKey = f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}Tracks'
489 particleKey = f'SiSPSeedSegments{flags.Tracking.ActiveConfig.extension}TrackParticles'
490
491
492 if processPixels:
493 # Create track parameters from pixel seeds
494 from ActsConfig.ActsAnalysisConfig import ActsPixelSeedsToTrackParamsAlgCfg
495 acc.merge(ActsPixelSeedsToTrackParamsAlgCfg(flags,
496 name = f'{flags.Tracking.ActiveConfig.extension}PixelSeedsToTrackParamsAlg',
497 extension = flags.Tracking.ActiveConfig.extension,
498 InputSeedContainerKey = seedKeyPixels,
499 OutputTrackParamsCollectionKey = paramsKeyPixels))
500
501
502 # Convert pixel seed to Acts track
503 acc.merge(ActsSeedToTrackCnvAlgCfg(flags,
504 name=f"{flags.Tracking.ActiveConfig.extension}PixelSeedToTrackCnvAlg",
505 EstimatedTrackParametersKey = [paramsKeyPixels],
506 SeedContainerKey = [seedKeyPixels],
507 ACTSTracksLocation = trackKeyPixels))
508
509 # Truth
510 if flags.Tracking.doTruth:
511 from ActsConfig.ActsTruthConfig import ActsTrackToTruthAssociationAlgCfg, ActsTrackFindingValidationAlgCfg
512 acc.merge(ActsTrackToTruthAssociationAlgCfg(flags,
513 name = f"{trackKeyPixels}TrackToTruthAssociationAlg",
514 ACTSTracksLocation = trackKeyPixels,
515 AssociationMapOut = f"{trackKeyPixels}ToTruthParticleAssociation"))
516
517 acc.merge(ActsTrackFindingValidationAlgCfg(flags,
518 name = f"{trackKeyPixels}TrackFindingValidationAlg",
519 TrackToTruthAssociationMap = f"{trackKeyPixels}ToTruthParticleAssociation"))
520
521 # Track Particle creation and persistification
522 # - input track collection: trackKeyPixels
523 # - output track particle collection: particleKeyPixels
524 from InDetConfig.ITkActsParticleCreationConfig import ITkActsTrackParticleCreationCfg
525 acc.merge(ITkActsTrackParticleCreationCfg(flags,
526 TrackContainers = [trackKeyPixels],
527 TrackParticleContainer = particleKeyPixels))
528
529
530 if processStrips:
531 # Create track parameters from strip seeds
532 from ActsConfig.ActsAnalysisConfig import ActsStripSeedsToTrackParamsAlgCfg
533 acc.merge(ActsStripSeedsToTrackParamsAlgCfg(flags,
534 name = f'{flags.Tracking.ActiveConfig.extension}StripSeedsToTrackParamsAlg',
535 extension = flags.Tracking.ActiveConfig.extension,
536 InputSeedContainerKey = seedKeyStrips,
537 OutputTrackParamsCollectionKey = paramsKeyStrips))
538
539 # Convert strip seed to Acts track
540 acc.merge(ActsSeedToTrackCnvAlgCfg(flags,
541 name=f"{flags.Tracking.ActiveConfig.extension}StripSeedToTrackCnvAlg",
542 EstimatedTrackParametersKey = [paramsKeyStrips],
543 SeedContainerKey = [seedKeyStrips],
544 ACTSTracksLocation = trackKeyStrips))
545
546 # Truth
547 if flags.Tracking.doTruth:
548 from ActsConfig.ActsTruthConfig import ActsTrackToTruthAssociationAlgCfg, ActsTrackFindingValidationAlgCfg
549 acc.merge(ActsTrackToTruthAssociationAlgCfg(flags,
550 name=f"{trackKeyStrips}TrackToTruthAssociationAlg",
551 ACTSTracksLocation = trackKeyStrips,
552 AssociationMapOut = f"{trackKeyStrips}ToTruthParticleAssociation"))
553
554 acc.merge(ActsTrackFindingValidationAlgCfg(flags,
555 name = f"{trackKeyStrips}TrackFindingValidationAlg",
556 TrackToTruthAssociationMap = f"{trackKeyStrips}ToTruthParticleAssociation"))
557
558 # Track Particle creation and persistification
559 # - input track collection: trackKeyStrips
560 # - output track particle collection: particleKeyStrips
561 from InDetConfig.ITkActsParticleCreationConfig import ITkActsTrackParticleCreationCfg
562 acc.merge(ITkActsTrackParticleCreationCfg(flags,
563 TrackContainers = [trackKeyStrips],
564 TrackParticleContainer = particleKeyStrips))
565
566 # If both pixel and strips are processed, also make track particles from the sum
567 # This will provide the complete seed efficiency for ACTS
568 if processPixels and processStrips:
569 # Parameter estimation has already been performed
570 # Convert seeds to Acts tracks
571 acc.merge(ActsSeedToTrackCnvAlgCfg(flags,
572 name=f"{flags.Tracking.ActiveConfig.extension}SeedToTrackCnvAlg",
573 EstimatedTrackParametersKey = [paramsKeyPixels, paramsKeyStrips],
574 SeedContainerKey = [seedKeyPixels, seedKeyStrips],
575 ACTSTracksLocation = trackKey))
576
577 # Truth
578 if flags.Tracking.doTruth:
579 from ActsConfig.ActsTruthConfig import ActsTrackToTruthAssociationAlgCfg, ActsTrackFindingValidationAlgCfg
580 acc.merge(ActsTrackToTruthAssociationAlgCfg(flags,
581 name=f"{trackKey}TrackToTruthAssociationAlg",
582 ACTSTracksLocation = trackKey,
583 AssociationMapOut = f"{trackKey}ToTruthParticleAssociation"))
584
585 acc.merge(ActsTrackFindingValidationAlgCfg(flags,
586 name = f"{trackKey}TrackFindingValidationAlg",
587 TrackToTruthAssociationMap = f"{trackKey}ToTruthParticleAssociation"))
588
589 # Track Particle creation and persistification
590 # - input track collection: trackKey
591 # - output track particle collection: particleKey
592 from InDetConfig.ITkActsParticleCreationConfig import ITkActsTrackParticleCreationCfg
593 acc.merge(ITkActsTrackParticleCreationCfg(flags,
594 TrackContainers = [trackKey],
595 TrackParticleContainer = particleKey))
596
597 return acc
598
599
601 name: str = "ActsSeedToTrackCnvAlg",
602 **kwargs: dict) -> ComponentAccumulator:
603 acc = ComponentAccumulator()
604
605 kwargs.setdefault('SeedContainerKey', [])
606 kwargs.setdefault('EstimatedTrackParametersKey', [])
607 kwargs.setdefault('ACTSTracksLocation', f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}Tracks')
608
609 if 'TrackingGeometryTool' not in kwargs:
610 from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg
611 kwargs.setdefault('TrackingGeometryTool', acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)))
612
613 acc.addEventAlgo(CompFactory.ActsTrk.SeedToTrackCnvAlg(name, **kwargs))
614 return acc
615
ComponentAccumulator ActsFastPixelSeedingToolCfg(flags, str name="ActsFastPixelSeedingTool", **kwargs)
ComponentAccumulator ActsPixelGbtsSeedingToolCfg(flags, str name="ActsPixelGbtsSeedingTool", **kwargs)
ComponentAccumulator ActsStripSeedingAlgCfg(flags, str name='ActsStripSeedingAlg', **kwargs)
ComponentAccumulator ActsPixelSeedingToolCfg(flags, str name="ActsPixelSeedingTool", **kwargs)
ComponentAccumulator ActsLargeRadiusStripSeedingToolCfg(flags, str name="ActsLargeRadiusStripSeedingTool", **kwargs)
ComponentAccumulator ActsGbtsFtfSeedingTrigToolCfg(flags, str name="GbtsFtfActsSeedingTool", **kwargs)
ComponentAccumulator ActsSeedingCfg(flags, **kwargs)
ComponentAccumulator ActsPixelSeedingAlgCfg(flags, str name='ActsPixelSeedingAlg', **kwargs)
ComponentAccumulator ActsStoreTrackSeedsCfg(flags, *, bool processPixels, bool processStrips, **dict kwargs)
ComponentAccumulator ActsSeedToTrackCnvAlgCfg(flags, str name="ActsSeedToTrackCnvAlg", **dict kwargs)
ComponentAccumulator ActsStripSeedingToolCfg(flags, str name="ActsStripSeedingTool", **kwargs)
ComponentAccumulator ActsMainSeedingCfg(flags, **kwargs)