ATLAS Offline Software
Loading...
Searching...
No Matches
python.ITkTrackRecoConfig Namespace Reference

Functions

 CombinedTrackingPassFlagSets (flags, resetCache=False)
 ITkClusterSplitProbabilityContainerName (flags)
ComponentAccumulator ITkStoreTrackSeparateContainerCfg (flags, str TrackContainer="", str ClusterSplitProbContainer="")
 ITkTrackRecoPassCfg (flags, str previousActsExtension=None, list[str] InputCombinedITkTracks=None, list[str] InputCombinedActsTracks=None, list[str] InputExtendedITkTracks=None, list[str] StatTrackCollections=None, list[str] StatTrackTruthCollections=None, str ClusterSplitProbContainer="")
ComponentAccumulator ITkActsTrackFinalCfg (flags, list[str] InputCombinedITkTracks=None, ActsTrackContainerName="InDetActsTrackParticles")
 ITkTrackFinalCfg (flags, list[str] InputCombinedITkTracks=None, list[str] StatTrackCollections=None, list[str] StatTrackTruthCollections=None)
 ITkStatsCfg (flags, StatTrackCollections=None, StatTrackTruthCollections=None)
 ITkActsExtendedPRDInfoCfg (flags)
 ITkExtendedPRDInfoCfg (flags)
ComponentAccumulator ITkTrackRecoCfg (flags)
 Main ITk tracking config #####################.

Variables

list _flags_set = []
list _extensions_list = []
list _actsExtensions = ['Acts', 'ActsLegacy', 'ActsConversion', 'ActsLargeRadius', 'ActsLowPt', 'ActsValidateF100', 'ActsValidateF150', 'ActsValidateLargeRadiusStandalone']
list _outputExtensions = []
 flags = initConfigFlags()
 EnableCalo
 Files
 useITkFTF
 doITkFastTracking
 top_acc = MainServicesCfg(flags)
 OutputLevel
 withDetails
 True
 summariseProps
 sc = top_acc.run(5)

Function Documentation

◆ CombinedTrackingPassFlagSets()

python.ITkTrackRecoConfig.CombinedTrackingPassFlagSets ( flags,
resetCache = False )

Definition at line 13 of file ITkTrackRecoConfig.py.

13def CombinedTrackingPassFlagSets(flags, resetCache=False):
14 global _flags_set
15 if _flags_set and not resetCache:
16 return _flags_set
17
18 flags_set = []
19
20 # Primary Pass(es)
21 from TrkConfig.TrkConfigFlags import TrackingComponent
22 validation_configurations = {
23 TrackingComponent.ActsValidateClusters : "ActsValidateClusters",
24 TrackingComponent.ActsValidateLargeRadiusStandalone: "ActsValidateLargeRadiusStandalone",
25 TrackingComponent.ActsValidateTracks : "ActsValidateTracks",
26 TrackingComponent.ActsValidateAmbiguityResolution : "ActsValidateAmbiguityResolution",
27 TrackingComponent.ActsValidateF100 : "ActsValidateF100",
28 TrackingComponent.ActsValidateF150 : "ActsValidateF150",
29 }
30
31 # Athena Pass
32 if TrackingComponent.AthenaChain in flags.Tracking.recoChain:
33 flags_set += [flags.cloneAndReplace(
34 "Tracking.ActiveConfig",
35 f"Tracking.{flags.Tracking.ITkPrimaryPassConfig.value}Pass")]
36
37 # Acts Pass - Legacy like
38 if TrackingComponent.ActsLegacyChain in flags.Tracking.recoChain:
39 flags_set += [flags.cloneAndReplace(
40 "Tracking.ActiveConfig",
41 "Tracking.ITkActsLegacyPass")]
42
43 # Acts Pass - Fast Tracking based
44 if TrackingComponent.ActsChain in flags.Tracking.recoChain:
45 flags_set += [flags.cloneAndReplace(
46 "Tracking.ActiveConfig",
47 "Tracking.ITkActsPass")]
48
49 # Acts Heavy Ion Pass
50 if TrackingComponent.ActsHeavyIon in flags.Tracking.recoChain:
51 flags_set += [flags.cloneAndReplace(
52 "Tracking.ActiveConfig",
53 "Tracking.ITkActsHeavyIonPass")]
54
55 # GNN pass
56 if TrackingComponent.GNNChain in flags.Tracking.recoChain:
57 flags_set += [flags.cloneAndReplace(
58 "Tracking.ActiveConfig",
59 "Tracking.ITkGNNPass")]
60
61 # Acts Conversion Pass
62 if flags.Detector.EnableCalo and flags.Acts.doITkConversion:
63 flags_set += [flags.cloneAndReplace(
64 "Tracking.ActiveConfig",
65 "Tracking.ITkActsConversionPass")]
66
67 # Acts Large Radius Pass
68 if TrackingComponent.ActsChain in flags.Tracking.recoChain and flags.Acts.doLargeRadius:
69 flags_set += [flags.cloneAndReplace(
70 "Tracking.ActiveConfig",
71 "Tracking.ITkActsLargeRadiusPass")]
72
73 # Acts Low Pt Pass
74 if flags.Acts.doLowPt:
75 flags_set += [flags.cloneAndReplace(
76 "Tracking.ActiveConfig",
77 "Tracking.ITkActsLowPtPass")]
78
79 # Acts Validation Passes
80 for [configuration, key] in validation_configurations.items():
81 if configuration in flags.Tracking.recoChain:
82 toAdd = eval(f"flags.cloneAndReplace('Tracking.ActiveConfig', 'Tracking.ITk{key}Pass')")
83 flags_set += [toAdd]
84
85 # Photon conversion tracking reco
86 if flags.Detector.EnableCalo and flags.Tracking.doITkConversion:
87 flagsConv = flags.cloneAndReplace("Tracking.ActiveConfig",
88 "Tracking.ITkConversionPass")
89 flags_set += [flagsConv]
90
91 # LRT
92 if flags.Tracking.doLargeD0:
93 if flags.Tracking.useITkFTF:
94 flagsLRT = flags.cloneAndReplace("Tracking.ActiveConfig",
95 "Tracking.ITkFTFLargeD0Pass")
96 elif flags.Tracking.doITkFastTracking:
97 flagsLRT = flags.cloneAndReplace("Tracking.ActiveConfig",
98 "Tracking.ITkLargeD0FastPass")
99 else:
100 flagsLRT = flags.cloneAndReplace("Tracking.ActiveConfig",
101 "Tracking.ITkLargeD0Pass")
102 flags_set += [flagsLRT]
103
104
105 if TrackingComponent.FPGAChain in flags.Tracking.recoChain:
106 flags_set += [flags.cloneAndReplace(
107 "Tracking.ActiveConfig",
108 "Tracking.ITkFPGAPass")]
109
110 # LowPt
111 if flags.Tracking.doLowPt:
112 flagsLowPt = flags.cloneAndReplace("Tracking.ActiveConfig",
113 "Tracking.ITkLowPtPass")
114 flags_set += [flagsLowPt]
115
116 _flags_set = flags_set # Put into cache
117
118 return flags_set
119
120

