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 56 of file ITkActsHelpers.py.

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

◆ getListOfGeneratedTrackParticles()

list[str] getListOfGeneratedTrackParticles ( flags)

Definition at line 124 of file ITkActsHelpers.py.

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

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

◆ primaryPassUsesActs()

bool primaryPassUsesActs ( flags)

Definition at line 34 of file ITkActsHelpers.py.

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

◆ primaryPassUsesDevice()

bool primaryPassUsesDevice ( flags)

Definition at line 24 of file ITkActsHelpers.py.

24def primaryPassUsesDevice(flags) -> bool:
25 return (flags.Acts.Device.doClusterization or
26 flags.Acts.Device.doSpacePointFormation or
27 flags.Acts.Device.doSeeding or
28 flags.Acts.Device.doTrackReconstruction)
29

◆ secondaryPassUsesDevice()

bool secondaryPassUsesDevice ( flags)

Definition at line 30 of file ITkActsHelpers.py.

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

◆ separateTrackParticleContainerName()

str separateTrackParticleContainerName ( flags)

Definition at line 45 of file ITkActsHelpers.py.

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