66def ActsTrackRecoCfg(flags) -> ComponentAccumulator:
67
68 print(
"Scheduling the ACTS Job Option for Inner Detector Track Reconstruction")
69
70 acc = ComponentAccumulator()
71
72
73
74 scheduledTrackingPasses = extractTrackingPasses(flags)
75
76 previousExtension = None
77
78
79
80
81 InputCombinedTracks = []
82
83
84 trackParticleContainerName = "InDetTrackParticles"
85 primaryVertices = "PrimaryVertices"
86
87
88 for currentFlags in scheduledTrackingPasses:
89
90 print(f
"---- Preparing scheduling of algorithms for tracking pass: {currentFlags.Tracking.ActiveConfig.extension}")
91 print(f
"---- - Is primary pass: {isPrimaryPass(currentFlags)}")
92 from TrkConfig.TrackingPassFlags import printActiveConfig
93 printActiveConfig(currentFlags)
94
95
96
97 from InDetConfig.ActsDataPreparationConfig import ActsDataPreparationCfg
98 acc.merge(ActsDataPreparationCfg(currentFlags,
99 previousExtension = previousExtension))
100
101
102
103 from InDetConfig.ActsPatternRecognitionConfig import ActsTrackReconstructionCfg
104 acc.merge(ActsTrackReconstructionCfg(currentFlags,
105 previousExtension = previousExtension))
106
107
108 previousExtension = currentFlags.Tracking.ActiveConfig.extension
109 if not currentFlags.Tracking.ActiveConfig.storeSeparateContainer or isPrimaryPass(currentFlags):
110 acts_tracks = f"{currentFlags.Tracking.ActiveConfig.extension}Tracks" if not currentFlags.Acts.doAmbiguityResolution else f"{currentFlags.Tracking.ActiveConfig.extension}ResolvedTracks"
111 InputCombinedTracks.append(acts_tracks)
112
113
114
115 print(f
"Creating track particle collection '{trackParticleContainerName}' from combination of following track collection:")
116 for trackCollection in InputCombinedTracks:
117 print(f
'- {trackCollection}')
118
119
120
121
122
123
124 persistifyCollection = True
125 particleCollection = trackParticleContainerName
126 perigeeExpression = flags.Tracking.perigeeExpression
127 if flags.Tracking.perigeeExpression is PerigeeExpression.Vertex:
128
129 persistifyCollection = False
130 particleCollection = f"{trackParticleContainerName}Temporary"
131 perigeeExpression = PerigeeExpression.BeamLine
132
133
134 from InDetConfig.ITkActsParticleCreationConfig import ITkActsTrackParticleCreationCfg
135 acc.merge(ITkActsTrackParticleCreationCfg(flags,
136 TrackContainers = InputCombinedTracks,
137 TrackParticleContainer = particleCollection,
138 persistifyCollection = persistifyCollection,
139 PerigeeExpression = perigeeExpression))
140
141
142 if flags.Tracking.doVertexFinding:
143 from InDetConfig.ActsPriVxFinderConfig import primaryVertexFindingCfg
144 acc.merge(primaryVertexFindingCfg(flags,
145 name = "ActsPriVxFinderAlg",
146 TracksName = particleCollection,
147 vxCandidatesOutputName = primaryVertices))
148
149
150
151
152
153
154
155 if flags.Tracking.perigeeExpression is PerigeeExpression.Vertex:
156 assert flags.Tracking.doVertexFinding, \
157 f"Requested the computation of track particles wrt but flags.Tracking.doVertexFinding is set to {flags.Tracking.doVertexFinding}"
158 print(
'Requesting to compute the track particle collection wrt the Vertex')
159 acc.merge(ITkActsTrackParticleCreationCfg(flags,
160 TrackContainers = InputCombinedTracks,
161 TrackParticleContainer = trackParticleContainerName))
162
163
164 print(
'Starting Post-Processing')
165
166
167
170 if flags.Tracking.writeExtendedSi_PRDInfo:
171
172
173
174
175
176
177
178 generatedTrackParticleCollections = ["InDetTrackParticles"]
179 if flags.Tracking.PRDInfo.KeepOnlyOnTrackMeasurements:
180 generatedTrackParticleCollections = getListOfGeneratedTrackParticles(flags)
181
182
183
184
185
186 from InDetConfig.InDetPrepRawDataToxAODConfig import ActsPrepDataToxAODCfg
187 acc.merge(ActsPrepDataToxAODCfg(flags,
188 TrackParticles = generatedTrackParticleCollections))
189
190
191 from ActsConfig.ActsObjectDecorationConfig import ActsInDetTrackStateOnSurfaceDecoratorAlgCfg
192 acc.merge(ActsInDetTrackStateOnSurfaceDecoratorAlgCfg(flags,
193 name=f"Acts{trackParticleContainerName}StateOnSurfaceDecoratorAlg",
194 TrackParticles=trackParticleContainerName))
195
196
197 for currentFlags in scheduledTrackingPasses:
198
199 from InDetConfig.ITkActsParticleCreationConfig import ITkActsTrackParticlePersistificationCfg
200 acc.merge(ITkActsTrackParticlePersistificationCfg(currentFlags))
201
202
203
204
205
206 if flags.Tracking.writeExtendedSi_PRDInfo:
207 from ActsConfig.ActsObjectDecorationConfig import ActsInDetTrackStateOnSurfaceDecoratorAlgCfg
208
209 if currentFlags.Tracking.ActiveConfig.storeSiSPSeededTracks:
210 TrackParticleCollectionForMsos = f'SiSPSeededTracks{currentFlags.Tracking.ActiveConfig.extension}TrackParticles'
211 acc.merge(ActsInDetTrackStateOnSurfaceDecoratorAlgCfg(currentFlags,
212 name=f"{TrackParticleCollectionForMsos}StateOnSurfaceDecoratorAlg",
213 TrackParticles=TrackParticleCollectionForMsos,
214 PixelMSOSs=f"SiSPSeeded{currentFlags.Tracking.ActiveConfig.extension}PixelMSOSs",
215 StripMSOSs=f"SiSPSeeded{currentFlags.Tracking.ActiveConfig.extension}StripMSOSs"))
216
217 if currentFlags.Tracking.ActiveConfig.storeSeparateContainer:
218
219
220
221
222 TrackParticleCollectionForMsos = f'InDet{currentFlags.Tracking.ActiveConfig.extension}TrackParticles'
223 acc.merge(ActsInDetTrackStateOnSurfaceDecoratorAlgCfg(currentFlags,
224 name=f"{TrackParticleCollectionForMsos}StateOnSurfaceDecoratorAlg",
225 TrackParticles=TrackParticleCollectionForMsos,
226 PixelMSOSs=f"{currentFlags.Tracking.ActiveConfig.extension}PixelMSOSs",
227 StripMSOSs=f"{currentFlags.Tracking.ActiveConfig.extension}StripMSOSs"))
228
229
230
231
232
233 acc.printConfig(withDetails = True, summariseProps = True)
234 return acc
235
void print(char *figname, TCanvas *c1)