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', 'LargeD0', '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 427 of file ITkTrackRecoConfig.py.

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

◆ ITkActsTrackFinalCfg()

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

Definition at line 296 of file ITkTrackRecoConfig.py.

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

◆ 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 436 of file ITkTrackRecoConfig.py.

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

◆ ITkStatsCfg()

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

Definition at line 405 of file ITkTrackRecoConfig.py.

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

◆ 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.ActsTrackFindingConfig 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 result.merge(ActsTrackToTrackParticleCnvAlgCfg(flags, f"{prefix}ResolvedTrackToAltTrackParticleCnvAlg",
183 ACTSTracksLocation=[TrackContainer],
184 TrackParticlesOutKey=f'InDet{prefix}TrackParticles'))
185
186 if flags.Tracking.doTruth :
187 from ActsConfig.ActsTruthConfig import ActsTrackParticleTruthDecorationAlgCfg
188 result.merge(ActsTrackParticleTruthDecorationAlgCfg(flags,
189 name=f'{TrackContainer}ParticleTruthDecorationAlg',
190 TrackToTruthAssociationMaps = [f'{TrackContainer}ToTruthParticleAssociation'],
191 TrackParticleContainerName = f'InDet{prefix}TrackParticles'
192 ))
193 return result
194
195
196# Returns CA + ClusterSplitProbContainer

◆ ITkTrackFinalCfg()

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

Definition at line 329 of file ITkTrackRecoConfig.py.

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

◆ ITkTrackRecoCfg()

ComponentAccumulator python.ITkTrackRecoConfig.ITkTrackRecoCfg ( flags)

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

Configures complete ITk tracking 

Definition at line 509 of file ITkTrackRecoConfig.py.

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

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

Variable Documentation

◆ _actsExtensions

list python.ITkTrackRecoConfig._actsExtensions = ['Acts', 'ActsLegacy', 'ActsConversion', 'LargeD0', '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 712 of file ITkTrackRecoConfig.py.

◆ EnableCalo

python.ITkTrackRecoConfig.EnableCalo

Definition at line 704 of file ITkTrackRecoConfig.py.

◆ Files

python.ITkTrackRecoConfig.Files

Definition at line 707 of file ITkTrackRecoConfig.py.

◆ flags

python.ITkTrackRecoConfig.flags = initConfigFlags()

Definition at line 701 of file ITkTrackRecoConfig.py.

◆ OutputLevel

python.ITkTrackRecoConfig.OutputLevel

Definition at line 729 of file ITkTrackRecoConfig.py.

◆ sc

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

Definition at line 734 of file ITkTrackRecoConfig.py.

◆ summariseProps

python.ITkTrackRecoConfig.summariseProps

Definition at line 730 of file ITkTrackRecoConfig.py.

◆ top_acc

python.ITkTrackRecoConfig.top_acc = MainServicesCfg(flags)

Definition at line 717 of file ITkTrackRecoConfig.py.

◆ True

python.ITkTrackRecoConfig.True

Definition at line 730 of file ITkTrackRecoConfig.py.

◆ useITkFTF

python.ITkTrackRecoConfig.useITkFTF

Definition at line 711 of file ITkTrackRecoConfig.py.

◆ withDetails

python.ITkTrackRecoConfig.withDetails

Definition at line 730 of file ITkTrackRecoConfig.py.