ATLAS Offline Software
Loading...
Searching...
No Matches
ActsSpacePointFormationConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2024 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
8 # Unlike for clusters, we need some non-trivial logic to understand
9 # if we want reconstruct strip space points
10 # Strip clusters are always created in the Full-Scan primary pass, since they
11 # are used in Track Finding
12 # But for space points this really depends on the fast tracking configuration
13 # and the sequence of secondary passes
14
15 # If strip detector is disabled we reconstruct nothing
16 if not flags.Detector.EnableITkStrip:
17 return False
18
19 # If primary pass is not fast tracking configuration, we reconstruct all space points
20 if not flags.Tracking.doITkFastTracking:
21 return True
22
23 # If we schedule LRT or Low Pt configurations (both are full scan) we reconstruct
24 # space points in primary pass
25 # We do the same for the conversion pass
26 if flags.Acts.doLargeRadius or flags.Acts.doLowPt or flags.Acts.doITkConversion:
27 return True
28
29 # If we only have the primary pass, no need to process strip space points
30 return False
31
32
34 name: str = "ActsSpacePointCacheCreatorAlg",
35 **kwargs: dict) -> ComponentAccumulator:
36 acc = ComponentAccumulator()
37 kwargs.setdefault("PixelSpacePointCacheKey", "ActsPixelSpacePointCache_Back")
38 kwargs.setdefault("StripSpacePointCacheKey", "ActsStripSpacePointCache_Back")
39 kwargs.setdefault("StripOverlapSpacePointCacheKey", "ActsStripOverlapSpacePointCache_Back")
40 acc.addEventAlgo(CompFactory.ActsTrk.Cache.CreatorAlg(name, **kwargs))
41 return acc
42
44 name: str = "ActsPixelSpacePointTool",
45 **kwargs: dict) -> ComponentAccumulator:
46 from InDetConfig.ITkActsHelpers import isFastPrimaryPass
47
48 acc = ComponentAccumulator()
49 if isFastPrimaryPass(flags):
50 kwargs.setdefault('UseMaxVariance', True)
51 acc.setPrivateTools(CompFactory.ActsTrk.PixelSpacePointFormationTool(name, **kwargs))
52 return acc
53
55 name: str = "ActsStripSpacePointTool",
56 **kwargs: dict) -> ComponentAccumulator:
57 acc = ComponentAccumulator()
58
59 kwargs.setdefault("useSCTLayerDep_OverlapCuts", False)
60
61 kwargs.setdefault("useBeamSpotConstraint", flags.Acts.SpacePoints.useBeamSpotConstraintStrips)
62
63 if 'LorentzAngleTool' not in kwargs:
64 from SiLorentzAngleTool.ITkStripLorentzAngleConfig import ITkStripLorentzAngleToolCfg
65 kwargs.setdefault("LorentzAngleTool", acc.popToolsAndMerge(ITkStripLorentzAngleToolCfg(flags)) )
66
67 acc.setPrivateTools(CompFactory.ActsTrk.StripSpacePointFormationTool(name, **kwargs))
68 return acc
69
71 name: str = "ActsPixelSpacePointPreparationAlg",
72 *,
73 useCache: bool = False,
74 **kwargs: dict) -> ComponentAccumulator:
75 acc = ComponentAccumulator()
76
77 kwargs.setdefault('InputCollection', 'ITkPixelSpacePoints')
78 kwargs.setdefault('DetectorElements', 'ITkPixelDetectorElementCollection')
79
80 if 'RegSelTool' not in kwargs:
81 from RegionSelector.RegSelToolConfig import regSelTool_ITkPixel_Cfg
82 kwargs.setdefault('RegSelTool', acc.popToolsAndMerge(regSelTool_ITkPixel_Cfg(flags)))
83
84 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
85 from ActsConfig.ActsMonitoringConfig import ActsDataPreparationMonitoringToolCfg
86 kwargs.setdefault('MonTool', acc.popToolsAndMerge(ActsDataPreparationMonitoringToolCfg(flags,
87 name = "ActsPixelSpacePointPreparationMonitoringTool")))
88
89 if not useCache:
90 acc.addEventAlgo(CompFactory.ActsTrk.SpacePointDataPreparationAlg(name, **kwargs))
91 else:
92 acc.addEventAlgo(CompFactory.ActsTrk.SpacePointCacheDataPreparationAlg(name, **kwargs))
93 return acc
94
96 name: str = "ActsStripSpacePointPreparationAlg",
97 *,
98 useCache: bool = False,
99 **kwargs: dict) -> ComponentAccumulator:
100 acc = ComponentAccumulator()
101
102 kwargs.setdefault('InputCollection', 'ITkStripSpacePoints')
103 kwargs.setdefault('DetectorElements', 'ITkStripDetectorElementCollection')
104
105 if 'RegSelTool' not in kwargs:
106 from RegionSelector.RegSelToolConfig import regSelTool_ITkStrip_Cfg
107 kwargs.setdefault('RegSelTool', acc.popToolsAndMerge(regSelTool_ITkStrip_Cfg(flags)))
108
109 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
110 from ActsConfig.ActsMonitoringConfig import ActsDataPreparationMonitoringToolCfg
111 kwargs.setdefault('MonTool', acc.popToolsAndMerge(ActsDataPreparationMonitoringToolCfg(flags,
112 name = "ActsStripSpacePointPreparationMonitoringTool")))
113
114 if not useCache:
115 acc.addEventAlgo(CompFactory.ActsTrk.SpacePointDataPreparationAlg(name, **kwargs))
116 else:
117 acc.addEventAlgo(CompFactory.ActsTrk.SpacePointCacheDataPreparationAlg(name, **kwargs))
118 return acc
119
121 name: str = 'ActsStripOverlapSpacePointPreparationAlg',
122 *,
123 useCache: bool = False,
124 **kwargs: dict) -> ComponentAccumulator:
125 kwargs.setdefault('InputCollection', 'ITkStripOverlapSpacePoints')
126 return ActsStripSpacePointPreparationAlgCfg(flags, name=name, useCache=useCache, **kwargs)
127
129 name: str = "ActsPixelSpacePointFormationAlg",
130 *,
131 useCache: bool = False,
132 **kwargs: dict) -> ComponentAccumulator:
133 acc = ComponentAccumulator()
134
135 from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelReadoutGeometryCfg
136 acc.merge(ITkPixelReadoutGeometryCfg(flags))
137
138 kwargs.setdefault('PixelClusters', 'ITkPixelClusters')
139 kwargs.setdefault('PixelSpacePoints', 'ITkPixelSpacePoints')
140 kwargs.setdefault('ExtraOutputs',
141 [('xAOD::SpacePointContainer' , f'StoreGateSvc+{kwargs["PixelSpacePoints"]}.measurements')])
142
143 if useCache:
144 kwargs.setdefault('SPCacheBackend', 'ActsPixelSpacePointCache_Back')
145 kwargs.setdefault('SPCache', 'ActsPixelSpacePointCache')
146
147 if 'SpacePointFormationTool' not in kwargs:
148 kwargs.setdefault("SpacePointFormationTool", acc.popToolsAndMerge(ActsPixelSpacePointToolCfg(flags)))
149
150 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
151 from ActsConfig.ActsMonitoringConfig import ActsPixelSpacePointFormationMonitoringToolCfg
152 kwargs.setdefault("MonTool", acc.popToolsAndMerge(ActsPixelSpacePointFormationMonitoringToolCfg(flags)))
153
154
155 if useCache:
156 acc.addEventAlgo(CompFactory.ActsTrk.PixelCacheSpacePointFormationAlg(name, **kwargs))
157 else:
158 acc.addEventAlgo(CompFactory.ActsTrk.PixelSpacePointFormationAlg(name, **kwargs))
159
160 return acc
161
163 name: str = "ActsStripSpacePointFormationAlg",
164 *,
165 useCache: bool = False,
166 **kwargs: dict) -> ComponentAccumulator:
167 acc = ComponentAccumulator()
168
169 from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg
170 acc.merge(ITkStripReadoutGeometryCfg(flags))
171
172 from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
173 acc.merge(BeamSpotCondAlgCfg(flags))
174
175 from InDetConfig.SiSpacePointFormationConfig import ITkSiElementPropertiesTableCondAlgCfg
176 acc.merge(ITkSiElementPropertiesTableCondAlgCfg(flags))
177
178
179 kwargs.setdefault('StripClusters', 'ITkStripClusters')
180 kwargs.setdefault('StripSpacePoints', 'ITkStripSpacePoints')
181 kwargs.setdefault('StripOverlapSpacePoints', 'ITkStripOverlapSpacePoints')
182 kwargs.setdefault('ExtraOutputs',
183 [('xAOD::SpacePointContainer' , f'StoreGateSvc+{kwargs["StripSpacePoints"]}.measurements'),
184 ('xAOD::SpacePointContainer' , f'StoreGateSvc+{kwargs["StripOverlapSpacePoints"]}.measurements')])
185
186
187 if useCache:
188 kwargs.setdefault('SPCacheBackend', 'ActsStripSpacePointCache_Back')
189 kwargs.setdefault('SPCache', 'ActsStripSpacePointCache')
190 kwargs.setdefault('OSPCacheBackend', 'ActsStripOverlapSpacePointCache_Back')
191 kwargs.setdefault('OSPCache', 'ActsStripOverlapSpacePointCache')
192
193 if 'SpacePointFormationTool' not in kwargs:
194 kwargs.setdefault('SpacePointFormationTool', acc.popToolsAndMerge(ActsStripSpacePointToolCfg(flags)))
195
196 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
197 from ActsConfig.ActsMonitoringConfig import ActsStripSpacePointFormationMonitoringToolCfg
198 kwargs.setdefault("MonTool", acc.popToolsAndMerge(ActsStripSpacePointFormationMonitoringToolCfg(flags)))
199
200 if useCache:
201 acc.addEventAlgo(CompFactory.ActsTrk.StripCacheSpacePointFormationAlg(name, **kwargs))
202 else:
203 acc.addEventAlgo(CompFactory.ActsTrk.StripSpacePointFormationAlg(name, **kwargs))
204 return acc
205
207 *,
208 RoIs: str = "ActsRegionOfInterest",
209 **kwargs: dict) -> ComponentAccumulator:
210 acc = ComponentAccumulator()
211
212 kwargs.setdefault('processPixels', flags.Detector.EnableITkPixel)
213 kwargs.setdefault('processStrips', flags.Detector.EnableITkStrip)
214 kwargs.setdefault('runCacheCreation', flags.Acts.useCache)
215 kwargs.setdefault('runReconstruction', True)
216 kwargs.setdefault('runPreparation', flags.Acts.useCache)
217 kwargs.setdefault('processOverlapSpacePoints', True)
218
219 if kwargs['runCacheCreation']:
220 acc.merge(ActsSpacePointCacheCreatorAlgCfg(flags, **extractChildKwargs(prefix='SpacePointCacheCreatorAlg.', **kwargs)))
221
222 if kwargs['runReconstruction']:
223 if kwargs['processPixels']:
224 acc.merge(ActsPixelSpacePointFormationAlgCfg(flags,**extractChildKwargs(prefix='PixelSpacePointFormationAlg.', **kwargs)))
225
226 if kwargs['processStrips']:
227 acc.merge(ActsStripSpacePointFormationAlgCfg(flags, **extractChildKwargs(prefix='StripSpacePointFormationAlg.', **kwargs)))
228
229 if kwargs['runPreparation']:
230 if kwargs['processPixels']:
232 RoIs=RoIs,
233 **extractChildKwargs(prefix='PixelSpacePointPreparationAlg.', **kwargs)))
234 if kwargs['processStrips']:
236 RoIs=RoIs,
237 **extractChildKwargs(prefix='StripSpacePointPreparationAlg.', **kwargs)))
238 if kwargs['processOverlapSpacePoints']:
240 RoIs=RoIs,
241 **extractChildKwargs(prefix='StripOverlapSpacePointPreparationAlg.', **kwargs)))
242
243 # Analysis extensions
244 if flags.Acts.SpacePoints.doAnalysis:
245 if kwargs['processPixels']:
246 from ActsConfig.ActsAnalysisConfig import ActsPixelSpacePointAnalysisAlgCfg
247 acc.merge(ActsPixelSpacePointAnalysisAlgCfg(flags, **extractChildKwargs(prefix='PixelSpacePointAnalysisAlg.', **kwargs)))
248 if kwargs['processStrips']:
249 from ActsConfig.ActsAnalysisConfig import ActsStripSpacePointAnalysisAlgCfg
250 acc.merge(ActsStripSpacePointAnalysisAlgCfg(flags, **extractChildKwargs(prefix='StripSpacePointAnalysisAlg.', **kwargs)))
251 if kwargs['processOverlapSpacePoints']:
252 from ActsConfig.ActsAnalysisConfig import ActsStripOverlapSpacePointAnalysisAlgCfg
253 acc.merge(ActsStripOverlapSpacePointAnalysisAlgCfg(flags, **extractChildKwargs(prefix='StripOverlapSpacePointAnalysisAlg.', **kwargs)))
254
255 return acc
256
257# Config to be called outside of loops over tracking passes in main reco
258# Will configure subtools based on MainPass
259def ActsMainSpacePointFormationStandaloneCfg(flags) -> ComponentAccumulator:
260 primaryFlags = flags.cloneAndReplace(
261 "Tracking.ActiveConfig",
262 f"Tracking.{flags.Tracking.PrimaryPassConfig.value}Pass")
263 return ActsMainSpacePointFormationCfg(primaryFlags)
264
266 *,
267 previousActsExtension = None) -> ComponentAccumulator:
268 acc = ComponentAccumulator()
269
270 processPixels = flags.Detector.EnableITkPixel
271 processStrips = flags.Detector.EnableITkStrip
272
273 # For conversion and LRT pass we do not process pixels since we assume
274 # they have been processed on the primary pass.
275 from InDetConfig.ITkActsHelpers import isPrimaryPass
276 if flags.Tracking.ActiveConfig.extension in ["ActsConversion", "ActsLargeRadius", "ActsValidateLargeRadiusStandalone"]:
277 processPixels = False
278 elif isPrimaryPass(flags) and flags.Tracking.doITkFastTracking:
279 processStrips = reconstructStripSpacePointsInPrimaryPass(flags)
280 elif flags.Tracking.ActiveConfig.extension == "ActsValidateF100" and flags.Tracking.doITkFastTracking:
281 processStrips = False
282 kwargs = dict()
283 kwargs.setdefault('processPixels', processPixels)
284 kwargs.setdefault('processStrips', processStrips)
285
286 # Similarly to Clusterization, space point formation is a three step process at maximum:
287 # (1) Cache Creation
288 # (2) Space Point formation algorithm (reconstruction of space points)
289 # (3) Preparation of collection for downstream algorithms
290 # What step is scheduled depends on the tracking pass and the activation
291 # or de-activation of caching mechanism.
292
293 # Secondary passes do not need cache creation, that has to be performed
294 # on the primary pass, and only if the caching is enabled.
295 # Reconstruction can run on secondary passes only if the caching is enabled,
296 # this is because we may need to process detector elements not processed
297 # on the primary pass.
298 # Preparation has to be performed on secondary passes always, and on primary
299 # pass only if cache is enabled. In the latter case it is used to collect all
300 # the clusters from all views before passing them to the downstream algorithms
301
302 from InDetConfig.ITkActsHelpers import isValidationPass
303 if isPrimaryPass(flags) or isValidationPass(flags):
304 # Primary pass
305 # Validation passes count as primary passes
306 kwargs.setdefault('runCacheCreation', flags.Acts.useCache)
307 kwargs.setdefault('runReconstruction', True)
308 kwargs.setdefault('runPreparation', flags.Acts.useCache)
309 else:
310 # Secondary passes
311 kwargs.setdefault('runCacheCreation', False)
312 kwargs.setdefault('runReconstruction', flags.Acts.useCache)
313 kwargs.setdefault('runPreparation', True)
314
315 # Overlap Space Points may not be required
316 processOverlapSpacePoints = processStrips
317 if flags.Tracking.ActiveConfig.extension in ['ActsConversion']:
318 processOverlapSpacePoints = False
319 kwargs.setdefault('processOverlapSpacePoints', processOverlapSpacePoints)
320
321 # Name of the RoI to be used
322 roisName = f'{flags.Tracking.ActiveConfig.extension}RegionOfInterest'
323 # Large Radius pass uses the same roi as the primary pass (FS roi)
324 if flags.Tracking.ActiveConfig.extension == 'ActsLargeRadius':
325 from InDetConfig.ITkActsHelpers import primaryPassExtension
326 roisName = f'{primaryPassExtension(flags)}RegionOfInterest'
327
328 # Cluster Collection name(s) and Space Point Collection name(s)
329 # The name depends on the tracking pass as well as the cache mechanism
330 pixelClustersName = 'ITkPixelClusters'
331 stripClustersName = 'ITkStripClusters'
332 pixelSpacePointsName = 'ITkPixelSpacePoints'
333 stripSpacePointsName = 'ITkStripSpacePoints'
334 stripOverlapSpacePointsName = 'ITkStripOverlapSpacePoints'
335 # Secondary passes modify the collection name
336 if flags.Tracking.ActiveConfig.isSecondaryPass:
337 pixelClustersName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}PixelClusters'
338 stripClustersName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}StripClusters'
339 pixelSpacePointsName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}PixelSpacePoints'
340 stripSpacePointsName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}StripSpacePoints'
341 stripOverlapSpacePointsName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}StripOverlapSpacePoints'
342 # if cache is enabled, add "_Cached" at the end
343 if flags.Acts.useCache:
344 pixelClustersName += "_Cached"
345 stripClustersName += "_Cached"
346
347 # Primary collections for space points (i.e. produced by primary pass)
348 primaryPixelSpacePointsName = 'ITkPixelSpacePoints'
349 primaryStripSpacePointsName = 'ITkStripSpacePoints'
350 primaryStripOverlapSpacePointsName = 'ITkStripOverlapSpacePoints'
351
352 # Configuration for (1)
353 if kwargs['runCacheCreation']:
354 kwargs.setdefault('SpacePointCacheCreatorAlg.name', f'{flags.Tracking.ActiveConfig.extension}SpacePointCacheCreatorAlg')
355
356 # Configuration for (2)
357 if kwargs['runReconstruction']:
358 if kwargs['processPixels']:
359 kwargs.setdefault('PixelSpacePointFormationAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointFormationAlg')
360 kwargs.setdefault('PixelSpacePointFormationAlg.useCache', flags.Acts.useCache)
361 kwargs.setdefault('PixelSpacePointFormationAlg.SPCache', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointCache')
362 kwargs.setdefault('PixelSpacePointFormationAlg.PixelClusters', pixelClustersName)
363 kwargs.setdefault('PixelSpacePointFormationAlg.PixelSpacePoints', pixelSpacePointsName)
364
365 if kwargs['processStrips']:
366 kwargs.setdefault('StripSpacePointFormationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointFormationAlg')
367 kwargs.setdefault('StripSpacePointFormationAlg.useCache', flags.Acts.useCache)
368 kwargs.setdefault('StripSpacePointFormationAlg.SPCache', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointCache')
369 kwargs.setdefault('StripSpacePointFormationAlg.StripClusters', stripClustersName)
370 kwargs.setdefault('StripSpacePointFormationAlg.StripSpacePoints', stripSpacePointsName)
371
372 # Handling of Overlap Space Points
373 kwargs.setdefault('StripSpacePointFormationAlg.ProcessOverlapForStrip', kwargs['processOverlapSpacePoints'])
374 kwargs.setdefault('StripSpacePointFormationAlg.OSPCache', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointCache')
375 if kwargs['processOverlapSpacePoints']:
376 kwargs.setdefault('StripSpacePointFormationAlg.StripOverlapSpacePoints', stripOverlapSpacePointsName)
377 else:
378 # Disable keys
379 kwargs.setdefault('StripSpacePointFormationAlg.StripOverlapSpacePoints', '')
380
381 # Configuration for (3)
382 if kwargs['runPreparation']:
383 if kwargs['processPixels']:
384 kwargs.setdefault('PixelSpacePointPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointPreparationAlg')
385 kwargs.setdefault('PixelSpacePointPreparationAlg.useCache', flags.Acts.useCache)
386 kwargs.setdefault('PixelSpacePointPreparationAlg.OutputCollection', f'{pixelSpacePointsName}_Cached' if kwargs['runReconstruction'] else pixelSpacePointsName)
387 # The input is one between the collection (w/o cache) and the IDC (w/ cache)
388 if not flags.Acts.useCache:
389 # Take the collection from the reconstruction step. If not available take the collection from the primary pass
390 kwargs.setdefault('PixelSpacePointPreparationAlg.InputCollection', pixelSpacePointsName if kwargs['runReconstruction'] else primaryPixelSpacePointsName)
391 kwargs.setdefault('PixelSpacePointPreparationAlg.InputIDC', '')
392 else:
393 kwargs.setdefault('PixelSpacePointPreparationAlg.InputCollection', '')
394 kwargs.setdefault('PixelSpacePointPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointCache')
395 # Prd Map
396 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
397 kwargs.setdefault('PixelSpacePointPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
398
399
400 if kwargs['processStrips']:
401 kwargs.setdefault('StripSpacePointPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointPreparationAlg')
402 kwargs.setdefault('StripSpacePointPreparationAlg.useCache', flags.Acts.useCache)
403 kwargs.setdefault('StripSpacePointPreparationAlg.OutputCollection', f'{stripSpacePointsName}_Cached' if kwargs['runReconstruction'] else stripSpacePointsName)
404 # The input is one between the collection (w/o cache) and the IDC (w/ cache)
405 if not flags.Acts.useCache:
406 # Take the collection from the reconstruction step. If not available take the collection from the primary pass
407 kwargs.setdefault('StripSpacePointPreparationAlg.InputCollection', stripSpacePointsName if kwargs['runReconstruction'] else primaryStripSpacePointsName)
408 kwargs.setdefault('StripSpacePointPreparationAlg.InputIDC', '')
409 else:
410 kwargs.setdefault('StripSpacePointPreparationAlg.InputCollection', '')
411 kwargs.setdefault('StripSpacePointPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointCache')
412 # Prd Map
413 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
414 kwargs.setdefault('StripSpacePointPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
415
416 if kwargs['processOverlapSpacePoints']:
417 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointPreparationAlg')
418 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.useCache', flags.Acts.useCache)
419 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.OutputCollection', f'{stripOverlapSpacePointsName}_Cached' if kwargs['runReconstruction'] else stripOverlapSpacePointsName)
420 # The input is one between the collection (w/o cache) and the IDC (w/ cache)
421 if not flags.Acts.useCache:
422 # Take the collection from the reconstruction step. If not available take the collection from the primary pass
423 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputCollection', stripOverlapSpacePointsName if kwargs['runReconstruction'] else primaryStripOverlapSpacePointsName)
424 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputIDC', '')
425 else:
426 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputCollection', '')
427 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointCache')
428 # Prd Map
429 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
430 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
431
432 # Analysis algo(s)
433 if flags.Acts.SpacePoints.doAnalysis:
434 # Run analysis code on the resulting space point collection produced by this tracking pass
435 # This collection is the result of (3) if it ran, else the result of (2). We are sure at least one of them run
436 if kwargs['processPixels']:
437 kwargs.setdefault('PixelSpacePointAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointAnalysisAlg')
438 kwargs.setdefault('PixelSpacePointAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
439 kwargs.setdefault('PixelSpacePointAnalysisAlg.SpacePointContainerKey', kwargs['PixelSpacePointPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['PixelSpacePointFormationAlg.PixelSpacePoints'])
440
441 if kwargs['processStrips']:
442 kwargs.setdefault('StripSpacePointAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointAnalysisAlg')
443 kwargs.setdefault('StripSpacePointAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
444 kwargs.setdefault('StripSpacePointAnalysisAlg.SpacePointContainerKey', kwargs['StripSpacePointPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['StripSpacePointFormationAlg.StripSpacePoints'])
445
446 if kwargs['processOverlapSpacePoints']:
447 kwargs.setdefault('StripOverlapSpacePointAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointAnalysisAlg')
448 kwargs.setdefault('StripOverlapSpacePointAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
449 kwargs.setdefault('StripOverlapSpacePointAnalysisAlg.SpacePointContainerKey', kwargs['StripOverlapSpacePointPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['StripSpacePointFormationAlg.StripOverlapSpacePoints'])
450
451 acc.merge(ActsMainSpacePointFormationCfg(flags, RoIs=roisName, **kwargs))
452
453
454 # Persistification
455 if flags.Acts.EDM.PersistifySpacePoints and kwargs['runReconstruction']:
456 toAOD = []
457 pixel_spacepoint_shortlist = ['-measurements']
458 strip_spacepoint_shortlist = ['topHalfStripLength',
459 'bottomHalfStripLength',
460 'topStripDirection',
461 'bottomStripDirection',
462 'stripCenterDistance',
463 'topStripCenter',
464 'measurementLink']
465
466 pixel_spacepoint_variables = '.'.join(pixel_spacepoint_shortlist)
467 strip_spacepoint_variables = '.'.join(strip_spacepoint_shortlist)
468
469 if kwargs['processPixels']:
470 pixelSpacePointCollection = kwargs['PixelSpacePointFormationAlg.PixelSpacePoints']
471 toAOD += [f'xAOD::SpacePointContainer#{pixelSpacePointCollection}',
472 f"xAOD::SpacePointAuxContainer#{pixelSpacePointCollection}Aux.{pixel_spacepoint_variables}"]
473
474 if kwargs['processStrips']:
475 stripSpacePointCollection = kwargs['StripSpacePointFormationAlg.StripSpacePoints']
476 toAOD += [f'xAOD::SpacePointContainer#{stripSpacePointCollection}',
477 f"xAOD::SpacePointAuxContainer#{stripSpacePointCollection}Aux.{strip_spacepoint_variables}"]
478
479 if kwargs['processOverlapSpacePoints']:
480 stripSpacePointCollection = kwargs['StripSpacePointFormationAlg.StripOverlapSpacePoints']
481 toAOD += [f'xAOD::SpacePointContainer#{stripSpacePointCollection}',
482 f"xAOD::SpacePointAuxContainer#{stripSpacePointCollection}Aux.{strip_spacepoint_variables}"]
483
484 from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
485 acc.merge(addToAOD(flags, toAOD))
486
487 return acc
488
ComponentAccumulator ActsPixelSpacePointPreparationAlgCfg(flags, str name="ActsPixelSpacePointPreparationAlg", *, bool useCache=False, **dict kwargs)
ComponentAccumulator ActsSpacePointCacheCreatorAlgCfg(flags, str name="ActsSpacePointCacheCreatorAlg", **dict kwargs)
ComponentAccumulator ActsMainSpacePointFormationCfg(flags, *, str RoIs="ActsRegionOfInterest", **dict kwargs)
ComponentAccumulator ActsStripOverlapSpacePointPreparationAlgCfg(flags, str name='ActsStripOverlapSpacePointPreparationAlg', *, bool useCache=False, **dict kwargs)
ComponentAccumulator ActsSpacePointFormationCfg(flags, *, previousActsExtension=None)
ComponentAccumulator ActsPixelSpacePointToolCfg(flags, str name="ActsPixelSpacePointTool", **dict kwargs)
ComponentAccumulator ActsStripSpacePointPreparationAlgCfg(flags, str name="ActsStripSpacePointPreparationAlg", *, bool useCache=False, **dict kwargs)
ComponentAccumulator ActsStripSpacePointToolCfg(flags, str name="ActsStripSpacePointTool", **dict kwargs)
ComponentAccumulator ActsStripSpacePointFormationAlgCfg(flags, str name="ActsStripSpacePointFormationAlg", *, bool useCache=False, **dict kwargs)
ComponentAccumulator ActsMainSpacePointFormationStandaloneCfg(flags)
ComponentAccumulator ActsPixelSpacePointFormationAlgCfg(flags, str name="ActsPixelSpacePointFormationAlg", *, bool useCache=False, **dict kwargs)