◆ ITkActsExtendedPRDInfoCfg()

python.ITkTrackRecoConfig.ITkActsExtendedPRDInfoCfg ( flags)

Definition at line 429 of file ITkTrackRecoConfig.py.

429def ITkActsExtendedPRDInfoCfg(flags):
430 result = ComponentAccumulator()
431
432 #Add the truth origin to the truth particles
433 from InDetConfig.InDetPrepRawDataToxAODConfig import ITkActsPrepDataToxAODCfg
434 result.merge(ITkActsPrepDataToxAODCfg(flags))
435
436 return result
437

◆ ITkActsTrackFinalCfg()

ComponentAccumulator python.ITkTrackRecoConfig.ITkActsTrackFinalCfg ( flags,
list[str] InputCombinedITkTracks = None,
ActsTrackContainerName = "InDetActsTrackParticles" )

Definition at line 298 of file ITkTrackRecoConfig.py.

300 ActsTrackContainerName="InDetActsTrackParticles") -> ComponentAccumulator:
301 # Inputs must not be None
302 assert InputCombinedITkTracks is not None and isinstance(InputCombinedITkTracks, list)
303
304 acc = ComponentAccumulator()
305 if len(InputCombinedITkTracks) == 0:
306 return acc
307
308 # Schedule Track particle creation
309 from ActsConfig.ActsEventCnvConfig import ActsTrackToTrackParticleCnvAlgCfg
310 acc.merge(ActsTrackToTrackParticleCnvAlgCfg(flags, "ActsCombinedTrackToTrackParticleCnvAlg",
311 ACTSTracksLocation=InputCombinedITkTracks,
312 TrackParticlesOutKey=ActsTrackContainerName))
313 if flags.Tracking.doTruth :
314 from ActsConfig.ActsTruthConfig import ActsTrackParticleTruthDecorationAlgCfg
315 track_to_truth_maps=[]
316 for track_container in InputCombinedITkTracks :
317 track_to_truth_maps += [f'{track_container}ToTruthParticleAssociation']
318 # note: suppress stat dumps from ActsTrackParticleTruthDecorationAlg if there is only
319 # a single input collection, because it duplicates in that case the output of
320 # the TrackFindingValidationAlg
321 acc.merge(ActsTrackParticleTruthDecorationAlgCfg(
322 flags,
323 name=f'{ActsTrackContainerName}TruthDecorationAlg',
324 TrackToTruthAssociationMaps = track_to_truth_maps,
325 TrackParticleContainerName = ActsTrackContainerName,
326 OutputLevel=WARNING if len(InputCombinedITkTracks)==1 else INFO,
327 ComputeTrackRecoEfficiency=False if len(InputCombinedITkTracks)==1 else True
328 ))
329 return acc
330

◆ ITkClusterSplitProbabilityContainerName()

python.ITkTrackRecoConfig.ITkClusterSplitProbabilityContainerName ( flags)

Definition at line 121 of file ITkTrackRecoConfig.py.

