ATLAS Offline Software
Loading...
Searching...
No Matches
ActsSeedingConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
4from AthenaConfiguration.ComponentFactory import CompFactory
5from ActsConfig.ActsConfigFlags import SeedingStrategy
6from ActsConfig.ActsUtilities import extractChildKwargs
7from AthenaCommon.Utils.unixtools import find_datafile
8from ActsInterop import UnitConstants as ActsUnits
9import AthenaCommon.SystemOfUnits as GaudiUnits
10
11def ActsGbtsFtfSeedingTrigToolCfg(flags,name: str = "GbtsFtfActsSeedingTool", **kwargs) -> ComponentAccumulator:
12 acc = ComponentAccumulator()
13
14 if "layerNumberTool" not in kwargs:
15 from TrigFastTrackFinder.TrigFastTrackFinderConfig import ITkTrigL2LayerNumberToolCfg
16 ntargs = {"UseNewLayerScheme" : True}
17 kwargs.setdefault("layerNumberTool",acc.popToolsAndMerge(ITkTrigL2LayerNumberToolCfg(flags,**ntargs)))
18
19 kwargs.setdefault("DoPhiFiltering", False) #no phi-filtering for full-scan tracking
20 kwargs.setdefault("UseBeamTilt", False)
21
22 isLargeD0 = flags.Tracking.ActiveConfig.extension in ["LargeD0", "ActsLargeRadius"]
23
24 kwargs.setdefault("pTmin", flags.Tracking.ActiveConfig.minPTSeed)
25 kwargs.setdefault("MaxGraphEdges", 3000000)
26 kwargs.setdefault("ConnectionFileName",
27 "binTables_ITK_RUN4_LRT.txt" if isLargeD0 else "binTables_ITK_RUN4.txt")
28
29 acc.setPrivateTools(CompFactory.GbtsFtfActsSeedingTool(name, **kwargs))
30
31 return acc
32
33
34# ACTS tools
36 name: str = "ActsPixelSeedingTool",
37 **kwargs) -> ComponentAccumulator:
38 acc = ComponentAccumulator()
39
40
41 kwargs.setdefault("numSeedIncrement" , float("inf"))
42 kwargs.setdefault("deltaZMax" , float("inf"))
43 kwargs.setdefault("maxPtScattering", float("inf"))
44 kwargs.setdefault("useVariableMiddleSPRange", False)
45 kwargs.setdefault("rMax", 320. * ActsUnits.mm)
46 kwargs.setdefault("minPt", flags.Tracking.ActiveConfig.minPTSeed / GaudiUnits.GeV * ActsUnits.GeV)
47 kwargs.setdefault("impactMax", flags.Tracking.ActiveConfig.maxPrimaryImpactSeed / GaudiUnits.mm * ActsUnits.mm)
48 kwargs.setdefault("rBinEdges", [0, kwargs['rMax']])
49 kwargs.setdefault("rRangeMiddleSP", [
50 [0,0],
51 [140, 260],
52 [40, 260],
53 [40, 260],
54 [40, 260],
55 [40, 260],
56 [70, 260],
57 [40, 260],
58 [40, 260],
59 [40, 260],
60 [40, 260],
61 [140, 260],
62 [0, 0]])
63 acc.setPrivateTools(CompFactory.ActsTrk.GridTripletSeedingTool(name, **kwargs))
64 return acc
65
67 name: str = "ActsFastPixelSeedingTool",
68 **kwargs) -> ComponentAccumulator:
69
70 kwargs.setdefault("sigmaScattering", 2.)
71 kwargs.setdefault("maxSeedsPerSpM", 3)
72 kwargs.setdefault("collisionRegionMin", -150 * ActsUnits.mm)
73 kwargs.setdefault("collisionRegionMax", 150 * ActsUnits.mm)
74 kwargs.setdefault("maxPhiBins", 200)
75 kwargs.setdefault("gridRMax", 250 * ActsUnits.mm)
76 kwargs.setdefault("deltaRMax", 200 * ActsUnits.mm)
77 kwargs.setdefault("zBinsCustomLooping" , [2, 10, 3, 9, 6, 4, 8, 5, 7])
78 kwargs.setdefault("rRangeMiddleSP", [
79 [0.0, 0.0],
80 [60.0, 165.0],
81 [60.0, 200.0],
82 [60.0, 200.0],
83 [60.0, 260.0],
84 [60.0, 260.0],
85 [60.0, 260.0],
86 [60.0, 200.0],
87 [60.0, 200.0],
88 [60.0, 165.0],
89 [0.0, 0.0]])
90
91 kwargs.setdefault("zBinNeighborsTop", [
92 [0, 0], # -3000, -2000
93 [-1, 0], # -2000, -1400
94 [-1, 0], # -1400, -910
95 [-1, 0], # -910, -500
96 [-1, 0], # -500, -250
97 [-1, 1], # -250, 250
98 [0, 1], # 250, 500
99 [0, 1], # 500, 910
100 [0, 1], # 910, 1400
101 [0, 1], # 1400, 2000
102 [0, 0] # 2000, 3000
103 ])
104 kwargs.setdefault("zBinNeighborsBottom", [
105 [0, 0], # -3000, -2000
106 [0, 1], # -2000, -1400
107 [0, 1], # -1400, -910
108 [0, 1], # -910, -500
109 [0, 1], # -500, -250
110 [0, 0], # -250, 250
111 [-1, 0], # 250, 500
112 [-1, 0], # 500, 910
113 [-1, 0], # 910, 1400
114 [-1, 0], # 1400, 2000
115 [0, 0] # 2000, 3000
116 ])
117
118 kwargs.setdefault("zBinEdges", [-3000., -2000, -1400., -910., -500., -250., 250., 500., 910., 1400., 2000, 3000.])
119 kwargs.setdefault("useExperimentCuts", True)
120
121 kwargs.setdefault("deltaRMaxTopSP", 220 * ActsUnits.mm)
122 kwargs.setdefault("deltaRMaxBottomSP", 135 * ActsUnits.mm)
123
124 return ActsPixelSeedingToolCfg(flags, name, **kwargs)
125
127 name: str = "ActsStripSeedingTool",
128 **kwargs) -> ComponentAccumulator:
129 acc = ComponentAccumulator()
130
131
132 kwargs.setdefault("doSeedQualitySelection", False)
133 # For SpacePointGridConfig
134 kwargs.setdefault("gridRMax", 1000. * ActsUnits.mm)
135 kwargs.setdefault("deltaRMax", 600. * ActsUnits.mm)
136 kwargs.setdefault("impactMax", 20. * ActsUnits.mm)
137 kwargs.setdefault("minPt", flags.Tracking.ActiveConfig.minPTSeed / GaudiUnits.GeV * ActsUnits.GeV)
138 # For SeedfinderConfig
139 kwargs.setdefault("rMax", flags.Tracking.ActiveConfig.radMax)
140 kwargs.setdefault("deltaRMinTopSP", 20. * ActsUnits.mm)
141 kwargs.setdefault("deltaRMaxTopSP", 300. * ActsUnits.mm)
142 kwargs.setdefault("deltaRMinBottomSP", 20. * ActsUnits.mm)
143 kwargs.setdefault("deltaRMaxBottomSP", 300. * ActsUnits.mm)
144 kwargs.setdefault("deltaZMax", 900. * ActsUnits.mm)
145 kwargs.setdefault("interactionPointCut", False)
146 kwargs.setdefault("zBinsCustomLooping", [7, 8, 6, 9, 5, 10, 4, 11, 3, 12, 2])
147 kwargs.setdefault("deltaRMiddleMinSPRange", 30 * ActsUnits.mm)
148 kwargs.setdefault("deltaRMiddleMaxSPRange", 150 * ActsUnits.mm)
149 kwargs.setdefault("useDetailedDoubleMeasurementInfo", True)
150 kwargs.setdefault("maxPtScattering", float("inf"))
151 # For SeedFilterConfig
152 kwargs.setdefault("useDeltaRorTopRadius", False)
153 kwargs.setdefault("seedConfirmationInFilter", False)
154 kwargs.setdefault("impactWeightFactor", 1.)
155 kwargs.setdefault("compatSeedLimit", 4)
156 kwargs.setdefault("numSeedIncrement", 1.)
157 kwargs.setdefault("seedWeightIncrement", 10100.)
158 kwargs.setdefault("maxSeedsPerSpMConf", 100)
159 kwargs.setdefault("maxQualitySeedsPerSpMConf", 100)
160 # For seeding algorithm
161 kwargs.setdefault("zBinNeighborsBottom", [(0,0),(0,1),(0,1),(0,1),(0,2),(0,1),(0,0),(-1,0),(-2,0),(-1,0),(-1,0),(-1,0),(0,0)])
162 # Any other
163 kwargs.setdefault("rBinEdges", [0, kwargs['rMax']])
164 kwargs.setdefault("collisionRegionMin", -200. * ActsUnits.mm)
165 kwargs.setdefault("collisionRegionMax", 200. * ActsUnits.mm)
166
167 acc.setPrivateTools(CompFactory.ActsTrk.GridTripletSeedingTool(name, **kwargs))
168 return acc
169
171 name: str = "ActsLargeRadiusStripSeedingTool",
172 **kwargs) -> ComponentAccumulator:
173
174 kwargs.setdefault("interactionPointCut", True)
175 kwargs.setdefault("impactMax", 300. * ActsUnits.mm)
176 kwargs.setdefault("collisionRegionMin", -500. * ActsUnits.mm)
177 kwargs.setdefault("collisionRegionMax", 500. * ActsUnits.mm)
178 kwargs.setdefault("deltaRMiddleMaxSPRange", 75 * ActsUnits.mm)
179 kwargs.setdefault("deltaRMinTopSP", 50. * ActsUnits.mm)
180 kwargs.setdefault("deltaRMaxTopSP", 250. * ActsUnits.mm)
181 kwargs.setdefault("deltaRMinBottomSP", 50. * ActsUnits.mm)
182 kwargs.setdefault("deltaRMaxBottomSP", 250. * ActsUnits.mm)
183 kwargs.setdefault("deltaZMax", 850. * ActsUnits.mm)
184 kwargs.setdefault("cotThetaMax", 5.0)
185 kwargs.setdefault("maxSeedsPerSpM", 1)
186 kwargs.setdefault("maxStripDeltaCotTheta", 0.3)
187 kwargs.setdefault("absDeltaEtaWeightFactor", 10.)
188 kwargs.setdefault("absDeltaEtaMinImpact", 2.)
189 kwargs.setdefault("zBinEdges", [-3000., -2500, -1400., -910., -500., -250., 250., 500., 910., 1400., 2500, 3000.])
190 kwargs.setdefault("zBinsCustomLooping" , [2, 10, 3, 9, 6, 4, 8, 5, 7])
191 kwargs.setdefault("useVariableMiddleSPRange", False)
192 kwargs.setdefault("zBinNeighborsTop", [
193 [0, 0], # -3000, -2500
194 [-1, 0], # -2500, -1400
195 [-1, 0], # -1400, -910
196 [-1, 0], # -910, -500
197 [-1, 0], # -500, -250
198 [-1, 1], # -250, 250
199 [0, 1], # 250, 500
200 [0, 1], # 500, 910
201 [0, 1], # 910, 1400
202 [0, 1], # 1400, 2500
203 [0, 0] # 2500, 3000
204 ])
205 kwargs.setdefault("zBinNeighborsBottom", [
206 [0, 0], # -3000, -2500
207 [0, 1], # -2500, -1400
208 [0, 1], # -1400, -910
209 [0, 1], # -910, -500
210 [0, 1], # -500, -250
211 [0, 0], # -250, 250
212 [-1, 0], # 250, 500
213 [-1, 0], # 500, 910
214 [-1, 0], # 910, 1400
215 [-1, 0], # 1400, 2500
216 [0, 0] # 2500, 3000
217 ])
218 kwargs.setdefault("rRangeMiddleSP", [
219 [0.0, 0.0], # -3000, -2500
220 [400.0, 850.0], # -2500, -1400
221 [500.0, 800.0], # -1400, -910
222 [500.0, 800.0], # -910, -500
223 [500.0, 800.0], # -500, -250
224 [500.0, 800.0], # -250, 250
225 [500.0, 800.0], # 250, 500
226 [500.0, 800.0], # 500, 910
227 [500.0, 800.0], # 910, 1400
228 [400.0, 850.0], # 1400, 2500
229 [0.0, 0.0] # 2500, 3000
230 ])
231
232 kwargs.setdefault("seedConfirmation", True)
233 kwargs.setdefault("seedConfirmationInFilter", True)
234 kwargs.setdefault("zOriginWeightFactor", 1.)
235 kwargs.setdefault("maxSeedsPerSpMConf", 1)
236 kwargs.setdefault("maxQualitySeedsPerSpMConf", 1)
237 kwargs.setdefault("seedConfCentralZMin", -1400. * ActsUnits.mm)
238 kwargs.setdefault("seedConfCentralZMax", 1400. * ActsUnits.mm)
239 kwargs.setdefault("seedConfCentralRMax", 140. * ActsUnits.mm)
240 kwargs.setdefault("seedConfCentralNTopLargeR", 1)
241 kwargs.setdefault("seedConfCentralNTopSmallR", 0)
242 kwargs.setdefault("seedConfCentralMinBottomRadius", 0. * ActsUnits.mm)
243 kwargs.setdefault("seedConfCentralMaxZOrigin", 1500. * ActsUnits.mm)
244 kwargs.setdefault("seedConfCentralMinImpact", 200. * ActsUnits.mm)
245 kwargs.setdefault("seedConfForwardZMin", -3000. * ActsUnits.mm)
246 kwargs.setdefault("seedConfForwardZMax", 3000. * ActsUnits.mm)
247 kwargs.setdefault("seedConfForwardRMax", 140. * ActsUnits.mm)
248 kwargs.setdefault("seedConfForwardNTopLargeR", 1)
249 kwargs.setdefault("seedConfForwardNTopSmallR", 0)
250 kwargs.setdefault("seedConfForwardMinBottomRadius", 350. * ActsUnits.mm)
251 kwargs.setdefault("seedConfForwardMaxZOrigin", 1500. * ActsUnits.mm)
252 kwargs.setdefault("seedConfForwardMinImpact", 200. * ActsUnits.mm)
253
254 return ActsStripSeedingToolCfg(flags, name, **kwargs)
255
257 name: str = "ActsPixelGbtsSeedingTool",
258 **kwargs) -> ComponentAccumulator:
259 acc = ComponentAccumulator()
260 if "layerNumberTool" not in kwargs:
261 from TrigFastTrackFinder.TrigFastTrackFinderConfig import ITkTrigL2LayerNumberToolCfg
262 ntargs = {"UseNewLayerScheme": True}
263 kwargs.setdefault(
264 "layerNumberTool",
265 acc.popToolsAndMerge(ITkTrigL2LayerNumberToolCfg(flags, **ntargs))
266 )
267
268 kwargs.setdefault("connectorInputFile" , find_datafile("binTables_ITK_RUN4.txt"))
269 kwargs.setdefault("lutInputFile" , find_datafile("gbts_ml_pixel_barrel_loose.lut"))
270 kwargs.setdefault("minPt" , flags.Tracking.ActiveConfig.minPTSeed / GaudiUnits.GeV * ActsUnits.GeV)
271
272 acc.setPrivateTools(CompFactory.ActsTrk.GbtsSeedingTool(name = name, **kwargs))
273 return acc
274
276 name: str = "ActsStripGbtsSeedingTool",
277 **kwargs) -> ComponentAccumulator:
278 acc = ComponentAccumulator()
279 if "layerNumberTool" not in kwargs:
280 from TrigFastTrackFinder.TrigFastTrackFinderConfig import ITkTrigL2LayerNumberToolCfg
281 ntargs = {"UseNewLayerScheme": True}
282 kwargs.setdefault(
283 "layerNumberTool",
284 acc.popToolsAndMerge(ITkTrigL2LayerNumberToolCfg(flags, **ntargs))
285 )
286
287 kwargs.setdefault("LRTmode", True)
288 kwargs.setdefault("useML", False)
289 kwargs.setdefault("connectorInputFile", find_datafile("binTables_ITK_RUN4_LRT.txt"))
290 kwargs.setdefault("minPt", flags.Tracking.ActiveConfig.minPTSeed / GaudiUnits.GeV * ActsUnits.GeV)
291 kwargs.setdefault("d0_max", 300. * ActsUnits.mm)
292 kwargs.setdefault("max_z0", 500. * ActsUnits.mm)
293
294 acc.setPrivateTools(CompFactory.ActsTrk.GbtsSeedingTool(name=name, **kwargs))
295 return acc
296
297# ACTS algorithm using Athena objects upstream
299 name: str = 'ActsPixelSeedingAlg',
300 **kwargs) -> ComponentAccumulator:
301 acc = ComponentAccumulator()
302
303 # Beam Spot Cond is a requirement
304 from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
305 acc.merge(BeamSpotCondAlgCfg(flags))
306
307 from MagFieldServices.MagFieldServicesConfig import AtlasFieldCacheCondAlgCfg
308 acc.merge(AtlasFieldCacheCondAlgCfg(flags))
309
310 from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelReadoutGeometryCfg
311 acc.merge(ITkPixelReadoutGeometryCfg(flags))
312
313 from InDetConfig.ITkActsHelpers import isFastPrimaryPass
314 useFastTracking = kwargs.get("useFastTracking", isFastPrimaryPass(flags))
315
316 if "SeedTool" not in kwargs:
317 if flags.Acts.SeedingStrategy is SeedingStrategy.Gbts:
318 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsPixelGbtsSeedingToolCfg(flags)))
319 elif flags.Acts.SeedingStrategy is SeedingStrategy.GbtsFtf:
320 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsGbtsFtfSeedingTrigToolCfg(flags)))
321 else:
322 if useFastTracking:
323 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsFastPixelSeedingToolCfg(flags)))
324 else:
325 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsPixelSeedingToolCfg(flags)))
326
327 kwargs.setdefault("useFastTracking", useFastTracking)
328 kwargs.setdefault('InputSpacePoints', ['ITkPixelSpacePoints_Cached'] if flags.Acts.useCache else ['ITkPixelSpacePoints'])
329 kwargs.setdefault('OutputSeeds', 'ActsPixelSeeds')
330 kwargs.setdefault('UsePixel', True)
331
332 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
333 from ActsConfig.ActsMonitoringConfig import ActsITkPixelSeedingMonitoringToolCfg
334 kwargs.setdefault('MonTool', acc.popToolsAndMerge(ActsITkPixelSeedingMonitoringToolCfg(flags)))
335
336 acc.addEventAlgo(CompFactory.ActsTrk.GenericSeedingAlg(name, **kwargs))
337 return acc
338
339
341 name: str = 'ActsStripSeedingAlg',
342 **kwargs) -> ComponentAccumulator:
343 acc = ComponentAccumulator()
344
345 # Beam Spot Cond is a requirement
346 from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
347 acc.merge(BeamSpotCondAlgCfg(flags))
348
349 from MagFieldServices.MagFieldServicesConfig import AtlasFieldCacheCondAlgCfg
350 acc.merge(AtlasFieldCacheCondAlgCfg(flags))
351
352 from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg
353 acc.merge(ITkStripReadoutGeometryCfg(flags))
354
355 if "SeedTool" not in kwargs:
356 if flags.Tracking.ActiveConfig.isLargeD0:
357 if flags.Acts.SeedingStrategy is SeedingStrategy.Gbts:
358 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsStripGbtsSeedingToolCfg(flags)))
359 else:
360 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsLargeRadiusStripSeedingToolCfg(flags)))
361 else:
362 kwargs.setdefault('SeedTool', acc.popToolsAndMerge(ActsStripSeedingToolCfg(flags)))
363
364 kwargs.setdefault('InputSpacePoints', ['ITkStripSpacePoints_Cached', 'ITkStripOverlapSpacePoints_Cached'] if flags.Acts.useCache else ['ITkStripSpacePoints', 'ITkStripOverlapSpacePoints'])
365 kwargs.setdefault('OutputSeeds', 'ActsStripSeeds')
366 kwargs.setdefault('UsePixel', False)
367
368 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
369 from ActsConfig.ActsMonitoringConfig import ActsITkStripSeedingMonitoringToolCfg
370 kwargs.setdefault('MonTool', acc.popToolsAndMerge(ActsITkStripSeedingMonitoringToolCfg(flags)))
371
372 acc.addEventAlgo(CompFactory.ActsTrk.GenericSeedingAlg(name, **kwargs))
373 return acc
374
375
377 **kwargs) -> ComponentAccumulator:
378 acc = ComponentAccumulator()
379
380 kwargs.setdefault('processPixels', flags.Detector.EnableITkPixel)
381 kwargs.setdefault('processStrips', flags.Detector.EnableITkStrip)
382 kwargs.setdefault('estimateParameters', flags.Acts.Seeds.doAnalysis)
383
384 if kwargs['processPixels']:
385 acc.merge(ActsPixelSeedingAlgCfg(flags, **extractChildKwargs(prefix='PixelSeedingAlg.', **kwargs)))
386 if kwargs['processStrips']:
387 acc.merge(ActsStripSeedingAlgCfg(flags, **extractChildKwargs(prefix='StripSeedingAlg.', **kwargs)))
388
389
390 if kwargs['estimateParameters']:
391 if kwargs['processPixels']:
392 from ActsConfig.ActsAnalysisConfig import ActsPixelSeedsToTrackParamsAlgCfg
393 acc.merge(ActsPixelSeedsToTrackParamsAlgCfg(flags,
394 **extractChildKwargs(prefix='PixelSeedsToTrackParamsAlg.', **kwargs)))
395
396 if kwargs['processStrips']:
397 from ActsConfig.ActsAnalysisConfig import ActsStripSeedsToTrackParamsAlgCfg
398 acc.merge(ActsStripSeedsToTrackParamsAlgCfg(flags,
399 **extractChildKwargs(prefix='StripSeedsToTrackParamsAlg.', **kwargs)))
400
401 if flags.Acts.Seeds.doAnalysis:
402 if kwargs['processPixels']:
403 from ActsConfig.ActsAnalysisConfig import ActsPixelSeedAnalysisAlgCfg, ActsPixelEstimatedTrackParamsAnalysisAlgCfg
404 acc.merge(ActsPixelSeedAnalysisAlgCfg(flags, **extractChildKwargs(prefix='PixelSeedAnalysisAlg.', **kwargs)))
405 acc.merge(ActsPixelEstimatedTrackParamsAnalysisAlgCfg(flags, **extractChildKwargs(prefix='PixelEstimatedTrackParamsAnalysisAlg.', **kwargs)))
406
407 if kwargs['processStrips']:
408 from ActsConfig.ActsAnalysisConfig import ActsStripSeedAnalysisAlgCfg, ActsStripEstimatedTrackParamsAnalysisAlgCfg
409 acc.merge(ActsStripSeedAnalysisAlgCfg(flags, **extractChildKwargs(prefix='StripSeedAnalysisAlg.', **kwargs)))
410 acc.merge(ActsStripEstimatedTrackParamsAnalysisAlgCfg(flags, **extractChildKwargs(prefix='StripEstimatedTrackParamsAnalysisAlg.', **kwargs)))
411
412 return acc
413
414def ActsSeedingCfg(flags,**kwargs) -> ComponentAccumulator:
415 acc = ComponentAccumulator()
416 processPixels = flags.Detector.EnableITkPixel
417 processStrips = flags.Detector.EnableITkStrip
418
419 # For conversion pass we do not process pixels
420 from InDetConfig.ITkActsHelpers import isFastPrimaryPass
421 if flags.Tracking.ActiveConfig.extension in ["ActsConversion", "ActsLargeRadius", "ActsValidateLargeRadiusStandalone"]:
422 processPixels = False
423 # For main pass disable strips if fast tracking configuration
424 elif isFastPrimaryPass(flags):
425 processStrips = False
426
427 kwargs.setdefault('processPixels', processPixels)
428 kwargs.setdefault('processStrips', processStrips)
429 kwargs.setdefault('estimateParameters', flags.Tracking.ActiveConfig.storeTrackSeeds or flags.Acts.Seeds.doAnalysis)
430
431 # TO-DO: refactor this seeding tool configuration
432 if flags.Tracking.ActiveConfig.extension == "ActsHeavyIon" and processPixels:
433 kwargs.setdefault('PixelSeedingAlg.SeedTool', acc.popToolsAndMerge(ActsPixelSeedingToolCfg(flags,
434 name=f'{flags.Tracking.ActiveConfig.extension}PixelSeedingTool')))
435
436 if processStrips and flags.Acts.SeedingStrategy is SeedingStrategy.Gbts and flags.Tracking.ActiveConfig.isLargeD0:
437 kwargs.setdefault('StripSeedingAlg.SeedTool', acc.popToolsAndMerge(ActsStripGbtsSeedingToolCfg(flags,
438 name=f'{flags.Tracking.ActiveConfig.extension}StripSeedingTool')))
439 elif processStrips and flags.Acts.SeedingStrategy is SeedingStrategy.GridTriplet:
440 if flags.Tracking.ActiveConfig.isLargeD0:
441 kwargs.setdefault('StripSeedingAlg.SeedTool', acc.popToolsAndMerge(ActsLargeRadiusStripSeedingToolCfg(flags,
442 name=f'{flags.Tracking.ActiveConfig.extension}StripSeedingTool')))
443 else:
444 kwargs.setdefault('StripSeedingAlg.SeedTool', acc.popToolsAndMerge(ActsStripSeedingToolCfg(flags,
445 name=f'{flags.Tracking.ActiveConfig.extension}StripSeedingTool')))
446
447 if processPixels:
448 # Seeding algo
449 kwargs.setdefault('PixelSeedingAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSeedingAlg')
450 kwargs.setdefault('PixelSeedingAlg.useFastTracking', isFastPrimaryPass(flags))
451 kwargs.setdefault('PixelSeedingAlg.OutputSeeds', f'{flags.Tracking.ActiveConfig.extension}PixelSeeds')
452
453 pixelSpacePoints = ['ITkPixelSpacePoints_Cached'] if flags.Acts.useCache else ['ITkPixelSpacePoints']
454 if flags.Tracking.ActiveConfig.isSecondaryPass:
455 pixelSpacePoints = [f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}PixelSpacePoints_Cached'] if flags.Acts.useCache else [f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}PixelSpacePoints']
456 kwargs.setdefault('PixelSeedingAlg.InputSpacePoints', pixelSpacePoints)
457
458 # Setup the seed to track parameters algorithms either if we persistify them or we want to run the ActsMonitoring
459 if flags.Tracking.ActiveConfig.storeTrackSeeds or flags.Acts.Seeds.doAnalysis:
460 kwargs.setdefault('PixelSeedsToTrackParamsAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSeedsToTrackParamsAlg')
461 kwargs.setdefault('PixelSeedsToTrackParamsAlg.extension', flags.Tracking.ActiveConfig.extension)
462 kwargs.setdefault('PixelSeedsToTrackParamsAlg.InputSeedContainerKey', kwargs['PixelSeedingAlg.OutputSeeds'])
463 kwargs.setdefault('PixelSeedsToTrackParamsAlg.OutputTrackParamsCollectionKey', f'{flags.Tracking.ActiveConfig.extension}PixelEstimatedTrackParams')
464
465 # Analysis algo(s)
466 if flags.Acts.Seeds.doAnalysis:
467 kwargs.setdefault('PixelSeedAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSeedAnalysisAlg')
468 kwargs.setdefault('PixelSeedAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
469 kwargs.setdefault('PixelSeedAnalysisAlg.InputSeedCollection', kwargs['PixelSeedingAlg.OutputSeeds'])
470
471 kwargs.setdefault('PixelEstimatedTrackParamsAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelEstimatedTrackParamsAnalysisAlg')
472 kwargs.setdefault('PixelEstimatedTrackParamsAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
473 kwargs.setdefault('PixelEstimatedTrackParamsAnalysisAlg.InputTrackParamsCollection', kwargs['PixelSeedsToTrackParamsAlg.OutputTrackParamsCollectionKey'])
474
475 if processStrips:
476 # Seeding algo
477 kwargs.setdefault('StripSeedingAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSeedingAlg')
478 kwargs.setdefault('StripSeedingAlg.OutputSeeds', f'{flags.Tracking.ActiveConfig.extension}StripSeeds')
479 # Conversion pass does not use overlap space points
480 # Space Point naming is not yet fully connected to tracking passes - this will change
481 if flags.Tracking.ActiveConfig.extension == 'ActsConversion':
482 kwargs.setdefault('StripSeedingAlg.InputSpacePoints', ['ITkConversionStripSpacePoints_Cached'] if flags.Acts.useCache else ['ITkConversionStripSpacePoints'])
483 elif flags.Tracking.ActiveConfig.extension == 'ActsLargeRadius':
484 kwargs.setdefault('StripSeedingAlg.InputSpacePoints', ['ITkLargeRadiusStripSpacePoints_Cached',
485 'ITkLargeRadiusStripOverlapSpacePoints_Cached'] if flags.Acts.useCache else ['ITkLargeRadiusStripSpacePoints',
486 'ITkLargeRadiusStripOverlapSpacePoints'])
487 elif flags.Tracking.ActiveConfig.extension == 'ActsLowPt':
488 kwargs.setdefault('StripSeedingAlg.InputSpacePoints', ['ITkLowPtStripSpacePoints_Cached',
489 'ITkLowPtStripOverlapSpacePoints_Cached'] if flags.Acts.useCache else ['ITkLowPtStripSpacePoints',
490 'ITkLowPtStripOverlapSpacePoints'])
491 else:
492 kwargs.setdefault('StripSeedingAlg.InputSpacePoints', ['ITkStripSpacePoints_Cached',
493 'ITkStripOverlapSpacePoints_Cached'] if flags.Acts.useCache else ['ITkStripSpacePoints',
494 'ITkStripOverlapSpacePoints'])
495
496 if flags.Tracking.ActiveConfig.storeTrackSeeds or flags.Acts.Seeds.doAnalysis:
497 kwargs.setdefault('StripSeedsToTrackParamsAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSeedsToTrackParamsAlg')
498 kwargs.setdefault('StripSeedsToTrackParamsAlg.extension', flags.Tracking.ActiveConfig.extension)
499 kwargs.setdefault('StripSeedsToTrackParamsAlg.InputSeedContainerKey', kwargs['StripSeedingAlg.OutputSeeds'])
500 kwargs.setdefault('StripSeedsToTrackParamsAlg.OutputTrackParamsCollectionKey', f'{flags.Tracking.ActiveConfig.extension}StripEstimatedTrackParams')
501
502
503 # Analysis algo(s)
504 if flags.Acts.Seeds.doAnalysis:
505 kwargs.setdefault('StripSeedAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSeedAnalysisAlg')
506 kwargs.setdefault('StripSeedAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
507 kwargs.setdefault('StripSeedAnalysisAlg.InputSeedCollection', kwargs['StripSeedingAlg.OutputSeeds'])
508
509 kwargs.setdefault('StripEstimatedTrackParamsAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripEstimatedTrackParamsAnalysisAlg')
510 kwargs.setdefault('StripEstimatedTrackParamsAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
511 kwargs.setdefault('StripEstimatedTrackParamsAnalysisAlg.InputTrackParamsCollection', kwargs['StripSeedsToTrackParamsAlg.OutputTrackParamsCollectionKey'])
512
513 acc.merge(ActsMainSeedingCfg(flags, **kwargs))
514
515
516 if flags.Tracking.ActiveConfig.storeTrackSeeds:
517 acc.merge(ActsStoreTrackSeedsCfg(flags,
518 processPixels = processPixels,
519 processStrips = processStrips))
520
521 return acc
522
524 *,
525 processPixels: bool,
526 processStrips: bool,
527 **kwargs: dict) -> ComponentAccumulator:
528
529
530 acc = ComponentAccumulator()
531
532 seedKeyPixels = f'{flags.Tracking.ActiveConfig.extension}PixelSeeds'
533 seedKeyStrips = f'{flags.Tracking.ActiveConfig.extension}StripSeeds'
534 paramsKeyPixels = f'{flags.Tracking.ActiveConfig.extension}PixelEstimatedTrackParams'
535 paramsKeyStrips = f'{flags.Tracking.ActiveConfig.extension}StripEstimatedTrackParams'
536 trackKeyPixels = f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}PixelTracks'
537 trackKeyStrips = f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}StripTracks'
538 particleKeyPixels = f'SiSPSeedSegments{flags.Tracking.ActiveConfig.extension}PixelTrackParticles'
539 particleKeyStrips = f'SiSPSeedSegments{flags.Tracking.ActiveConfig.extension}StripTrackParticles'
540
541 trackKey = f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}Tracks'
542 particleKey = f'SiSPSeedSegments{flags.Tracking.ActiveConfig.extension}TrackParticles'
543
544
545 if processPixels:
546 # Create track parameters from pixel seeds
547 from ActsConfig.ActsAnalysisConfig import ActsPixelSeedsToTrackParamsAlgCfg
548 acc.merge(ActsPixelSeedsToTrackParamsAlgCfg(flags,
549 name = f'{flags.Tracking.ActiveConfig.extension}PixelSeedsToTrackParamsAlg',
550 extension = flags.Tracking.ActiveConfig.extension,
551 InputSeedContainerKey = seedKeyPixels,
552 OutputTrackParamsCollectionKey = paramsKeyPixels))
553
554
555 # Convert pixel seed to Acts track
556 acc.merge(ActsSeedToTrackCnvAlgCfg(flags,
557 name=f"{flags.Tracking.ActiveConfig.extension}PixelSeedToTrackCnvAlg",
558 EstimatedTrackParametersKey = [paramsKeyPixels],
559 SeedContainerKey = [seedKeyPixels],
560 ACTSTracksLocation = trackKeyPixels))
561
562 # Truth
563 if flags.Tracking.doTruth:
564 from ActsConfig.ActsTruthConfig import ActsTrackToTruthAssociationAlgCfg, ActsTrackFindingValidationAlgCfg
565 acc.merge(ActsTrackToTruthAssociationAlgCfg(flags,
566 name = f"{trackKeyPixels}TrackToTruthAssociationAlg",
567 ACTSTracksLocation = trackKeyPixels,
568 AssociationMapOut = f"{trackKeyPixels}ToTruthParticleAssociation"))
569
570 acc.merge(ActsTrackFindingValidationAlgCfg(flags,
571 name = f"{trackKeyPixels}TrackFindingValidationAlg",
572 TrackToTruthAssociationMap = f"{trackKeyPixels}ToTruthParticleAssociation"))
573
574 # Track Particle creation and persistification
575 # - input track collection: trackKeyPixels
576 # - output track particle collection: particleKeyPixels
577 from InDetConfig.ITkActsParticleCreationConfig import ITkActsTrackParticleCreationCfg
578 acc.merge(ITkActsTrackParticleCreationCfg(flags,
579 TrackContainers = [trackKeyPixels],
580 TrackParticleContainer = particleKeyPixels))
581
582
583 if processStrips:
584 # Create track parameters from strip seeds
585 from ActsConfig.ActsAnalysisConfig import ActsStripSeedsToTrackParamsAlgCfg
586 acc.merge(ActsStripSeedsToTrackParamsAlgCfg(flags,
587 name = f'{flags.Tracking.ActiveConfig.extension}StripSeedsToTrackParamsAlg',
588 extension = flags.Tracking.ActiveConfig.extension,
589 InputSeedContainerKey = seedKeyStrips,
590 OutputTrackParamsCollectionKey = paramsKeyStrips))
591
592 # Convert strip seed to Acts track
593 acc.merge(ActsSeedToTrackCnvAlgCfg(flags,
594 name=f"{flags.Tracking.ActiveConfig.extension}StripSeedToTrackCnvAlg",
595 EstimatedTrackParametersKey = [paramsKeyStrips],
596 SeedContainerKey = [seedKeyStrips],
597 ACTSTracksLocation = trackKeyStrips))
598
599 # Truth
600 if flags.Tracking.doTruth:
601 from ActsConfig.ActsTruthConfig import ActsTrackToTruthAssociationAlgCfg, ActsTrackFindingValidationAlgCfg
602 acc.merge(ActsTrackToTruthAssociationAlgCfg(flags,
603 name=f"{trackKeyStrips}TrackToTruthAssociationAlg",
604 ACTSTracksLocation = trackKeyStrips,
605 AssociationMapOut = f"{trackKeyStrips}ToTruthParticleAssociation"))
606
607 acc.merge(ActsTrackFindingValidationAlgCfg(flags,
608 name = f"{trackKeyStrips}TrackFindingValidationAlg",
609 TrackToTruthAssociationMap = f"{trackKeyStrips}ToTruthParticleAssociation"))
610
611 # Track Particle creation and persistification
612 # - input track collection: trackKeyStrips
613 # - output track particle collection: particleKeyStrips
614 from InDetConfig.ITkActsParticleCreationConfig import ITkActsTrackParticleCreationCfg
615 acc.merge(ITkActsTrackParticleCreationCfg(flags,
616 TrackContainers = [trackKeyStrips],
617 TrackParticleContainer = particleKeyStrips))
618
619 # If both pixel and strips are processed, also make track particles from the sum
620 # This will provide the complete seed efficiency for ACTS
621 if processPixels and processStrips:
622 # Parameter estimation has already been performed
623 # Convert seeds to Acts tracks
624 acc.merge(ActsSeedToTrackCnvAlgCfg(flags,
625 name=f"{flags.Tracking.ActiveConfig.extension}SeedToTrackCnvAlg",
626 EstimatedTrackParametersKey = [paramsKeyPixels, paramsKeyStrips],
627 SeedContainerKey = [seedKeyPixels, seedKeyStrips],
628 ACTSTracksLocation = trackKey))
629
630 # Truth
631 if flags.Tracking.doTruth:
632 from ActsConfig.ActsTruthConfig import ActsTrackToTruthAssociationAlgCfg, ActsTrackFindingValidationAlgCfg
633 acc.merge(ActsTrackToTruthAssociationAlgCfg(flags,
634 name=f"{trackKey}TrackToTruthAssociationAlg",
635 ACTSTracksLocation = trackKey,
636 AssociationMapOut = f"{trackKey}ToTruthParticleAssociation"))
637
638 acc.merge(ActsTrackFindingValidationAlgCfg(flags,
639 name = f"{trackKey}TrackFindingValidationAlg",
640 TrackToTruthAssociationMap = f"{trackKey}ToTruthParticleAssociation"))
641
642 # Track Particle creation and persistification
643 # - input track collection: trackKey
644 # - output track particle collection: particleKey
645 from InDetConfig.ITkActsParticleCreationConfig import ITkActsTrackParticleCreationCfg
646 acc.merge(ITkActsTrackParticleCreationCfg(flags,
647 TrackContainers = [trackKey],
648 TrackParticleContainer = particleKey))
649
650 return acc
651
652
654 name: str = "ActsSeedToTrackCnvAlg",
655 **kwargs: dict) -> ComponentAccumulator:
656 acc = ComponentAccumulator()
657
658 kwargs.setdefault('SeedContainerKey', [])
659 kwargs.setdefault('EstimatedTrackParametersKey', [])
660 kwargs.setdefault('ACTSTracksLocation', f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}Tracks')
661
662 if 'TrackingGeometryTool' not in kwargs:
663 from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg
664 kwargs.setdefault('TrackingGeometryTool', acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)))
665
666 acc.addEventAlgo(CompFactory.ActsTrk.SeedToTrackCnvAlg(name, **kwargs))
667 return acc
668
ComponentAccumulator ActsFastPixelSeedingToolCfg(flags, str name="ActsFastPixelSeedingTool", **kwargs)
ComponentAccumulator ActsPixelGbtsSeedingToolCfg(flags, str name="ActsPixelGbtsSeedingTool", **kwargs)
ComponentAccumulator ActsStripSeedingAlgCfg(flags, str name='ActsStripSeedingAlg', **kwargs)
ComponentAccumulator ActsPixelSeedingToolCfg(flags, str name="ActsPixelSeedingTool", **kwargs)
ComponentAccumulator ActsStripGbtsSeedingToolCfg(flags, str name="ActsStripGbtsSeedingTool", **kwargs)
ComponentAccumulator ActsLargeRadiusStripSeedingToolCfg(flags, str name="ActsLargeRadiusStripSeedingTool", **kwargs)
ComponentAccumulator ActsGbtsFtfSeedingTrigToolCfg(flags, str name="GbtsFtfActsSeedingTool", **kwargs)
ComponentAccumulator ActsSeedingCfg(flags, **kwargs)
ComponentAccumulator ActsPixelSeedingAlgCfg(flags, str name='ActsPixelSeedingAlg', **kwargs)
ComponentAccumulator ActsStoreTrackSeedsCfg(flags, *, bool processPixels, bool processStrips, **dict kwargs)
ComponentAccumulator ActsSeedToTrackCnvAlgCfg(flags, str name="ActsSeedToTrackCnvAlg", **dict kwargs)
ComponentAccumulator ActsStripSeedingToolCfg(flags, str name="ActsStripSeedingTool", **kwargs)
ComponentAccumulator ActsMainSeedingCfg(flags, **kwargs)