ATLAS Offline Software
Loading...
Searching...
No Matches
python.ITkActsHelpers Namespace Reference

Functions

bool isPrimaryPass (flags)
bool isFastPrimaryPass (flags)
bool isValidationPass (flags)
bool isProductionPass (flags)
bool primaryPassUsesDevice (flags)
bool secondaryPassUsesDevice (flags)
bool primaryPassUsesActs (flags)
str primaryPassExtension (flags)
str separateTrackParticleContainerName (flags)
list extractTrackingPasses (flags)
list[str] getListOfGeneratedTrackParticles (flags)

Function Documentation

◆ extractTrackingPasses()

list extractTrackingPasses ( flags)

Definition at line 58 of file ITkActsHelpers.py.

58def extractTrackingPasses(flags) -> list:
59 # Function for extracting the requested tracking passes that need to be scheduled
60 trackingPasses = []
61
62 # Check there is only one chain
63 # for the time being we still technically allow for a list, but we should move to a single value eventually
64 if len(flags.Tracking.recoChain) != 1:
65 raise ValueError(f"Conflicting reco configuration: Tracking.recoChain should have only one element but we found {flags.Tracking.recoChain}")
66
67 # Quick check about fast tracking configuration
68 from TrkConfig.TrkConfigFlags import ITkPrimaryPassConfig
69 if flags.Tracking.ITkPrimaryPassConfig is ITkPrimaryPassConfig.Acts:
70 if not flags.Tracking.doITkFastTracking:
71 raise ValueError(f"Main pass is set to Acts Fast Tracking but Tracking.doITkFastTracking is set to {flags.Tracking.doITkFastTracking}")
72 else:
73 if flags.Tracking.doITkFastTracking:
74 raise ValueError(f"Main pass is NOT set to Fast Tracking but Tracking.doITkFastTracking is set to {flags.Tracking.doITkFastTracking}")
75
76 # Check the ambiguity resolution strategy
77 if flags.Acts.doAmbiguityResolution:
78 from ActsConfig.ActsConfigFlags import AmbiguitySolverMode
79 # If ambiguity resolution is requested, it means we want to schedule the ambiguity resolution algorithm
80 # this means that we must have AmbiguitySolverMode.OUTSIDE_TF
81 if flags.Acts.AmbiguitySolverMode is not AmbiguitySolverMode.OUTSIDE_TF:
82 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.")
83
84
85 # Primary pass
86 trackingPasses += [flags.cloneAndReplace(
87 "Tracking.ActiveConfig",
88 f"Tracking.{flags.Tracking.ITkPrimaryPassConfig.value}Pass")]
89
90 # Conversion pass
91 if flags.Acts.doITkConversion:
92 # Check that we can schedule the conversion
93 if not flags.Detector.EnableCalo:
94 raise ValueError("Problem in the job configuration: required reconstruction of photon conversion tracks but Calorimeter Detector is not enabled")
95 trackingPasses += [flags.cloneAndReplace(
96 "Tracking.ActiveConfig",
97 "Tracking.ITkActsConversionPass")]
98
99 # Large Radius pass
100 if flags.Acts.doLargeRadius and primaryPassUsesActs(flags):
101 trackingPasses += [flags.cloneAndReplace(
102 "Tracking.ActiveConfig",
103 "Tracking.ITkActsLargeRadiusPass")]
104
105
106 # Low pT pass
107 if flags.Acts.doLowPt:
108 trackingPasses += [flags.cloneAndReplace(
109 "Tracking.ActiveConfig",
110 "Tracking.ITkActsLowPtPass")]
111
112 print("List of scheduled passes:")
113 for trackingPass in trackingPasses:
114 print(f'- {trackingPass.Tracking.ActiveConfig.extension}')
115
116 # Check if we found a primary pass (and only one)
117 nPrimaryPasses = 0
118 for current_flags in trackingPasses:
119 if isPrimaryPass(current_flags):
120 nPrimaryPasses += 1
121 if nPrimaryPasses != 1:
122 raise ValueError(f"Problem in the job configuration: exactly one primary pass is required for a proper configuration, but we found {nPrimaryPasses} instead!")
123
124 return trackingPasses
125
void print(char *figname, TCanvas *c1)

◆ getListOfGeneratedTrackParticles()

list[str] getListOfGeneratedTrackParticles ( flags)

Definition at line 126 of file ITkActsHelpers.py.

