ATLAS Offline Software
ITkActsHelpers.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2 
3 def isPrimaryPass(flags) -> bool:
4  return f"{flags.Tracking.ITkPrimaryPassConfig.value}Pass" not in flags.Tracking
5 
6 def isFastPrimaryPass(flags) -> bool:
7  if "ActiveConfig" in flags.Tracking and flags.Tracking.ActiveConfig.extension in ["ActsValidateF100", "ActsValidateF150"] and flags.Tracking.doITkFastTracking:
8  return True
9  return flags.Tracking.doITkFastTracking and isPrimaryPass(flags)
10 
11 def isValidationPass(flags) -> bool:
12  return "Validate" in flags.Tracking.ActiveConfig.extension
13 
14 def isProductionPass(flags) -> bool:
15  return not isValidationPass(flags)
16 
17 def primaryPassUsesActs(flags) -> bool:
18  from TrkConfig.TrkConfigFlags import ITkPrimaryPassConfig
19  return flags.Tracking.ITkPrimaryPassConfig in [ITkPrimaryPassConfig.Acts, \
20  ITkPrimaryPassConfig.ActsLegacy, \
21  ITkPrimaryPassConfig.ActsHeavyIon]
22 
23 def primaryPassExtension(flags) -> str:
24  # we rely on the fact that flags.Tracking.ITkPrimaryPassConfig.value is
25  # equal to ITk{extension}
26  return flags.Tracking.ITkPrimaryPassConfig.value.replace("ITk", "")
27 
28 def extractTrackingPasses(flags) -> list:
29  # Function for extracting the requested tracking passes that need to be scheduled
30  trackingPasses = []
31 
32  # Check there is only one chain
33  # for the time being we still technically allow for a list, but we should move to a single value eventually
34  if len(flags.Tracking.recoChain) != 1:
35  raise ValueError(f"Conflicting reco configuration: Tracking.recoChain should have only one element but we found {flags.Tracking.recoChain}")
36 
37  # Quick check about fast tracking configuration
38  from TrkConfig.TrkConfigFlags import ITkPrimaryPassConfig
39  if flags.Tracking.ITkPrimaryPassConfig is ITkPrimaryPassConfig.Acts:
40  if not flags.Tracking.doITkFastTracking:
41  raise ValueError(f"Main pass is set to Acts Fast Tracking but Tracking.doITkFastTracking is set to {flags.Tracking.doITkFastTracking}")
42  else:
43  if flags.Tracking.doITkFastTracking:
44  raise ValueError(f"Main pass is NOT set to Fast Tracking but Tracking.doITkFastTracking is set to {flags.Tracking.doITkFastTracking}")
45 
46  # Check the ambiguity resolution strategy
47  if flags.Acts.doAmbiguityResolution:
48  from ActsConfig.ActsConfigFlags import AmbiguitySolverMode
49  # If ambiguity resolution is requested, it means we want to schedule the ambiguity resolution algorithm
50  # this means that we must have AmbiguitySolverMode.OUTSIDE_TF
51  if flags.Acts.AmbiguitySolverMode is not AmbiguitySolverMode.OUTSIDE_TF:
52  raise ValueError(f"Conflicting reco configuration: Acts.doAmbiguityResolution has been requested and this will schedule the ACTS ambiguity solver algorithm, yet the ambiguity mode (set to {flags.Acts.AmbiguitySolverMode}) is not compatible with this.")
53 
54 
55  # Primary pass
56  trackingPasses += [flags.cloneAndReplace(
57  "Tracking.ActiveConfig",
58  f"Tracking.{flags.Tracking.ITkPrimaryPassConfig.value}Pass")]
59 
60  # Large Radius pass
61  if flags.Acts.doLargeRadius:
62  trackingPasses += [flags.cloneAndReplace(
63  "Tracking.ActiveConfig",
64  "Tracking.ITkActsLargeRadiusPass")]
65 
66  # Conversion pass
67  if flags.Acts.doITkConversion:
68  # Check that we can schedule the conversion
69  if not flags.Detector.EnableCalo:
70  raise ValueError("Problem in the job configuration: required reconstruction of photon conversion tracks but Calorimeter Detector is not enabled")
71  trackingPasses += [flags.cloneAndReplace(
72  "Tracking.ActiveConfig",
73  "Tracking.ITkActsConversionPass")]
74 
75  # Low pT pass
76  if flags.Acts.doLowPt:
77  trackingPasses += [flags.cloneAndReplace(
78  "Tracking.ActiveConfig",
79  "Tracking.ITkActsLowPtPass")]
80 
81  print("List of scheduled passes:")
82  for trackingPass in trackingPasses:
83  print(f'- {trackingPass.Tracking.ActiveConfig.extension}')
84 
85  return trackingPasses
86 
87 def getListOfGeneratedTrackParticles(flags) -> list[str]:
88  generateTrackCollections = ["InDetTrackParticles"]
89 
90  # loop on tracking passes
91  scheduledTrackingPasses: list = extractTrackingPasses(flags)
92  for currentFlags in scheduledTrackingPasses:
93  # Add the seed tracks
94  if currentFlags.Tracking.ActiveConfig.storeTrackSeeds:
95  # pixel seeds
96  generatePixelSegments = currentFlags.Detector.EnableITkPixel
97  generateStripSegments = currentFlags.Detector.EnableITkStrip
98 
99  # For conversion pass we do not process pixels
100  if currentFlags.Tracking.ActiveConfig.extension in ["ActsConversion", "ActsLargeRadius"]:
101  generatePixelSegments = False
102  # For main pass disable strips if fast tracking configuration
103  elif isFastPrimaryPass(currentFlags):
104  generateStripSegments = False
105 
106  if generatePixelSegments:
107  generateTrackCollections += [f'SiSPSeedSegments{currentFlags.Tracking.ActiveConfig.extension}PixelTrackParticles']
108  if generateStripSegments:
109  generateTrackCollections += [f'SiSPSeedSegments{currentFlags.Tracking.ActiveConfig.extension}StripTrackParticles']
110  if generatePixelSegments and generateStripSegments:
111  generateTrackCollections += [f'SiSPSeedSegments{currentFlags.Tracking.ActiveConfig.extension}TrackParticles']
112 
113  # Add CKF tracks
114  if currentFlags.Tracking.ActiveConfig.storeSiSPSeededTracks:
115  generateTrackCollections += [f'SiSPSeededTracks{currentFlags.Tracking.ActiveConfig.extension}TrackParticles']
116 
117  # Add tracks after ambi
118  # this is necessary only if ambiguity resolution is run and we
119  # store track particles in a separate container w.r.t InDetTrackParticles
120  if currentFlags.Acts.doAmbiguityResolution and currentFlags.Tracking.ActiveConfig.storeSeparateContainer:
121  generateTrackCollections += [f'InDet{currentFlags.Tracking.ActiveConfig.extension}TrackParticles']
122 
123  print('Here is the list of generated track particle collections:')
124  for collection in generateTrackCollections:
125  print(f'- {collection}')
126 
127  return generateTrackCollections
python.ITkActsHelpers.isPrimaryPass
bool isPrimaryPass(flags)
Definition: ITkActsHelpers.py:3
python.ITkActsHelpers.getListOfGeneratedTrackParticles
list[str] getListOfGeneratedTrackParticles(flags)
Definition: ITkActsHelpers.py:87
python.ITkActsHelpers.primaryPassUsesActs
bool primaryPassUsesActs(flags)
Definition: ITkActsHelpers.py:17
python.ITkActsHelpers.isProductionPass
bool isProductionPass(flags)
Definition: ITkActsHelpers.py:14
python.ITkActsHelpers.extractTrackingPasses
list extractTrackingPasses(flags)
Definition: ITkActsHelpers.py:28
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:25
python.ITkActsHelpers.isValidationPass
bool isValidationPass(flags)
Definition: ITkActsHelpers.py:11
python.ITkActsHelpers.primaryPassExtension
str primaryPassExtension(flags)
Definition: ITkActsHelpers.py:23
python.ITkActsHelpers.isFastPrimaryPass
bool isFastPrimaryPass(flags)
Definition: ITkActsHelpers.py:6