ATLAS Offline Software
Loading...
Searching...
No Matches
ActsSpacePointFormationConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
4from AthenaConfiguration.ComponentFactory import CompFactory
5from ActsConfig.ActsUtilities import extractChildKwargs
6
7
9 name: str = "ActsSpacePointCacheCreatorAlg",
10 **kwargs: dict) -> ComponentAccumulator:
11 acc = ComponentAccumulator()
12 kwargs.setdefault("PixelSpacePointCacheKey", "ActsPixelSpacePointCache_Back")
13 kwargs.setdefault("StripSpacePointCacheKey", "ActsStripSpacePointCache_Back")
14 kwargs.setdefault("StripOverlapSpacePointCacheKey", "ActsStripOverlapSpacePointCache_Back")
15 acc.addEventAlgo(CompFactory.ActsTrk.Cache.CreatorAlg(name, **kwargs))
16 return acc
17
19 name: str = "ActsPixelSpacePointTool",
20 **kwargs: dict) -> ComponentAccumulator:
21 from InDetConfig.ITkActsHelpers import isFastPrimaryPass
22
23 acc = ComponentAccumulator()
24 if isFastPrimaryPass(flags):
25 kwargs.setdefault('UseMaxVariance', True)
26 acc.setPrivateTools(CompFactory.ActsTrk.PixelSpacePointFormationTool(name, **kwargs))
27 return acc
28
30 name: str = "ActsCorePixelSpacePointTool",
31 **kwargs: dict) -> ComponentAccumulator:
32 acc = ComponentAccumulator()
33
34 from ActsConfig.ActsGeometryConfig import ActsTrackingGeometrySvcCfg
35 acc.merge(ActsTrackingGeometrySvcCfg(flags))
36
37 acc.setPrivateTools(CompFactory.ActsTrk.CorePixelSpacePointFormationTool(name, **kwargs))
38 return acc
39
41 name: str = "ActsStripSpacePointTool",
42 **kwargs: dict) -> ComponentAccumulator:
43 acc = ComponentAccumulator()
44
45 kwargs.setdefault("useSCTLayerDep_OverlapCuts", False)
46
47 kwargs.setdefault("useBeamSpotConstraint", flags.Acts.SpacePoints.useBeamSpotConstraintStrips)
48
49 # Cosmic cut values are taken from InDetConfig.SiSpacePointFormationConfig
50 from AthenaConfiguration.Enums import BeamType
51 if flags.Beam.Type is BeamType.Cosmics:
52 kwargs.setdefault("StripLengthTolerance", 0.05)
53 kwargs.setdefault("OverlapLimitOpposite", 5)
54
55 if 'LorentzAngleTool' not in kwargs:
56 from SiLorentzAngleTool.ITkStripLorentzAngleConfig import ITkStripLorentzAngleToolCfg
57 kwargs.setdefault("LorentzAngleTool", acc.popToolsAndMerge(ITkStripLorentzAngleToolCfg(flags)) )
58
59 acc.setPrivateTools(CompFactory.ActsTrk.StripSpacePointFormationTool(name, **kwargs))
60 return acc
61
63 name: str = "ActsCoreStripSpacePointTool",
64 **kwargs: dict) -> ComponentAccumulator:
65 acc = ComponentAccumulator()
66
67 kwargs.setdefault("useSCTLayerDep_OverlapCuts", False)
68
69 # This tool has no equivalent of the Athena tool's useBeamSpotConstraint=False
70 if not flags.Acts.SpacePoints.useBeamSpotConstraintStrips:
71 raise RuntimeError("Acts.SpacePoints.useBeamSpotConstraintStrips=False is not supported "
72 "by CoreStripSpacePointFormationTool, use Acts.SpacePointStrategy.ActsTrk")
73
74 # Cosmic cut values are taken from InDetConfig.SiSpacePointFormationConfig
75 from AthenaConfiguration.Enums import BeamType
76 if flags.Beam.Type is BeamType.Cosmics:
77 kwargs.setdefault("Mode", "Cosmic")
78 kwargs.setdefault("StripLengthTolerance", 0.05)
79 kwargs.setdefault("OverlapLimitOpposite", 5)
80
81 if 'LorentzAngleTool' not in kwargs:
82 from SiLorentzAngleTool.ITkStripLorentzAngleConfig import ITkStripLorentzAngleToolCfg
83 kwargs.setdefault("LorentzAngleTool", acc.popToolsAndMerge(ITkStripLorentzAngleToolCfg(flags)) )
84
85 acc.setPrivateTools(CompFactory.ActsTrk.CoreStripSpacePointFormationTool(name, **kwargs))
86 return acc
87
89 name: str = "ActsPixelSpacePointPreparationAlg",
90 *,
91 useCache: bool = False,
92 **kwargs: dict) -> ComponentAccumulator:
93 acc = ComponentAccumulator()
94
95 kwargs.setdefault('InputCollection', 'ITkPixelSpacePoints')
96 kwargs.setdefault('DetectorElements', 'ITkPixelDetectorElementCollection')
97
98 if 'RegSelTool' not in kwargs:
99 from RegionSelector.RegSelToolConfig import regSelTool_ITkPixel_Cfg
100 kwargs.setdefault('RegSelTool', acc.popToolsAndMerge(regSelTool_ITkPixel_Cfg(flags)))
101
102 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
103 from ActsConfig.ActsMonitoringConfig import ActsDataPreparationMonitoringToolCfg
104 kwargs.setdefault('MonTool', acc.popToolsAndMerge(ActsDataPreparationMonitoringToolCfg(flags,
105 name = "ActsPixelSpacePointPreparationMonitoringTool")))
106
107 if not useCache:
108 acc.addEventAlgo(CompFactory.ActsTrk.SpacePointDataPreparationAlg(name, **kwargs))
109 else:
110 acc.addEventAlgo(CompFactory.ActsTrk.SpacePointCacheDataPreparationAlg(name, **kwargs))
111 return acc
112
114 name: str = "ActsStripSpacePointPreparationAlg",
115 *,
116 useCache: bool = False,
117 **kwargs: dict) -> ComponentAccumulator:
118 acc = ComponentAccumulator()
119
120 kwargs.setdefault('InputCollection', 'ITkStripSpacePoints')
121 kwargs.setdefault('DetectorElements', 'ITkStripDetectorElementCollection')
122
123 if 'RegSelTool' not in kwargs:
124 from RegionSelector.RegSelToolConfig import regSelTool_ITkStrip_Cfg
125 kwargs.setdefault('RegSelTool', acc.popToolsAndMerge(regSelTool_ITkStrip_Cfg(flags)))
126
127 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
128 from ActsConfig.ActsMonitoringConfig import ActsDataPreparationMonitoringToolCfg
129 kwargs.setdefault('MonTool', acc.popToolsAndMerge(ActsDataPreparationMonitoringToolCfg(flags,
130 name = "ActsStripSpacePointPreparationMonitoringTool")))
131
132 if not useCache:
133 acc.addEventAlgo(CompFactory.ActsTrk.SpacePointDataPreparationAlg(name, **kwargs))
134 else:
135 acc.addEventAlgo(CompFactory.ActsTrk.SpacePointCacheDataPreparationAlg(name, **kwargs))
136 return acc
137
139 name: str = 'ActsStripOverlapSpacePointPreparationAlg',
140 *,
141 useCache: bool = False,
142 **kwargs: dict) -> ComponentAccumulator:
143 kwargs.setdefault('InputCollection', 'ITkStripOverlapSpacePoints')
144 return ActsStripSpacePointPreparationAlgCfg(flags, name=name, useCache=useCache, **kwargs)
145
147 name: str = "ActsPixelSpacePointFormationAlg",
148 *,
149 useCache: bool = False,
150 **kwargs: dict) -> ComponentAccumulator:
151 acc = ComponentAccumulator()
152
153 from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelReadoutGeometryCfg
154 acc.merge(ITkPixelReadoutGeometryCfg(flags))
155
156 kwargs.setdefault('PixelClusters', 'ITkPixelClusters')
157 kwargs.setdefault('PixelSpacePoints', 'ITkPixelSpacePoints')
158 kwargs.setdefault('ExtraOutputs',
159 [('xAOD::SpacePointContainer' , f'StoreGateSvc+{kwargs["PixelSpacePoints"]}.measurements')])
160
161 if useCache:
162 kwargs.setdefault('SPCacheBackend', 'ActsPixelSpacePointCache_Back')
163 kwargs.setdefault('SPCache', 'ActsPixelSpacePointCache')
164
165 if 'SpacePointFormationTool' not in kwargs:
166 from ActsConfig.ActsConfigFlags import SpacePointStrategy
167 if flags.Acts.PixelSpacePointStrategy is SpacePointStrategy.ActsCore:
168 # The algorithm holds the geometry context this tool needs
169 from ActsAlignmentAlgs.AlignmentAlgsConfig import ActsGeometryContextAlgCfg
170 acc.merge(ActsGeometryContextAlgCfg(flags))
171 # ContextUtility also carries a magnetic field key, which is unused here
172 kwargs.setdefault('MagneticContextKey', '')
173 kwargs.setdefault("SpacePointFormationTool", acc.popToolsAndMerge(ActsCorePixelSpacePointToolCfg(flags)))
174 else:
175 kwargs.setdefault("SpacePointFormationTool", acc.popToolsAndMerge(ActsPixelSpacePointToolCfg(flags)))
176
177 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
178 from ActsConfig.ActsMonitoringConfig import ActsPixelSpacePointFormationMonitoringToolCfg
179 kwargs.setdefault("MonTool", acc.popToolsAndMerge(ActsPixelSpacePointFormationMonitoringToolCfg(flags)))
180
181
182 if useCache:
183 acc.addEventAlgo(CompFactory.ActsTrk.PixelCacheSpacePointFormationAlg(name, **kwargs))
184 else:
185 acc.addEventAlgo(CompFactory.ActsTrk.PixelSpacePointFormationAlg(name, **kwargs))
186
187 return acc
188
190 name: str = "ActsStripSpacePointFormationAlg",
191 *,
192 useCache: bool = False,
193 **kwargs: dict) -> ComponentAccumulator:
194 acc = ComponentAccumulator()
195
196 from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg
197 acc.merge(ITkStripReadoutGeometryCfg(flags))
198
199 from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
200 acc.merge(BeamSpotCondAlgCfg(flags))
201
202 from InDetConfig.SiSpacePointFormationConfig import ITkSiElementPropertiesTableCondAlgCfg
203 acc.merge(ITkSiElementPropertiesTableCondAlgCfg(flags))
204
205
206 kwargs.setdefault('StripClusters', 'ITkStripClusters')
207 kwargs.setdefault('StripSpacePoints', 'ITkStripSpacePoints')
208 kwargs.setdefault('StripOverlapSpacePoints', 'ITkStripOverlapSpacePoints')
209 kwargs.setdefault('ExtraOutputs',
210 [('xAOD::SpacePointContainer' , f'StoreGateSvc+{kwargs["StripSpacePoints"]}.measurements'),
211 ('xAOD::SpacePointContainer' , f'StoreGateSvc+{kwargs["StripOverlapSpacePoints"]}.measurements')])
212
213
214 if useCache:
215 kwargs.setdefault('SPCacheBackend', 'ActsStripSpacePointCache_Back')
216 kwargs.setdefault('SPCache', 'ActsStripSpacePointCache')
217 kwargs.setdefault('OSPCacheBackend', 'ActsStripOverlapSpacePointCache_Back')
218 kwargs.setdefault('OSPCache', 'ActsStripOverlapSpacePointCache')
219
220 from ActsConfig.ActsConfigFlags import SpacePointStrategy
221 useActsCore = flags.Acts.SpacePointStrategy is SpacePointStrategy.ActsCore
222
223 if 'SpacePointFormationTool' not in kwargs:
224 if useActsCore:
225 kwargs.setdefault('SpacePointFormationTool', acc.popToolsAndMerge(ActsCoreStripSpacePointToolCfg(flags)))
226 else:
227 kwargs.setdefault('SpacePointFormationTool', acc.popToolsAndMerge(ActsStripSpacePointToolCfg(flags)))
228
229 from AthenaConfiguration.Enums import BeamType
230 if flags.Beam.Type is BeamType.Cosmics:
231 kwargs.setdefault('OverrideBeamSpot', True)
232 kwargs.setdefault('VertexX', 0)
233 kwargs.setdefault('VertexZ', 0)
234 # The Athena implementation needs the far-away point for the vertical track
235 # hypothesis; ActsCore in cosmic mode ignores the vertex and must stay at the origin
236 kwargs.setdefault('VertexY', 0 if useActsCore else 99999999)
237 kwargs.setdefault('ProcessOverlapForStrip', False)
238
239 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
240 from ActsConfig.ActsMonitoringConfig import ActsStripSpacePointFormationMonitoringToolCfg
241 kwargs.setdefault("MonTool", acc.popToolsAndMerge(ActsStripSpacePointFormationMonitoringToolCfg(flags)))
242
243 if useCache:
244 acc.addEventAlgo(CompFactory.ActsTrk.StripCacheSpacePointFormationAlg(name, **kwargs))
245 else:
246 acc.addEventAlgo(CompFactory.ActsTrk.StripSpacePointFormationAlg(name, **kwargs))
247 return acc
248
250 *,
251 RoIs: str = "ActsRegionOfInterest",
252 **kwargs: dict) -> ComponentAccumulator:
253 acc = ComponentAccumulator()
254
255 kwargs.setdefault('processPixels', flags.Acts.SpacePoints.doPixel)
256 kwargs.setdefault('processStrips', flags.Acts.SpacePoints.doStrip)
257 kwargs.setdefault('runCacheCreation', flags.Acts.useCache)
258 kwargs.setdefault('runReconstruction', True)
259 kwargs.setdefault('runPreparation', flags.Acts.useCache)
260 kwargs.setdefault('processOverlapSpacePoints', True)
261
262 if kwargs['runCacheCreation']:
263 acc.merge(ActsSpacePointCacheCreatorAlgCfg(flags, **extractChildKwargs(prefix='SpacePointCacheCreatorAlg.', **kwargs)))
264
265 if kwargs['runReconstruction']:
266 if kwargs['processPixels']:
267 acc.merge(ActsPixelSpacePointFormationAlgCfg(flags,**extractChildKwargs(prefix='PixelSpacePointFormationAlg.', **kwargs)))
268
269 if kwargs['processStrips']:
270 acc.merge(ActsStripSpacePointFormationAlgCfg(flags, **extractChildKwargs(prefix='StripSpacePointFormationAlg.', **kwargs)))
271
272 if kwargs['runPreparation']:
273 if kwargs['processPixels']:
275 RoIs=RoIs,
276 **extractChildKwargs(prefix='PixelSpacePointPreparationAlg.', **kwargs)))
277 if kwargs['processStrips']:
279 RoIs=RoIs,
280 **extractChildKwargs(prefix='StripSpacePointPreparationAlg.', **kwargs)))
281 if kwargs['processOverlapSpacePoints']:
283 RoIs=RoIs,
284 **extractChildKwargs(prefix='StripOverlapSpacePointPreparationAlg.', **kwargs)))
285
286 # Analysis extensions
287 if flags.Acts.SpacePoints.doAnalysis:
288 if kwargs['processPixels']:
289 from ActsConfig.ActsAnalysisConfig import ActsPixelSpacePointAnalysisAlgCfg
290 acc.merge(ActsPixelSpacePointAnalysisAlgCfg(flags, **extractChildKwargs(prefix='PixelSpacePointAnalysisAlg.', **kwargs)))
291 if kwargs['processStrips']:
292 from ActsConfig.ActsAnalysisConfig import ActsStripSpacePointAnalysisAlgCfg
293 acc.merge(ActsStripSpacePointAnalysisAlgCfg(flags, **extractChildKwargs(prefix='StripSpacePointAnalysisAlg.', **kwargs)))
294 if kwargs['processOverlapSpacePoints']:
295 from ActsConfig.ActsAnalysisConfig import ActsStripOverlapSpacePointAnalysisAlgCfg
296 acc.merge(ActsStripOverlapSpacePointAnalysisAlgCfg(flags, **extractChildKwargs(prefix='StripOverlapSpacePointAnalysisAlg.', **kwargs)))
297
298 return acc
299
300# Config to be called outside of loops over tracking passes in main reco
301# Will configure subtools based on MainPass
302def ActsMainSpacePointFormationStandaloneCfg(flags) -> ComponentAccumulator:
303 primaryFlags = flags.cloneAndReplace(
304 "Tracking.ActiveConfig",
305 f"Tracking.{flags.Tracking.PrimaryPassConfig.value}Pass")
306 return ActsMainSpacePointFormationCfg(primaryFlags)
307
309 *,
310 previousActsExtension = None) -> ComponentAccumulator:
311 acc = ComponentAccumulator()
312
313 kwargs = dict()
314
315 processPixels = flags.Tracking.ActiveConfig.useITkPixelSeeding or (
316 flags.Acts.SpacePoints.doPixel and not flags.Tracking.ActiveConfig.isSecondaryPass)
317 processStrips = flags.Tracking.ActiveConfig.useITkStripSeeding or (
318 flags.Acts.SpacePoints.doStrip and not flags.Tracking.ActiveConfig.isSecondaryPass)
319
320 kwargs.setdefault('processPixels', processPixels)
321 kwargs.setdefault('processStrips', processStrips)
322
323 # Similarly to Clusterization, space point formation is a three step process at maximum:
324 # (1) Cache Creation
325 # (2) Space Point formation algorithm (reconstruction of space points)
326 # (3) Preparation of collection for downstream algorithms
327 # What step is scheduled depends on the tracking pass and the activation
328 # or de-activation of caching mechanism.
329
330 # Secondary passes do not need cache creation, that has to be performed
331 # on the primary pass, and only if the caching is enabled.
332 # Reconstruction can run on secondary passes only if the caching is enabled,
333 # this is because we may need to process detector elements not processed
334 # on the primary pass.
335 # Preparation has to be performed on secondary passes always, and on primary
336 # pass only if cache is enabled. In the latter case it is used to collect all
337 # the clusters from all views before passing them to the downstream algorithms
338
339 from InDetConfig.ITkActsHelpers import isValidationPass
340 if not flags.Tracking.ActiveConfig.isSecondaryPass or isValidationPass(flags):
341 # Primary pass
342 # Validation passes count as primary passes
343 kwargs.setdefault('runCacheCreation', flags.Acts.useCache)
344 kwargs.setdefault('runReconstruction', True)
345 kwargs.setdefault('runPreparation', flags.Acts.useCache)
346 else:
347 # Secondary passes
348 kwargs.setdefault('runCacheCreation', False)
349 kwargs.setdefault('runReconstruction', flags.Acts.useCache)
350 kwargs.setdefault('runPreparation', True)
351
352 # Overlap Space Points may not be required
353 processOverlapSpacePoints = kwargs['processStrips']
354 from AthenaConfiguration.Enums import BeamType
355 if flags.Tracking.ActiveConfig.extension in ['ActsConversion'] or flags.Beam.Type is BeamType.Cosmics:
356 processOverlapSpacePoints = False
357 kwargs.setdefault('processOverlapSpacePoints', processOverlapSpacePoints)
358
359 # Name of the RoI to be used
360 roisName = f'{flags.Tracking.ActiveConfig.extension}RegionOfInterest'
361 # Large Radius pass uses the same roi as the primary pass (FS roi)
362 if flags.Tracking.ActiveConfig.isLargeD0 and flags.Tracking.ActiveConfig.isSecondaryPass:
363 from InDetConfig.ITkActsHelpers import primaryPassExtension
364 roisName = f'{primaryPassExtension(flags)}RegionOfInterest'
365
366 # Cluster Collection name(s) and Space Point Collection name(s)
367 # The name depends on the tracking pass as well as the cache mechanism
368 pixelClustersName = 'ITkPixelClusters'
369 stripClustersName = 'ITkStripClusters'
370 pixelSpacePointsName = 'ITkPixelSpacePoints'
371 stripSpacePointsName = 'ITkStripSpacePoints'
372 stripOverlapSpacePointsName = 'ITkStripOverlapSpacePoints'
373 # Secondary passes modify the collection name
374 if flags.Tracking.ActiveConfig.isSecondaryPass:
375 pixelClustersName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}PixelClusters'
376 stripClustersName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}StripClusters'
377 pixelSpacePointsName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}PixelSpacePoints'
378 stripSpacePointsName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}StripSpacePoints'
379 stripOverlapSpacePointsName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}StripOverlapSpacePoints'
380 # if cache is enabled, add "_Cached" at the end
381 if flags.Acts.useCache:
382 pixelClustersName += "_Cached"
383 stripClustersName += "_Cached"
384
385 # Primary collections for space points (i.e. produced by primary pass)
386 primaryPixelSpacePointsName = 'ITkPixelSpacePoints'
387 primaryStripSpacePointsName = 'ITkStripSpacePoints'
388 primaryStripOverlapSpacePointsName = 'ITkStripOverlapSpacePoints'
389
390 # Configuration for (1)
391 if kwargs['runCacheCreation']:
392 kwargs.setdefault('SpacePointCacheCreatorAlg.name', f'{flags.Tracking.ActiveConfig.extension}SpacePointCacheCreatorAlg')
393
394 # Configuration for (2)
395 if kwargs['runReconstruction']:
396 if kwargs['processPixels']:
397 kwargs.setdefault('PixelSpacePointFormationAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointFormationAlg')
398 kwargs.setdefault('PixelSpacePointFormationAlg.useCache', flags.Acts.useCache)
399 kwargs.setdefault('PixelSpacePointFormationAlg.SPCache', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointCache')
400 kwargs.setdefault('PixelSpacePointFormationAlg.PixelClusters', pixelClustersName)
401 kwargs.setdefault('PixelSpacePointFormationAlg.PixelSpacePoints', pixelSpacePointsName)
402
403 if kwargs['processStrips']:
404 kwargs.setdefault('StripSpacePointFormationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointFormationAlg')
405 kwargs.setdefault('StripSpacePointFormationAlg.useCache', flags.Acts.useCache)
406 kwargs.setdefault('StripSpacePointFormationAlg.SPCache', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointCache')
407 kwargs.setdefault('StripSpacePointFormationAlg.StripClusters', stripClustersName)
408 kwargs.setdefault('StripSpacePointFormationAlg.StripSpacePoints', stripSpacePointsName)
409
410 # Handling of Overlap Space Points
411 kwargs.setdefault('StripSpacePointFormationAlg.ProcessOverlapForStrip', kwargs['processOverlapSpacePoints'])
412 kwargs.setdefault('StripSpacePointFormationAlg.OSPCache', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointCache')
413 if kwargs['processOverlapSpacePoints']:
414 kwargs.setdefault('StripSpacePointFormationAlg.StripOverlapSpacePoints', stripOverlapSpacePointsName)
415 else:
416 # Disable keys
417 kwargs.setdefault('StripSpacePointFormationAlg.StripOverlapSpacePoints', '')
418
419 # Configuration for (3)
420 if kwargs['runPreparation']:
421 if kwargs['processPixels']:
422 kwargs.setdefault('PixelSpacePointPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointPreparationAlg')
423 kwargs.setdefault('PixelSpacePointPreparationAlg.useCache', flags.Acts.useCache)
424 kwargs.setdefault('PixelSpacePointPreparationAlg.OutputCollection', f'{pixelSpacePointsName}_Cached' if kwargs['runReconstruction'] else pixelSpacePointsName)
425 # The input is one between the collection (w/o cache) and the IDC (w/ cache)
426 if not flags.Acts.useCache:
427 # Take the collection from the reconstruction step. If not available take the collection from the primary pass
428 kwargs.setdefault('PixelSpacePointPreparationAlg.InputCollection', pixelSpacePointsName if kwargs['runReconstruction'] else primaryPixelSpacePointsName)
429 kwargs.setdefault('PixelSpacePointPreparationAlg.InputIDC', '')
430 else:
431 kwargs.setdefault('PixelSpacePointPreparationAlg.InputCollection', '')
432 kwargs.setdefault('PixelSpacePointPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointCache')
433 # Prd Map
434 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
435 kwargs.setdefault('PixelSpacePointPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
436
437
438 if kwargs['processStrips']:
439 kwargs.setdefault('StripSpacePointPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointPreparationAlg')
440 kwargs.setdefault('StripSpacePointPreparationAlg.useCache', flags.Acts.useCache)
441 kwargs.setdefault('StripSpacePointPreparationAlg.OutputCollection', f'{stripSpacePointsName}_Cached' if kwargs['runReconstruction'] else stripSpacePointsName)
442 # The input is one between the collection (w/o cache) and the IDC (w/ cache)
443 if not flags.Acts.useCache:
444 # Take the collection from the reconstruction step. If not available take the collection from the primary pass
445 kwargs.setdefault('StripSpacePointPreparationAlg.InputCollection', stripSpacePointsName if kwargs['runReconstruction'] else primaryStripSpacePointsName)
446 kwargs.setdefault('StripSpacePointPreparationAlg.InputIDC', '')
447 else:
448 kwargs.setdefault('StripSpacePointPreparationAlg.InputCollection', '')
449 kwargs.setdefault('StripSpacePointPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointCache')
450 # Prd Map
451 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
452 kwargs.setdefault('StripSpacePointPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
453
454 if kwargs['processOverlapSpacePoints']:
455 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointPreparationAlg')
456 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.useCache', flags.Acts.useCache)
457 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.OutputCollection', f'{stripOverlapSpacePointsName}_Cached' if kwargs['runReconstruction'] else stripOverlapSpacePointsName)
458 # The input is one between the collection (w/o cache) and the IDC (w/ cache)
459 if not flags.Acts.useCache:
460 # Take the collection from the reconstruction step. If not available take the collection from the primary pass
461 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputCollection', stripOverlapSpacePointsName if kwargs['runReconstruction'] else primaryStripOverlapSpacePointsName)
462 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputIDC', '')
463 else:
464 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputCollection', '')
465 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointCache')
466 # Prd Map
467 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
468 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
469
470 # Analysis algo(s)
471 if flags.Acts.SpacePoints.doAnalysis:
472 # Run analysis code on the resulting space point collection produced by this tracking pass
473 # This collection is the result of (3) if it ran, else the result of (2). We are sure at least one of them run
474 if kwargs['processPixels']:
475 kwargs.setdefault('PixelSpacePointAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointAnalysisAlg')
476 kwargs.setdefault('PixelSpacePointAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
477 kwargs.setdefault('PixelSpacePointAnalysisAlg.SpacePointContainerKey', kwargs['PixelSpacePointPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['PixelSpacePointFormationAlg.PixelSpacePoints'])
478
479 if kwargs['processStrips']:
480 kwargs.setdefault('StripSpacePointAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointAnalysisAlg')
481 kwargs.setdefault('StripSpacePointAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
482 kwargs.setdefault('StripSpacePointAnalysisAlg.SpacePointContainerKey', kwargs['StripSpacePointPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['StripSpacePointFormationAlg.StripSpacePoints'])
483
484 if kwargs['processOverlapSpacePoints']:
485 kwargs.setdefault('StripOverlapSpacePointAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointAnalysisAlg')
486 kwargs.setdefault('StripOverlapSpacePointAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
487 kwargs.setdefault('StripOverlapSpacePointAnalysisAlg.SpacePointContainerKey', kwargs['StripOverlapSpacePointPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['StripSpacePointFormationAlg.StripOverlapSpacePoints'])
488
489 acc.merge(ActsMainSpacePointFormationCfg(flags, RoIs=roisName, **kwargs))
490
491
492 # Persistification
493 if kwargs['runReconstruction']:
494 from ActsConfig.ActsPersistificationConfig import PersistifySpacePoints
495 pixelSpacePointCollections = None if not kwargs['processPixels'] else [kwargs['PixelSpacePointFormationAlg.PixelSpacePoints']]
496 stripSpacePointCollections = []
497 if kwargs['processStrips']:
498 stripSpacePointCollections.append(kwargs['StripSpacePointFormationAlg.StripSpacePoints'])
499 if kwargs['processOverlapSpacePoints']:
500 stripSpacePointCollections.append(kwargs['StripSpacePointFormationAlg.StripOverlapSpacePoints'])
501 if len(stripSpacePointCollections) == 0:
502 stripSpacePointCollections = None
503
504 acc.merge(PersistifySpacePoints(flags,
505 pixelSpacePointCollections=pixelSpacePointCollections,
506 stripSpacePointCollections=stripSpacePointCollections))
507 return acc
508
ComponentAccumulator ActsSpacePointCacheCreatorAlgCfg(flags, str name="ActsSpacePointCacheCreatorAlg", **dict kwargs)
ComponentAccumulator ActsMainSpacePointFormationStandaloneCfg(flags)
ComponentAccumulator ActsPixelSpacePointToolCfg(flags, str name="ActsPixelSpacePointTool", **dict kwargs)
ComponentAccumulator ActsStripSpacePointPreparationAlgCfg(flags, str name="ActsStripSpacePointPreparationAlg", *, bool useCache=False, **dict kwargs)
ComponentAccumulator ActsStripOverlapSpacePointPreparationAlgCfg(flags, str name='ActsStripOverlapSpacePointPreparationAlg', *, bool useCache=False, **dict kwargs)
ComponentAccumulator ActsCorePixelSpacePointToolCfg(flags, str name="ActsCorePixelSpacePointTool", **dict kwargs)
ComponentAccumulator ActsPixelSpacePointFormationAlgCfg(flags, str name="ActsPixelSpacePointFormationAlg", *, bool useCache=False, **dict kwargs)
ComponentAccumulator ActsCoreStripSpacePointToolCfg(flags, str name="ActsCoreStripSpacePointTool", **dict kwargs)
ComponentAccumulator ActsMainSpacePointFormationCfg(flags, *, str RoIs="ActsRegionOfInterest", **dict kwargs)
ComponentAccumulator ActsPixelSpacePointPreparationAlgCfg(flags, str name="ActsPixelSpacePointPreparationAlg", *, bool useCache=False, **dict kwargs)
ComponentAccumulator ActsSpacePointFormationCfg(flags, *, previousActsExtension=None)
ComponentAccumulator ActsStripSpacePointToolCfg(flags, str name="ActsStripSpacePointTool", **dict kwargs)
ComponentAccumulator ActsStripSpacePointFormationAlgCfg(flags, str name="ActsStripSpacePointFormationAlg", *, bool useCache=False, **dict kwargs)