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

Functions

 CombinedTrackingPassFlagSets (flags)
 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)

Definition at line 13 of file ITkTrackRecoConfig.py.

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

◆ ITkActsExtendedPRDInfoCfg()

python.ITkTrackRecoConfig.ITkActsExtendedPRDInfoCfg ( flags)

Definition at line 420 of file ITkTrackRecoConfig.py.

420def ITkActsExtendedPRDInfoCfg(flags):
421 result = ComponentAccumulator()
422
423 #Add the truth origin to the truth particles
424 from InDetConfig.InDetPrepRawDataToxAODConfig import ITkActsPrepDataToxAODCfg
425 result.merge(ITkActsPrepDataToxAODCfg(flags))
426
427 return result
428

◆ ITkActsTrackFinalCfg()

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

Definition at line 289 of file ITkTrackRecoConfig.py.

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

◆ ITkClusterSplitProbabilityContainerName()

python.ITkTrackRecoConfig.ITkClusterSplitProbabilityContainerName ( flags)

Definition at line 126 of file ITkTrackRecoConfig.py.

126def ITkClusterSplitProbabilityContainerName(flags):
127 flags_set = CombinedTrackingPassFlagSets(flags)
128 extension = flags_set[-1].Tracking.ActiveConfig.extension
129 ClusterSplitProbContainer = "ITkAmbiguityProcessorSplitProb" + extension
130 return ClusterSplitProbContainer
131
132

◆ ITkExtendedPRDInfoCfg()

python.ITkTrackRecoConfig.ITkExtendedPRDInfoCfg ( flags)

Definition at line 429 of file ITkTrackRecoConfig.py.

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

◆ ITkStatsCfg()

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

Definition at line 398 of file ITkTrackRecoConfig.py.

399 StatTrackTruthCollections=None):
400 result = ComponentAccumulator()
401
402 from InDetConfig.InDetRecStatisticsConfig import (
403 ITkRecStatisticsAlgCfg)
404 result.merge(ITkRecStatisticsAlgCfg(
405 flags,
406 TrackCollectionKeys=StatTrackCollections,
407 TrackTruthCollectionKeys=(
408 StatTrackTruthCollections if flags.Tracking.doTruth else [])))
409
410 if flags.Tracking.doTruth:
411 from InDetConfig.InDetTrackClusterAssValidationConfig import (
412 ITkTrackClusterAssValidationCfg)
413 result.merge(ITkTrackClusterAssValidationCfg(
414 flags,
415 TracksLocation=StatTrackCollections))
416
417 return result
418
419

◆ ITkStoreTrackSeparateContainerCfg()

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

Definition at line 133 of file ITkTrackRecoConfig.py.

135 ClusterSplitProbContainer: str = "") -> ComponentAccumulator:
136 result = ComponentAccumulator()
137 extension = flags.Tracking.ActiveConfig.extension
138 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
139 if doTrackOverlay:
140 # schedule merger to combine signal and background tracks
141 InputTracks = [flags.Overlay.SigPrefix+TrackContainer,
142 flags.Overlay.BkgPrefix+TrackContainer]
143 AssociationMapName = ("PRDtoTrackMapMerge_Resolved" +
144 extension + "Tracks")
145 MergerOutputTracks = TrackContainer
146
147 from TrkConfig.TrkTrackCollectionMergerConfig import TrackCollectionMergerAlgCfg
148 result.merge(TrackCollectionMergerAlgCfg(
149 flags,
150 name="TrackCollectionMergerAlgCfg"+extension,
151 InputCombinedTracks=InputTracks,
152 OutputCombinedTracks=MergerOutputTracks,
153 AssociationMapName=AssociationMapName))
154
155 # Run truth, but only do this for non ACTS workflows
156 if flags.Tracking.doTruth and extension not in _actsExtensions:
157 from InDetConfig.ITkTrackTruthConfig import ITkTrackTruthCfg
158 result.merge(ITkTrackTruthCfg(
159 flags,
160 Tracks=TrackContainer,
161 DetailedTruth=TrackContainer+"DetailedTruth",
162 TracksTruth=TrackContainer+"TruthCollection"))
163
164 # Create track particles from all the different track collections
165 # We have different algorithms depending on the EDM being used
166 if extension not in _actsExtensions:
167 # Workflows that use Trk Tracks
168 from xAODTrackingCnv.xAODTrackingCnvConfig import ITkTrackParticleCnvAlgCfg
169 result.merge(ITkTrackParticleCnvAlgCfg(
170 flags,
171 name=extension + "TrackParticleCnvAlg",
172 TrackContainerName=TrackContainer,
173 xAODTrackParticlesFromTracksContainerName=(
174 "InDet" + extension + "TrackParticles"),
175 ClusterSplitProbabilityName=(
176 "" if flags.Tracking.doITkFastTracking else
177 ClusterSplitProbContainer),
178 AssociationMapName=""))
179 else:
180 # Workflows that use Acts Tracks
181 from ActsConfig.ActsTrackFindingConfig import ActsTrackToTrackParticleCnvAlgCfg
182 # The following few lines will disappear once we have imposed a proper nomenclature for our algorithms and collection
183 prefix = flags.Tracking.ActiveConfig.extension
184 result.merge(ActsTrackToTrackParticleCnvAlgCfg(flags, f"{prefix}ResolvedTrackToAltTrackParticleCnvAlg",
185 ACTSTracksLocation=[TrackContainer],
186 TrackParticlesOutKey=f'InDet{prefix}TrackParticles'))
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 = f'InDet{prefix}TrackParticles'
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 322 of file ITkTrackRecoConfig.py.

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

◆ ITkTrackRecoCfg()

ComponentAccumulator python.ITkTrackRecoConfig.ITkTrackRecoCfg ( flags)

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

Configures complete ITk tracking 

Definition at line 502 of file ITkTrackRecoConfig.py.

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

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

◆ EnableCalo

python.ITkTrackRecoConfig.EnableCalo

Definition at line 690 of file ITkTrackRecoConfig.py.

◆ Files

python.ITkTrackRecoConfig.Files

Definition at line 693 of file ITkTrackRecoConfig.py.

◆ flags

python.ITkTrackRecoConfig.flags = initConfigFlags()

Definition at line 687 of file ITkTrackRecoConfig.py.

◆ OutputLevel

python.ITkTrackRecoConfig.OutputLevel

Definition at line 715 of file ITkTrackRecoConfig.py.

◆ sc

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

Definition at line 720 of file ITkTrackRecoConfig.py.

◆ summariseProps

python.ITkTrackRecoConfig.summariseProps

Definition at line 716 of file ITkTrackRecoConfig.py.

◆ top_acc

python.ITkTrackRecoConfig.top_acc = MainServicesCfg(flags)

Definition at line 703 of file ITkTrackRecoConfig.py.

◆ True

python.ITkTrackRecoConfig.True

Definition at line 716 of file ITkTrackRecoConfig.py.

◆ useITkFTF

python.ITkTrackRecoConfig.useITkFTF

Definition at line 697 of file ITkTrackRecoConfig.py.

◆ withDetails

python.ITkTrackRecoConfig.withDetails

Definition at line 716 of file ITkTrackRecoConfig.py.