ATLAS Offline Software
ActsTrackFindingConfig.py
Go to the documentation of this file.
1 
2 # Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 
4 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
5 from AthenaConfiguration.ComponentFactory import CompFactory
6 from ActsConfig.ActsConfigFlags import SeedingStrategy
7 import AthenaCommon.SystemOfUnits as Units
8 from ActsInterop import UnitConstants
9 
10 
11 # Tools
12 
13 def isdet(flags,
14  *,
15  pixel: list = None,
16  strip: list = None,
17  hgtd: list = None,
18  noStrip: bool = False) -> list:
19  keys = []
20  if flags.Detector.EnableITkPixel and pixel is not None:
21  keys += pixel
22  if flags.Detector.EnableITkStrip and strip is not None and not noStrip:
23  keys += strip
24  if flags.Acts.useHGTDClusterInTrackFinding and hgtd is not None:
25  keys += hgtd
26  return keys
27 
28 def seedOrder(flags,
29  *,
30  pixel: list = None,
31  strip: list = None) -> list:
32  keys = isdet(flags, pixel=pixel, strip=strip)
33  if flags.Acts.useStripSeedsFirst:
34  keys.reverse()
35  return keys
36 
38  name: str = "ActsTrackStatePrinterTool",
39  **kwargs) -> ComponentAccumulator:
40  acc = ComponentAccumulator()
41 
42  from InDetConfig.ITkActsHelpers import isFastPrimaryPass
43  kwargs.setdefault("InputSpacePoints", isdet(flags, noStrip=isFastPrimaryPass(flags),
44  pixel=['ITkPixelSpacePoints_Cached'] if flags.Acts.useCache else ['ITkPixelSpacePoints'],
45  strip=['ITkStripSpacePoints_Cached', 'ITkStripOverlapSpacePoints_Cached'] if flags.Acts.useCache else ['ITkStripSpacePoints', 'ITkStripOverlapSpacePoints']))
46 
47  if 'TrackingGeometryTool' not in kwargs:
48  from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg
49  kwargs.setdefault(
50  "TrackingGeometryTool",
51  acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)),
52  )
53 
54  acc.setPrivateTools(CompFactory.ActsTrk.TrackStatePrinterTool(name, **kwargs))
55  return acc
56 
57 # ACTS only algorithm
58 
60  name: str = "ActsTrackFindingAlg",
61  **kwargs) -> ComponentAccumulator:
62  def tolist(c):
63  return c if isinstance(c, list) else [c]
64 
65  acc = ComponentAccumulator()
66 
67  from ActsConfig.ActsGeometryConfig import ActsVolumeIdToDetectorCollectionMappingAlgCfg
68  # Remove HGTD Volumes from the propagation unless we need it
69  if not flags.Acts.useHGTDClusterInTrackFinding:
70  # HGTD has volume id:
71  # 2 for negative endcap
72  # 25 for positive endcap
73  kwargs.setdefault('EndOfTheWorldVolumeIds', [2, 25])
74 
76  kwargs.setdefault("ActsVolumeIdToDetectorElementCollectionMapKey", "VolumeIdToDetectorElementCollectionMap")
77  def filterCollections(flags, pixel_col, strip_col) :
78  ret=[]
79  if flags.Detector.GeometryITkPixel:
80  ret += [ pixel_col ]
81  if flags.Detector.GeometryITkStrip:
82  ret += [ strip_col ]
83  return ret
84 
85  if flags.Detector.EnableITkPixel:
86  from PixelConditionsAlgorithms.ITkPixelConditionsConfig import ITkPixelDetectorElementStatusAlgCfg
87  acc.merge(ITkPixelDetectorElementStatusAlgCfg(flags))
88  if flags.Detector.EnableITkStrip:
89  from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig import ITkStripDetectorElementStatusAlgCfg
90  acc.merge(ITkStripDetectorElementStatusAlgCfg(flags))
91  kwargs.setdefault("DetElStatus",filterCollections(flags,'ITkStripDetectorElementStatus','ITkPixelDetectorElementStatus'))
92 
93  # Seed labels and collections.
94  # These 3 lists must match element for element, reversed if flags.Acts.useStripSeedsFirst is True.
95  # Maybe it is best to start with strips where the occupancy is lower.
96  kwargs.setdefault("SeedLabels", seedOrder(flags, pixel=["PPP"], strip=["SSS"]))
97  kwargs.setdefault("SeedContainerKeys", seedOrder(flags, pixel=["ActsPixelSeeds"], strip=["ActsStripSeeds"]))
98  kwargs.setdefault('DetectorElementsKeys', seedOrder(flags, pixel=['ITkPixelDetectorElementCollection'], strip=['ITkStripDetectorElementCollection']))
99  if flags.Acts.Tracks.doAnalysis:
100  kwargs.setdefault("SeedDestiny", [f'{seedkey}Destiny' for seedkey in kwargs["SeedContainerKeys"]])
101 
102  kwargs.setdefault("UncalibratedMeasurementContainerKeys", isdet(flags, pixel=["ITkPixelClusters_Cached" if flags.Acts.useCache else "ITkPixelClusters"], strip=["ITkStripClusters_Cached" if flags.Acts.useCache else "ITkStripClusters"], hgtd=["HGTD_Clusters"]))
103 
104  kwargs.setdefault('ACTSTracksLocation', 'ActsTracks')
105 
106  kwargs.setdefault("maxPropagationStep", 10000)
107  kwargs.setdefault("skipDuplicateSeeds", flags.Acts.skipDuplicateSeeds)
108  kwargs.setdefault("seedMeasOffset", 1)
109 
110  # Ambi strategy 0 means do the ambiguity resolution outside the track finding.
111  kwargs.setdefault("ambiStrategy", flags.Acts.AmbiguitySolverMode.value)
112 
113  if (not flags.Acts.doAmbiguityResolution) :
114  kwargs.setdefault("MaximumSharedHits", 3)
115  kwargs.setdefault("MaximumIterations", 10000)
116  kwargs.setdefault("NMeasurementsMin", 7)
117 
118  kwargs.setdefault("refitSeeds", seedOrder(flags, pixel=[False], strip=[False]))
119  kwargs.setdefault("doTwoWay", flags.Acts.doTwoWayCKF)
120  kwargs.setdefault("autoReverseSearch", flags.Acts.autoReverseSearchCKF)
121 
122  # Borrow many settings from flags.Tracking.ActiveConfig, normally initialised in createITkTrackingPassFlags() at
123  # https://gitlab.cern.ch/atlas/athena/-/blob/main/Tracking/TrkConfig/python/TrackingPassFlags.py#L121
124 
125  # bins in |eta|, used for both MeasurementSelectorConfig and TrackSelector::EtaBinnedConfig
126  if flags.Detector.GeometryITk:
127  kwargs.setdefault("etaBins", flags.Tracking.ActiveConfig.etaBins)
128  # new default chi2 cuts optimise efficiency vs speed. Set same value as Athena's Xi2maxNoAdd.
129  from InDetConfig.ITkActsHelpers import isFastPrimaryPass
130  if isFastPrimaryPass(flags):
131  kwargs.setdefault("chi2CutOff", [50])
132  kwargs.setdefault("chi2OutlierCutOff", [100])
133  else:
134  kwargs.setdefault("chi2CutOff", [25])
135  kwargs.setdefault("chi2OutlierCutOff", [25])
136  kwargs.setdefault("branchStopperPtMinFactor", 0.9)
137  kwargs.setdefault("branchStopperAbsEtaMaxExtra", 0.1)
138 
139  # Loosen the requirement on the minimum number of measurements on track candidate
140  # during track finding for tracks above a certain eta
141  kwargs.setdefault("branchStopperMeasCutReduce", flags.Acts.branchStopperMeasCutReduce)
142  kwargs.setdefault("branchStopperAbsEtaMeasCut", flags.Acts.branchStopperAbsEtaMeasCut)
143 
144  kwargs.setdefault("numMeasurementsCutOff", [1])
145 
146  # there is always an over and underflow bin so the first bin will be 0. - 0.5 the last bin 3.5 - inf.
147  # if all eta bins are >=0. the counter will be categorized by abs(eta) otherwise eta
148  kwargs.setdefault("StatisticEtaBins", [eta/10. for eta in range(5, 40, 5)]) # eta 0.0 - 4.0 in steps of 0.5
149 
150  kwargs.setdefault("absEtaMax", flags.Tracking.ActiveConfig.maxEta)
151  kwargs.setdefault("ptMin", [p / Units.GeV * UnitConstants.GeV for p in tolist(flags.Tracking.ActiveConfig.minPT)])
152  # z0 cut is the same for all eta bins. I use the size of the eta bins limits minus one to find the number of bins.
153  kwargs.setdefault("z0Min", [-flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm for etabin in flags.Tracking.ActiveConfig.etaBins[:-1]])
154  kwargs.setdefault("z0Max", [ flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm for etabin in flags.Tracking.ActiveConfig.etaBins[:-1]])
155  kwargs.setdefault("d0Min", [-d0 / Units.mm * UnitConstants.mm for d0 in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
156  kwargs.setdefault("d0Max", [ d0 / Units.mm * UnitConstants.mm for d0 in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
157  kwargs.setdefault("minMeasurements", tolist(flags.Tracking.ActiveConfig.minClusters))
158  kwargs.setdefault("maxHoles", tolist(flags.Tracking.ActiveConfig.maxHoles))
159  kwargs.setdefault("minPixelHits", tolist(flags.Tracking.ActiveConfig.minPixel))
160  kwargs.setdefault("maxPixelHoles", tolist(flags.Tracking.ActiveConfig.maxPixelHoles))
161  kwargs.setdefault("maxStripHoles", tolist(flags.Tracking.ActiveConfig.maxSctHoles))
162  # The shared hits are not calculated until *after* the track selection, so maxSharedHits is not used.
163  # Even if that were not the case, we need the ambiguity solver to decide which track to drop.
164 
165 
166  # GBTS produces much purer seeds, so the branch stopper selections aren't needed with GBTS seeds.
167  if flags.Acts.SeedingStrategy is not SeedingStrategy.Gbts2:
168  kwargs.setdefault("ptMinMeasurements", seedOrder(flags, pixel=[3], strip=[6]))
169  kwargs.setdefault("absEtaMaxMeasurements", seedOrder(flags, pixel=[3], strip=[999999]))
170 
171  if 'TrackingGeometryTool' not in kwargs:
172  from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg
173  kwargs.setdefault(
174  "TrackingGeometryTool",
175  acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)),
176  )
177 
178  if 'ATLASConverterTool' not in kwargs:
179  from ActsConfig.ActsEventCnvConfig import ActsToTrkConverterToolCfg
180  kwargs.setdefault('ATLASConverterTool', acc.popToolsAndMerge(ActsToTrkConverterToolCfg(flags)))
181 
182  if 'TrackParamsEstimationTool' not in kwargs:
183  from ActsConfig.ActsTrackParamsEstimationConfig import ActsTrackParamsEstimationToolCfg
184  kwargs.setdefault('TrackParamsEstimationTool', acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags)))
185 
186  if 'ExtrapolationTool' not in kwargs:
187  from ActsConfig.ActsGeometryConfig import ActsExtrapolationToolCfg
188  kwargs.setdefault(
189  "ExtrapolationTool",
190  acc.popToolsAndMerge(ActsExtrapolationToolCfg(flags, MaxSteps=10000)),
191  )
192 
193  if flags.Acts.doPrintTrackStates and 'TrackStatePrinter' not in kwargs:
194  kwargs.setdefault(
195  "TrackStatePrinter",
196  acc.popToolsAndMerge(ActsTrackStatePrinterToolCfg(flags)),
197  )
198 
199  if 'FitterTool' not in kwargs:
200  from ActsConfig.ActsTrackFittingConfig import ActsFitterCfg
201  kwargs.setdefault(
202  'FitterTool',
203  acc.popToolsAndMerge(ActsFitterCfg(flags,
204  ReverseFilteringPt=0,
205  OutlierChi2Cut=float('inf')))
206  )
207 
208  if 'PixelCalibrator' not in kwargs:
209  from AthenaConfiguration.Enums import BeamType
210  from ActsConfig.ActsConfigFlags import PixelCalibrationStrategy
211  from ActsConfig.ActsMeasurementCalibrationConfig import ActsAnalogueClusteringToolCfg
212 
213  if not (flags.Tracking.doPixelDigitalClustering or flags.Beam.Type is BeamType.Cosmics):
214  if flags.Acts.PixelCalibrationStrategy in (PixelCalibrationStrategy.AnalogueClustering,
215  PixelCalibrationStrategy.AnalogueClusteringAfterSelection) :
216  kwargs.setdefault(
217  'PixelCalibrator',
218  acc.popToolsAndMerge(ActsAnalogueClusteringToolCfg(flags,
219  CalibrateAfterMeasurementSelection = flags.Acts.PixelCalibrationStrategy is PixelCalibrationStrategy.AnalogueClusteringAfterSelection))
220  )
221 
222  if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
223  from ActsConfig.ActsMonitoringConfig import ActsTrackFindingMonitoringToolCfg
224  kwargs.setdefault('MonTool', acc.popToolsAndMerge(
226 
227  acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
228  return acc
229 
230 
231 
233  **kwargs) -> ComponentAccumulator:
234  acc = ComponentAccumulator()
235 
236  # Define Uncalibrated Measurement keys
237  dataPrepPrefix = f'{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}'
238  if not flags.Tracking.ActiveConfig.isSecondaryPass:
239  dataPrepPrefix = ''
240  pixelClusters = f'ITk{dataPrepPrefix}PixelClusters'
241  stripClusters = f'ITk{dataPrepPrefix}StripClusters'
242  hgtdClusters = f'{dataPrepPrefix}HGTD_Clusters'
243  # If cache is activated the keys have "_Cached" as postfix
244  if flags.Acts.useCache:
245  pixelClusters += '_Cached'
246  stripClusters += '_Cached'
247  # Consider case detectors are not active
248 
249  # Understand what are the seeds we need to consider
250  pixelSeedLabels = ['PPP']
251  stripSeedLabels = ['SSS']
252  # Conversion and LRT do not process pixel seeds
253  from InDetConfig.ITkActsHelpers import isFastPrimaryPass
254  if flags.Tracking.ActiveConfig.extension in ['ActsConversion', 'ActsLargeRadius']:
255  pixelSeedLabels = None
256  # Main pass does not process strip seeds in the fast tracking configuration
257  elif isFastPrimaryPass(flags):
258  stripSeedLabels = None
259 
260  # Now set the seed and estimated parameters keys accordingly
261  pixelSeedKeys = [f'{flags.Tracking.ActiveConfig.extension}PixelSeeds']
262  stripSeedKeys = [f'{flags.Tracking.ActiveConfig.extension}StripSeeds']
263  pixelDetElements = ['ITkPixelDetectorElementCollection']
264  stripDetElements = ['ITkStripDetectorElementCollection']
265  if pixelSeedLabels is None:
266  pixelSeedKeys = None
267  pixelDetElements = None
268  if stripSeedLabels is None:
269  stripSeedKeys = None
270  stripDetElements = None
271 
272  kwargs.setdefault('ACTSTracksLocation', f"{flags.Tracking.ActiveConfig.extension}Tracks")
273  kwargs.setdefault('UncalibratedMeasurementContainerKeys', isdet(flags, pixel=[pixelClusters], strip=[stripClusters], hgtd=[hgtdClusters]))
274  kwargs.setdefault('SeedLabels', seedOrder(flags, pixel=pixelSeedLabels, strip=stripSeedLabels))
275  kwargs.setdefault('SeedContainerKeys', seedOrder(flags, pixel=pixelSeedKeys, strip=stripSeedKeys))
276  kwargs.setdefault('DetectorElementsKeys', seedOrder(flags, pixel=pixelDetElements, strip=stripDetElements))
277 
278  acc.merge(ActsMainTrackFindingAlgCfg(flags,
279  name=f"{flags.Tracking.ActiveConfig.extension}TrackFindingAlg",
280  **kwargs))
281 
282  # Analysis extensions
283  if flags.Acts.Tracks.doAnalysis:
284  from ActsConfig.ActsAnalysisConfig import ActsTrackAnalysisAlgCfg
285  acc.merge(ActsTrackAnalysisAlgCfg(flags,
286  name=f"{flags.Tracking.ActiveConfig.extension}TrackAnalysisAlg",
287  TracksLocation=f"{flags.Tracking.ActiveConfig.extension}Tracks"))
288 
289  # Seed To Track Monitoring
290  if len(kwargs["SeedContainerKeys"]) != len(kwargs["DetectorElementsKeys"]):
291  raise AttributeError("SeedContainerKeys and DetectorElementsKeys must have same size")
292 
293  for i in range(0, len(kwargs["SeedContainerKeys"])):
294  seedKey = kwargs["SeedContainerKeys"][i]
295  detElKey = kwargs["DetectorElementsKeys"][i]
296 
297  # make seed params
298  from ActsConfig.ActsAnalysisConfig import ActsBaseSeedsToTrackParamsAlgCfg
299  acc.merge(ActsBaseSeedsToTrackParamsAlgCfg(flags,
300  name = f'{seedKey}SeedsToTrackParamsAlg',
301  InputSeedContainerKey = seedKey,
302  DetectorElementsKey = detElKey,
303  OutputTrackParamsCollectionKey = f'{seedKey}Params'))
304 
305  from ActsConfig.ActsAnalysisConfig import ActsSeedToTrackAnalysisAlgCfg
306  acc.merge(ActsSeedToTrackAnalysisAlgCfg(flags,
307  name = f'{seedKey}ToTrackAnalysisAlg',
308  InputSeedCollection = seedKey,
309  InputTrackParamsCollection = f'{seedKey}Params',
310  InputDestinyCollection = f'{seedKey}Destiny'))
311 
312  # Persistification
313  if flags.Acts.EDM.PersistifyTracks:
314  trackColl = kwargs['ACTSTracksLocation']
315  from ActsConfig.ActsTrackFindingConfig import ActsToXAODTrackConverterAlgCfg
316  acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
317  name = f'{trackColl}ToXAODConverterAlg',
318  InputActsTracksLocation = trackColl,
319  OutputActsTracksLocation = trackColl))
320 
321  toAOD = []
322  prefix = f"{flags.Tracking.ActiveConfig.extension}"
323  toAOD += [f"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
324  f"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
325  f"xAOD::TrackStateContainer#{prefix}TrackStates",
326  f"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
327  f"xAOD::TrackParametersContainer#{prefix}TrackParameters",
328  f"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
329  f"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
330  f"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
331  f"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
332  f"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
333  f"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
334  f"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
335  f"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
336  f"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
337  from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
338  acc.merge(addToAOD(flags, toAOD))
339 
340  return acc
341 
342 
344  name: str = "ActsScoreBasedAmbiguityResolutionAlg",
345  **kwargs) -> ComponentAccumulator:
346  acc = ComponentAccumulator()
347 
348  kwargs.setdefault('TracksLocation', 'ActsTracks')
349  kwargs.setdefault('ResolvedTracksLocation', 'ActsResolvedTracks')
350  kwargs.setdefault('MinScore',1.0)
351  kwargs.setdefault('MinScoreSharedTracks', 1.0)
352  kwargs.setdefault('MaxSharedTracksPerMeasurement', 20)
353  kwargs.setdefault('MaxShared', 5)
354  kwargs.setdefault('MinUnshared', 5)
355  kwargs.setdefault('UseAmbiguityScoring', True)
356  kwargs.setdefault('jsonFileName', 'ActsAmbiguityConfig.json')
357 
358  if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
359  from ActsConfig.ActsMonitoringConfig import ActsAmbiguityResolutionMonitoringToolCfg
360  kwargs.setdefault('MonTool', acc.popToolsAndMerge(
362 
363  acc.addEventAlgo(
364  CompFactory.ActsTrk.ScoreBasedAmbiguityResolutionAlg(name, **kwargs))
365  return acc
366 
367 
369  name: str = "ActsAmbiguityResolutionAlg",
370  **kwargs) -> ComponentAccumulator:
371  acc = ComponentAccumulator()
372 
373  kwargs.setdefault('TracksLocation', 'ActsTracks')
374  kwargs.setdefault('ResolvedTracksLocation', 'ActsResolvedTracks')
375  kwargs.setdefault('MaximumSharedHits', 3)
376  kwargs.setdefault('MaximumIterations', 10000)
377  kwargs.setdefault('NMeasurementsMin', 7)
378 
379  if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
380  from ActsConfig.ActsMonitoringConfig import ActsAmbiguityResolutionMonitoringToolCfg
381  kwargs.setdefault('MonTool', acc.popToolsAndMerge(
383 
384  acc.addEventAlgo(
385  CompFactory.ActsTrk.AmbiguityResolutionAlg(name, **kwargs))
386  return acc
387 
388 
390  **kwargs) -> ComponentAccumulator:
391  acc = ComponentAccumulator()
392  kwargs.setdefault('TracksLocation', f"{flags.Tracking.ActiveConfig.extension}Tracks")
393  kwargs.setdefault('ResolvedTracksLocation', f"{flags.Tracking.ActiveConfig.extension}ResolvedTracks")
394  from ActsConfig.ActsConfigFlags import AmbiguitySolverStrategy
395 
396  if flags.Acts.AmbiguitySolverStrategy is AmbiguitySolverStrategy.ScoreBased:
398  name=f"{flags.Tracking.ActiveConfig.extension}ScoreBasedAmbiguityResolutionAlg",
399  **kwargs))
400  else:
401  acc.merge(ActsMainAmbiguityResolutionAlgCfg(flags,
402  name=f"{flags.Tracking.ActiveConfig.extension}AmbiguityResolutionAlg",
403  **kwargs))
404  # Analysis extensions
405  if flags.Acts.Tracks.doAnalysis:
406  from ActsConfig.ActsAnalysisConfig import ActsTrackAnalysisAlgCfg
407  acc.merge(ActsTrackAnalysisAlgCfg(flags,
408  name=f"{flags.Tracking.ActiveConfig.extension}ResolvedTrackAnalysisAlg",
409  TracksLocation=f"{flags.Tracking.ActiveConfig.extension}ResolvedTracks"))
410 
411  # Persistification
412  if flags.Acts.EDM.PersistifyTracks:
413  trackColl = kwargs['ResolvedTracksLocation']
414  from ActsConfig.ActsTrackFindingConfig import ActsToXAODTrackConverterAlgCfg
415  acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
416  name = f'{trackColl}ToXAODConverterAlg',
417  InputActsTracksLocation = trackColl,
418  OutputActsTracksLocation = trackColl))
419 
420  toAOD = []
421  prefix = f"{flags.Tracking.ActiveConfig.extension}Resolved"
422  toAOD += [f"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
423  f"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
424  f"xAOD::TrackStateContainer#{prefix}TrackStates",
425  f"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
426  f"xAOD::TrackParametersContainer#{prefix}TrackParameters",
427  f"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
428  f"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
429  f"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
430  f"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
431  f"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
432  f"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
433  f"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
434  f"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
435  f"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
436  from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
437  acc.merge(addToAOD(flags, toAOD))
438 
439  return acc
440 
442  name: str = "ActsTrackToTrackParticleCnvAlg",
443  **kwargs) -> ComponentAccumulator:
444  acc = ComponentAccumulator()
445 
446  # Beam Spot Cond is a requirement
447  from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
448  acc.merge(BeamSpotCondAlgCfg(flags))
449 
450  if 'ExtrapolationTool' not in kwargs:
451  from ActsConfig.ActsGeometryConfig import ActsExtrapolationToolCfg
452  kwargs.setdefault('ExtrapolationTool', acc.popToolsAndMerge(ActsExtrapolationToolCfg(flags)) )
453 
454  kwargs.setdefault('BeamSpotKey', 'BeamSpotData')
455  kwargs.setdefault('FirstAndLastParameterOnly',True)
456  kwargs.setdefault('ComputeExpectedLayerPattern',True)
457 
458  det_elements=[]
459  element_types=[]
460  if flags.Detector.EnableITkPixel:
461  det_elements += ['ITkPixelDetectorElementCollection']
462  element_types += [1]
463  if flags.Detector.EnableITkStrip:
464  det_elements += ['ITkStripDetectorElementCollection']
465  element_types += [2]
466 
467  kwargs.setdefault('SiDetectorElementCollections',det_elements)
468  kwargs.setdefault('SiDetEleCollToMeasurementType',element_types)
469  kwargs.setdefault("PerigeeExpression", flags.Tracking.perigeeExpression)
470  kwargs.setdefault('VertexContainerKey', 'PrimaryVertices')
471  acc.addEventAlgo(
472  CompFactory.ActsTrk.TrackToTrackParticleCnvAlg(name, **kwargs))
473 
474  return acc
475 
477  name: str = "ActsToXAODTrackConverterAlg",
478  **kwargs) -> ComponentAccumulator:
479  acc = ComponentAccumulator()
480 
481  kwargs.setdefault('InputActsTracksLocation', '')
482  kwargs.setdefault('OutputActsTracksLocation', '')
483 
484  if 'TrackingGeometryTool' not in kwargs:
485  from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg
486  kwargs.setdefault('TrackingGeometryTool', acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)))
487 
488  acc.addEventAlgo(CompFactory.ActsTrk.ActsToXAODTrackConverterAlg(name, **kwargs))
489  return acc
SystemOfUnits
ActsTrackFindingConfig.ActsTrackFindingCfg
ComponentAccumulator ActsTrackFindingCfg(flags, **kwargs)
Definition: ActsTrackFindingConfig.py:232
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
python.BeamSpotConditionsConfig.BeamSpotCondAlgCfg
def BeamSpotCondAlgCfg(flags, name="BeamSpotCondAlg", **kwargs)
Definition: BeamSpotConditionsConfig.py:7
ITkPixelConditionsConfig.ITkPixelDetectorElementStatusAlgCfg
def ITkPixelDetectorElementStatusAlgCfg(flags, name="ITkPixelDetectorElementStatusAlg", **kwargs)
Definition: ITkPixelConditionsConfig.py:178
ActsMonitoringConfig.ActsTrackFindingMonitoringToolCfg
ComponentAccumulator ActsTrackFindingMonitoringToolCfg(flags, str name="ActsTrackFindingMonitoringTool", **kwargs)
Definition: ActsMonitoringConfig.py:198
ActsEventCnvConfig.ActsToTrkConverterToolCfg
ComponentAccumulator ActsToTrkConverterToolCfg(flags, str name="ActsToTrkConverterTool", **kwargs)
Definition: ActsEventCnvConfig.py:6
ActsMeasurementCalibrationConfig.ActsAnalogueClusteringToolCfg
ComponentAccumulator ActsAnalogueClusteringToolCfg(flags, str name='ActsAnalogueClusteringTool', **kwargs)
Definition: ActsMeasurementCalibrationConfig.py:6
python.ITkStripConditionsAlgorithmsConfig.ITkStripDetectorElementStatusAlgCfg
def ITkStripDetectorElementStatusAlgCfg(flags, name="ITkStripDetectorElementStatusAlg", **kwargs)
Definition: ITkStripConditionsAlgorithmsConfig.py:91
ActsAnalysisConfig.ActsTrackAnalysisAlgCfg
ComponentAccumulator ActsTrackAnalysisAlgCfg(flags, str name="ActsTrackAnalysisAlg", **kwargs)
Definition: ActsAnalysisConfig.py:179
ActsTrackFindingConfig.ActsMainScoreBasedAmbiguityResolutionAlgCfg
ComponentAccumulator ActsMainScoreBasedAmbiguityResolutionAlgCfg(flags, str name="ActsScoreBasedAmbiguityResolutionAlg", **kwargs)
Definition: ActsTrackFindingConfig.py:343
ActsGeometryConfig.ActsVolumeIdToDetectorCollectionMappingAlgCfg
ComponentAccumulator ActsVolumeIdToDetectorCollectionMappingAlgCfg(flags, str name="ActsVolumeIdToDetectorCollectionMappingAlgCfg", **kwargs)
Definition: ActsGeometryConfig.py:297
ActsTrackFittingConfig.ActsFitterCfg
ComponentAccumulator ActsFitterCfg(flags, str name="ActsFitterTool", Optional[TrackFitterType] fitterKind=None, **kwargs)
Definition: ActsTrackFittingConfig.py:8
ActsTrackFindingConfig.isdet
list isdet(flags, *list pixel=None, list strip=None, list hgtd=None, bool noStrip=False)
Definition: ActsTrackFindingConfig.py:13
ActsTrackFindingConfig.seedOrder
list seedOrder(flags, *list pixel=None, list strip=None)
Definition: ActsTrackFindingConfig.py:28
ActsTrackFindingConfig.ActsToXAODTrackConverterAlgCfg
ComponentAccumulator ActsToXAODTrackConverterAlgCfg(flags, str name="ActsToXAODTrackConverterAlg", **kwargs)
Definition: ActsTrackFindingConfig.py:476
ActsGeometryConfig.ActsExtrapolationToolCfg
ComponentAccumulator ActsExtrapolationToolCfg(flags, str name="ActsExtrapolationTool", **kwargs)
Definition: ActsGeometryConfig.py:149
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
ActsTrackFindingConfig.ActsTrackStatePrinterToolCfg
ComponentAccumulator ActsTrackStatePrinterToolCfg(flags, str name="ActsTrackStatePrinterTool", **kwargs)
Definition: ActsTrackFindingConfig.py:37
ActsTrackParamsEstimationConfig.ActsTrackParamsEstimationToolCfg
ComponentAccumulator ActsTrackParamsEstimationToolCfg(ConfigFlags, str name="ActsTrackParamsEstimationTool", **kwargs)
Definition: ActsTrackParamsEstimationConfig.py:6
ActsGeometryConfig.ActsTrackingGeometryToolCfg
ComponentAccumulator ActsTrackingGeometryToolCfg(flags, str name="ActsTrackingGeometryTool")
Definition: ActsGeometryConfig.py:140
ActsAnalysisConfig.ActsBaseSeedsToTrackParamsAlgCfg
ComponentAccumulator ActsBaseSeedsToTrackParamsAlgCfg(flags, str name="", **kwargs)
Definition: ActsAnalysisConfig.py:826
ActsTrackFindingConfig.ActsAmbiguityResolutionCfg
ComponentAccumulator ActsAmbiguityResolutionCfg(flags, **kwargs)
Definition: ActsTrackFindingConfig.py:389
ActsMonitoringConfig.ActsAmbiguityResolutionMonitoringToolCfg
ComponentAccumulator ActsAmbiguityResolutionMonitoringToolCfg(flags, str name="ActsAmbiguityResolutionMonitoringTool", **kwargs)
Definition: ActsMonitoringConfig.py:215
ActsTrackFindingConfig.ActsMainAmbiguityResolutionAlgCfg
ComponentAccumulator ActsMainAmbiguityResolutionAlgCfg(flags, str name="ActsAmbiguityResolutionAlg", **kwargs)
Definition: ActsTrackFindingConfig.py:368
python.OutputStreamConfig.addToAOD
def addToAOD(flags, itemOrList, **kwargs)
Definition: OutputStreamConfig.py:150
ActsTrackFindingConfig.ActsMainTrackFindingAlgCfg
ComponentAccumulator ActsMainTrackFindingAlgCfg(flags, str name="ActsTrackFindingAlg", **kwargs)
Definition: ActsTrackFindingConfig.py:59
python.ITkActsHelpers.isFastPrimaryPass
bool isFastPrimaryPass(flags)
Definition: ITkActsHelpers.py:6
ActsTrackFindingConfig.ActsTrackToTrackParticleCnvAlgCfg
ComponentAccumulator ActsTrackToTrackParticleCnvAlgCfg(flags, str name="ActsTrackToTrackParticleCnvAlg", **kwargs)
Definition: ActsTrackFindingConfig.py:441
python.LArMinBiasAlgConfig.float
float
Definition: LArMinBiasAlgConfig.py:65
ActsAnalysisConfig.ActsSeedToTrackAnalysisAlgCfg
ComponentAccumulator ActsSeedToTrackAnalysisAlgCfg(flags, str name="ActsSeedToTrackAnalysisAlg", **kwargs)
Definition: ActsAnalysisConfig.py:7