121def ITkClusterSplitProbabilityContainerName(flags):
122 flags_set = CombinedTrackingPassFlagSets(flags)
123 extension = flags_set[-1].Tracking.ActiveConfig.extension
124 ClusterSplitProbContainer = "ITkAmbiguityProcessorSplitProb" + extension
125 return ClusterSplitProbContainer
126
127

◆ ITkExtendedPRDInfoCfg()

python.ITkTrackRecoConfig.ITkExtendedPRDInfoCfg ( flags)

Definition at line 438 of file ITkTrackRecoConfig.py.

438def ITkExtendedPRDInfoCfg(flags):
439 result = ComponentAccumulator()
440
441 if flags.Tracking.doTIDE_AmbiTrackMonitoring:
442 from InDetConfig.InDetPrepRawDataToxAODConfig import (
443 ITkPixelPrepDataToxAOD_ExtraTruthCfg as PixelPrepDataToxAODCfg,
444 ITkStripPrepDataToxAOD_ExtraTruthCfg as StripPrepDataToxAODCfg)
445 else:
446 from InDetConfig.InDetPrepRawDataToxAODConfig import (
447 ITkPixelPrepDataToxAODCfg as PixelPrepDataToxAODCfg,
448 ITkStripPrepDataToxAODCfg as StripPrepDataToxAODCfg)
449
450 result.merge(PixelPrepDataToxAODCfg(
451 flags,
452 ClusterSplitProbabilityName=(
453 "" if flags.Tracking.doITkFastTracking else
454 ITkClusterSplitProbabilityContainerName(flags))))
455 result.merge(StripPrepDataToxAODCfg(flags))
456
457 from DerivationFrameworkInDet.InDetToolsConfig import (
458 ITkTSOS_CommonKernelCfg)
459 # Set up one algorithm for each output tracking container
460 # Always done for default pass
461 # Done for other passes if pass requests to store track seeds OR track candidates OR requests separate container
462 # Input handling/configuration of algorithm for specific cases is done in TSOS_CommonKernelCfg
463 listOfExtensionsRequesting = [
464 e for e in _extensions_list if (e == '')
465 or (flags.Tracking[f"ITk{e}Pass"].storeTrackSeeds) # Store Si track seeds
466 or (flags.Tracking[f"ITk{e}Pass"].storeSiSPSeededTracks) # Store Si candidate tracks
467 or (flags.Tracking[f"ITk{e}Pass"].storeSeparateContainer) ] # Particular tracking pass requesting separate container from main pass
468
469 result.merge(ITkTSOS_CommonKernelCfg(
470 flags, listOfExtensions = listOfExtensionsRequesting))
471
472 if flags.Tracking.doStoreTrackSeeds:
473 from DerivationFrameworkInDet.InDetToolsConfig import (
474 ITkSiSPSeedsTSOS_CommonKernelCfg)
475 # Setup one algorithm for each output tracking container
476 listOfExtensionsRequesting = [
477 e for e in _extensions_list if (e == '') or
478 flags.Tracking[f"ITk{e}Pass"].storeTrackSeeds ]
479 result.merge(ITkSiSPSeedsTSOS_CommonKernelCfg(
480 flags, listOfExtensions = listOfExtensionsRequesting))
481
482 if flags.Tracking.doStoreSiSPSeededTracks:
483 listOfExtensionsRequesting = [
484 e for e in _extensions_list if (e=='') or
485 flags.Tracking[f"ITk{e}Pass"].storeSiSPSeededTracks ]
486 from DerivationFrameworkInDet.InDetToolsConfig import (
487 ITkSiSPTSOS_CommonKernelCfg)
488 result.merge(ITkSiSPTSOS_CommonKernelCfg(flags, listOfExtensions = listOfExtensionsRequesting))
489
490 if flags.Input.isMC:
491 listOfExtensionsRequesting = [
492 e for e in _extensions_list if (e=='') or
493 (flags.Tracking[f"ITk{e}Pass"].storeSiSPSeededTracks and
494 flags.Tracking[f"ITk{e}Pass"].storeSeparateContainer) ]
495 from InDetPhysValMonitoring.InDetPhysValDecorationConfig import (
496 ITkPhysHitDecoratorAlgCfg)
497 for extension in listOfExtensionsRequesting:
498 result.merge(ITkPhysHitDecoratorAlgCfg(
499 flags,
500 name=f"ITkPhysHit{extension}DecoratorAlg",
501 TrackParticleContainerName=f"InDet{extension}TrackParticles"))
502
503 return result
504
505

◆ ITkStatsCfg()

python.ITkTrackRecoConfig.ITkStatsCfg ( flags,
StatTrackCollections = None,
StatTrackTruthCollections = None )

Definition at line 407 of file ITkTrackRecoConfig.py.

408 StatTrackTruthCollections=None):
409 result = ComponentAccumulator()
410
411 from InDetConfig.InDetRecStatisticsConfig import (
412 ITkRecStatisticsAlgCfg)
413 result.merge(ITkRecStatisticsAlgCfg(
414 flags,
415 TrackCollectionKeys=StatTrackCollections,
416 TrackTruthCollectionKeys=(
417 StatTrackTruthCollections if flags.Tracking.doTruth else [])))
418
419 if flags.Tracking.doTruth:
420 from InDetConfig.InDetTrackClusterAssValidationConfig import (
421 ITkTrackClusterAssValidationCfg)
422 result.merge(ITkTrackClusterAssValidationCfg(
423 flags,
424 TracksLocation=StatTrackCollections))
425
426 return result
427
428

