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

415def ITkActsExtendedPRDInfoCfg(flags):
416 result = ComponentAccumulator()
417
418 #Add the truth origin to the truth particles
419 from InDetConfig.InDetPrepRawDataToxAODConfig import ITkActsPrepDataToxAODCfg
420 result.merge(ITkActsPrepDataToxAODCfg(flags))
421
422 return result
423

◆ ITkActsTrackFinalCfg()

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

Definition at line 284 of file ITkTrackRecoConfig.py.

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

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

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

◆ ITkStatsCfg()

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

Definition at line 393 of file ITkTrackRecoConfig.py.

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

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

◆ ITkTrackFinalCfg()

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

Definition at line 317 of file ITkTrackRecoConfig.py.

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

◆ ITkTrackRecoCfg()

ComponentAccumulator python.ITkTrackRecoConfig.ITkTrackRecoCfg ( flags)

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

Configures complete ITk tracking 

Definition at line 497 of file ITkTrackRecoConfig.py.

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

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

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

◆ EnableCalo

python.ITkTrackRecoConfig.EnableCalo

Definition at line 692 of file ITkTrackRecoConfig.py.

◆ Files

python.ITkTrackRecoConfig.Files

Definition at line 695 of file ITkTrackRecoConfig.py.

◆ flags

python.ITkTrackRecoConfig.flags = initConfigFlags()

Definition at line 689 of file ITkTrackRecoConfig.py.

◆ OutputLevel

python.ITkTrackRecoConfig.OutputLevel

Definition at line 717 of file ITkTrackRecoConfig.py.

◆ sc

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

Definition at line 722 of file ITkTrackRecoConfig.py.

◆ summariseProps

python.ITkTrackRecoConfig.summariseProps

Definition at line 718 of file ITkTrackRecoConfig.py.

◆ top_acc

python.ITkTrackRecoConfig.top_acc = MainServicesCfg(flags)

Definition at line 705 of file ITkTrackRecoConfig.py.

◆ True

python.ITkTrackRecoConfig.True

Definition at line 718 of file ITkTrackRecoConfig.py.

◆ useITkFTF

python.ITkTrackRecoConfig.useITkFTF

Definition at line 699 of file ITkTrackRecoConfig.py.

◆ withDetails

python.ITkTrackRecoConfig.withDetails

Definition at line 718 of file ITkTrackRecoConfig.py.