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

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

◆ ITkActsExtendedPRDInfoCfg()

ITkActsExtendedPRDInfoCfg ( flags)

Definition at line 418 of file ITkTrackRecoConfig.py.

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

◆ ITkActsTrackFinalCfg()

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

Definition at line 294 of file ITkTrackRecoConfig.py.

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

◆ ITkClusterSplitProbabilityContainerName()

ITkClusterSplitProbabilityContainerName ( flags)

Definition at line 117 of file ITkTrackRecoConfig.py.

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

◆ ITkExtendedPRDInfoCfg()

ITkExtendedPRDInfoCfg ( flags)

Definition at line 427 of file ITkTrackRecoConfig.py.

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

◆ ITkStatsCfg()

ITkStatsCfg ( flags,
StatTrackCollections = None,
StatTrackTruthCollections = None )

Definition at line 396 of file ITkTrackRecoConfig.py.

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

◆ ITkStoreTrackSeparateContainerCfg()

ComponentAccumulator ITkStoreTrackSeparateContainerCfg ( flags,
str TrackContainer = "",
str ClusterSplitProbContainer = "" )

Definition at line 124 of file ITkTrackRecoConfig.py.

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

◆ ITkTrackFinalCfg()

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

Definition at line 327 of file ITkTrackRecoConfig.py.

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

◆ ITkTrackRecoCfg()

ComponentAccumulator ITkTrackRecoCfg ( flags)

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

Configures complete ITk tracking 

Definition at line 500 of file ITkTrackRecoConfig.py.

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

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

Variable Documentation

◆ _actsExtensions

list python.ITkTrackRecoConfig._actsExtensions = ['Acts', 'ActsLegacy', 'ActsConversion', 'ActsLargeRadius', 'ActsLowPt', 'ActsValidateF100', 'ActsValidateF150']
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.

◆ EnableCalo

python.ITkTrackRecoConfig.EnableCalo

Definition at line 700 of file ITkTrackRecoConfig.py.

◆ Files

python.ITkTrackRecoConfig.Files

Definition at line 703 of file ITkTrackRecoConfig.py.

◆ flags

python.ITkTrackRecoConfig.flags = initConfigFlags()

Definition at line 697 of file ITkTrackRecoConfig.py.

◆ GlobalTag

python.ITkTrackRecoConfig.GlobalTag

Definition at line 704 of file ITkTrackRecoConfig.py.

◆ OutputLevel

python.ITkTrackRecoConfig.OutputLevel

Definition at line 722 of file ITkTrackRecoConfig.py.

◆ sc

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

Definition at line 728 of file ITkTrackRecoConfig.py.

◆ summariseProps

python.ITkTrackRecoConfig.summariseProps

Definition at line 723 of file ITkTrackRecoConfig.py.

◆ top_acc

python.ITkTrackRecoConfig.top_acc = MainServicesCfg(flags)

Definition at line 710 of file ITkTrackRecoConfig.py.

◆ True

python.ITkTrackRecoConfig.True

Definition at line 723 of file ITkTrackRecoConfig.py.

◆ withDetails

python.ITkTrackRecoConfig.withDetails

Definition at line 723 of file ITkTrackRecoConfig.py.