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  # forceTrackOnSeed isn't effective with secondary passes, which will have removed most/all of the seed measurements from the measurement containers.
122  kwargs.setdefault("forceTrackOnSeed", flags.Acts.forceTrackOnSeed and not flags.Tracking.ActiveConfig.isSecondaryPass)
123 
124  # Borrow many settings from flags.Tracking.ActiveConfig, normally initialised in createITkTrackingPassFlags() at
125  # https://gitlab.cern.ch/atlas/athena/-/blob/main/Tracking/TrkConfig/python/TrackingPassFlags.py#L121
126 
127  # bins in |eta|, used for both MeasurementSelectorConfig and TrackSelector::EtaBinnedConfig
128  if flags.Detector.GeometryITk:
129  kwargs.setdefault("etaBins", flags.Tracking.ActiveConfig.etaBins)
130  # new default chi2 cuts optimise efficiency vs speed. Set same value as Athena's Xi2maxNoAdd.
131  from InDetConfig.ITkActsHelpers import isFastPrimaryPass
132  if isFastPrimaryPass(flags):
133  kwargs.setdefault("chi2CutOff", [50])
134  kwargs.setdefault("chi2OutlierCutOff", [100])
135  else:
136  kwargs.setdefault("chi2CutOff", [25])
137  kwargs.setdefault("chi2OutlierCutOff", [25])
138  kwargs.setdefault("branchStopperPtMinFactor", 0.9)
139  kwargs.setdefault("branchStopperAbsEtaMaxExtra", 0.1)
140 
141  # Loosen the requirement on the minimum number of measurements on track candidate
142  # during track finding for tracks above a certain eta
143  kwargs.setdefault("branchStopperMeasCutReduce", flags.Acts.branchStopperMeasCutReduce)
144  kwargs.setdefault("branchStopperAbsEtaMeasCut", flags.Acts.branchStopperAbsEtaMeasCut)
145 
146  kwargs.setdefault("numMeasurementsCutOff", [1])
147 
148  # there is always an over and underflow bin so the first bin will be 0. - 0.5 the last bin 3.5 - inf.
149  # if all eta bins are >=0. the counter will be categorized by abs(eta) otherwise eta
150  kwargs.setdefault("StatisticEtaBins", [eta/10. for eta in range(5, 40, 5)]) # eta 0.0 - 4.0 in steps of 0.5
151 
152  kwargs.setdefault("absEtaMax", flags.Tracking.ActiveConfig.maxEta)
153  kwargs.setdefault("ptMin", [p / Units.GeV * UnitConstants.GeV for p in tolist(flags.Tracking.ActiveConfig.minPT)])
154  # 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.
155  kwargs.setdefault("z0Min", [-flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm for etabin in flags.Tracking.ActiveConfig.etaBins[:-1]])
156  kwargs.setdefault("z0Max", [ flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm for etabin in flags.Tracking.ActiveConfig.etaBins[:-1]])
157  kwargs.setdefault("d0Min", [-d0 / Units.mm * UnitConstants.mm for d0 in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
158  kwargs.setdefault("d0Max", [ d0 / Units.mm * UnitConstants.mm for d0 in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
159  kwargs.setdefault("minMeasurements", tolist(flags.Tracking.ActiveConfig.minClusters))
160  kwargs.setdefault("maxHoles", tolist(flags.Tracking.ActiveConfig.maxHoles))
161  kwargs.setdefault("minPixelHits", tolist(flags.Tracking.ActiveConfig.minPixel))
162  kwargs.setdefault("maxPixelHoles", tolist(flags.Tracking.ActiveConfig.maxPixelHoles))
163  kwargs.setdefault("maxStripHoles", tolist(flags.Tracking.ActiveConfig.maxSctHoles))
164  # The shared hits are not calculated until *after* the track selection, so maxSharedHits is not used.
165  # Even if that were not the case, we need the ambiguity solver to decide which track to drop.
166 
167 
168  # GBTS produces much purer seeds, so the branch stopper selections aren't needed with GBTS seeds.
169  if flags.Acts.SeedingStrategy is not SeedingStrategy.Gbts2:
170  kwargs.setdefault("ptMinMeasurements", seedOrder(flags, pixel=[3], strip=[6]))
171  kwargs.setdefault("absEtaMaxMeasurements", seedOrder(flags, pixel=[3], strip=[999999]))
172 
173  if 'TrackingGeometryTool' not in kwargs:
174  from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg
175  kwargs.setdefault(
176  "TrackingGeometryTool",
177  acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)),
178  )
179 
180  if 'ATLASConverterTool' not in kwargs:
181  from ActsConfig.ActsEventCnvConfig import ActsToTrkConverterToolCfg
182  kwargs.setdefault('ATLASConverterTool', acc.popToolsAndMerge(ActsToTrkConverterToolCfg(flags)))
183 
184  if 'TrackParamsEstimationTool' not in kwargs:
185  from ActsConfig.ActsTrackParamsEstimationConfig import ActsTrackParamsEstimationToolCfg
186  kwargs.setdefault('TrackParamsEstimationTool', acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags)))
187 
188  if 'ExtrapolationTool' not in kwargs:
189  from ActsConfig.ActsGeometryConfig import ActsExtrapolationToolCfg
190  kwargs.setdefault(
191  "ExtrapolationTool",
192  acc.popToolsAndMerge(ActsExtrapolationToolCfg(flags, MaxSteps=10000)),
193  )
194 
195  if flags.Acts.doPrintTrackStates and 'TrackStatePrinter' not in kwargs:
196  kwargs.setdefault(
197  "TrackStatePrinter",
198  acc.popToolsAndMerge(ActsTrackStatePrinterToolCfg(flags)),
199  )
200 
201  if 'FitterTool' not in kwargs:
202  from ActsConfig.ActsTrackFittingConfig import ActsFitterCfg
203  kwargs.setdefault(
204  'FitterTool',
205  acc.popToolsAndMerge(ActsFitterCfg(flags,
206  ReverseFilteringPt=0,
207  OutlierChi2Cut=float('inf')))
208  )
209 
210  if 'PixelCalibrator' not in kwargs:
211  from AthenaConfiguration.Enums import BeamType
212  from ActsConfig.ActsConfigFlags import PixelCalibrationStrategy
213  from ActsConfig.ActsMeasurementCalibrationConfig import ActsAnalogueClusteringToolCfg
214 
215  if not (flags.Tracking.doPixelDigitalClustering or flags.Beam.Type is BeamType.Cosmics):
216  if flags.Acts.PixelCalibrationStrategy in (PixelCalibrationStrategy.AnalogueClustering,
217  PixelCalibrationStrategy.AnalogueClusteringAfterSelection) :
218  kwargs.setdefault(
219  'PixelCalibrator',
220  acc.popToolsAndMerge(ActsAnalogueClusteringToolCfg(flags,
221  CalibrateAfterMeasurementSelection = flags.Acts.PixelCalibrationStrategy is PixelCalibrationStrategy.AnalogueClusteringAfterSelection))
222  )
223 
224  if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
225  from ActsConfig.ActsMonitoringConfig import ActsTrackFindingMonitoringToolCfg
226  kwargs.setdefault('MonTool', acc.popToolsAndMerge(
228 
229  acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
230  return acc
231 
232 
233 
235  **kwargs) -> ComponentAccumulator:
236  acc = ComponentAccumulator()
237 
238  # Define Uncalibrated Measurement keys
239  dataPrepPrefix = f'{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}'
240  if not flags.Tracking.ActiveConfig.isSecondaryPass:
241  dataPrepPrefix = ''
242  pixelClusters = f'ITk{dataPrepPrefix}PixelClusters'
243  stripClusters = f'ITk{dataPrepPrefix}StripClusters'
244  hgtdClusters = f'{dataPrepPrefix}HGTD_Clusters'
245  # If cache is activated the keys have "_Cached" as postfix
246  if flags.Acts.useCache:
247  pixelClusters += '_Cached'
248  stripClusters += '_Cached'
249  # Consider case detectors are not active
250 
251  # Understand what are the seeds we need to consider
252  pixelSeedLabels = ['PPP']
253  stripSeedLabels = ['SSS']
254  # Conversion and LRT do not process pixel seeds
255  from InDetConfig.ITkActsHelpers import isFastPrimaryPass
256  if flags.Tracking.ActiveConfig.extension in ['ActsConversion', 'ActsLargeRadius', 'ActsValidateLargeRadiusStandalone']:
257  pixelSeedLabels = None
258  # Main pass does not process strip seeds in the fast tracking configuration
259  elif isFastPrimaryPass(flags):
260  stripSeedLabels = None
261 
262  # Now set the seed and estimated parameters keys accordingly
263  pixelSeedKeys = [f'{flags.Tracking.ActiveConfig.extension}PixelSeeds']
264  stripSeedKeys = [f'{flags.Tracking.ActiveConfig.extension}StripSeeds']
265  pixelDetElements = ['ITkPixelDetectorElementCollection']
266  stripDetElements = ['ITkStripDetectorElementCollection']
267  if pixelSeedLabels is None:
268  pixelSeedKeys = None
269  pixelDetElements = None
270  if stripSeedLabels is None:
271  stripSeedKeys = None
272  stripDetElements = None
273 
274  kwargs.setdefault('ACTSTracksLocation', f"{flags.Tracking.ActiveConfig.extension}Tracks")
275  kwargs.setdefault('UncalibratedMeasurementContainerKeys', isdet(flags, pixel=[pixelClusters], strip=[stripClusters], hgtd=[hgtdClusters]))
276  kwargs.setdefault('SeedLabels', seedOrder(flags, pixel=pixelSeedLabels, strip=stripSeedLabels))
277  kwargs.setdefault('SeedContainerKeys', seedOrder(flags, pixel=pixelSeedKeys, strip=stripSeedKeys))
278  kwargs.setdefault('DetectorElementsKeys', seedOrder(flags, pixel=pixelDetElements, strip=stripDetElements))
279 
280  acc.merge(ActsMainTrackFindingAlgCfg(flags,
281  name=f"{flags.Tracking.ActiveConfig.extension}TrackFindingAlg",
282  **kwargs))
283 
284  # Analysis extensions
285  if flags.Acts.Tracks.doAnalysis:
286  from ActsConfig.ActsAnalysisConfig import ActsTrackAnalysisAlgCfg
287  acc.merge(ActsTrackAnalysisAlgCfg(flags,
288  name=f"{flags.Tracking.ActiveConfig.extension}TrackAnalysisAlg",
289  TracksLocation=f"{flags.Tracking.ActiveConfig.extension}Tracks"))
290 
291  # Seed To Track Monitoring
292  if len(kwargs["SeedContainerKeys"]) != len(kwargs["DetectorElementsKeys"]):
293  raise AttributeError("SeedContainerKeys and DetectorElementsKeys must have same size")
294 
295  for i in range(0, len(kwargs["SeedContainerKeys"])):
296  seedKey = kwargs["SeedContainerKeys"][i]
297  detElKey = kwargs["DetectorElementsKeys"][i]
298 
299  # make seed params
300  from ActsConfig.ActsAnalysisConfig import ActsBaseSeedsToTrackParamsAlgCfg
301  acc.merge(ActsBaseSeedsToTrackParamsAlgCfg(flags,
302  name = f'{seedKey}SeedsToTrackParamsAlg',
303  InputSeedContainerKey = seedKey,
304  DetectorElementsKey = detElKey,
305  OutputTrackParamsCollectionKey = f'{seedKey}Params'))
306 
307  from ActsConfig.ActsAnalysisConfig import ActsSeedToTrackAnalysisAlgCfg
308  acc.merge(ActsSeedToTrackAnalysisAlgCfg(flags,
309  name = f'{seedKey}ToTrackAnalysisAlg',
310  InputSeedCollection = seedKey,
311  InputTrackParamsCollection = f'{seedKey}Params',
312  InputDestinyCollection = f'{seedKey}Destiny'))
313 
314  # Persistification
315  if flags.Acts.EDM.PersistifyTracks:
316  trackColl = kwargs['ACTSTracksLocation']
317  from ActsConfig.ActsTrackFindingConfig import ActsToXAODTrackConverterAlgCfg
318  acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
319  name = f'{trackColl}ToXAODConverterAlg',
320  InputActsTracksLocation = trackColl,
321  OutputActsTracksLocation = trackColl))
322 
323  toAOD = []
324  prefix = f"{flags.Tracking.ActiveConfig.extension}"
325  toAOD += [f"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
326  f"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
327  f"xAOD::TrackStateContainer#{prefix}TrackStates",
328  f"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
329  f"xAOD::TrackParametersContainer#{prefix}TrackParameters",
330  f"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
331  f"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
332  f"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
333  f"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
334  f"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
335  f"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
336  f"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
337  f"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
338  f"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
339  from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
340  acc.merge(addToAOD(flags, toAOD))
341 
342  return acc
343 
344 
346  name: str = "ActsScoreBasedAmbiguityResolutionAlg",
347  **kwargs) -> ComponentAccumulator:
348  acc = ComponentAccumulator()
349 
350  kwargs.setdefault('TracksLocation', 'ActsTracks')
351  kwargs.setdefault('ResolvedTracksLocation', 'ActsResolvedTracks')
352  kwargs.setdefault('MinScore',1.0)
353  kwargs.setdefault('MinScoreSharedTracks', 1.0)
354  kwargs.setdefault('MaxSharedTracksPerMeasurement', 20)
355  kwargs.setdefault('MaxShared', 5)
356  kwargs.setdefault('MinUnshared', 5)
357  kwargs.setdefault('UseAmbiguityScoring', True)
358  kwargs.setdefault('jsonFileName', 'ActsAmbiguityConfig.json')
359 
360  if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
361  from ActsConfig.ActsMonitoringConfig import ActsAmbiguityResolutionMonitoringToolCfg
362  kwargs.setdefault('MonTool', acc.popToolsAndMerge(
364 
365  acc.addEventAlgo(
366  CompFactory.ActsTrk.ScoreBasedAmbiguityResolutionAlg(name, **kwargs))
367  return acc
368 
369 
371  name: str = "ActsAmbiguityResolutionAlg",
372  **kwargs) -> ComponentAccumulator:
373  acc = ComponentAccumulator()
374 
375  kwargs.setdefault('TracksLocation', 'ActsTracks')
376  kwargs.setdefault('ResolvedTracksLocation', 'ActsResolvedTracks')
377  kwargs.setdefault('MaximumSharedHits', 3)
378  kwargs.setdefault('MaximumIterations', 10000)
379  kwargs.setdefault('NMeasurementsMin', 7)
380 
381  if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
382  from ActsConfig.ActsMonitoringConfig import ActsAmbiguityResolutionMonitoringToolCfg
383  kwargs.setdefault('MonTool', acc.popToolsAndMerge(
385 
386  acc.addEventAlgo(
387  CompFactory.ActsTrk.AmbiguityResolutionAlg(name, **kwargs))
388  return acc
389 
390 
392  **kwargs) -> ComponentAccumulator:
393  acc = ComponentAccumulator()
394  kwargs.setdefault('TracksLocation', f"{flags.Tracking.ActiveConfig.extension}Tracks")
395  kwargs.setdefault('ResolvedTracksLocation', f"{flags.Tracking.ActiveConfig.extension}ResolvedTracks")
396  from ActsConfig.ActsConfigFlags import AmbiguitySolverStrategy
397 
398  if flags.Acts.AmbiguitySolverStrategy is AmbiguitySolverStrategy.ScoreBased:
400  name=f"{flags.Tracking.ActiveConfig.extension}ScoreBasedAmbiguityResolutionAlg",
401  **kwargs))
402  else:
403  acc.merge(ActsMainAmbiguityResolutionAlgCfg(flags,
404  name=f"{flags.Tracking.ActiveConfig.extension}AmbiguityResolutionAlg",
405  **kwargs))
406  # Analysis extensions
407  if flags.Acts.Tracks.doAnalysis:
408  from ActsConfig.ActsAnalysisConfig import ActsTrackAnalysisAlgCfg
409  acc.merge(ActsTrackAnalysisAlgCfg(flags,
410  name=f"{flags.Tracking.ActiveConfig.extension}ResolvedTrackAnalysisAlg",
411  TracksLocation=f"{flags.Tracking.ActiveConfig.extension}ResolvedTracks"))
412 
413  # Persistification
414  if flags.Acts.EDM.PersistifyTracks:
415  trackColl = kwargs['ResolvedTracksLocation']
416  from ActsConfig.ActsTrackFindingConfig import ActsToXAODTrackConverterAlgCfg
417  acc.merge(ActsToXAODTrackConverterAlgCfg(flags,
418  name = f'{trackColl}ToXAODConverterAlg',
419  InputActsTracksLocation = trackColl,
420  OutputActsTracksLocation = trackColl))
421 
422  toAOD = []
423  prefix = f"{flags.Tracking.ActiveConfig.extension}Resolved"
424  toAOD += [f"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
425  f"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
426  f"xAOD::TrackStateContainer#{prefix}TrackStates",
427  f"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
428  f"xAOD::TrackParametersContainer#{prefix}TrackParameters",
429  f"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
430  f"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
431  f"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
432  f"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
433  f"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
434  f"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
435  f"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
436  f"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
437  f"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
438  from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
439  acc.merge(addToAOD(flags, toAOD))
440 
441  return acc
442 
444  name: str = "ActsTrackToTrackParticleCnvAlg",
445  **kwargs) -> ComponentAccumulator:
446  acc = ComponentAccumulator()
447 
448  # Beam Spot Cond is a requirement
449  from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
450  acc.merge(BeamSpotCondAlgCfg(flags))
451 
452  if 'ExtrapolationTool' not in kwargs:
453  from ActsConfig.ActsGeometryConfig import ActsExtrapolationToolCfg
454  kwargs.setdefault('ExtrapolationTool', acc.popToolsAndMerge(ActsExtrapolationToolCfg(flags)) )
455 
456  kwargs.setdefault('BeamSpotKey', 'BeamSpotData')
457  kwargs.setdefault('FirstAndLastParameterOnly',True)
458  kwargs.setdefault('ComputeExpectedLayerPattern',True)
459 
460  det_elements=[]
461  element_types=[]
462  if flags.Detector.EnableITkPixel:
463  det_elements += ['ITkPixelDetectorElementCollection']
464  element_types += [1]
465  if flags.Detector.EnableITkStrip:
466  det_elements += ['ITkStripDetectorElementCollection']
467  element_types += [2]
468 
469  kwargs.setdefault('SiDetectorElementCollections',det_elements)
470  kwargs.setdefault('SiDetEleCollToMeasurementType',element_types)
471  kwargs.setdefault("PerigeeExpression", flags.Tracking.perigeeExpression)
472  kwargs.setdefault('VertexContainerKey', 'PrimaryVertices')
473  acc.addEventAlgo(
474  CompFactory.ActsTrk.TrackToTrackParticleCnvAlg(name, **kwargs))
475 
476  return acc
477 
479  name: str = "ActsToXAODTrackConverterAlg",
480  **kwargs) -> ComponentAccumulator:
481  acc = ComponentAccumulator()
482 
483  kwargs.setdefault('InputActsTracksLocation', '')
484  kwargs.setdefault('OutputActsTracksLocation', '')
485 
486  if 'TrackingGeometryTool' not in kwargs:
487  from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg
488  kwargs.setdefault('TrackingGeometryTool', acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)))
489 
490  acc.addEventAlgo(CompFactory.ActsTrk.ActsToXAODTrackConverterAlg(name, **kwargs))
491  return acc
SystemOfUnits
ActsTrackFindingConfig.ActsTrackFindingCfg
ComponentAccumulator ActsTrackFindingCfg(flags, **kwargs)
Definition: ActsTrackFindingConfig.py:234
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:345
ActsGeometryConfig.ActsVolumeIdToDetectorCollectionMappingAlgCfg
ComponentAccumulator ActsVolumeIdToDetectorCollectionMappingAlgCfg(flags, str name="ActsVolumeIdToDetectorCollectionMappingAlgCfg", **kwargs)
Definition: ActsGeometryConfig.py:294
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:478
ActsGeometryConfig.ActsExtrapolationToolCfg
ComponentAccumulator ActsExtrapolationToolCfg(flags, str name="ActsExtrapolationTool", **kwargs)
Definition: ActsGeometryConfig.py:152
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:143
ActsAnalysisConfig.ActsBaseSeedsToTrackParamsAlgCfg
ComponentAccumulator ActsBaseSeedsToTrackParamsAlgCfg(flags, str name="", **kwargs)
Definition: ActsAnalysisConfig.py:826
ActsTrackFindingConfig.ActsAmbiguityResolutionCfg
ComponentAccumulator ActsAmbiguityResolutionCfg(flags, **kwargs)
Definition: ActsTrackFindingConfig.py:391
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:370
python.OutputStreamConfig.addToAOD
def addToAOD(flags, itemOrList, **kwargs)
Definition: OutputStreamConfig.py:188
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:443
python.LArMinBiasAlgConfig.float
float
Definition: LArMinBiasAlgConfig.py:65
ActsAnalysisConfig.ActsSeedToTrackAnalysisAlgCfg
ComponentAccumulator ActsSeedToTrackAnalysisAlgCfg(flags, str name="ActsSeedToTrackAnalysisAlg", **kwargs)
Definition: ActsAnalysisConfig.py:7