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
249 acc.setPrivateTools(CompFactory.ActsTrk.GbtsSeedingTool(name = name, **kwargs))
250 return acc
251
253 name: str = 'ActsSiSpacePointsSeedMakerTool',
254 **kwargs) -> ComponentAccumulator:
255 assert isinstance(name, str)
256
257 acc = ComponentAccumulator()
258
259 if flags.Tracking.ActiveConfig.extension == "ActsValidateConversionSeeds":
260 kwargs.setdefault('useOverlapSpCollection', False)
261
262 # Main properties
263 kwargs.setdefault('usePixel',
264 flags.Tracking.ActiveConfig.useITkPixel and
265 flags.Tracking.ActiveConfig.useITkPixelSeeding)
266 kwargs.setdefault('useStrip',
267 flags.Tracking.ActiveConfig.useITkStrip and
268 flags.Tracking.ActiveConfig.useITkStripSeeding)
269 kwargs.setdefault('useOverlapSpCollection',
270 flags.Tracking.ActiveConfig.useITkStrip and
271 flags.Tracking.ActiveConfig.useITkStripSeeding)
272 kwargs.setdefault('ActsSpacePointsPixelName' , "ITkPixelSpacePoints")
273 kwargs.setdefault('ActsSpacePointsStripName' , "ITkStripSpacePoints")
274 kwargs.setdefault('ActsSpacePointsOverlapName' , "ITkStripOverlapSpacePoints")
275
276
277 # The code will need to use Trk::SpacePoint object for downstream Athena tracking
278 # If we run this tool we have two options to retrieve this:
279 # (1) Have the Athena->Acts Space Point Converter scheduled beforehand
280 # (2) Have the Athena->Acts Cluster Converter scheduled beforehand
281 # In case (1) the link xAOD -> Trk Space Point will be used to retrieve the Trk::SpacePoints
282 # In case (2) the link xAOD -> InDet Cluster will be used to create the Trk::SpacePoints
283 # If none of the above conditions are met, it means there is a misconfiguration of the algorithms
284 useClusters = flags.Tracking.ActiveConfig.doAthenaToActsCluster and not flags.Tracking.ActiveConfig.doAthenaToActsSpacePoint
285 kwargs.setdefault('useClustersForSeedConversion', useClusters)
286
287 if flags.Tracking.ActiveConfig.usePrdAssociationTool:
288 # not all classes have that property !!!
289 kwargs.setdefault('PRDtoTrackMap', (
290 'ITkPRDtoTrackMap' + flags.Tracking.ActiveConfig.extension))
291
292 # Acts Seed Tools
293 # Do not overwrite if already present in `kwargs`
294 seedTool_pixel = None
295 if 'SeedToolPixel' not in kwargs:
296 from InDetConfig.ITkActsHelpers import isFastPrimaryPass
297 if flags.Acts.SeedingStrategy is SeedingStrategy.Orthogonal:
298 if isFastPrimaryPass(flags):
299 seedTool_pixel = acc.popToolsAndMerge(ActsFastPixelOrthogonalSeedingToolCfg(flags))
300 else:
301 seedTool_pixel = acc.popToolsAndMerge(ActsPixelOrthogonalSeedingToolCfg(flags))
302 elif flags.Acts.SeedingStrategy is SeedingStrategy.Gbts:
303 seedTool_pixel = acc.popToolsAndMerge(ActsPixelGbtsSeedingToolCfg(flags))
304 elif flags.Acts.SeedingStrategy is SeedingStrategy.Gbts2:
305 seedTool_pixel = acc.popToolsAndMerge(ActsGbts2SeedingTrigToolCfg(flags))
306 else:
307 if isFastPrimaryPass(flags):
308 kwargs.setdefault("useFastTracking", True)
309 seedTool_pixel = acc.popToolsAndMerge(ActsFastPixelSeedingToolCfg(flags))
310 else:
311 seedTool_pixel = acc.popToolsAndMerge(ActsPixelSeedingToolCfg(flags))
312
313 seedTool_strip = None
314 if 'SeedToolStrip' not in kwargs:
315 if flags.Acts.SeedingStrategy is SeedingStrategy.Orthogonal:
316 seedTool_strip = acc.popToolsAndMerge(ActsStripOrthogonalSeedingToolCfg(flags))
317 else:
318 seedTool_strip = acc.popToolsAndMerge(ActsStripSeedingToolCfg(flags))
319
320 kwargs.setdefault('SeedToolPixel', seedTool_pixel)
321 kwargs.setdefault('SeedToolStrip', seedTool_strip)
322
323 # Validation
324 if flags.Tracking.writeSeedValNtuple:
325 kwargs.setdefault('WriteNtuple', True)
326 HistService = CompFactory.THistSvc(Output = ["valNtuples DATAFILE='SeedMakerValidation.root' OPT='RECREATE'"])
327 acc.addService(HistService)
328
329 acc.setPrivateTools(CompFactory.ActsTrk.SiSpacePointsSeedMaker(name, **kwargs))
330 return acc
331
332
333# ACTS algorithm using Athena objects upstream
335 name: str = 'ActsPixelSeedingAlg',
336 **kwargs) -> ComponentAccumulator:
337 acc = ComponentAccumulator()
338
339 # Beam Spot Cond is a requirement
340 from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
341 acc.merge(BeamSpotCondAlgCfg(flags))
342
343 from MagFieldServices.MagFieldServicesConfig import AtlasFieldCacheCondAlgCfg
344 acc.merge(AtlasFieldCacheCondAlgCfg(flags))
345
346 from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelReadoutGeometryCfg
347 acc.merge(ITkPixelReadoutGeometryCfg(flags))
348
349 from InDetConfig.ITkActsHelpers import isFastPrimaryPass
350 useFastTracking = kwargs.get("useFastTracking", isFastPrimaryPass(flags))
351
352 if "SeedTool" not in kwargs:
353 if flags.Acts.SeedingStrategy is SeedingStrategy.Orthogonal:
354 if useFastTracking:
355 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsFastPixelOrthogonalSeedingToolCfg(flags)))
356 else:
357 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsPixelOrthogonalSeedingToolCfg(flags)))
358 elif flags.Acts.SeedingStrategy is SeedingStrategy.Gbts:
359 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsPixelGbtsSeedingToolCfg(flags)))
360 elif flags.Acts.SeedingStrategy is SeedingStrategy.Gbts2:
361 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsGbts2SeedingTrigToolCfg(flags)))
362 else:
363 if useFastTracking:
364 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsFastPixelSeedingToolCfg(flags)))
365 else:
366 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsPixelSeedingToolCfg(flags)))
367
368 kwargs.setdefault("useFastTracking", useFastTracking)
369 kwargs.setdefault('InputSpacePoints', ['ITkPixelSpacePoints_Cached'] if flags.Acts.useCache else ['ITkPixelSpacePoints'])
370 kwargs.setdefault('OutputSeeds', 'ActsPixelSeeds')
371 kwargs.setdefault('UsePixel', True)
372
373 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
374 from ActsConfig.ActsMonitoringConfig import ActsITkPixelSeedingMonitoringToolCfg
375 kwargs.setdefault('MonTool', acc.popToolsAndMerge(ActsITkPixelSeedingMonitoringToolCfg(flags)))
376
377 if flags.Acts.SeedingStrategy is SeedingStrategy.GridTriplet:
378 acc.addEventAlgo(CompFactory.ActsTrk.GridTripletSeedingAlg(name, **kwargs))
379 else:
380 acc.addEventAlgo(CompFactory.ActsTrk.SeedingAlg(name, **kwargs))
381 return acc
382
383
385 name: str = 'ActsStripSeedingAlg',
386 **kwargs) -> ComponentAccumulator:
387 acc = ComponentAccumulator()
388
389 # Beam Spot Cond is a requirement
390 from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
391 acc.merge(BeamSpotCondAlgCfg(flags))
392
393 from MagFieldServices.MagFieldServicesConfig import AtlasFieldCacheCondAlgCfg
394 acc.merge(AtlasFieldCacheCondAlgCfg(flags))
395
396 from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg
397 acc.merge(ITkStripReadoutGeometryCfg(flags))
398
399 if "SeedTool" not in kwargs:
400 if flags.Acts.SeedingStrategy is SeedingStrategy.Orthogonal:
401 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsStripOrthogonalSeedingToolCfg(flags)))
402 else:
403 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsStripSeedingToolCfg(flags)))
404
405 kwargs.setdefault('InputSpacePoints', ['ITkStripSpacePoints_Cached', 'ITkStripOverlapSpacePoints_Cached'] if flags.Acts.useCache else ['ITkStripSpacePoints', 'ITkStripOverlapSpacePoints'])
406 kwargs.setdefault('OutputSeeds', 'ActsStripSeeds')
407 kwargs.setdefault('UsePixel', False)
408
409 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
410 from ActsConfig.ActsMonitoringConfig import ActsITkStripSeedingMonitoringToolCfg
411 kwargs.setdefault('MonTool', acc.popToolsAndMerge(ActsITkStripSeedingMonitoringToolCfg(flags)))
412
413 if flags.Acts.SeedingStrategy is SeedingStrategy.GridTriplet:
414 acc.addEventAlgo(CompFactory.ActsTrk.GridTripletSeedingAlg(name, **kwargs))
415 else:
416 acc.addEventAlgo(CompFactory.ActsTrk.SeedingAlg(name, **kwargs))
417 return acc
418
419
421 **kwargs) -> ComponentAccumulator:
422 acc = ComponentAccumulator()
423
424 kwargs.setdefault('processPixels', flags.Detector.EnableITkPixel)
425 kwargs.setdefault('processStrips', flags.Detector.EnableITkStrip)
426 kwargs.setdefault('estimateParameters', flags.Acts.Seeds.doAnalysis)
427
428 if kwargs['processPixels']:
429 acc.merge(ActsPixelSeedingAlgCfg(flags, **extractChildKwargs(prefix='PixelSeedingAlg.', **kwargs)))
430 if kwargs['processStrips']:
431 acc.merge(ActsStripSeedingAlgCfg(flags, **extractChildKwargs(prefix='StripSeedingAlg.', **kwargs)))
432
433
434 if kwargs['estimateParameters']:
435 if kwargs['processPixels']:
436 from ActsConfig.ActsAnalysisConfig import ActsPixelSeedsToTrackParamsAlgCfg
437 acc.merge(ActsPixelSeedsToTrackParamsAlgCfg(flags,
438 **extractChildKwargs(prefix='PixelSeedsToTrackParamsAlg.', **kwargs)))
439
440 if kwargs['processStrips']:
441 from ActsConfig.ActsAnalysisConfig import ActsStripSeedsToTrackParamsAlgCfg
442 acc.merge(ActsStripSeedsToTrackParamsAlgCfg(flags,
443 **extractChildKwargs(prefix='StripSeedsToTrackParamsAlg.', **kwargs)))
444
445 if flags.Acts.Seeds.doAnalysis:
446 if kwargs['processPixels']:
447 from ActsConfig.ActsAnalysisConfig import ActsPixelSeedAnalysisAlgCfg, ActsPixelEstimatedTrackParamsAnalysisAlgCfg
448 acc.merge(ActsPixelSeedAnalysisAlgCfg(flags, **extractChildKwargs(prefix='PixelSeedAnalysisAlg.', **kwargs)))
449 acc.merge(ActsPixelEstimatedTrackParamsAnalysisAlgCfg(flags, **extractChildKwargs(prefix='PixelEstimatedTrackParamsAnalysisAlg.', **kwargs)))
450
451 if kwargs['processStrips']:
452 from ActsConfig.ActsAnalysisConfig import ActsStripSeedAnalysisAlgCfg, ActsStripEstimatedTrackParamsAnalysisAlgCfg
453 acc.merge(ActsStripSeedAnalysisAlgCfg(flags, **extractChildKwargs(prefix='StripSeedAnalysisAlg.', **kwargs)))
454 acc.merge(ActsStripEstimatedTrackParamsAnalysisAlgCfg(flags, **extractChildKwargs(prefix='StripEstimatedTrackParamsAnalysisAlg.', **kwargs)))
455
456 return acc
457
458def ActsSeedingCfg(flags,**kwargs) -> ComponentAccumulator:
459 acc = ComponentAccumulator()
460 processPixels = flags.Detector.EnableITkPixel
461 processStrips = flags.Detector.EnableITkStrip
462
463 # For conversion pass we do not process pixels
464 from InDetConfig.ITkActsHelpers import isFastPrimaryPass
465 if flags.Tracking.ActiveConfig.extension in ["ActsConversion", "ActsLargeRadius", "ActsValidateLargeRadiusStandalone"]:
466 processPixels = False
467 # For main pass disable strips if fast tracking configuration
468 elif isFastPrimaryPass(flags):
469 processStrips = False
470
471 kwargs.setdefault('processPixels', processPixels)
472 kwargs.setdefault('processStrips', processStrips)
473 kwargs.setdefault('estimateParameters', flags.Tracking.ActiveConfig.storeTrackSeeds or flags.Acts.Seeds.doAnalysis)
474
475 # TO-DO: refactor this seeding tool configuration
476 if flags.Tracking.ActiveConfig.extension == "ActsHeavyIon" and processPixels:
477 kwargs.setdefault('PixelSeedingAlg.SeedTool', acc.popToolsAndMerge(ActsPixelSeedingToolCfg(flags,
478 name=f'{flags.Tracking.ActiveConfig.extension}PixelSeedingTool')))
479
480 if processStrips and (flags.Acts.SeedingStrategy is SeedingStrategy.Default or flags.Acts.SeedingStrategy is SeedingStrategy.GridTriplet):
481 kwargs.setdefault('StripSeedingAlg.SeedTool', acc.popToolsAndMerge(ActsStripSeedingToolCfg(flags,
482 name=f'{flags.Tracking.ActiveConfig.extension}StripSeedingTool')))
483
484 if processPixels:
485 # Seeding algo
486 kwargs.setdefault('PixelSeedingAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSeedingAlg')
487 kwargs.setdefault('PixelSeedingAlg.useFastTracking', isFastPrimaryPass(flags))
488 kwargs.setdefault('PixelSeedingAlg.OutputSeeds', f'{flags.Tracking.ActiveConfig.extension}PixelSeeds')
489
490 pixelSpacePoints = ['ITkPixelSpacePoints_Cached'] if flags.Acts.useCache else ['ITkPixelSpacePoints']
491 if flags.Tracking.ActiveConfig.isSecondaryPass:
492 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']
493 kwargs.setdefault('PixelSeedingAlg.InputSpacePoints', pixelSpacePoints)
494
495 # Setup the seed to track parameters algorithms either if we persistify them or we want to run the ActsMonitoring
496 if flags.Tracking.ActiveConfig.storeTrackSeeds or flags.Acts.Seeds.doAnalysis:
497 kwargs.setdefault('PixelSeedsToTrackParamsAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSeedsToTrackParamsAlg')
498 kwargs.setdefault('PixelSeedsToTrackParamsAlg.extension', flags.Tracking.ActiveConfig.extension)
499 kwargs.setdefault('PixelSeedsToTrackParamsAlg.InputSeedContainerKey', kwargs['PixelSeedingAlg.OutputSeeds'])
500 kwargs.setdefault('PixelSeedsToTrackParamsAlg.OutputTrackParamsCollectionKey', f'{flags.Tracking.ActiveConfig.extension}PixelEstimatedTrackParams')
501
502 # Analysis algo(s)
503 if flags.Acts.Seeds.doAnalysis:
504 kwargs.setdefault('PixelSeedAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSeedAnalysisAlg')
505 kwargs.setdefault('PixelSeedAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
506 kwargs.setdefault('PixelSeedAnalysisAlg.InputSeedCollection', kwargs['PixelSeedingAlg.OutputSeeds'])
507
508 kwargs.setdefault('PixelEstimatedTrackParamsAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelEstimatedTrackParamsAnalysisAlg')
509 kwargs.setdefault('PixelEstimatedTrackParamsAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
510 kwargs.setdefault('PixelEstimatedTrackParamsAnalysisAlg.InputTrackParamsCollection', kwargs['PixelSeedsToTrackParamsAlg.OutputTrackParamsCollectionKey'])
511
512 if processStrips:
513 # Seeding algo
514 kwargs.setdefault('StripSeedingAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSeedingAlg')
515 kwargs.setdefault('StripSeedingAlg.OutputSeeds', f'{flags.Tracking.ActiveConfig.extension}StripSeeds')
516 # Conversion pass does not use overlap space points
517 # Space Point naming is not yet fully connected to tracking passes - this will change
518 if flags.Tracking.ActiveConfig.extension == 'ActsConversion':
519 kwargs.setdefault('StripSeedingAlg.InputSpacePoints', ['ITkConversionStripSpacePoints_Cached'] if flags.Acts.useCache else ['ITkConversionStripSpacePoints'])
520 elif flags.Tracking.ActiveConfig.extension == 'ActsLargeRadius':
521 kwargs.setdefault('StripSeedingAlg.InputSpacePoints', ['ITkLargeRadiusStripSpacePoints_Cached',
522 'ITkLargeRadiusStripOverlapSpacePoints_Cached'] if flags.Acts.useCache else ['ITkLargeRadiusStripSpacePoints',
523 'ITkLargeRadiusStripOverlapSpacePoints'])
524 elif flags.Tracking.ActiveConfig.extension == 'ActsLowPt':
525 kwargs.setdefault('StripSeedingAlg.InputSpacePoints', ['ITkLowPtStripSpacePoints_Cached',
526 'ITkLowPtStripOverlapSpacePoints_Cached'] if flags.Acts.useCache else ['ITkLowPtStripSpacePoints',
527 'ITkLowPtStripOverlapSpacePoints'])
528 else:
529 kwargs.setdefault('StripSeedingAlg.InputSpacePoints', ['ITkStripSpacePoints_Cached',
530 'ITkStripOverlapSpacePoints_Cached'] if flags.Acts.useCache else ['ITkStripSpacePoints',
531 'ITkStripOverlapSpacePoints'])
532
533 if flags.Tracking.ActiveConfig.storeTrackSeeds or flags.Acts.Seeds.doAnalysis:
534 kwargs.setdefault('StripSeedsToTrackParamsAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSeedsToTrackParamsAlg')
535 kwargs.setdefault('StripSeedsToTrackParamsAlg.extension', flags.Tracking.ActiveConfig.extension)
536 kwargs.setdefault('StripSeedsToTrackParamsAlg.InputSeedContainerKey', kwargs['StripSeedingAlg.OutputSeeds'])
537 kwargs.setdefault('StripSeedsToTrackParamsAlg.OutputTrackParamsCollectionKey', f'{flags.Tracking.ActiveConfig.extension}StripEstimatedTrackParams')
538
539
540 # Analysis algo(s)
541 if flags.Acts.Seeds.doAnalysis:
542 kwargs.setdefault('StripSeedAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSeedAnalysisAlg')
543 kwargs.setdefault('StripSeedAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
544 kwargs.setdefault('StripSeedAnalysisAlg.InputSeedCollection', kwargs['StripSeedingAlg.OutputSeeds'])
545
546 kwargs.setdefault('StripEstimatedTrackParamsAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripEstimatedTrackParamsAnalysisAlg')
547 kwargs.setdefault('StripEstimatedTrackParamsAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
548 kwargs.setdefault('StripEstimatedTrackParamsAnalysisAlg.InputTrackParamsCollection', kwargs['StripSeedsToTrackParamsAlg.OutputTrackParamsCollectionKey'])
549
550 acc.merge(ActsMainSeedingCfg(flags, **kwargs))
551
552
553 if flags.Tracking.ActiveConfig.storeTrackSeeds:
554 acc.merge(ActsStoreTrackSeedsCfg(flags,
555 processPixels = processPixels,
556 processStrips = processStrips))
557
558 return acc
559
561 *,
562 processPixels: bool,
563 processStrips: bool,
564 **kwargs: dict) -> ComponentAccumulator:
565
566
567 acc = ComponentAccumulator()
568
569 seedKeyPixels = f'{flags.Tracking.ActiveConfig.extension}PixelSeeds'
570 seedKeyStrips = f'{flags.Tracking.ActiveConfig.extension}StripSeeds'
571 paramsKeyPixels = f'{flags.Tracking.ActiveConfig.extension}PixelEstimatedTrackParams'
572 paramsKeyStrips = f'{flags.Tracking.ActiveConfig.extension}StripEstimatedTrackParams'
573 trackKeyPixels = f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}PixelTracks'
574 trackKeyStrips = f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}StripTracks'
575 particleKeyPixels = f'SiSPSeedSegments{flags.Tracking.ActiveConfig.extension}PixelTrackParticles'
576 particleKeyStrips = f'SiSPSeedSegments{flags.Tracking.ActiveConfig.extension}StripTrackParticles'
577
578 trackKey = f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}Tracks'
579 particleKey = f'SiSPSeedSegments{flags.Tracking.ActiveConfig.extension}TrackParticles'
580
581
582 if processPixels:
583 # Create track parameters from pixel seeds
584 from ActsConfig.ActsAnalysisConfig import ActsPixelSeedsToTrackParamsAlgCfg
585 acc.merge(ActsPixelSeedsToTrackParamsAlgCfg(flags,
586 name = f'{flags.Tracking.ActiveConfig.extension}PixelSeedsToTrackParamsAlg',
587 extension = flags.Tracking.ActiveConfig.extension,
588 InputSeedContainerKey = seedKeyPixels,
589 OutputTrackParamsCollectionKey = paramsKeyPixels))
590
591
592 # Convert pixel seed to Acts track
593 acc.merge(ActsSeedToTrackCnvAlgCfg(flags,
594 name=f"{flags.Tracking.ActiveConfig.extension}PixelSeedToTrackCnvAlg",
595 EstimatedTrackParametersKey = [paramsKeyPixels],
596 SeedContainerKey = [seedKeyPixels],
597 ACTSTracksLocation = trackKeyPixels))
598
599 # Truth
600 if flags.Tracking.doTruth:
601 from ActsConfig.ActsTruthConfig import ActsTrackToTruthAssociationAlgCfg, ActsTrackFindingValidationAlgCfg
602 acc.merge(ActsTrackToTruthAssociationAlgCfg(flags,
603 name = f"{trackKeyPixels}TrackToTruthAssociationAlg",
604 ACTSTracksLocation = trackKeyPixels,
605 AssociationMapOut = f"{trackKeyPixels}ToTruthParticleAssociation"))
606
607 acc.merge(ActsTrackFindingValidationAlgCfg(flags,
608 name = f"{trackKeyPixels}TrackFindingValidationAlg",
609 TrackToTruthAssociationMap = f"{trackKeyPixels}ToTruthParticleAssociation"))
610
611 # Track Particle creation and persistification
612 # - input track collection: trackKeyPixels
613 # - output track particle collection: particleKeyPixels
614 from InDetConfig.ITkActsParticleCreationConfig import ITkActsTrackParticleCreationCfg
615 acc.merge(ITkActsTrackParticleCreationCfg(flags,
616 TrackContainers = [trackKeyPixels],
617 TrackParticleContainer = particleKeyPixels))
618
619
620 if processStrips:
621 # Create track parameters from strip seeds
622 from ActsConfig.ActsAnalysisConfig import ActsStripSeedsToTrackParamsAlgCfg
623 acc.merge(ActsStripSeedsToTrackParamsAlgCfg(flags,
624 name = f'{flags.Tracking.ActiveConfig.extension}StripSeedsToTrackParamsAlg',
625 extension = flags.Tracking.ActiveConfig.extension,
626 InputSeedContainerKey = seedKeyStrips,
627 OutputTrackParamsCollectionKey = paramsKeyStrips))
628
629 # Convert strip seed to Acts track
630 acc.merge(ActsSeedToTrackCnvAlgCfg(flags,
631 name=f"{flags.Tracking.ActiveConfig.extension}StripSeedToTrackCnvAlg",
632 EstimatedTrackParametersKey = [paramsKeyStrips],
633 SeedContainerKey = [seedKeyStrips],
634 ACTSTracksLocation = trackKeyStrips))
635
636 # Truth
637 if flags.Tracking.doTruth:
638 from ActsConfig.ActsTruthConfig import ActsTrackToTruthAssociationAlgCfg, ActsTrackFindingValidationAlgCfg
639 acc.merge(ActsTrackToTruthAssociationAlgCfg(flags,
640 name=f"{trackKeyStrips}TrackToTruthAssociationAlg",
641 ACTSTracksLocation = trackKeyStrips,
642 AssociationMapOut = f"{trackKeyStrips}ToTruthParticleAssociation"))
643
644 acc.merge(ActsTrackFindingValidationAlgCfg(flags,
645 name = f"{trackKeyStrips}TrackFindingValidationAlg",
646 TrackToTruthAssociationMap = f"{trackKeyStrips}ToTruthParticleAssociation"))
647
648 # Track Particle creation and persistification
649 # - input track collection: trackKeyStrips
650 # - output track particle collection: particleKeyStrips
651 from InDetConfig.ITkActsParticleCreationConfig import ITkActsTrackParticleCreationCfg
652 acc.merge(ITkActsTrackParticleCreationCfg(flags,
653 TrackContainers = [trackKeyStrips],
654 TrackParticleContainer = particleKeyStrips))
655
656 # If both pixel and strips are processed, also make track particles from the sum
657 # This will provide the complete seed efficiency for ACTS
658 if processPixels and processStrips:
659 # Parameter estimation has already been performed
660 # Convert seeds to Acts tracks
661 acc.merge(ActsSeedToTrackCnvAlgCfg(flags,
662 name=f"{flags.Tracking.ActiveConfig.extension}SeedToTrackCnvAlg",
663 EstimatedTrackParametersKey = [paramsKeyPixels, paramsKeyStrips],
664 SeedContainerKey = [seedKeyPixels, seedKeyStrips],
665 ACTSTracksLocation = trackKey))
666
667 # Truth
668 if flags.Tracking.doTruth:
669 from ActsConfig.ActsTruthConfig import ActsTrackToTruthAssociationAlgCfg, ActsTrackFindingValidationAlgCfg
670 acc.merge(ActsTrackToTruthAssociationAlgCfg(flags,
671 name=f"{trackKey}TrackToTruthAssociationAlg",
672 ACTSTracksLocation = trackKey,
673 AssociationMapOut = f"{trackKey}ToTruthParticleAssociation"))
674
675 acc.merge(ActsTrackFindingValidationAlgCfg(flags,
676 name = f"{trackKey}TrackFindingValidationAlg",
677 TrackToTruthAssociationMap = f"{trackKey}ToTruthParticleAssociation"))
678
679 # Track Particle creation and persistification
680 # - input track collection: trackKey
681 # - output track particle collection: particleKey
682 from InDetConfig.ITkActsParticleCreationConfig import ITkActsTrackParticleCreationCfg
683 acc.merge(ITkActsTrackParticleCreationCfg(flags,
684 TrackContainers = [trackKey],
685 TrackParticleContainer = particleKey))
686
687 return acc
688
689
691 name: str = "ActsSeedToTrackCnvAlg",
692 **kwargs: dict) -> ComponentAccumulator:
693 acc = ComponentAccumulator()
694
695 kwargs.setdefault('SeedContainerKey', [])
696 kwargs.setdefault('EstimatedTrackParametersKey', [])
697 kwargs.setdefault('ACTSTracksLocation', f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}Tracks')
698
699 if 'TrackingGeometryTool' not in kwargs:
700 from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg
701 kwargs.setdefault('TrackingGeometryTool', acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)))
702
703 acc.addEventAlgo(CompFactory.ActsTrk.SeedToTrackCnvAlg(name, **kwargs))
704 return acc
705
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)