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

Functions

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

Variables

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

Function Documentation

◆ CombinedTrackingPassFlagSets()

CombinedTrackingPassFlagSets ( flags,
resetCache = False )

Definition at line 14 of file ITkTrackRecoConfig.py.

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

◆ ITkActsExtendedPRDInfoCfg()

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 ITkActsTrackFinalCfg ( flags,
list[str] InputCombinedITkTracks = None,
ActsTrackContainerName = "InDetActsTrackParticles" )

Definition at line 295 of file ITkTrackRecoConfig.py.

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

◆ ITkClusterSplitProbabilityContainerName()

ITkClusterSplitProbabilityContainerName ( flags)

Definition at line 118 of file ITkTrackRecoConfig.py.

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

◆ ITkExtendedPRDInfoCfg()

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

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 ITkStoreTrackSeparateContainerCfg ( flags,
str TrackContainer = "",
str ClusterSplitProbContainer = "" )

Definition at line 125 of file ITkTrackRecoConfig.py.

127 ClusterSplitProbContainer: str = "") -> ComponentAccumulator:
128 result = ComponentAccumulator()
129 extension = flags.Tracking.ActiveConfig.extension
130 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
131 if doTrackOverlay:
132 AssociationMapName = ("PRDtoTrackMapMerge_Resolved" +
133 extension + "Tracks")
134 if extension != "Conversion":
135 # schedule merger to combine signal and background tracks.
136 # For the Conversion extension this merger is created in ITkTrackRecoPassCfg
137 # before this function is called, so we skip it here to avoid duplication.
138 InputTracks = [flags.Overlay.SigPrefix+TrackContainer,
139 flags.Overlay.BkgPrefix+TrackContainer]
140 MergerOutputTracks = TrackContainer
141
142 from TrkConfig.TrkTrackCollectionMergerConfig import ITkTrackCollectionMergerAlgCfg
143 result.merge(ITkTrackCollectionMergerAlgCfg(
144 flags,
145 name="ITkTrackCollectionMergerAlgCfg"+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.ActsEventCnvConfig 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 from InDetConfig.ITkActsHelpers import separateTrackParticleContainerName
180 TrackParticleContainer = separateTrackParticleContainerName(flags)
181 result.merge(ActsTrackToTrackParticleCnvAlgCfg(flags, f"{prefix}ResolvedTrackToAltTrackParticleCnvAlg",
182 ACTSTracksLocation=[TrackContainer],
183 TrackParticlesOutKey=TrackParticleContainer))
184
185 if flags.Tracking.doTruth :
186 from ActsConfig.ActsTruthConfig import ActsTrackParticleTruthDecorationAlgCfg
187 result.merge(ActsTrackParticleTruthDecorationAlgCfg(flags,
188 name=f'{TrackContainer}ParticleTruthDecorationAlg',
189 TrackToTruthAssociationMaps = [f'{TrackContainer}ToTruthParticleAssociation'],
190 TrackParticleContainerName = TrackParticleContainer
191 ))
192 return result
193
194
195# Returns CA + ClusterSplitProbContainer

◆ ITkTrackFinalCfg()

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

Definition at line 328 of file ITkTrackRecoConfig.py.

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

◆ ITkTrackRecoCfg()

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

◆ ITkTrackRecoPassCfg()

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

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

Variable Documentation

◆ _actsExtensions

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

Definition at line 11 of file ITkTrackRecoConfig.py.

◆ _extensions_list

list python.ITkTrackRecoConfig._extensions_list = []
protected

Definition at line 10 of file ITkTrackRecoConfig.py.

◆ _flags_set

list python.ITkTrackRecoConfig._flags_set = []
protected

Definition at line 9 of file ITkTrackRecoConfig.py.

◆ _outputExtensions

list python.ITkTrackRecoConfig._outputExtensions = []
protected

Definition at line 12 of file ITkTrackRecoConfig.py.

◆ EnableCalo

python.ITkTrackRecoConfig.EnableCalo

Definition at line 702 of file ITkTrackRecoConfig.py.

◆ Files

python.ITkTrackRecoConfig.Files

Definition at line 705 of file ITkTrackRecoConfig.py.

◆ flags

python.ITkTrackRecoConfig.flags = initConfigFlags()

Definition at line 699 of file ITkTrackRecoConfig.py.

◆ GlobalTag

python.ITkTrackRecoConfig.GlobalTag

Definition at line 706 of file ITkTrackRecoConfig.py.

◆ OutputLevel

python.ITkTrackRecoConfig.OutputLevel

Definition at line 724 of file ITkTrackRecoConfig.py.

◆ sc

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

Definition at line 730 of file ITkTrackRecoConfig.py.

◆ summariseProps

python.ITkTrackRecoConfig.summariseProps

Definition at line 725 of file ITkTrackRecoConfig.py.

◆ top_acc

python.ITkTrackRecoConfig.top_acc = MainServicesCfg(flags)

Definition at line 712 of file ITkTrackRecoConfig.py.

◆ True

python.ITkTrackRecoConfig.True

Definition at line 725 of file ITkTrackRecoConfig.py.

◆ withDetails

python.ITkTrackRecoConfig.withDetails

Definition at line 725 of file ITkTrackRecoConfig.py.