126def getListOfGeneratedTrackParticles(flags) -> list[str]:
127 generateTrackCollections = ["InDetTrackParticles"]
128
129 # loop on tracking passes
130 scheduledTrackingPasses: list = extractTrackingPasses(flags)
131 for currentFlags in scheduledTrackingPasses:
132 # Add the seed tracks
133 if currentFlags.Tracking.ActiveConfig.storeTrackSeeds:
134 # pixel seeds
135 generatePixelSegments = currentFlags.Detector.EnableITkPixel
136 generateStripSegments = currentFlags.Detector.EnableITkStrip
137
138 # For conversion pass we do not process pixels
139 if currentFlags.Tracking.ActiveConfig.extension == "ActsConversion" or currentFlags.Tracking.ActiveConfig.isLargeD0:
140 generatePixelSegments = False
141 # For main pass disable strips if fast tracking configuration
142 elif isFastPrimaryPass(currentFlags):
143 generateStripSegments = False
144
145 if generatePixelSegments:
146 generateTrackCollections += [f'SiSPSeedSegments{currentFlags.Tracking.ActiveConfig.extension}PixelTrackParticles']
147 if generateStripSegments:
148 generateTrackCollections += [f'SiSPSeedSegments{currentFlags.Tracking.ActiveConfig.extension}StripTrackParticles']
149 if generatePixelSegments and generateStripSegments:
150 generateTrackCollections += [f'SiSPSeedSegments{currentFlags.Tracking.ActiveConfig.extension}TrackParticles']
151
152 # Add CKF tracks
153 if currentFlags.Tracking.ActiveConfig.storeSiSPSeededTracks:
154 generateTrackCollections += [f'SiSPSeededTracks{currentFlags.Tracking.ActiveConfig.extension}TrackParticles']
155
156 # Add tracks after ambi
157 # this is necessary only if ambiguity resolution is run and we
158 # store track particles in a separate container w.r.t InDetTrackParticles
159 if currentFlags.Acts.doAmbiguityResolution and currentFlags.Tracking.ActiveConfig.storeSeparateContainer:
160 generateTrackCollections += [separateTrackParticleContainerName(currentFlags)]
161
162 print('Here is the list of generated track particle collections:')
163 for collection in generateTrackCollections:
164 print(f'- {collection}')
165
166 return generateTrackCollections

◆ isFastPrimaryPass()

bool isFastPrimaryPass ( flags)

Definition at line 13 of file ITkActsHelpers.py.

13def isFastPrimaryPass(flags) -> bool:
14 if flags.hasCategory("Tracking.ActiveConfig") and flags.Tracking.ActiveConfig.extension in ["ActsValidateF100", "ActsValidateF150"] and flags.Tracking.doITkFastTracking:
15 return True
16 return flags.Tracking.doITkFastTracking and isPrimaryPass(flags)
17

◆ isPrimaryPass()

bool isPrimaryPass ( flags)

Definition at line 3 of file ITkActsHelpers.py.

3def isPrimaryPass(flags) -> bool:
4 if not flags.hasCategory("Tracking.ActiveConfig"):
5 return False
6 # Support for non ACTS passes, that do not respect the convention
7 # This comes from Athena legacy passes
8 if flags.Tracking.ActiveConfig.extension in ["", "HeavyIon"]:
9 return True
10 # For ACTS the convention is respected: ITk{extension} + Pass
11 return f"ITk{flags.Tracking.ActiveConfig.extension}" == flags.Tracking.ITkPrimaryPassConfig.value
12

◆ isProductionPass()

bool isProductionPass ( flags)

Definition at line 21 of file ITkActsHelpers.py.

21def isProductionPass(flags) -> bool:
22 return not isValidationPass(flags)
23

◆ isValidationPass()

bool isValidationPass ( flags)

Definition at line 18 of file ITkActsHelpers.py.

18def isValidationPass(flags) -> bool:
19 return "Validate" in flags.Tracking.ActiveConfig.extension
20

◆ primaryPassExtension()

str primaryPassExtension ( flags)

Definition at line 42 of file ITkActsHelpers.py.

42def primaryPassExtension(flags) -> str:
43 # we rely on the fact that flags.Tracking.ITkPrimaryPassConfig.value is
44 # equal to ITk{extension}
45 return flags.Tracking.ITkPrimaryPassConfig.value.replace("ITk", "")
46

◆ primaryPassUsesActs()

bool primaryPassUsesActs ( flags)

Definition at line 36 of file ITkActsHelpers.py.

36def primaryPassUsesActs(flags) -> bool:
37 from TrkConfig.TrkConfigFlags import ITkPrimaryPassConfig
38 return flags.Tracking.ITkPrimaryPassConfig in [ITkPrimaryPassConfig.Acts, \
39 ITkPrimaryPassConfig.ActsLegacy, \
40 ITkPrimaryPassConfig.ActsHeavyIon]
41

◆ primaryPassUsesDevice()

bool primaryPassUsesDevice ( flags)

Definition at line 24 of file ITkActsHelpers.py.

24def primaryPassUsesDevice(flags) -> bool:
25 from ActsConfig.ActsConfigFlags import DeviceTritonMode
26 return (flags.Acts.Device.tritonMode is DeviceTritonMode.Client or
27 flags.Acts.Device.doClusterization or
28 flags.Acts.Device.doSpacePointFormation or
29 flags.Acts.Device.doSeeding or
30 flags.Acts.Device.doTrackReconstruction)
31

◆ secondaryPassUsesDevice()

bool secondaryPassUsesDevice ( flags)

Definition at line 32 of file ITkActsHelpers.py.

32def secondaryPassUsesDevice(flags) -> bool:
33 return (flags.Tracking.ActiveConfig.isLargeD0 and
34 flags.Acts.Device.doLargeRadiusPass)
35

◆ separateTrackParticleContainerName()

str separateTrackParticleContainerName ( flags)

Definition at line 47 of file ITkActsHelpers.py.

47def separateTrackParticleContainerName(flags) -> str:
48 # Name of the persistified track particle container for tracking passes
49 # that store their tracks in a separate container (storeSeparateContainer).
50 # This follows the InDet{extension}TrackParticles convention, unless the
51 # pass requests a different name via the storedTrackParticlesExtension flag
52 # (e.g. the ActsLargeRadius pass writes to InDetLargeD0TrackParticles so that
53 # downstream LRT clients can rely on the Run-3 container name)
54 extension = flags.Tracking.ActiveConfig.storedTrackParticlesExtension or \
55 flags.Tracking.ActiveConfig.extension
56 return f"InDet{extension}TrackParticles"
57