◆ ITkStoreTrackSeparateContainerCfg()

ComponentAccumulator python.ITkTrackRecoConfig.ITkStoreTrackSeparateContainerCfg ( flags,
str TrackContainer = "",
str ClusterSplitProbContainer = "" )

Definition at line 128 of file ITkTrackRecoConfig.py.

130 ClusterSplitProbContainer: str = "") -> ComponentAccumulator:
131 result = ComponentAccumulator()
132 extension = flags.Tracking.ActiveConfig.extension
133 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
134 if doTrackOverlay:
135 AssociationMapName = ("PRDtoTrackMapMerge_Resolved" +
136 extension + "Tracks")
137 if extension != "Conversion":
138 # schedule merger to combine signal and background tracks.
139 # For the Conversion extension this merger is created in ITkTrackRecoPassCfg
140 # before this function is called, so we skip it here to avoid duplication.
141 InputTracks = [flags.Overlay.SigPrefix+TrackContainer,
142 flags.Overlay.BkgPrefix+TrackContainer]
143 MergerOutputTracks = TrackContainer
144
145 from TrkConfig.TrkTrackCollectionMergerConfig import ITkTrackCollectionMergerAlgCfg
146 result.merge(ITkTrackCollectionMergerAlgCfg(
147 flags,
148 name="ITkTrackCollectionMergerAlgCfg"+extension,
149 InputCombinedTracks=InputTracks,
150 OutputCombinedTracks=MergerOutputTracks,
151 AssociationMapName=AssociationMapName))
152
153 # Run truth, but only do this for non ACTS workflows
154 if flags.Tracking.doTruth and extension not in _actsExtensions:
155 from InDetConfig.ITkTrackTruthConfig import ITkTrackTruthCfg
156 result.merge(ITkTrackTruthCfg(
157 flags,
158 Tracks=TrackContainer,
159 DetailedTruth=TrackContainer+"DetailedTruth",
160 TracksTruth=TrackContainer+"TruthCollection"))
161
162 # Create track particles from all the different track collections
163 # We have different algorithms depending on the EDM being used
164 if extension not in _actsExtensions:
165 # Workflows that use Trk Tracks
166 from xAODTrackingCnv.xAODTrackingCnvConfig import ITkTrackParticleCnvAlgCfg
167 result.merge(ITkTrackParticleCnvAlgCfg(
168 flags,
169 name=extension + "TrackParticleCnvAlg",
170 TrackContainerName=TrackContainer,
171 xAODTrackParticlesFromTracksContainerName=(
172 "InDet" + extension + "TrackParticles"),
173 ClusterSplitProbabilityName=(
174 "" if flags.Tracking.doITkFastTracking else
175 ClusterSplitProbContainer),
176 AssociationMapName=""))
177 else:
178 # Workflows that use Acts Tracks
179 from ActsConfig.ActsEventCnvConfig import ActsTrackToTrackParticleCnvAlgCfg
180 # The following few lines will disappear once we have imposed a proper nomenclature for our algorithms and collection
181 prefix = flags.Tracking.ActiveConfig.extension
182 from InDetConfig.ITkActsHelpers import separateTrackParticleContainerName
183 TrackParticleContainer = separateTrackParticleContainerName(flags)
184 result.merge(ActsTrackToTrackParticleCnvAlgCfg(flags, f"{prefix}ResolvedTrackToAltTrackParticleCnvAlg",
185 ACTSTracksLocation=[TrackContainer],
186 TrackParticlesOutKey=TrackParticleContainer))
187
188 if flags.Tracking.doTruth :
189 from ActsConfig.ActsTruthConfig import ActsTrackParticleTruthDecorationAlgCfg
190 result.merge(ActsTrackParticleTruthDecorationAlgCfg(flags,
191 name=f'{TrackContainer}ParticleTruthDecorationAlg',
192 TrackToTruthAssociationMaps = [f'{TrackContainer}ToTruthParticleAssociation'],
193 TrackParticleContainerName = TrackParticleContainer
194 ))
195 return result
196
197
198# Returns CA + ClusterSplitProbContainer

◆ ITkTrackFinalCfg()

python.ITkTrackRecoConfig.ITkTrackFinalCfg ( flags,
list[str] InputCombinedITkTracks = None,
list[str] StatTrackCollections = None,
list[str] StatTrackTruthCollections = None )

Definition at line 331 of file ITkTrackRecoConfig.py.

