ATLAS Offline Software
ActsClusterizationConfig.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 AthenaConfiguration.Enums import BeamType
6 from ActsConfig.ActsUtilities import extractChildKwargs
7 
9  name: str = "ActsHgtdClusteringTool",
10  **kwargs) -> ComponentAccumulator:
11  acc = ComponentAccumulator()
12  acc.setPrivateTools(CompFactory.ActsTrk.HgtdClusteringTool(name, **kwargs))
13  return acc
14 
16  name: str = "ActsHgtdTimedClusteringTool",
17  **kwargs) -> ComponentAccumulator:
18  acc = ComponentAccumulator()
19  acc.setPrivateTools(CompFactory.ActsTrk.HgtdTimedClusteringTool(name, **kwargs))
20  return acc
21 
23  name: str = "ActsHgtdClusterizationAlg",
24  **kwargs) -> ComponentAccumulator:
25  acc = ComponentAccumulator()
26 
27  if flags.HGTD.Geometry.useGeoModelXml:
28  from HGTD_GeoModelXml.HGTD_GeoModelConfig import HGTD_ReadoutGeometryCfg
29  else:
30  from HGTD_GeoModel.HGTD_GeoModelConfig import HGTD_ReadoutGeometryCfg
31  acc.merge(HGTD_ReadoutGeometryCfg(flags))
32 
33  kwargs.setdefault('RDOContainerName', 'HGTD_RDOs')
34  kwargs.setdefault('ClusterContainerName', 'HGTD_Clusters')
35 
36  if 'ClusteringTool' not in kwargs:
37  from HGTD_Config.HGTD_ConfigFlags import ClusteringStrategy
38  if flags.HGTD.Acts.ClusteringStrategy is ClusteringStrategy.SinglePad:
39  kwargs.setdefault('ClusteringTool', acc.popToolsAndMerge(ActsHgtdClusteringToolCfg(flags)))
40  else:
41  kwargs.setdefault('ClusteringTool', acc.popToolsAndMerge(ActsHgtdTimedClusteringToolCfg(flags)))
42 
43  if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
44  from ActsConfig.ActsMonitoringConfig import ActsHgtdClusterizationMonitoringToolCfg
45  kwargs.setdefault('MonTool', acc.popToolsAndMerge(ActsHgtdClusterizationMonitoringToolCfg(flags)))
46 
47  acc.addEventAlgo(CompFactory.ActsTrk.HgtdClusterizationAlg(name, **kwargs))
48  return acc
49 
50 
51 
53  name: str = "ActsPixelClusteringTool",
54  **kwargs) -> ComponentAccumulator:
55  acc = ComponentAccumulator()
56 
57  if flags.Acts.Clusters.RetrieveChargeInformation:
58  from PixelConditionsAlgorithms.ITkPixelConditionsConfig import ITkPixelChargeCalibCondAlgCfg, ITkPixelOfflineCalibCondAlgCfg
59  acc.merge(ITkPixelChargeCalibCondAlgCfg(flags))
60  acc.merge(ITkPixelOfflineCalibCondAlgCfg(flags))
61  kwargs.setdefault('PixelChargeCalibCondData', 'ITkPixelChargeCalibCondData')
62 
63  from PixelReadoutGeometry.PixelReadoutGeometryConfig import ITkPixelReadoutManagerCfg
64  acc.merge(ITkPixelReadoutManagerCfg(flags))
65 
66  if "PixelLorentzAngleTool" not in kwargs:
67  from SiLorentzAngleTool.ITkPixelLorentzAngleConfig import ITkPixelLorentzAngleToolCfg
68  kwargs.setdefault("PixelLorentzAngleTool", acc.popToolsAndMerge( ITkPixelLorentzAngleToolCfg(flags) ))
69 
70  kwargs.setdefault('UseWeightedPosition', flags.Acts.Clusters.UseWeightedPosition)
71 
72  #Always use broad errors if cosmics
73  kwargs.setdefault('UseBroadErrors', flags.Acts.Clusters.UsePixelBroadErrors or flags.Beam.Type is BeamType.Cosmics)
74 
75  acc.setPrivateTools(CompFactory.ActsTrk.PixelClusteringTool(name, **kwargs))
76  return acc
77 
78 
80  name: str = "ActsStripClusteringTool",
81  **kwargs) -> ComponentAccumulator:
82  acc = ComponentAccumulator()
83 
84  if 'LorentzAngleTool' not in kwargs:
85  from SiLorentzAngleTool.ITkStripLorentzAngleConfig import ITkStripLorentzAngleToolCfg
86  kwargs.setdefault("LorentzAngleTool", acc.popToolsAndMerge(ITkStripLorentzAngleToolCfg(flags)))
87 
88  kwargs.setdefault("conditionsTool",None)
89  if "StripDetElStatus" not in kwargs :
90  from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig import (
91  ITkStripDetectorElementStatusAlgCfg)
92  acc.merge(ITkStripDetectorElementStatusAlgCfg(flags))
93  kwargs.setdefault("StripDetElStatus", "ITkStripDetectorElementStatus")
94 
95  # Disable noisy modules suppression
96  kwargs.setdefault("maxFiredStrips", 0)
97 
98  if flags.ITk.selectStripIntimeHits and 'timeBins' not in kwargs:
99  coll_25ns = flags.Beam.BunchSpacing<=25 and flags.Beam.Type is BeamType.Collisions
100  kwargs.setdefault("timeBins", "01X" if coll_25ns else "X1X")
101 
102 
103  #Error strategy
104  kwargs.setdefault("errorStrategy",flags.Acts.Clusters.StripClusteringErrorMode.value)
105 
106  acc.setPrivateTools(CompFactory.ActsTrk.StripClusteringTool(name, **kwargs))
107  return acc
108 
110  name: str = 'ActsPixelClusterizationAlg',
111  *,
112  useCache: bool = False,
113  **kwargs) -> ComponentAccumulator:
114  acc = ComponentAccumulator()
115 
116  kwargs.setdefault("IDHelper", "PixelID")
117  kwargs.setdefault("RDOContainerKey", "ITkPixelRDOs")
118  kwargs.setdefault("ClustersKey", "ITkPixelClusters")
119  kwargs.setdefault("DetEleCollKey", "ITkPixelDetectorElementCollection")
120  # Regional selection
121  kwargs.setdefault('RoIs', 'ActsRegionOfInterest')
122 
123  kwargs.setdefault('ClusterCacheBackend', 'ActsPixelClusterCache_Back')
124  kwargs.setdefault('ClusterCache', 'ActsPixelClustersCache')
125 
126  if 'RegSelTool' not in kwargs:
127  from RegionSelector.RegSelToolConfig import regSelTool_ITkPixel_Cfg
128  kwargs.setdefault('RegSelTool', acc.popToolsAndMerge(regSelTool_ITkPixel_Cfg(flags)))
129 
130  if 'ClusteringTool' not in kwargs:
131  kwargs.setdefault("ClusteringTool", acc.popToolsAndMerge(ActsPixelClusteringToolCfg(flags)))
132 
133  if 'DetElStatus' not in kwargs:
134  from PixelConditionsAlgorithms.ITkPixelConditionsConfig import ITkPixelDetectorElementStatusAlgCfg
135  acc.merge(ITkPixelDetectorElementStatusAlgCfg(flags))
136  kwargs.setdefault('DetElStatus', 'ITkPixelDetectorElementStatus')
137 
138  if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
139  from ActsConfig.ActsMonitoringConfig import ActsITkPixelClusterizationMonitoringToolCfg
140  kwargs.setdefault('MonTool', acc.popToolsAndMerge(ActsITkPixelClusterizationMonitoringToolCfg(flags)))
141 
142  if not useCache:
143  acc.addEventAlgo(CompFactory.ActsTrk.PixelClusterizationAlg(name, **kwargs))
144  else:
145  acc.addEventAlgo(CompFactory.ActsTrk.PixelCacheClusterizationAlg(name, **kwargs))
146  return acc
147 
149  name: str = 'ActsStripClusterizationAlg',
150  useCache: bool = False,
151  **kwargs) -> ComponentAccumulator:
152  acc = ComponentAccumulator()
153 
154  kwargs.setdefault("RDOContainerKey", "ITkStripRDOs")
155  kwargs.setdefault("ClustersKey", "ITkStripClusters")
156  kwargs.setdefault("IDHelper", "SCT_ID")
157  kwargs.setdefault("DetEleCollKey", "ITkStripDetectorElementCollection")
158  # Regional selection
159  kwargs.setdefault('RoIs', 'ActsRegionOfInterest')
160 
161  kwargs.setdefault('ClusterCacheBackend', 'ActsStripClusterCache_Back')
162  kwargs.setdefault('ClusterCache', 'ActsStripClustersCache')
163 
164  if 'RegSelTool' not in kwargs:
165  from RegionSelector.RegSelToolConfig import regSelTool_ITkStrip_Cfg
166  kwargs.setdefault('RegSelTool', acc.popToolsAndMerge(regSelTool_ITkStrip_Cfg(flags)))
167 
168  if 'DetElStatus' not in kwargs :
169  from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig import ITkStripDetectorElementStatusAlgCfg
170  acc.merge(ITkStripDetectorElementStatusAlgCfg(flags))
171  kwargs.setdefault("DetElStatus", "ITkStripDetectorElementStatus")
172 
173  if 'ClusteringTool' not in kwargs:
174  kwargs.setdefault("ClusteringTool", acc.popToolsAndMerge(ActsStripClusteringToolCfg(flags)))
175 
176  if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
177  from ActsConfig.ActsMonitoringConfig import ActsITkStripClusterizationMonitoringToolCfg
178  kwargs.setdefault('MonTool', acc.popToolsAndMerge(ActsITkStripClusterizationMonitoringToolCfg(flags)))
179 
180  if not useCache:
181  acc.addEventAlgo(CompFactory.ActsTrk.StripClusterizationAlg(name, **kwargs))
182  else:
183  acc.addEventAlgo(CompFactory.ActsTrk.StripCacheClusterizationAlg(name, **kwargs))
184  return acc
185 
187  name: str = "ActsClusterCacheCreatorAlg",
188  **kwargs) -> ComponentAccumulator:
189  acc = ComponentAccumulator()
190  kwargs.setdefault("PixelClustersCacheKey", "ActsPixelClusterCache_Back")
191  kwargs.setdefault("StripClustersCacheKey", "ActsStripClusterCache_Back")
192  acc.addEventAlgo(CompFactory.ActsTrk.Cache.CreatorAlg(name, **kwargs))
193  return acc
194 
196  name: str = "ActsPixelClusterPreparationAlg",
197  useCache: bool = False,
198  **kwargs) -> ComponentAccumulator:
199  acc = ComponentAccumulator()
200 
201  kwargs.setdefault('InputCollection', 'ITkPixelClusters')
202  kwargs.setdefault('DetectorElements', 'ITkPixelDetectorElementCollection')
203 
204  if 'RegSelTool' not in kwargs:
205  from RegionSelector.RegSelToolConfig import regSelTool_ITkPixel_Cfg
206  kwargs.setdefault('RegSelTool', acc.popToolsAndMerge(regSelTool_ITkPixel_Cfg(flags)))
207 
208  if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
209  from ActsConfig.ActsMonitoringConfig import ActsDataPreparationMonitoringToolCfg
210  kwargs.setdefault('MonTool', acc.popToolsAndMerge(ActsDataPreparationMonitoringToolCfg(flags,
211  name = "ActsPixelClusterPreparationMonitoringTool")))
212 
213  if not useCache:
214  acc.addEventAlgo(CompFactory.ActsTrk.PixelClusterDataPreparationAlg(name, **kwargs))
215  else:
216  acc.addEventAlgo(CompFactory.ActsTrk.PixelClusterCacheDataPreparationAlg(name, **kwargs))
217  return acc
218 
220  name: str = "ActsStripClusterPreparationAlg",
221  useCache: bool = False,
222  **kwargs) -> ComponentAccumulator:
223  acc = ComponentAccumulator()
224 
225  kwargs.setdefault('InputCollection', 'ITkStripClusters')
226  kwargs.setdefault('DetectorElements', 'ITkStripDetectorElementCollection')
227 
228  if 'RegSelTool' not in kwargs:
229  from RegionSelector.RegSelToolConfig import regSelTool_ITkStrip_Cfg
230  kwargs.setdefault('RegSelTool', acc.popToolsAndMerge(regSelTool_ITkStrip_Cfg(flags)))
231 
232  if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
233  from ActsConfig.ActsMonitoringConfig import ActsDataPreparationMonitoringToolCfg
234  kwargs.setdefault('MonTool', acc.popToolsAndMerge(ActsDataPreparationMonitoringToolCfg(flags,
235  name = "ActsStripClusterPreparationMonitoringTool")))
236 
237  if not useCache:
238  acc.addEventAlgo(CompFactory.ActsTrk.StripClusterDataPreparationAlg(name, **kwargs))
239  else:
240  acc.addEventAlgo(CompFactory.ActsTrk.StripClusterCacheDataPreparationAlg(name, **kwargs))
241  return acc
242 
244  name: str = 'ActsHgtdClusterPreparationAlg',
245  *,
246  useCache: bool = False,
247  **kwargs) -> ComponentAccumulator:
248  acc = ComponentAccumulator()
249  kwargs.setdefault('InputCollection', 'HGTDClusters')
250  kwargs.setdefault('DetectorElements', 'HGTD_DetectorElementCollection')
251 
252  # For the time being the HGTD Regional Selector tool does not exist
253 
254  if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
255  from ActsConfig.ActsMonitoringConfig import ActsDataPreparationMonitoringToolCfg
256  kwargs.setdefault('MonTool', acc.popToolsAndMerge(ActsDataPreparationMonitoringToolCfg(flags,
257  name = "ActsHgtdClusterPreparationMonitoringTool")))
258 
259  acc.addEventAlgo(CompFactory.ActsTrk.HgtdClusterDataPreparationAlg(name, **kwargs))
260  return acc
261 
262 
264  *,
265  RoIs: str = "ActsRegionOfInterest",
266  **kwargs: dict) -> ComponentAccumulator:
267  assert isinstance(RoIs, str)
268  assert isinstance(kwargs, dict)
269 
270  acc = ComponentAccumulator()
271 
272  # Clusterization is a three step process at maximum:
273  # (1) Cache Creation
274  # (2) Clusterization algorithm (reconstruction of clusters)
275  # (3) Preparation of collection for downstream algorithms
276  # What step is scheduled depends on the tracking pass and the activation
277  # or de-activation of caching mechanism
278 
279  kwargs.setdefault('processPixels', flags.Detector.EnableITkPixel)
280  kwargs.setdefault('processStrips', flags.Detector.EnableITkStrip)
281  kwargs.setdefault('processHGTD', flags.Acts.useHGTDClusterInTrackFinding and flags.Detector.EnableHGTD)
282  kwargs.setdefault('runCacheCreation', flags.Acts.useCache)
283  kwargs.setdefault('runReconstruction', True)
284  kwargs.setdefault('runPreparation', flags.Acts.useCache)
285 
286  # Step (1)
287  if kwargs['runCacheCreation']:
288  acc.merge(ActsClusterCacheCreatorAlgCfg(flags,
289  **extractChildKwargs(prefix='ClusterCacheCreatorAlg.', **kwargs)))
290 
291  # Step (2)
292  if kwargs['runReconstruction']:
293  if kwargs['processPixels']:
294  acc.merge(ActsPixelClusterizationAlgCfg(flags,
295  RoIs=RoIs,
296  **extractChildKwargs(prefix='PixelClusterizationAlg.', **kwargs)))
297  if kwargs['processStrips']:
298  acc.merge(ActsStripClusterizationAlgCfg(flags,
299  RoIs=RoIs,
300  **extractChildKwargs(prefix='StripClusterizationAlg.', **kwargs)))
301  if kwargs['processHGTD']:
302  acc.merge(ActsHgtdClusterizationAlgCfg(flags,
303  **extractChildKwargs(prefix='HgtdClusterizationAlg.', **kwargs)))
304  # Step (3)
305  if kwargs['runPreparation']:
306  if kwargs['processPixels']:
307  acc.merge(ActsPixelClusterPreparationAlgCfg(flags,
308  RoIs=RoIs,
309  **extractChildKwargs(prefix='PixelClusterPreparationAlg.', **kwargs)))
310 
311  if kwargs['processStrips']:
312  acc.merge(ActsStripClusterPreparationAlgCfg(flags,
313  RoIs=RoIs,
314  **extractChildKwargs(prefix='StripClusterPreparationAlg.', **kwargs)))
315 
316  if kwargs['processHGTD']:
317  acc.merge(ActsHgtdClusterPreparationAlgCfg(flags,
318  RoIs=RoIs,
319  **extractChildKwargs(prefix='HgtdClusterPreparationAlg.', **kwargs)))
320 
321  # Analysis extensions
322  if flags.Acts.Clusters.doAnalysis:
323  if kwargs['processPixels']:
324  from ActsConfig.ActsAnalysisConfig import ActsPixelClusterAnalysisAlgCfg
325  acc.merge(ActsPixelClusterAnalysisAlgCfg(flags, **extractChildKwargs(prefix='PixelClusterAnalysisAlg.', **kwargs)))
326 
327  if kwargs['processStrips']:
328  from ActsConfig.ActsAnalysisConfig import ActsStripClusterAnalysisAlgCfg
329  acc.merge(ActsStripClusterAnalysisAlgCfg(flags, **extractChildKwargs(prefix='StripClusterAnalysisAlg.', **kwargs)))
330 
331  return acc
332 
334  *,
335  previousActsExtension: str = None) -> ComponentAccumulator:
336  assert previousActsExtension is None or isinstance(previousActsExtension, str)
337 
338  acc = ComponentAccumulator()
339 
340  processPixels = flags.Detector.EnableITkPixel
341  processStrips = flags.Detector.EnableITkStrip
342  processHGTD = flags.Acts.useHGTDClusterInTrackFinding and flags.Detector.EnableHGTD
343 
344  kwargs = dict()
345  kwargs.setdefault('processPixels', processPixels)
346  kwargs.setdefault('processStrips', processStrips)
347  kwargs.setdefault('processHGTD', processHGTD)
348 
349  # Clusterization is a three step process at maximum:
350  # (1) Cache Creation
351  # (2) Clusterization algorithm (reconstruction of clusters)
352  # (3) Preparation of collection for downstream algorithms
353  # What step is scheduled depends on the tracking pass and the activation
354  # or de-activation of caching mechanism.
355 
356  # Secondary passes do not need cache creation, that has to be performed
357  # on the primary pass, and only if the caching is enabled.
358  # Reconstruction can run on secondary passes only if the caching is enabled,
359  # this is because we may need to process detector elements not processed
360  # on the primary pass.
361  # Preparation has to be performed on secondary passes always, and on primary
362  # pass only if cache is enabled. In the latter case it is useed to collect all
363  # the clusters from all views before passing them to the downstream algorithms
364 
365  from InDetConfig.ITkActsHelpers import isPrimaryPass, isValidationPass
366  if isPrimaryPass(flags) or isValidationPass(flags):
367  # Primary pass
368  # Validation passes count as primary passes
369  kwargs.setdefault('runCacheCreation', flags.Acts.useCache)
370  kwargs.setdefault('runReconstruction', True)
371  kwargs.setdefault('runPreparation', flags.Acts.useCache)
372  else:
373  # Secondary passes
374  kwargs.setdefault('runCacheCreation', False)
375  kwargs.setdefault('runReconstruction', flags.Acts.useCache)
376  kwargs.setdefault('runPreparation', True)
377 
378  # Name of the RoI to be used
379  roisName = f'{flags.Tracking.ActiveConfig.extension}RegionOfInterest'
380  # Large Radius Tracking uses full scan RoI created in the primary pass
381  if flags.Tracking.ActiveConfig.extension == 'ActsLargeRadius':
382  from InDetConfig.ITkActsHelpers import primaryPassExtension
383  roisName = f'{primaryPassExtension(flags)}RegionOfInterest'
384 
385  # Name of the Cluster container -> ITk + extension without "Acts" + Pixel or Strip + Clusters
386  # We also define the same collection from the main ACTS pass (primary)
387  primaryPixelClustersName = 'ITkPixelClusters'
388  primaryStripClustersName = 'ITkStripClusters'
389  primaryHgtdClustersName = 'HGTD_Clusters'
390  pixelClustersName = primaryPixelClustersName
391  stripClustersName = primaryStripClustersName
392  hgtdClustersName = primaryHgtdClustersName
393 
394  # If the workflow is not a primary pass, then change the name of the cluster collections adding that information
395  if flags.Tracking.ActiveConfig.isSecondaryPass:
396  keyPrefix = flags.Tracking.ActiveConfig.extension.replace("Acts", "")
397  pixelClustersName = f'ITk{keyPrefix}PixelClusters'
398  stripClustersName = f'ITk{keyPrefix}StripClusters'
399  hgtdClustersName = f'{keyPrefix}HGTD_Clusters'
400 
401  # Configuration for (1)
402  if kwargs['runCacheCreation']:
403  kwargs.setdefault('ClusterCacheCreatorAlg.name', f'{flags.Tracking.ActiveConfig.extension}ClusterCacheCreatorAlg')
404 
405  # Configuration for (2)
406  if kwargs['runReconstruction']:
407  if kwargs['processPixels']:
408  kwargs.setdefault('PixelClusterizationAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelClusterizationAlg')
409  kwargs.setdefault('PixelClusterizationAlg.useCache', flags.Acts.useCache)
410  kwargs.setdefault('PixelClusterizationAlg.ClustersKey', pixelClustersName)
411  kwargs.setdefault('PixelClusterizationAlg.ClusterCache', f'{flags.Tracking.ActiveConfig.extension}PixelClustersCache')
412  if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
413  kwargs.setdefault('PixelClusterizationAlg.ExtraInputs', {('ActsTrk::PrepRawDataAssociation', f'StoreGateSvc+{previousActsExtension}PrdMap')})
414 
415  if kwargs['processStrips']:
416  kwargs.setdefault('StripClusterizationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripClusterizationAlg')
417  kwargs.setdefault('StripClusterizationAlg.useCache', flags.Acts.useCache)
418  kwargs.setdefault('StripClusterizationAlg.ClustersKey', stripClustersName)
419  kwargs.setdefault('StripClusterizationAlg.ClusterCache', f'{flags.Tracking.ActiveConfig.extension}StripClustersCache')
420  if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
421  kwargs.setdefault('StripClusterizationAlg.ExtraInputs', {('ActsTrk::PrepRawDataAssociation', f'StoreGateSvc+{previousActsExtension}PrdMap')})
422 
423  if kwargs['processHGTD']:
424  kwargs.setdefault('HgtdClusterizationAlg.name', f'{flags.Tracking.ActiveConfig.extension}HgtdClusterizationAlg')
425  # HGTD algo has different convention ... need to use the same
426  kwargs.setdefault('HgtdClusterizationAlg.ClusterContainerName', hgtdClustersName)
427  if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
428  kwargs.setdefault('HgtdClusterizationAlg.ExtraInputs', {('ActsTrk::PrepRawDataAssociation', f'StoreGateSvc+{previousActsExtension}PrdMap')})
429 
430 
431  # Configuration for (3)
432  if kwargs['runPreparation']:
433  if kwargs['processPixels']:
434  kwargs.setdefault('PixelClusterPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelClusterPreparationAlg')
435  kwargs.setdefault('PixelClusterPreparationAlg.useCache', flags.Acts.useCache)
436  kwargs.setdefault('PixelClusterPreparationAlg.OutputCollection', f'{pixelClustersName}_Cached' if kwargs['runReconstruction'] else pixelClustersName)
437  # The input is one between the collection (w/o cache) and the IDC (w/ cache)
438  if not flags.Acts.useCache:
439  # Take the collection from the reconstruction step. If not available take the collection from the primary pass
440  kwargs.setdefault('PixelClusterPreparationAlg.InputCollection', pixelClustersName if kwargs['runReconstruction'] else primaryPixelClustersName)
441  kwargs.setdefault('PixelClusterPreparationAlg.InputIDC', '')
442  else:
443  kwargs.setdefault('PixelClusterPreparationAlg.InputCollection', '')
444  kwargs.setdefault('PixelClusterPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}PixelClustersCache')
445  # Prd Map for removing previously used measurements
446  if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
447  kwargs.setdefault('PixelClusterPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
448 
449  if kwargs['processStrips']:
450  kwargs.setdefault('StripClusterPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripClusterPreparationAlg')
451  kwargs.setdefault('StripClusterPreparationAlg.useCache', flags.Acts.useCache)
452  kwargs.setdefault('StripClusterPreparationAlg.OutputCollection', f'{stripClustersName}_Cached' if kwargs['runReconstruction'] else stripClustersName)
453  if not flags.Acts.useCache:
454  kwargs.setdefault('StripClusterPreparationAlg.InputCollection', stripClustersName if kwargs['runReconstruction'] else primaryStripClustersName)
455  kwargs.setdefault('StripClusterPreparationAlg.InputIDC', '')
456  else:
457  kwargs.setdefault('StripClusterPreparationAlg.InputCollection', '')
458  kwargs.setdefault('StripClusterPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}StripClustersCache')
459  # Prd Map for removing previously used measurements
460  if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
461  kwargs.setdefault('StripClusterPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
462 
463  if kwargs['processHGTD']:
464  kwargs.setdefault('HgtdClusterPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}HgtdClusterPreparationAlg')
465  kwargs.setdefault('HgtdClusterPreparationAlg.OutputCollection', f'{hgtdClustersName}_Cached' if kwargs['runReconstruction'] else hgtdClustersName)
466  kwargs.setdefault('HgtdClusterPreparationAlg.InputCollection', hgtdClustersName if kwargs['runReconstruction'] else primaryHgtdClustersName)
467  kwargs.setdefault('HgtdClusterPreparationAlg.InputIDC', '')
468  if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
469  kwargs.setdefault('HgtdClusterPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
470 
471  # Analysis algo(s)
472  if flags.Acts.Clusters.doAnalysis:
473  # Run analysis code on the resulting cluster collection produced by this tracking pass
474  # This collection is the result of (3) if it ran, else the result of (2). We are sure at least one of them run
475  if kwargs['processPixels']:
476  kwargs.setdefault('PixelClusterAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelClusterAnalysisAlg')
477  kwargs.setdefault('PixelClusterAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
478  kwargs.setdefault('PixelClusterAnalysisAlg.MonGroupName', f'{flags.Tracking.ActiveConfig.extension}ClusterAnalysisAlg')
479  kwargs.setdefault('PixelClusterAnalysisAlg.ClusterContainerKey', kwargs['PixelClusterPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['PixelClusterizationAlg.ClustersKey'])
480 
481  if kwargs['processStrips']:
482  kwargs.setdefault('StripClusterAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripClusterAnalysisAlg')
483  kwargs.setdefault('StripClusterAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
484  kwargs.setdefault('StripClusterAnalysisAlg.MonGroupName', f'{flags.Tracking.ActiveConfig.extension}ClusterAnalysisAlg')
485  kwargs.setdefault('StripClusterAnalysisAlg.ClusterContainerKey', kwargs['StripClusterPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['StripClusterizationAlg.ClustersKey'])
486 
487  if kwargs['processHGTD']:
488  kwargs.setdefault('HgtdClusterAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}HgtdClusterAnalysisAlg')
489  kwargs.setdefault('HgtdClusterAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
490  kwargs.setdefault('HgtdClusterAnalysisAlg.MonGroupName', f'{flags.Tracking.ActiveConfig.extension}ClusterAnalysisAlg')
491 
492  acc.merge(ActsMainClusterizationCfg(flags, RoIs=roisName, **kwargs))
493 
494  # Persistification
495  if flags.Acts.EDM.PersistifyClusters and kwargs['runReconstruction']:
496  toAOD = []
497  if kwargs['processPixels']:
498  pixel_cluster_shortlist = ['-validationMeasurementLink']
499  pixel_cluster_variables = '.'.join(pixel_cluster_shortlist)
500 
501  pixelClusterCollection = kwargs['PixelClusterizationAlg.ClustersKey']
502  toAOD += [f'xAOD::PixelClusterContainer#{pixelClusterCollection}',
503  f'xAOD::PixelClusterAuxContainer#{pixelClusterCollection}Aux.{pixel_cluster_variables}']
504 
505  if kwargs['processStrips']:
506  strip_cluster_shortlist = ['-validationMeasurementLink']
507  strip_cluster_variables = '.'.join(strip_cluster_shortlist)
508 
509  stripClusterCollection = kwargs['StripClusterizationAlg.ClustersKey']
510  toAOD += [f"xAOD::StripClusterContainer#{stripClusterCollection}",
511  f"xAOD::StripClusterAuxContainer#{stripClusterCollection}Aux.{strip_cluster_variables}"]
512 
513  if kwargs['processHGTD']:
514  hgtdClusterCollection = kwargs['HgtdClusterizationAlg.ClusterContainerName']
515  toAOD += [f"xAOD::HGTDClusterContainer#{hgtdClusterCollection}",
516  f"xAOD::HGTDClusterAuxContainer#{hgtdClusterCollection}Aux."]
517 
518  from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
519  acc.merge(addToAOD(flags, toAOD))
520 
521  return acc
522 
ActsClusterizationConfig.ActsPixelClusterizationAlgCfg
ComponentAccumulator ActsPixelClusterizationAlgCfg(flags, str name='ActsPixelClusterizationAlg', *bool useCache=False, **kwargs)
Definition: ActsClusterizationConfig.py:109
ActsClusterizationConfig.ActsHgtdClusteringToolCfg
ComponentAccumulator ActsHgtdClusteringToolCfg(flags, str name="ActsHgtdClusteringTool", **kwargs)
Definition: ActsClusterizationConfig.py:8
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
ITkPixelConditionsConfig.ITkPixelDetectorElementStatusAlgCfg
def ITkPixelDetectorElementStatusAlgCfg(flags, name="ITkPixelDetectorElementStatusAlg", **kwargs)
Definition: ITkPixelConditionsConfig.py:178
ActsMonitoringConfig.ActsHgtdClusterizationMonitoringToolCfg
ComponentAccumulator ActsHgtdClusterizationMonitoringToolCfg(flags, str name="ActsHgtdClusterizationMonitoringTool", **kwargs)
Definition: ActsMonitoringConfig.py:64
ActsMonitoringConfig.ActsITkStripClusterizationMonitoringToolCfg
ComponentAccumulator ActsITkStripClusterizationMonitoringToolCfg(flags, str name="ActsITkStripClusterizationMonitoringTool", **kwargs)
Definition: ActsMonitoringConfig.py:31
ActsClusterizationConfig.ActsHgtdClusterizationAlgCfg
ComponentAccumulator ActsHgtdClusterizationAlgCfg(flags, str name="ActsHgtdClusterizationAlg", **kwargs)
Definition: ActsClusterizationConfig.py:22
ActsAnalysisConfig.ActsStripClusterAnalysisAlgCfg
ComponentAccumulator ActsStripClusterAnalysisAlgCfg(flags, str name="ActsStripClusterAnalysisAlg", str extension="Acts", **kwargs)
Definition: ActsAnalysisConfig.py:385
RegSelToolConfig.regSelTool_ITkPixel_Cfg
def regSelTool_ITkPixel_Cfg(flags)
Definition: RegSelToolConfig.py:120
python.ITkStripConditionsAlgorithmsConfig.ITkStripDetectorElementStatusAlgCfg
def ITkStripDetectorElementStatusAlgCfg(flags, name="ITkStripDetectorElementStatusAlg", **kwargs)
Definition: ITkStripConditionsAlgorithmsConfig.py:91
ActsClusterizationConfig.ActsStripClusterizationAlgCfg
ComponentAccumulator ActsStripClusterizationAlgCfg(flags, str name='ActsStripClusterizationAlg', bool useCache=False, **kwargs)
Definition: ActsClusterizationConfig.py:148
ActsClusterizationConfig.ActsHgtdClusterPreparationAlgCfg
ComponentAccumulator ActsHgtdClusterPreparationAlgCfg(flags, str name='ActsHgtdClusterPreparationAlg', *bool useCache=False, **kwargs)
Definition: ActsClusterizationConfig.py:243
python.ITkPixelLorentzAngleConfig.ITkPixelLorentzAngleToolCfg
def ITkPixelLorentzAngleToolCfg(flags, name="ITkPixelLorentzAngleTool", **kwargs)
Definition: ITkPixelLorentzAngleConfig.py:14
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
python.PixelReadoutGeometryConfig.ITkPixelReadoutManagerCfg
def ITkPixelReadoutManagerCfg(flags, name="ITkPixelReadoutManager", **kwargs)
Definition: PixelReadoutGeometryConfig.py:13
ActsClusterizationConfig.ActsHgtdTimedClusteringToolCfg
ComponentAccumulator ActsHgtdTimedClusteringToolCfg(flags, str name="ActsHgtdTimedClusteringTool", **kwargs)
Definition: ActsClusterizationConfig.py:15
HGTD_GeoModelConfig.HGTD_ReadoutGeometryCfg
def HGTD_ReadoutGeometryCfg(flags)
Definition: python/HGTD_GeoModelConfig.py:23
ActsClusterizationConfig.ActsClusterizationCfg
ComponentAccumulator ActsClusterizationCfg(flags, *str previousActsExtension=None)
Definition: ActsClusterizationConfig.py:333
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
ActsClusterizationConfig.ActsStripClusterPreparationAlgCfg
ComponentAccumulator ActsStripClusterPreparationAlgCfg(flags, str name="ActsStripClusterPreparationAlg", bool useCache=False, **kwargs)
Definition: ActsClusterizationConfig.py:219
python.ITkActsHelpers.isValidationPass
bool isValidationPass(flags)
Definition: ITkActsHelpers.py:18
ActsMonitoringConfig.ActsITkPixelClusterizationMonitoringToolCfg
ComponentAccumulator ActsITkPixelClusterizationMonitoringToolCfg(flags, str name="ActsITkPixelClusterizationMonitoringTool", **kwargs)
Definition: ActsMonitoringConfig.py:13
python.OutputStreamConfig.addToAOD
def addToAOD(flags, itemOrList, **kwargs)
Definition: OutputStreamConfig.py:202
ITkPixelConditionsConfig.ITkPixelChargeCalibCondAlgCfg
def ITkPixelChargeCalibCondAlgCfg(flags, name="ITkPixelChargeCalibCondAlg", **kwargs)
Definition: ITkPixelConditionsConfig.py:63
ActsClusterizationConfig.ActsPixelClusterPreparationAlgCfg
ComponentAccumulator ActsPixelClusterPreparationAlgCfg(flags, str name="ActsPixelClusterPreparationAlg", bool useCache=False, **kwargs)
Definition: ActsClusterizationConfig.py:195
ActsClusterizationConfig.ActsMainClusterizationCfg
ComponentAccumulator ActsMainClusterizationCfg(flags, *str RoIs="ActsRegionOfInterest", **dict kwargs)
Definition: ActsClusterizationConfig.py:263
ITkPixelConditionsConfig.ITkPixelOfflineCalibCondAlgCfg
def ITkPixelOfflineCalibCondAlgCfg(flags, name="ITkPixelOfflineCalibCondAlg", **kwargs)
Definition: ITkPixelConditionsConfig.py:141
ActsClusterizationConfig.ActsClusterCacheCreatorAlgCfg
ComponentAccumulator ActsClusterCacheCreatorAlgCfg(flags, str name="ActsClusterCacheCreatorAlg", **kwargs)
Definition: ActsClusterizationConfig.py:186
ActsClusterizationConfig.ActsStripClusteringToolCfg
ComponentAccumulator ActsStripClusteringToolCfg(flags, str name="ActsStripClusteringTool", **kwargs)
Definition: ActsClusterizationConfig.py:79
ActsClusterizationConfig.ActsPixelClusteringToolCfg
ComponentAccumulator ActsPixelClusteringToolCfg(flags, str name="ActsPixelClusteringTool", **kwargs)
Definition: ActsClusterizationConfig.py:52
ActsAnalysisConfig.ActsPixelClusterAnalysisAlgCfg
ComponentAccumulator ActsPixelClusterAnalysisAlgCfg(flags, str name="ActsPixelClusterAnalysisAlg", str extension="Acts", **kwargs)
Definition: ActsAnalysisConfig.py:350