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 ActsGbts2SeedingTrigToolCfg(flags,name: str = "Gbts2ActsSeedingTool", **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 isLRT = 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 isLRT else "binTables_ITK_RUN4.txt")
28
29 acc.setPrivateTools(CompFactory.Gbts2ActsSeedingTool(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 if flags.Acts.SeedingStrategy is SeedingStrategy.GridTriplet:
64 acc.setPrivateTools(CompFactory.ActsTrk.GridTripletSeedingTool(name, **kwargs))
65 else:
66 acc.setPrivateTools(CompFactory.ActsTrk.SeedingTool(name, **kwargs))
67 return acc
68
70 name: str = "ActsFastPixelSeedingTool",
71 **kwargs) -> ComponentAccumulator:
72
73 kwargs.setdefault("sigmaScattering", 2.)
74 kwargs.setdefault("maxSeedsPerSpM", 3)
75 kwargs.setdefault("collisionRegionMin", -150 * ActsUnits.mm)
76 kwargs.setdefault("collisionRegionMax", 150 * ActsUnits.mm)
77 kwargs.setdefault("maxPhiBins", 200)
78 kwargs.setdefault("gridRMax", 250 * ActsUnits.mm)
79 kwargs.setdefault("deltaRMax", 200 * ActsUnits.mm)
80 kwargs.setdefault("zBinsCustomLooping" , [2, 10, 3, 9, 6, 4, 8, 5, 7])
81 kwargs.setdefault("rRangeMiddleSP", [
82 [0.0, 0.0],
83 [60.0, 165.0],
84 [60.0, 200.0],
85 [60.0, 200.0],
86 [60.0, 260.0],
87 [60.0, 260.0],
88 [60.0, 260.0],
89 [60.0, 200.0],
90 [60.0, 200.0],
91 [60.0, 165.0],
92 [0.0, 0.0]])
93
94 kwargs.setdefault("zBinNeighborsTop", [
95 [0, 0], # -3000, -2000
96 [-1, 0], # -2000, -1400
97 [-1, 0], # -1400, -910
98 [-1, 0], # -910, -500
99 [-1, 0], # -500, -250
100 [-1, 1], # -250, 250
101 [0, 1], # 250, 500
102 [0, 1], # 500, 910
103 [0, 1], # 910, 1400
104 [0, 1], # 1400, 2000
105 [0, 0] # 2000, 3000
106 ])
107 kwargs.setdefault("zBinNeighborsBottom", [
108 [0, 0], # -3000, -2000
109 [0, 1], # -2000, -1400
110 [0, 1], # -1400, -910
111 [0, 1], # -910, -500
112 [0, 1], # -500, -250
113 [0, 0], # -250, 250
114 [-1, 0], # 250, 500
115 [-1, 0], # 500, 910
116 [-1, 0], # 910, 1400
117 [-1, 0], # 1400, 2000
118 [0, 0] # 2000, 3000
119 ])
120
121 kwargs.setdefault("zBinEdges", [-3000., -2000, -1400., -910., -500., -250., 250., 500., 910., 1400., 2000, 3000.])
122 kwargs.setdefault("useExperimentCuts", True)
123
124 kwargs.setdefault("deltaRMaxTopSP", 220 * ActsUnits.mm)
125 kwargs.setdefault("deltaRMaxBottomSP", 135 * ActsUnits.mm)
126
127 return ActsPixelSeedingToolCfg(flags, name, **kwargs)
128
130 name: str = "ActsStripSeedingTool",
131 **kwargs) -> ComponentAccumulator:
132 acc = ComponentAccumulator()
133
134 impactMax = 20. * ActsUnits.mm
135 collisionRegionAbsMax = 200. * ActsUnits.mm
136 deltaRMiddleMaxSPRange = 150 * ActsUnits.mm
137 if flags.Tracking.ActiveConfig.extension in ["ActsLargeRadius", "ActsValidateLargeRadiusSeeds", "ActsValidateLargeRadiusStandalone"]:
138 impactMax = 300. * ActsUnits.mm
139 collisionRegionAbsMax = 500. * ActsUnits.mm
140 deltaRMiddleMaxSPRange = 50 * ActsUnits.mm
141
142
143
144 kwargs.setdefault("doSeedQualitySelection", False)
145 # For SpacePointGridConfig
146 kwargs.setdefault("gridRMax" , 1000. * ActsUnits.mm)
147 kwargs.setdefault("deltaRMax" , 600. * ActsUnits.mm)
148 kwargs.setdefault("impactMax" , impactMax)
149 # For SeedfinderConfig
150 kwargs.setdefault("rMax" , flags.Tracking.ActiveConfig.radMax)
151 kwargs.setdefault("deltaRMinTopSP" , 20. * ActsUnits.mm)
152 kwargs.setdefault("deltaRMaxTopSP" , 300. * ActsUnits.mm)
153 kwargs.setdefault("deltaRMinBottomSP" , 20. * ActsUnits.mm)
154 kwargs.setdefault("deltaRMaxBottomSP" , 300. * ActsUnits.mm)
155 kwargs.setdefault("deltaZMax" , 900. * ActsUnits.mm)
156 kwargs.setdefault("interactionPointCut" , False)
157 kwargs.setdefault("zBinsCustomLooping" , [7, 8, 6, 9, 5, 10, 4, 11, 3, 12, 2])
158 kwargs.setdefault("deltaRMiddleMinSPRange" , 30 * ActsUnits.mm)
159 kwargs.setdefault("deltaRMiddleMaxSPRange" , deltaRMiddleMaxSPRange)
160 kwargs.setdefault("useDetailedDoubleMeasurementInfo" , True)
161 kwargs.setdefault("maxPtScattering", float("inf"))
162 # For SeedFilterConfig
163 kwargs.setdefault("useDeltaRorTopRadius" , False)
164 kwargs.setdefault("seedConfirmationInFilter" , False)
165 kwargs.setdefault("impactWeightFactor" , 1.)
166 kwargs.setdefault("compatSeedLimit" , 4)
167 kwargs.setdefault("numSeedIncrement" , 1.)
168 kwargs.setdefault("seedWeightIncrement" , 10100.)
169 kwargs.setdefault("maxSeedsPerSpMConf" , 100)
170 kwargs.setdefault("maxQualitySeedsPerSpMConf" , 100)
171 # For seeding algorithm
172 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)])
173 # Any other
174 kwargs.setdefault("rBinEdges", [0, kwargs['rMax']])
175 kwargs.setdefault("collisionRegionMin", -1. * collisionRegionAbsMax)
176 kwargs.setdefault("collisionRegionMax", collisionRegionAbsMax)
177
178 if flags.Acts.SeedingStrategy is SeedingStrategy.GridTriplet:
179 acc.setPrivateTools(CompFactory.ActsTrk.GridTripletSeedingTool(name, **kwargs))
180 else:
181 acc.setPrivateTools(CompFactory.ActsTrk.SeedingTool(name, **kwargs))
182 return acc
183
185 name: str = "ActsPixelOrthogonalSeedingTool",
186 **kwargs) -> ComponentAccumulator:
187 acc = ComponentAccumulator()
188
189 acc.setPrivateTools(CompFactory.ActsTrk.OrthogonalSeedingTool(name, **kwargs))
190 return acc
191
193 name: str = "ActsFastPixelOrthogonalSeedingTool",
194 **kwargs) -> ComponentAccumulator:
195 acc = ComponentAccumulator()
196
197
198
199 kwargs.setdefault("minPt", 0.9 * ActsUnits.GeV)
200 kwargs.setdefault("collisionRegionMin", -150 * ActsUnits.mm)
201 kwargs.setdefault("collisionRegionMax", 150 * ActsUnits.mm)
202 kwargs.setdefault("useExperimentCuts", True)
203
204 acc.setPrivateTools(CompFactory.ActsTrk.OrthogonalSeedingTool(name, **kwargs))
205 return acc
206
208 name: str = "ActsStripOrthogonalSeedingTool",
209 **kwargs) -> ComponentAccumulator:
210 acc = ComponentAccumulator()
211
212
213 kwargs.setdefault("impactMax" , 20. * ActsUnits.mm)
214 kwargs.setdefault('rMax', 1200. * ActsUnits.mm)
215 kwargs.setdefault("deltaRMinTopSP" , 20. * ActsUnits.mm)
216 kwargs.setdefault("deltaRMaxTopSP" , 300. * ActsUnits.mm)
217 kwargs.setdefault("deltaRMinBottomSP" , 20. * ActsUnits.mm)
218 kwargs.setdefault("deltaRMaxBottomSP" , 300. * ActsUnits.mm)
219 kwargs.setdefault("deltaZMax" , 900. * ActsUnits.mm)
220 kwargs.setdefault("interactionPointCut" , False)
221 kwargs.setdefault("impactWeightFactor" , 1.)
222 kwargs.setdefault("compatSeedLimit" , 4)
223 kwargs.setdefault("seedWeightIncrement" , 10100.)
224 kwargs.setdefault("numSeedIncrement" , 1.)
225 kwargs.setdefault("seedConfirmationInFilter" , False)
226 kwargs.setdefault("maxSeedsPerSpMConf" , 100)
227 kwargs.setdefault("maxQualitySeedsPerSpMConf" , 100)
228 kwargs.setdefault("useDeltaRorTopRadius" , False)
229 kwargs.setdefault("rMinMiddle", 33. * ActsUnits.mm)
230 kwargs.setdefault("rMaxMiddle", 1200. * ActsUnits.mm)
231
232 acc.setPrivateTools(CompFactory.ActsTrk.OrthogonalSeedingTool(name, **kwargs))
233 return acc
234
236 name: str = "ActsPixelGbtsSeedingTool",
237 **kwargs) -> ComponentAccumulator:
238 acc = ComponentAccumulator()
239 if "layerNumberTool" not in kwargs:
240 from TrigFastTrackFinder.TrigFastTrackFinderConfig import ITkTrigL2LayerNumberToolCfg
241 ntargs = {"UseNewLayerScheme": True}
242 kwargs.setdefault(
243 "layerNumberTool",
244 acc.popToolsAndMerge(ITkTrigL2LayerNumberToolCfg(flags, **ntargs))
245 )
246
247 kwargs.setdefault("connectorInputFile" , find_datafile("binTables_ITK_RUN4.txt"))
248 kwargs.setdefault("lutInputFile" , find_datafile("gbts_ml_pixel_barrel_loose.lut"))
249 kwargs.setdefault("minPt" , flags.Tracking.ActiveConfig.minPTSeed)
250
251 acc.setPrivateTools(CompFactory.ActsTrk.GbtsSeedingTool(name = name, **kwargs))
252 return acc
253
255 name: str = 'ActsSiSpacePointsSeedMakerTool',
256 **kwargs) -> ComponentAccumulator:
257 assert isinstance(name, str)
258
259 acc = ComponentAccumulator()
260
261 if flags.Tracking.ActiveConfig.extension == "ActsValidateConversionSeeds":
262 kwargs.setdefault('useOverlapSpCollection', False)
263
264 # Main properties
265 kwargs.setdefault('usePixel',
266 flags.Tracking.ActiveConfig.useITkPixel and
267 flags.Tracking.ActiveConfig.useITkPixelSeeding)
268 kwargs.setdefault('useStrip',
269 flags.Tracking.ActiveConfig.useITkStrip and
270 flags.Tracking.ActiveConfig.useITkStripSeeding)
271 kwargs.setdefault('useOverlapSpCollection',
272 flags.Tracking.ActiveConfig.useITkStrip and
273 flags.Tracking.ActiveConfig.useITkStripSeeding)
274 kwargs.setdefault('ActsSpacePointsPixelName' , "ITkPixelSpacePoints")
275 kwargs.setdefault('ActsSpacePointsStripName' , "ITkStripSpacePoints")
276 kwargs.setdefault('ActsSpacePointsOverlapName' , "ITkStripOverlapSpacePoints")
277
278
279 # The code will need to use Trk::SpacePoint object for downstream Athena tracking
280 # If we run this tool we have two options to retrieve this:
281 # (1) Have the Athena->Acts Space Point Converter scheduled beforehand
282 # (2) Have the Athena->Acts Cluster Converter scheduled beforehand
283 # In case (1) the link xAOD -> Trk Space Point will be used to retrieve the Trk::SpacePoints
284 # In case (2) the link xAOD -> InDet Cluster will be used to create the Trk::SpacePoints
285 # If none of the above conditions are met, it means there is a misconfiguration of the algorithms
286 useClusters = flags.Tracking.ActiveConfig.doAthenaToActsCluster and not flags.Tracking.ActiveConfig.doAthenaToActsSpacePoint
287 kwargs.setdefault('useClustersForSeedConversion', useClusters)
288
289 if flags.Tracking.ActiveConfig.usePrdAssociationTool:
290 # not all classes have that property !!!
291 kwargs.setdefault('PRDtoTrackMap', (
292 'ITkPRDtoTrackMap' + flags.Tracking.ActiveConfig.extension))
293
294 # Acts Seed Tools
295 # Do not overwrite if already present in `kwargs`
296 seedTool_pixel = None
297 if 'SeedToolPixel' not in kwargs:
298 from InDetConfig.ITkActsHelpers import isFastPrimaryPass
299 if flags.Acts.SeedingStrategy is SeedingStrategy.Orthogonal:
300 if isFastPrimaryPass(flags):
301 seedTool_pixel = acc.popToolsAndMerge(ActsFastPixelOrthogonalSeedingToolCfg(flags))
302 else:
303 seedTool_pixel = acc.popToolsAndMerge(ActsPixelOrthogonalSeedingToolCfg(flags))
304 elif flags.Acts.SeedingStrategy is SeedingStrategy.Gbts:
305 seedTool_pixel = acc.popToolsAndMerge(ActsPixelGbtsSeedingToolCfg(flags))
306 elif flags.Acts.SeedingStrategy is SeedingStrategy.Gbts2:
307 seedTool_pixel = acc.popToolsAndMerge(ActsGbts2SeedingTrigToolCfg(flags))
308 else:
309 if isFastPrimaryPass(flags):
310 kwargs.setdefault("useFastTracking", True)
311 seedTool_pixel = acc.popToolsAndMerge(ActsFastPixelSeedingToolCfg(flags))
312 else:
313 seedTool_pixel = acc.popToolsAndMerge(ActsPixelSeedingToolCfg(flags))
314
315 seedTool_strip = None
316 if 'SeedToolStrip' not in kwargs:
317 if flags.Acts.SeedingStrategy is SeedingStrategy.Orthogonal:
318 seedTool_strip = acc.popToolsAndMerge(ActsStripOrthogonalSeedingToolCfg(flags))
319 else:
320 seedTool_strip = acc.popToolsAndMerge(ActsStripSeedingToolCfg(flags))
321
322 kwargs.setdefault('SeedToolPixel', seedTool_pixel)
323 kwargs.setdefault('SeedToolStrip', seedTool_strip)
324
325 # Validation
326 if flags.Tracking.writeSeedValNtuple:
327 kwargs.setdefault('WriteNtuple', True)
328 HistService = CompFactory.THistSvc(Output = ["valNtuples DATAFILE='SeedMakerValidation.root' OPT='RECREATE'"])
329 acc.addService(HistService)
330
331 acc.setPrivateTools(CompFactory.ActsTrk.SiSpacePointsSeedMaker(name, **kwargs))
332 return acc
333
334
335# ACTS algorithm using Athena objects upstream
337 name: str = 'ActsPixelSeedingAlg',
338 **kwargs) -> ComponentAccumulator:
339 acc = ComponentAccumulator()
340
341 # Beam Spot Cond is a requirement
342 from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
343 acc.merge(BeamSpotCondAlgCfg(flags))
344
345 from MagFieldServices.MagFieldServicesConfig import AtlasFieldCacheCondAlgCfg
346 acc.merge(AtlasFieldCacheCondAlgCfg(flags))
347
348 from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelReadoutGeometryCfg
349 acc.merge(ITkPixelReadoutGeometryCfg(flags))
350
351 from InDetConfig.ITkActsHelpers import isFastPrimaryPass
352 useFastTracking = kwargs.get("useFastTracking", isFastPrimaryPass(flags))
353
354 if "SeedTool" not in kwargs:
355 if flags.Acts.SeedingStrategy is SeedingStrategy.Orthogonal:
356 if useFastTracking:
357 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsFastPixelOrthogonalSeedingToolCfg(flags)))
358 else:
359 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsPixelOrthogonalSeedingToolCfg(flags)))
360 elif flags.Acts.SeedingStrategy is SeedingStrategy.Gbts:
361 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsPixelGbtsSeedingToolCfg(flags)))
362 elif flags.Acts.SeedingStrategy is SeedingStrategy.Gbts2:
363 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsGbts2SeedingTrigToolCfg(flags)))
364 else:
365 if useFastTracking:
366 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsFastPixelSeedingToolCfg(flags)))
367 else:
368 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsPixelSeedingToolCfg(flags)))
369
370 kwargs.setdefault("useFastTracking", useFastTracking)
371 kwargs.setdefault('InputSpacePoints', ['ITkPixelSpacePoints_Cached'] if flags.Acts.useCache else ['ITkPixelSpacePoints'])
372 kwargs.setdefault('OutputSeeds', 'ActsPixelSeeds')
373 kwargs.setdefault('UsePixel', True)
374
375 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
376 from ActsConfig.ActsMonitoringConfig import ActsITkPixelSeedingMonitoringToolCfg
377 kwargs.setdefault('MonTool', acc.popToolsAndMerge(ActsITkPixelSeedingMonitoringToolCfg(flags)))
378
379 if flags.Acts.SeedingStrategy is SeedingStrategy.GridTriplet:
380 acc.addEventAlgo(CompFactory.ActsTrk.GridTripletSeedingAlg(name, **kwargs))
381 else:
382 acc.addEventAlgo(CompFactory.ActsTrk.SeedingAlg(name, **kwargs))
383 return acc
384
385
387 name: str = 'ActsStripSeedingAlg',
388 **kwargs) -> ComponentAccumulator:
389 acc = ComponentAccumulator()
390
391 # Beam Spot Cond is a requirement
392 from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
393 acc.merge(BeamSpotCondAlgCfg(flags))
394
395 from MagFieldServices.MagFieldServicesConfig import AtlasFieldCacheCondAlgCfg
396 acc.merge(AtlasFieldCacheCondAlgCfg(flags))
397
398 from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg
399 acc.merge(ITkStripReadoutGeometryCfg(flags))
400
401 if "SeedTool" not in kwargs:
402 if flags.Acts.SeedingStrategy is SeedingStrategy.Orthogonal:
403 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsStripOrthogonalSeedingToolCfg(flags)))
404 else:
405 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsStripSeedingToolCfg(flags)))
406
407 kwargs.setdefault('InputSpacePoints', ['ITkStripSpacePoints_Cached', 'ITkStripOverlapSpacePoints_Cached'] if flags.Acts.useCache else ['ITkStripSpacePoints', 'ITkStripOverlapSpacePoints'])
408 kwargs.setdefault('OutputSeeds', 'ActsStripSeeds')
409 kwargs.setdefault('UsePixel', False)
410
411 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
412 from ActsConfig.ActsMonitoringConfig import ActsITkStripSeedingMonitoringToolCfg
413 kwargs.setdefault('MonTool', acc.popToolsAndMerge(ActsITkStripSeedingMonitoringToolCfg(flags)))
414
415 if flags.Acts.SeedingStrategy is SeedingStrategy.GridTriplet:
416 acc.addEventAlgo(CompFactory.ActsTrk.GridTripletSeedingAlg(name, **kwargs))
417 else:
418 acc.addEventAlgo(CompFactory.ActsTrk.SeedingAlg(name, **kwargs))
419 return acc
420
421
423 **kwargs) -> ComponentAccumulator:
424 acc = ComponentAccumulator()
425
426 kwargs.setdefault('processPixels', flags.Detector.EnableITkPixel)
427 kwargs.setdefault('processStrips', flags.Detector.EnableITkStrip)
428 kwargs.setdefault('estimateParameters', flags.Acts.Seeds.doAnalysis)
429
430 if kwargs['processPixels']:
431 acc.merge(ActsPixelSeedingAlgCfg(flags, **extractChildKwargs(prefix='PixelSeedingAlg.', **kwargs)))
432 if kwargs['processStrips']:
433 acc.merge(ActsStripSeedingAlgCfg(flags, **extractChildKwargs(prefix='StripSeedingAlg.', **kwargs)))
434
435
436 if kwargs['estimateParameters']:
437 if kwargs['processPixels']:
438 from ActsConfig.ActsAnalysisConfig import ActsPixelSeedsToTrackParamsAlgCfg
439 acc.merge(ActsPixelSeedsToTrackParamsAlgCfg(flags,
440 **extractChildKwargs(prefix='PixelSeedsToTrackParamsAlg.', **kwargs)))
441
442 if kwargs['processStrips']:
443 from ActsConfig.ActsAnalysisConfig import ActsStripSeedsToTrackParamsAlgCfg
444 acc.merge(ActsStripSeedsToTrackParamsAlgCfg(flags,
445 **extractChildKwargs(prefix='StripSeedsToTrackParamsAlg.', **kwargs)))
446
447 if flags.Acts.Seeds.doAnalysis:
448 if kwargs['processPixels']:
449 from ActsConfig.ActsAnalysisConfig import ActsPixelSeedAnalysisAlgCfg, ActsPixelEstimatedTrackParamsAnalysisAlgCfg
450 acc.merge(ActsPixelSeedAnalysisAlgCfg(flags, **extractChildKwargs(prefix='PixelSeedAnalysisAlg.', **kwargs)))
451 acc.merge(ActsPixelEstimatedTrackParamsAnalysisAlgCfg(flags, **extractChildKwargs(prefix='PixelEstimatedTrackParamsAnalysisAlg.', **kwargs)))
452
453 if kwargs['processStrips']:
454 from ActsConfig.ActsAnalysisConfig import ActsStripSeedAnalysisAlgCfg, ActsStripEstimatedTrackParamsAnalysisAlgCfg
455 acc.merge(ActsStripSeedAnalysisAlgCfg(flags, **extractChildKwargs(prefix='StripSeedAnalysisAlg.', **kwargs)))
456 acc.merge(ActsStripEstimatedTrackParamsAnalysisAlgCfg(flags, **extractChildKwargs(prefix='StripEstimatedTrackParamsAnalysisAlg.', **kwargs)))
457
458 return acc
459
460def ActsSeedingCfg(flags,**kwargs) -> ComponentAccumulator:
461 acc = ComponentAccumulator()
462 processPixels = flags.Detector.EnableITkPixel
463 processStrips = flags.Detector.EnableITkStrip
464
465 # For conversion pass we do not process pixels
466 from InDetConfig.ITkActsHelpers import isFastPrimaryPass
467 if flags.Tracking.ActiveConfig.extension in ["ActsConversion", "ActsLargeRadius", "ActsValidateLargeRadiusStandalone"]:
468 processPixels = False
469 # For main pass disable strips if fast tracking configuration
470 elif isFastPrimaryPass(flags):
471 processStrips = False
472
473 kwargs.setdefault('processPixels', processPixels)
474 kwargs.setdefault('processStrips', processStrips)
475 kwargs.setdefault('estimateParameters', flags.Tracking.ActiveConfig.storeTrackSeeds or flags.Acts.Seeds.doAnalysis)
476
477 # TO-DO: refactor this seeding tool configuration
478 if flags.Tracking.ActiveConfig.extension == "ActsHeavyIon" and processPixels:
479 kwargs.setdefault('PixelSeedingAlg.SeedTool', acc.popToolsAndMerge(ActsPixelSeedingToolCfg(flags,
480 name=f'{flags.Tracking.ActiveConfig.extension}PixelSeedingTool')))
481
482 if processStrips and (flags.Acts.SeedingStrategy is SeedingStrategy.Default or flags.Acts.SeedingStrategy is SeedingStrategy.GridTriplet):
483 kwargs.setdefault('StripSeedingAlg.SeedTool', acc.popToolsAndMerge(ActsStripSeedingToolCfg(flags,
484 name=f'{flags.Tracking.ActiveConfig.extension}StripSeedingTool')))
485
486 if processPixels:
487 # Seeding algo
488 kwargs.setdefault('PixelSeedingAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSeedingAlg')
489 kwargs.setdefault('PixelSeedingAlg.useFastTracking', isFastPrimaryPass(flags))
490 kwargs.setdefault('PixelSeedingAlg.OutputSeeds', f'{flags.Tracking.ActiveConfig.extension}PixelSeeds')
491
492 pixelSpacePoints = ['ITkPixelSpacePoints_Cached'] if flags.Acts.useCache else ['ITkPixelSpacePoints']
493 if flags.Tracking.ActiveConfig.isSecondaryPass:
494 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']
495 kwargs.setdefault('PixelSeedingAlg.InputSpacePoints', pixelSpacePoints)
496
497 # Setup the seed to track parameters algorithms either if we persistify them or we want to run the ActsMonitoring
498 if flags.Tracking.ActiveConfig.storeTrackSeeds or flags.Acts.Seeds.doAnalysis:
499 kwargs.setdefault('PixelSeedsToTrackParamsAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSeedsToTrackParamsAlg')
500 kwargs.setdefault('PixelSeedsToTrackParamsAlg.extension', flags.Tracking.ActiveConfig.extension)
501 kwargs.setdefault('PixelSeedsToTrackParamsAlg.InputSeedContainerKey', kwargs['PixelSeedingAlg.OutputSeeds'])
502 kwargs.setdefault('PixelSeedsToTrackParamsAlg.OutputTrackParamsCollectionKey', f'{flags.Tracking.ActiveConfig.extension}PixelEstimatedTrackParams')
503
504 # Analysis algo(s)
505 if flags.Acts.Seeds.doAnalysis:
506 kwargs.setdefault('PixelSeedAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSeedAnalysisAlg')
507 kwargs.setdefault('PixelSeedAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
508 kwargs.setdefault('PixelSeedAnalysisAlg.InputSeedCollection', kwargs['PixelSeedingAlg.OutputSeeds'])
509
510 kwargs.setdefault('PixelEstimatedTrackParamsAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelEstimatedTrackParamsAnalysisAlg')
511 kwargs.setdefault('PixelEstimatedTrackParamsAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
512 kwargs.setdefault('PixelEstimatedTrackParamsAnalysisAlg.InputTrackParamsCollection', kwargs['PixelSeedsToTrackParamsAlg.OutputTrackParamsCollectionKey'])
513
514 if processStrips:
515 # Seeding algo
516 kwargs.setdefault('StripSeedingAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSeedingAlg')
517 kwargs.setdefault('StripSeedingAlg.OutputSeeds', f'{flags.Tracking.ActiveConfig.extension}StripSeeds')
518 # Conversion pass does not use overlap space points
519 # Space Point naming is not yet fully connected to tracking passes - this will change
520 if flags.Tracking.ActiveConfig.extension == 'ActsConversion':
521 kwargs.setdefault('StripSeedingAlg.InputSpacePoints', ['ITkConversionStripSpacePoints_Cached'] if flags.Acts.useCache else ['ITkConversionStripSpacePoints'])
522 elif flags.Tracking.ActiveConfig.extension == 'ActsLargeRadius':
523 kwargs.setdefault('StripSeedingAlg.InputSpacePoints', ['ITkLargeRadiusStripSpacePoints_Cached',
524 'ITkLargeRadiusStripOverlapSpacePoints_Cached'] if flags.Acts.useCache else ['ITkLargeRadiusStripSpacePoints',
525 'ITkLargeRadiusStripOverlapSpacePoints'])
526 elif flags.Tracking.ActiveConfig.extension == 'ActsLowPt':
527 kwargs.setdefault('StripSeedingAlg.InputSpacePoints', ['ITkLowPtStripSpacePoints_Cached',
528 'ITkLowPtStripOverlapSpacePoints_Cached'] if flags.Acts.useCache else ['ITkLowPtStripSpacePoints',
529 'ITkLowPtStripOverlapSpacePoints'])
530 else:
531 kwargs.setdefault('StripSeedingAlg.InputSpacePoints', ['ITkStripSpacePoints_Cached',
532 'ITkStripOverlapSpacePoints_Cached'] if flags.Acts.useCache else ['ITkStripSpacePoints',
533 'ITkStripOverlapSpacePoints'])
534
535 if flags.Tracking.ActiveConfig.storeTrackSeeds or flags.Acts.Seeds.doAnalysis:
536 kwargs.setdefault('StripSeedsToTrackParamsAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSeedsToTrackParamsAlg')
537 kwargs.setdefault('StripSeedsToTrackParamsAlg.extension', flags.Tracking.ActiveConfig.extension)
538 kwargs.setdefault('StripSeedsToTrackParamsAlg.InputSeedContainerKey', kwargs['StripSeedingAlg.OutputSeeds'])
539 kwargs.setdefault('StripSeedsToTrackParamsAlg.OutputTrackParamsCollectionKey', f'{flags.Tracking.ActiveConfig.extension}StripEstimatedTrackParams')
540
541
542 # Analysis algo(s)
543 if flags.Acts.Seeds.doAnalysis:
544 kwargs.setdefault('StripSeedAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSeedAnalysisAlg')
545 kwargs.setdefault('StripSeedAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
546 kwargs.setdefault('StripSeedAnalysisAlg.InputSeedCollection', kwargs['StripSeedingAlg.OutputSeeds'])
547
548 kwargs.setdefault('StripEstimatedTrackParamsAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripEstimatedTrackParamsAnalysisAlg')
549 kwargs.setdefault('StripEstimatedTrackParamsAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
550 kwargs.setdefault('StripEstimatedTrackParamsAnalysisAlg.InputTrackParamsCollection', kwargs['StripSeedsToTrackParamsAlg.OutputTrackParamsCollectionKey'])
551
552 acc.merge(ActsMainSeedingCfg(flags, **kwargs))
553
554
555 if flags.Tracking.ActiveConfig.storeTrackSeeds:
556 acc.merge(ActsStoreTrackSeedsCfg(flags,
557 processPixels = processPixels,
558 processStrips = processStrips))
559
560 return acc
561
563 *,
564 processPixels: bool,
565 processStrips: bool,
566 **kwargs: dict) -> ComponentAccumulator:
567
568
569 acc = ComponentAccumulator()
570
571 seedKeyPixels = f'{flags.Tracking.ActiveConfig.extension}PixelSeeds'
572 seedKeyStrips = f'{flags.Tracking.ActiveConfig.extension}StripSeeds'
573 paramsKeyPixels = f'{flags.Tracking.ActiveConfig.extension}PixelEstimatedTrackParams'
574 paramsKeyStrips = f'{flags.Tracking.ActiveConfig.extension}StripEstimatedTrackParams'
575 trackKeyPixels = f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}PixelTracks'
576 trackKeyStrips = f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}StripTracks'
577 particleKeyPixels = f'SiSPSeedSegments{flags.Tracking.ActiveConfig.extension}PixelTrackParticles'
578 particleKeyStrips = f'SiSPSeedSegments{flags.Tracking.ActiveConfig.extension}StripTrackParticles'
579
580 trackKey = f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}Tracks'
581 particleKey = f'SiSPSeedSegments{flags.Tracking.ActiveConfig.extension}TrackParticles'
582
583
584 if processPixels:
585 # Create track parameters from pixel seeds
586 from ActsConfig.ActsAnalysisConfig import ActsPixelSeedsToTrackParamsAlgCfg
587 acc.merge(ActsPixelSeedsToTrackParamsAlgCfg(flags,
588 name = f'{flags.Tracking.ActiveConfig.extension}PixelSeedsToTrackParamsAlg',
589 extension = flags.Tracking.ActiveConfig.extension,
590 InputSeedContainerKey = seedKeyPixels,
591 OutputTrackParamsCollectionKey = paramsKeyPixels))
592
593
594 # Convert pixel seed to Acts track
595 acc.merge(ActsSeedToTrackCnvAlgCfg(flags,
596 name=f"{flags.Tracking.ActiveConfig.extension}PixelSeedToTrackCnvAlg",
597 EstimatedTrackParametersKey = [paramsKeyPixels],
598 SeedContainerKey = [seedKeyPixels],
599 ACTSTracksLocation = trackKeyPixels))
600
601 # Truth
602 if flags.Tracking.doTruth:
603 from ActsConfig.ActsTruthConfig import ActsTrackToTruthAssociationAlgCfg, ActsTrackFindingValidationAlgCfg
604 acc.merge(ActsTrackToTruthAssociationAlgCfg(flags,
605 name = f"{trackKeyPixels}TrackToTruthAssociationAlg",
606 ACTSTracksLocation = trackKeyPixels,
607 AssociationMapOut = f"{trackKeyPixels}ToTruthParticleAssociation"))
608
609 acc.merge(ActsTrackFindingValidationAlgCfg(flags,
610 name = f"{trackKeyPixels}TrackFindingValidationAlg",
611 TrackToTruthAssociationMap = f"{trackKeyPixels}ToTruthParticleAssociation"))
612
613 # Track Particle creation and persistification
614 # - input track collection: trackKeyPixels
615 # - output track particle collection: particleKeyPixels
616 from InDetConfig.ITkActsParticleCreationConfig import ITkActsTrackParticleCreationCfg
617 acc.merge(ITkActsTrackParticleCreationCfg(flags,
618 TrackContainers = [trackKeyPixels],
619 TrackParticleContainer = particleKeyPixels))
620
621
622 if processStrips:
623 # Create track parameters from strip seeds
624 from ActsConfig.ActsAnalysisConfig import ActsStripSeedsToTrackParamsAlgCfg
625 acc.merge(ActsStripSeedsToTrackParamsAlgCfg(flags,
626 name = f'{flags.Tracking.ActiveConfig.extension}StripSeedsToTrackParamsAlg',
627 extension = flags.Tracking.ActiveConfig.extension,
628 InputSeedContainerKey = seedKeyStrips,
629 OutputTrackParamsCollectionKey = paramsKeyStrips))
630
631 # Convert strip seed to Acts track
632 acc.merge(ActsSeedToTrackCnvAlgCfg(flags,
633 name=f"{flags.Tracking.ActiveConfig.extension}StripSeedToTrackCnvAlg",
634 EstimatedTrackParametersKey = [paramsKeyStrips],
635 SeedContainerKey = [seedKeyStrips],
636 ACTSTracksLocation = trackKeyStrips))
637
638 # Truth
639 if flags.Tracking.doTruth:
640 from ActsConfig.ActsTruthConfig import ActsTrackToTruthAssociationAlgCfg, ActsTrackFindingValidationAlgCfg
641 acc.merge(ActsTrackToTruthAssociationAlgCfg(flags,
642 name=f"{trackKeyStrips}TrackToTruthAssociationAlg",
643 ACTSTracksLocation = trackKeyStrips,
644 AssociationMapOut = f"{trackKeyStrips}ToTruthParticleAssociation"))
645
646 acc.merge(ActsTrackFindingValidationAlgCfg(flags,
647 name = f"{trackKeyStrips}TrackFindingValidationAlg",
648 TrackToTruthAssociationMap = f"{trackKeyStrips}ToTruthParticleAssociation"))
649
650 # Track Particle creation and persistification
651 # - input track collection: trackKeyStrips
652 # - output track particle collection: particleKeyStrips
653 from InDetConfig.ITkActsParticleCreationConfig import ITkActsTrackParticleCreationCfg
654 acc.merge(ITkActsTrackParticleCreationCfg(flags,
655 TrackContainers = [trackKeyStrips],
656 TrackParticleContainer = particleKeyStrips))
657
658 # If both pixel and strips are processed, also make track particles from the sum
659 # This will provide the complete seed efficiency for ACTS
660 if processPixels and processStrips:
661 # Parameter estimation has already been performed
662 # Convert seeds to Acts tracks
663 acc.merge(ActsSeedToTrackCnvAlgCfg(flags,
664 name=f"{flags.Tracking.ActiveConfig.extension}SeedToTrackCnvAlg",
665 EstimatedTrackParametersKey = [paramsKeyPixels, paramsKeyStrips],
666 SeedContainerKey = [seedKeyPixels, seedKeyStrips],
667 ACTSTracksLocation = trackKey))
668
669 # Truth
670 if flags.Tracking.doTruth:
671 from ActsConfig.ActsTruthConfig import ActsTrackToTruthAssociationAlgCfg, ActsTrackFindingValidationAlgCfg
672 acc.merge(ActsTrackToTruthAssociationAlgCfg(flags,
673 name=f"{trackKey}TrackToTruthAssociationAlg",
674 ACTSTracksLocation = trackKey,
675 AssociationMapOut = f"{trackKey}ToTruthParticleAssociation"))
676
677 acc.merge(ActsTrackFindingValidationAlgCfg(flags,
678 name = f"{trackKey}TrackFindingValidationAlg",
679 TrackToTruthAssociationMap = f"{trackKey}ToTruthParticleAssociation"))
680
681 # Track Particle creation and persistification
682 # - input track collection: trackKey
683 # - output track particle collection: particleKey
684 from InDetConfig.ITkActsParticleCreationConfig import ITkActsTrackParticleCreationCfg
685 acc.merge(ITkActsTrackParticleCreationCfg(flags,
686 TrackContainers = [trackKey],
687 TrackParticleContainer = particleKey))
688
689 return acc
690
691
693 name: str = "ActsSeedToTrackCnvAlg",
694 **kwargs: dict) -> ComponentAccumulator:
695 acc = ComponentAccumulator()
696
697 kwargs.setdefault('SeedContainerKey', [])
698 kwargs.setdefault('EstimatedTrackParametersKey', [])
699 kwargs.setdefault('ACTSTracksLocation', f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}Tracks')
700
701 if 'TrackingGeometryTool' not in kwargs:
702 from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg
703 kwargs.setdefault('TrackingGeometryTool', acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)))
704
705 acc.addEventAlgo(CompFactory.ActsTrk.SeedToTrackCnvAlg(name, **kwargs))
706 return acc
707
ComponentAccumulator ActsStripOrthogonalSeedingToolCfg(flags, str name="ActsStripOrthogonalSeedingTool", **kwargs)
ComponentAccumulator ActsFastPixelOrthogonalSeedingToolCfg(flags, str name="ActsFastPixelOrthogonalSeedingTool", **kwargs)
ComponentAccumulator ActsFastPixelSeedingToolCfg(flags, str name="ActsFastPixelSeedingTool", **kwargs)
ComponentAccumulator ActsPixelOrthogonalSeedingToolCfg(flags, str name="ActsPixelOrthogonalSeedingTool", **kwargs)
ComponentAccumulator ActsPixelGbtsSeedingToolCfg(flags, str name="ActsPixelGbtsSeedingTool", **kwargs)
ComponentAccumulator ActsStripSeedingAlgCfg(flags, str name='ActsStripSeedingAlg', **kwargs)
ComponentAccumulator ActsPixelSeedingToolCfg(flags, str name="ActsPixelSeedingTool", **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 ActsSiSpacePointsSeedMakerToolCfg(flags, str name='ActsSiSpacePointsSeedMakerTool', **kwargs)
ComponentAccumulator ActsMainSeedingCfg(flags, **kwargs)
ComponentAccumulator ActsGbts2SeedingTrigToolCfg(flags, str name="Gbts2ActsSeedingTool", **kwargs)