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