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