334 StatTrackTruthCollections: list[str] = None):
335 # None of the input collection is supposed to be None
336 assert InputCombinedITkTracks is not None and isinstance(InputCombinedITkTracks, list)
337 assert StatTrackCollections is not None and isinstance(StatTrackCollections, list)
338 assert StatTrackTruthCollections is not None and isinstance(StatTrackTruthCollections, list)
339
340 # If there are no tracks return directly
341 result = ComponentAccumulator()
342 if len(InputCombinedITkTracks) == 0:
343 return result
344
345 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
346 TrackContainer = "CombinedITkTracks"
347 if doTrackOverlay:
348 #schedule merge to combine signal and background tracks
349 InputCombinedITkTracks += [flags.Overlay.BkgPrefix + TrackContainer]
350
351 from TrkConfig.TrkConfigFlags import TrackingComponent
352 doGNNWithoutAmbiReso = (TrackingComponent.GNNChain in flags.Tracking.recoChain and (not flags.Tracking.GNN.doAmbiResolution))
353 skipClusterMerge = doGNNWithoutAmbiReso or flags.Tracking.doITkFastTracking
354 # This merges track collections
355 from TrkConfig.TrkTrackCollectionMergerConfig import (
356 ITkTrackCollectionMergerAlgCfg)
357 result.merge(ITkTrackCollectionMergerAlgCfg(
358 flags,
359 InputCombinedTracks=InputCombinedITkTracks,
360 OutputCombinedTracks=TrackContainer,
361 AssociationMapName=(
362 "" if skipClusterMerge else
363 f"PRDtoTrackMapMerge_{TrackContainer}")))
364
365 if flags.Tracking.doTruth:
366 from InDetConfig.ITkTrackTruthConfig import ITkTrackTruthCfg
367 result.merge(ITkTrackTruthCfg(
368 flags,
369 Tracks=TrackContainer,
370 DetailedTruth=f"{TrackContainer}DetailedTruth",
371 TracksTruth=f"{TrackContainer}TruthCollection"))
372
373 StatTrackCollections += [TrackContainer]
374 StatTrackTruthCollections += [f"{TrackContainer}TruthCollection"]
375
376 if flags.Tracking.doSlimming:
377 from TrkConfig.TrkTrackSlimmerConfig import TrackSlimmerCfg
378 result.merge(TrackSlimmerCfg(
379 flags,
380 TrackLocation=[TrackContainer]))
381
382 splitProbName = ITkClusterSplitProbabilityContainerName(flags)
383
384 # This creates track particles
385 if flags.Tracking.perigeeExpression == "BeamLine":
386 from xAODTrackingCnv.xAODTrackingCnvConfig import ITkTrackParticleCnvAlgCfg
387 result.merge(ITkTrackParticleCnvAlgCfg(
388 flags,
389 ClusterSplitProbabilityName=(
390 "" if skipClusterMerge else
391 splitProbName),
392 AssociationMapName=(
393 "" if skipClusterMerge else
394 f"PRDtoTrackMapMerge_{TrackContainer}"),
395 isActsAmbi = 'ActsValidateResolvedTracks' in splitProbName or \
396 'ActsValidateAmbiguityResolution' in splitProbName or \
397 'ActsValidateScoreBasedAmbiguityResolution' in splitProbName or \
398 'ActsConversion' in splitProbName or \
399 'ActsLargeRadius' in splitProbName or \
400 'ActsValidateLargeRadiusStandalone' in splitProbName or \
401 'ActsLowPt' in splitProbName or \
402 ('Acts' in splitProbName and 'Validate' not in splitProbName) ))
403
404 return result
405
406

◆ ITkTrackRecoCfg()

ComponentAccumulator python.ITkTrackRecoConfig.ITkTrackRecoCfg ( flags)

Main ITk tracking config #####################.

Configures complete ITk tracking 

Definition at line 511 of file ITkTrackRecoConfig.py.

