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 primaryPassUsesActs (flags)
str primaryPassExtension (flags)
str separateTrackParticleContainerName (flags)
list extractTrackingPasses (flags)
list[str] getListOfGeneratedTrackParticles (flags)

Function Documentation

◆ extractTrackingPasses()

list python.ITkActsHelpers.extractTrackingPasses ( flags)

Definition at line 52 of file ITkActsHelpers.py.

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

◆ getListOfGeneratedTrackParticles()

list[str] python.ITkActsHelpers.getListOfGeneratedTrackParticles ( flags)

Definition at line 120 of file ITkActsHelpers.py.

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

◆ isFastPrimaryPass()

bool python.ITkActsHelpers.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 python.ITkActsHelpers.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 python.ITkActsHelpers.isProductionPass ( flags)

Definition at line 21 of file ITkActsHelpers.py.

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

◆ isValidationPass()

bool python.ITkActsHelpers.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 python.ITkActsHelpers.primaryPassExtension ( flags)

Definition at line 36 of file ITkActsHelpers.py.

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

◆ primaryPassUsesActs()

bool python.ITkActsHelpers.primaryPassUsesActs ( flags)

Definition at line 30 of file ITkActsHelpers.py.

30def primaryPassUsesActs(flags) -> bool:
31 from TrkConfig.TrkConfigFlags import ITkPrimaryPassConfig
32 return flags.Tracking.ITkPrimaryPassConfig in [ITkPrimaryPassConfig.Acts, \
33 ITkPrimaryPassConfig.ActsLegacy, \
34 ITkPrimaryPassConfig.ActsHeavyIon]
35

◆ primaryPassUsesDevice()

bool python.ITkActsHelpers.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

◆ separateTrackParticleContainerName()

str python.ITkActsHelpers.separateTrackParticleContainerName ( flags)

Definition at line 41 of file ITkActsHelpers.py.

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