511def ITkTrackRecoCfg(flags) -> ComponentAccumulator:
512 """Configures complete ITk tracking """
513
514 from InDetConfig.ITkActsHelpers import primaryPassUsesActs
515 if primaryPassUsesActs(flags):
516 from InDetConfig.ITkActsTrackRecoConfig import ITkActsTrackRecoCfg
517 return ITkActsTrackRecoCfg(flags)
518
519 result = ComponentAccumulator()
520
521 if flags.Input.Format is Format.BS:
522 if flags.Detector.EnableITkPixel:
523 from ITkPixelByteStreamCnv.ITkPixelByteStreamCnvConfig import ITkPixelDecodingAlgCfg
524 result.merge( ITkPixelDecodingAlgCfg(flags) )
525
526 if flags.Detector.EnableITkStrip:
527 from ITkStripsByteStreamCnv.ITkStripByteStreamCnvConfig import ITkStripRawDataProviderCfg
528 result.merge(ITkStripRawDataProviderCfg(flags))
529
530
531
532 # Get all the requested tracking passes
533 flags_set = CombinedTrackingPassFlagSets(flags, resetCache=True)
534
535 # Store the names of several collections from all the different passes
536 # These collections will then be used for different purposes
537
538 # Tracks to be ultimately merged in InDetTrackParticle collection
539 InputCombinedITkTracks = []
540 # Same but for ACTS collection
541 InputCombinedActsTracks = []
542 # Includes also tracks which end in standalone TrackParticle collections
543 InputExtendedITkTracks = []
544 # Cluster split prob container for measurement removal
545 ClusterSplitProbContainer = ""
546 # To be passed to the InDetRecStatistics alg
547 StatTrackCollections = []
548 StatTrackTruthCollections = []
549 # Record previous ACTS extension
550 previousActsExtension = None
551
552 from InDetConfig.SiliconPreProcessing import ITkRecPreProcessingSiliconCfg
553
554 for current_flags in flags_set:
555 printActiveConfig(current_flags)
556
557
558 extension = current_flags.Tracking.ActiveConfig.extension
559 if extension not in _actsExtensions:
560 _extensions_list.append(extension)
561
562 # Add the extension to the output job option
563 _outputExtensions.append(extension)
564
565 # Data Preparation
566 # According to the tracking pass we have different data preparation
567 # sequences. We may have:
568 # (1) Full Athena data preparation
569 # (2) Full Acts data preparation
570 # (3) Hybrid configurations with EDM converters
571 result.merge(ITkRecPreProcessingSiliconCfg(current_flags,
572 previousActsExtension=previousActsExtension))
573
574 # Track Reconstruction
575 # This includes track finding and ambiguity resolution
576 # The output is the component accumulator to be added to the sequence
577 # and the name of the cluster split prob container that is used for
578 # removing measurements used by previous passes
579 # This last object will also assure the proper sequence of the tracking passes
580 # since it will create a data dependency from the prevous pass
581 acc, ClusterSplitProbContainer = ITkTrackRecoPassCfg(
582 current_flags,
583 previousActsExtension,
584 InputCombinedITkTracks=InputCombinedITkTracks,
585 InputCombinedActsTracks=InputCombinedActsTracks,
586 InputExtendedITkTracks=InputExtendedITkTracks,
587 StatTrackCollections=StatTrackCollections,
588 StatTrackTruthCollections=StatTrackTruthCollections,
589 ClusterSplitProbContainer=ClusterSplitProbContainer)
590 result.merge(acc)
591
592 # Store ACTS extension
593 if 'Acts' in extension:
594 previousActsExtension = extension
595
596 # This merges the track collection in InputCombinedITkTracks
597 # and creates a track particle collection from that
598 if InputCombinedITkTracks:
599
600 result.merge(
601 ITkTrackFinalCfg(flags,
602 InputCombinedITkTracks=InputCombinedITkTracks,
603 StatTrackCollections=StatTrackCollections,
604 StatTrackTruthCollections=StatTrackTruthCollections))
605
606
607
608
609 # Now handle ACTS tracks instead if present in the event
610 if InputCombinedActsTracks:
611
612 # The name of the Acts xAOD container name depends on what
613 # workflow has been executed, which we get by checking
614 # the size of the track containers.
615
616 ActsTrackContainerName = "InDetTrackParticles" if not InputCombinedITkTracks else "InDetActsTrackParticles"
617 ActsPrimaryVertices = "PrimaryVertices" if not InputCombinedITkTracks else "ActsPrimaryVertices"
618
619 result.merge(ITkActsTrackFinalCfg(flags,
620 InputCombinedITkTracks=InputCombinedActsTracks,
621 ActsTrackContainerName=ActsTrackContainerName))
622
623 # Perform vertex finding
624 if flags.Tracking.doVertexFinding:
625
626 from InDetConfig.InDetPriVxFinderConfig import primaryVertexFindingCfg
627
628 # Schedule the usual vertex finding for Athena workflow(s)
629 # ONLY schedule this if there are Athena Legacy Track collections
630 if InputCombinedITkTracks:
631 result.merge(primaryVertexFindingCfg(flags))
632
633 # Schedule the same vertex finding for Acts workflow(s)
634 # For now this is separate from the Athena counterpart, but in the
635 # end the difference will not be needed anymore
636 # ONLY schedule this if there are ACTS Track collections
637 if InputCombinedActsTracks:
638 result.merge(primaryVertexFindingCfg(flags,
639 name="ActsPriVxFinderAlg",
640 TracksName=ActsTrackContainerName,
641 vxCandidatesOutputName=ActsPrimaryVertices))
642
643 # Post Processing
644 # This is mainly for validation support
645 print("-------- POST PROCESSING --------")
646 for current_flags in flags_set:
647 extension = current_flags.Tracking.ActiveConfig.extension
648 print(f"- Running post-processing for extension: {extension}")
649
650 # Persistify the Seeds
651 # This is done for the InDet EDM, while for ACTS seeds the persistification
652 # support is done while scheduling the seeding algorithms
653 # This means that here we only care about the legacy seeds, that are
654 # produced whem the legacy Track Finding is scheduled
655 # - flags.Tracking.ActiveConfig.doAthenaTrack
656 # This also covers the case of the Acts->InDet Seed conversion, since that
657 # runs the legacy track finding as well
658 #
659 # At the end of this we have a track collection (segments from the seeds)
660 # and the corresponding track particle collection
661 if current_flags.Tracking.ActiveConfig.doAthenaTrack:
662 if current_flags.Tracking.doStoreTrackSeeds:
663 from InDetConfig.ITkPersistificationConfig import ITkTrackSeedsFinalCfg
664 result.merge(ITkTrackSeedsFinalCfg(current_flags))
665
666 # Persistify Track from Track Finding
667 # Currently this is only possible for Trk Tracks
668 # For legacy tracking passes the CKF Trk Tracks are always produced
669 # - flags.Tracking.ActiveConfig.doAthenaTrack
670 # For hybrid ACTS-Athena tracking passes they are produced only after Track EDM conversion
671 # - flags.Tracking.ActiveConfig.doActsToAthenaTrack
672 if current_flags.Tracking.ActiveConfig.doAthenaTrack or current_flags.Tracking.ActiveConfig.doActsToAthenaTrack:
673 if current_flags.Tracking.doStoreSiSPSeededTracks:
674 from InDetConfig.ITkPersistificationConfig import ITkSiSPSeededTracksFinalCfg
675 result.merge(ITkSiSPSeededTracksFinalCfg(current_flags))
676
677 if flags.Tracking.doStats:
678 if _extensions_list:
679 result.merge(ITkStatsCfg(
680 flags_set[0], # Use cuts from primary pass
681 StatTrackCollections=StatTrackCollections,
682 StatTrackTruthCollections=StatTrackTruthCollections))
683
684 # GNN edges score decoration
685 if flags.Tracking.GNN.ActsPipeline.saveEdgeScore:
686 from ActsConfig.ActsObjectDecorationConfig import ActsGNNScoreDecoratorAlgCfg
687 result.merge(ActsGNNScoreDecoratorAlgCfg(flags,
688 name="ActsGNNScoreDecoratorAlg"))
689
690
691 if flags.Tracking.writeExtendedSi_PRDInfo:
692 if _extensions_list:
693 result.merge(ITkExtendedPRDInfoCfg(flags))
694
695 #Acts algorithm
696 else:
697 result.merge(ITkActsExtendedPRDInfoCfg(flags))
698
699 # output
700 from InDetConfig.ITkTrackOutputConfig import ITkTrackRecoOutputCfg
701 result.merge(ITkTrackRecoOutputCfg(flags, _outputExtensions))
702 result.printConfig(withDetails = False, summariseProps = False)
703 return result
704
705
void print(char *figname, TCanvas *c1)

◆ ITkTrackRecoPassCfg()

python.ITkTrackRecoConfig.ITkTrackRecoPassCfg ( flags,
str previousActsExtension = None,
list[str] InputCombinedITkTracks = None,
list[str] InputCombinedActsTracks = None,
list[str] InputExtendedITkTracks = None,
list[str] StatTrackCollections = None,
list[str] StatTrackTruthCollections = None,
str ClusterSplitProbContainer = "" )

Definition at line 199 of file ITkTrackRecoConfig.py.

206 ClusterSplitProbContainer: str = ""):
207 # We use these lists to store the collections from all the tracking passes, thus keeping the history
208 # of previous passes. None of these lists is allowed to be a None
209 assert InputCombinedITkTracks is not None and isinstance(InputCombinedITkTracks, list)
210 assert InputCombinedActsTracks is not None and isinstance(InputCombinedActsTracks, list)
211 assert InputExtendedITkTracks is not None and isinstance(InputExtendedITkTracks, list)
212 assert StatTrackCollections is not None and isinstance(StatTrackCollections, list)
213 assert StatTrackTruthCollections is not None and isinstance(StatTrackTruthCollections ,list)
214
215 # Get the tracking pass extension name
216 extension = flags.Tracking.ActiveConfig.extension
217
218 result = ComponentAccumulator()
219 # Define collection name(s)
220 # This is the track collection AFTER the ambiguity resolution
221 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
222 TrackContainer = "Resolved" + extension + "Tracks"
223 # For Acts we have another convention, with the extention as the first element in the name
224 if extension in _actsExtensions:
225 TrackContainer = extension + "ResolvedTracks" if flags.Acts.doAmbiguityResolution else extension + "Tracks"
226 if doTrackOverlay and extension == "Conversion":
227 TrackContainer = flags.Overlay.SigPrefix + TrackContainer
228
229 # This is the track collection BEFORE the ambiguity resolution
230 SiSPSeededTracks = "SiSPSeeded" + extension + "Tracks"
231 # For ACTS the name is totally different
232 if extension in _actsExtensions:
233 SiSPSeededTracks = extension + "Tracks"
234
235 # This performs track finding
236 from InDetConfig.ITkTrackingSiPatternConfig import ITkTrackingSiPatternCfg
237 result.merge(ITkTrackingSiPatternCfg(
238 flags,
239 previousActsExtension=previousActsExtension,
240 InputCollections=InputExtendedITkTracks,
241 ResolvedTrackCollectionKey=TrackContainer,
242 SiSPSeededTrackCollectionKey=SiSPSeededTracks,
243 ClusterSplitProbContainer=ClusterSplitProbContainer))
244 StatTrackCollections += [SiSPSeededTracks, TrackContainer]
245 StatTrackTruthCollections += [SiSPSeededTracks+"TruthCollection",
246 TrackContainer+"TruthCollection"]
247
248 if doTrackOverlay and extension == "Conversion":
249 # Reset TrackContainer from the Sig-prefixed name back to the bare name.
250 TrackContainer = "Resolved" + extension + "Tracks"
251 # Merge Sig_ResolvedConversionTracks + Bkg_ResolvedConversionTracks -> ResolvedConversionTracks.
252 # This must happen regardless of storeSeparateContainer, because the merged container is
253 # consumed either by the final ITkTrackCollectionMerger (storeSeparateContainer=False)
254 # or by ITkStoreTrackSeparateContainerCfg truth/cnv steps (storeSeparateContainer=True).
255 from TrkConfig.TrkTrackCollectionMergerConfig import ITkTrackCollectionMergerAlgCfg
256 result.merge(ITkTrackCollectionMergerAlgCfg(
257 flags,
258 name="ITkTrackCollectionMergerAlgCfgConversion",
259 InputCombinedTracks=[flags.Overlay.SigPrefix + TrackContainer,
260 flags.Overlay.BkgPrefix + TrackContainer],
261 OutputCombinedTracks=TrackContainer,
262 AssociationMapName="PRDtoTrackMapMerge_" + TrackContainer))
263
264 if flags.Tracking.ActiveConfig.storeSeparateContainer:
265 # If we do not want the track collection to be merged with another collection
266 # then we immediately create the track particles from it
267 # This happens inside ITkStoreTrackSeparateContainerCfg
268
269 # Track container, for ACTS workflow, depends on whether we activated the ambiguity resolution or not
270 inputTrack = TrackContainer
271 if extension in _actsExtensions and not flags.Tracking.ActiveConfig.doActsAmbiguityResolution:
272 inputTrack = SiSPSeededTracks
273
274 result.merge(ITkStoreTrackSeparateContainerCfg(
275 flags,
276 TrackContainer=inputTrack,
277 ClusterSplitProbContainer=ClusterSplitProbContainer))
278 else:
279 # ClusterSplitProbContainer is used for removing measurements used in previous passes
280 # For ACTS this is still not possible, TO BE IMPLEMENTED
281 ClusterSplitProbContainer = (
282 "ITkAmbiguityProcessorSplitProb" + extension)
283 # Collect all the Trk Track collections to be then merged in a single big collection
284 # Merging will be done later, and after that we create track particles from the merged collection
285 if extension not in _actsExtensions:
286 InputCombinedITkTracks += [TrackContainer]
287 else:
288 InputCombinedActsTracks += [TrackContainer]
289
290 # This is only used in this same function for the Track-PRD association
291 # Not yet supported for ACTS tracks
292 if extension not in _actsExtensions:
293 InputExtendedITkTracks += [TrackContainer]
294
295 return result, ClusterSplitProbContainer
296
297

Variable Documentation

◆ _actsExtensions

list python.ITkTrackRecoConfig._actsExtensions = ['Acts', 'ActsLegacy', 'ActsConversion', 'ActsLargeRadius', 'ActsLowPt', 'ActsValidateF100', 'ActsValidateF150', 'ActsValidateLargeRadiusStandalone']
protected

Definition at line 10 of file ITkTrackRecoConfig.py.

◆ _extensions_list

list python.ITkTrackRecoConfig._extensions_list = []
protected

Definition at line 9 of file ITkTrackRecoConfig.py.

◆ _flags_set

list python.ITkTrackRecoConfig._flags_set = []
protected

Definition at line 8 of file ITkTrackRecoConfig.py.

◆ _outputExtensions

list python.ITkTrackRecoConfig._outputExtensions = []
protected

Definition at line 11 of file ITkTrackRecoConfig.py.

◆ doITkFastTracking

python.ITkTrackRecoConfig.doITkFastTracking

Definition at line 719 of file ITkTrackRecoConfig.py.

◆ EnableCalo

python.ITkTrackRecoConfig.EnableCalo

Definition at line 711 of file ITkTrackRecoConfig.py.

◆ Files

python.ITkTrackRecoConfig.Files

Definition at line 714 of file ITkTrackRecoConfig.py.

◆ flags

python.ITkTrackRecoConfig.flags = initConfigFlags()

Definition at line 708 of file ITkTrackRecoConfig.py.

◆ OutputLevel

python.ITkTrackRecoConfig.OutputLevel

Definition at line 736 of file ITkTrackRecoConfig.py.

◆ sc

python.ITkTrackRecoConfig.sc = top_acc.run(5)

Definition at line 741 of file ITkTrackRecoConfig.py.

◆ summariseProps

python.ITkTrackRecoConfig.summariseProps

Definition at line 737 of file ITkTrackRecoConfig.py.

◆ top_acc

python.ITkTrackRecoConfig.top_acc = MainServicesCfg(flags)

Definition at line 724 of file ITkTrackRecoConfig.py.

◆ True

python.ITkTrackRecoConfig.True

Definition at line 737 of file ITkTrackRecoConfig.py.

◆ useITkFTF

python.ITkTrackRecoConfig.useITkFTF

Definition at line 718 of file ITkTrackRecoConfig.py.

◆ withDetails

python.ITkTrackRecoConfig.withDetails

Definition at line 737 of file ITkTrackRecoConfig.py.