15 if _flags_set
and not resetCache:
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",
32 if TrackingComponent.AthenaChain
in flags.Tracking.recoChain:
33 flags_set += [flags.cloneAndReplace(
34 "Tracking.ActiveConfig",
35 f
"Tracking.{flags.Tracking.ITkPrimaryPassConfig.value}Pass")]
38 if TrackingComponent.ActsLegacyChain
in flags.Tracking.recoChain:
39 flags_set += [flags.cloneAndReplace(
40 "Tracking.ActiveConfig",
41 "Tracking.ITkActsLegacyPass")]
44 if TrackingComponent.ActsChain
in flags.Tracking.recoChain:
45 flags_set += [flags.cloneAndReplace(
46 "Tracking.ActiveConfig",
47 "Tracking.ITkActsPass")]
50 if TrackingComponent.ActsHeavyIon
in flags.Tracking.recoChain:
51 flags_set += [flags.cloneAndReplace(
52 "Tracking.ActiveConfig",
53 "Tracking.ITkActsHeavyIonPass")]
56 if TrackingComponent.GNNChain
in flags.Tracking.recoChain:
57 flags_set += [flags.cloneAndReplace(
58 "Tracking.ActiveConfig",
59 "Tracking.ITkGNNPass")]
62 if flags.Detector.EnableCalo
and flags.Acts.doITkConversion:
63 flags_set += [flags.cloneAndReplace(
64 "Tracking.ActiveConfig",
65 "Tracking.ITkActsConversionPass")]
68 if TrackingComponent.ActsChain
in flags.Tracking.recoChain
and flags.Acts.doLargeRadius:
69 flags_set += [flags.cloneAndReplace(
70 "Tracking.ActiveConfig",
71 "Tracking.ITkActsLargeRadiusPass")]
74 if flags.Acts.doLowPt:
75 flags_set += [flags.cloneAndReplace(
76 "Tracking.ActiveConfig",
77 "Tracking.ITkActsLowPtPass")]
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')")
86 if flags.Detector.EnableCalo
and flags.Tracking.doITkConversion:
87 flagsConv = flags.cloneAndReplace(
"Tracking.ActiveConfig",
88 "Tracking.ITkConversionPass")
89 flags_set += [flagsConv]
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")
100 flagsLRT = flags.cloneAndReplace(
"Tracking.ActiveConfig",
101 "Tracking.ITkLargeD0Pass")
102 flags_set += [flagsLRT]
105 if TrackingComponent.FPGAChain
in flags.Tracking.recoChain:
106 flags_set += [flags.cloneAndReplace(
107 "Tracking.ActiveConfig",
108 "Tracking.ITkFPGAPass")]
111 if flags.Tracking.doLowPt:
112 flagsLowPt = flags.cloneAndReplace(
"Tracking.ActiveConfig",
113 "Tracking.ITkLowPtPass")
114 flags_set += [flagsLowPt]
116 _flags_set = flags_set
129 TrackContainer: str =
"",
130 ClusterSplitProbContainer: str =
"") -> ComponentAccumulator:
131 result = ComponentAccumulator()
132 extension = flags.Tracking.ActiveConfig.extension
133 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
135 AssociationMapName = (
"PRDtoTrackMapMerge_Resolved" +
136 extension +
"Tracks")
137 if extension !=
"Conversion":
141 InputTracks = [flags.Overlay.SigPrefix+TrackContainer,
142 flags.Overlay.BkgPrefix+TrackContainer]
143 MergerOutputTracks = TrackContainer
145 from TrkConfig.TrkTrackCollectionMergerConfig
import ITkTrackCollectionMergerAlgCfg
146 result.merge(ITkTrackCollectionMergerAlgCfg(
148 name=
"ITkTrackCollectionMergerAlgCfg"+extension,
149 InputCombinedTracks=InputTracks,
150 OutputCombinedTracks=MergerOutputTracks,
151 AssociationMapName=AssociationMapName))
154 if flags.Tracking.doTruth
and extension
not in _actsExtensions:
155 from InDetConfig.ITkTrackTruthConfig
import ITkTrackTruthCfg
156 result.merge(ITkTrackTruthCfg(
158 Tracks=TrackContainer,
159 DetailedTruth=TrackContainer+
"DetailedTruth",
160 TracksTruth=TrackContainer+
"TruthCollection"))
164 if extension
not in _actsExtensions:
166 from xAODTrackingCnv.xAODTrackingCnvConfig
import ITkTrackParticleCnvAlgCfg
167 result.merge(ITkTrackParticleCnvAlgCfg(
169 name=extension +
"TrackParticleCnvAlg",
170 TrackContainerName=TrackContainer,
171 xAODTrackParticlesFromTracksContainerName=(
172 "InDet" + extension +
"TrackParticles"),
173 ClusterSplitProbabilityName=(
174 "" if flags.Tracking.doITkFastTracking
else
175 ClusterSplitProbContainer),
176 AssociationMapName=
""))
179 from ActsConfig.ActsTrackFindingConfig
import ActsTrackToTrackParticleCnvAlgCfg
181 prefix = flags.Tracking.ActiveConfig.extension
182 result.merge(ActsTrackToTrackParticleCnvAlgCfg(flags, f
"{prefix}ResolvedTrackToAltTrackParticleCnvAlg",
183 ACTSTracksLocation=[TrackContainer],
184 TrackParticlesOutKey=f
'InDet{prefix}TrackParticles'))
186 if flags.Tracking.doTruth :
187 from ActsConfig.ActsTruthConfig
import ActsTrackParticleTruthDecorationAlgCfg
188 result.merge(ActsTrackParticleTruthDecorationAlgCfg(flags,
189 name=f
'{TrackContainer}ParticleTruthDecorationAlg',
190 TrackToTruthAssociationMaps = [f
'{TrackContainer}ToTruthParticleAssociation'],
191 TrackParticleContainerName = f
'InDet{prefix}TrackParticles'
198 previousActsExtension: str =
None,
199 InputCombinedITkTracks: list[str] =
None,
200 InputCombinedActsTracks: list[str] =
None,
201 InputExtendedITkTracks: list[str] =
None,
202 StatTrackCollections: list[str] =
None,
203 StatTrackTruthCollections: list[str] =
None,
204 ClusterSplitProbContainer: str =
""):
207 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
208 assert InputCombinedActsTracks
is not None and isinstance(InputCombinedActsTracks, list)
209 assert InputExtendedITkTracks
is not None and isinstance(InputExtendedITkTracks, list)
210 assert StatTrackCollections
is not None and isinstance(StatTrackCollections, list)
211 assert StatTrackTruthCollections
is not None and isinstance(StatTrackTruthCollections ,list)
214 extension = flags.Tracking.ActiveConfig.extension
216 result = ComponentAccumulator()
219 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
220 TrackContainer =
"Resolved" + extension +
"Tracks"
222 if extension
in _actsExtensions:
223 TrackContainer = extension +
"ResolvedTracks" if flags.Acts.doAmbiguityResolution
else extension +
"Tracks"
224 if doTrackOverlay
and extension ==
"Conversion":
225 TrackContainer = flags.Overlay.SigPrefix + TrackContainer
228 SiSPSeededTracks =
"SiSPSeeded" + extension +
"Tracks"
230 if extension
in _actsExtensions:
231 SiSPSeededTracks = extension +
"Tracks"
234 from InDetConfig.ITkTrackingSiPatternConfig
import ITkTrackingSiPatternCfg
235 result.merge(ITkTrackingSiPatternCfg(
237 previousActsExtension=previousActsExtension,
238 InputCollections=InputExtendedITkTracks,
239 ResolvedTrackCollectionKey=TrackContainer,
240 SiSPSeededTrackCollectionKey=SiSPSeededTracks,
241 ClusterSplitProbContainer=ClusterSplitProbContainer))
242 StatTrackCollections += [SiSPSeededTracks, TrackContainer]
243 StatTrackTruthCollections += [SiSPSeededTracks+
"TruthCollection",
244 TrackContainer+
"TruthCollection"]
246 if doTrackOverlay
and extension ==
"Conversion":
248 TrackContainer =
"Resolved" + extension +
"Tracks"
253 from TrkConfig.TrkTrackCollectionMergerConfig
import ITkTrackCollectionMergerAlgCfg
254 result.merge(ITkTrackCollectionMergerAlgCfg(
256 name=
"ITkTrackCollectionMergerAlgCfgConversion",
257 InputCombinedTracks=[flags.Overlay.SigPrefix + TrackContainer,
258 flags.Overlay.BkgPrefix + TrackContainer],
259 OutputCombinedTracks=TrackContainer,
260 AssociationMapName=
"PRDtoTrackMapMerge_" + TrackContainer))
262 if flags.Tracking.ActiveConfig.storeSeparateContainer:
268 inputTrack = TrackContainer
269 if extension
in _actsExtensions
and not flags.Tracking.ActiveConfig.doActsAmbiguityResolution:
270 inputTrack = SiSPSeededTracks
274 TrackContainer=inputTrack,
275 ClusterSplitProbContainer=ClusterSplitProbContainer))
279 ClusterSplitProbContainer = (
280 "ITkAmbiguityProcessorSplitProb" + extension)
283 if extension
not in _actsExtensions:
284 InputCombinedITkTracks += [TrackContainer]
286 InputCombinedActsTracks += [TrackContainer]
290 if extension
not in _actsExtensions:
291 InputExtendedITkTracks += [TrackContainer]
293 return result, ClusterSplitProbContainer
297 InputCombinedITkTracks: list[str] =
None,
298 ActsTrackContainerName=
"InDetActsTrackParticles") -> ComponentAccumulator:
300 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
302 acc = ComponentAccumulator()
303 if len(InputCombinedITkTracks) == 0:
307 from ActsConfig.ActsTrackFindingConfig
import ActsTrackToTrackParticleCnvAlgCfg
308 acc.merge(ActsTrackToTrackParticleCnvAlgCfg(flags,
"ActsCombinedTrackToTrackParticleCnvAlg",
309 ACTSTracksLocation=InputCombinedITkTracks,
310 TrackParticlesOutKey=ActsTrackContainerName))
311 if flags.Tracking.doTruth :
312 from ActsConfig.ActsTruthConfig
import ActsTrackParticleTruthDecorationAlgCfg
313 track_to_truth_maps=[]
314 for track_container
in InputCombinedITkTracks :
315 track_to_truth_maps += [f
'{track_container}ToTruthParticleAssociation']
319 acc.merge(ActsTrackParticleTruthDecorationAlgCfg(
321 name=f
'{ActsTrackContainerName}TruthDecorationAlg',
322 TrackToTruthAssociationMaps = track_to_truth_maps,
323 TrackParticleContainerName = ActsTrackContainerName,
324 OutputLevel=WARNING
if len(InputCombinedITkTracks)==1
else INFO,
325 ComputeTrackRecoEfficiency=
False if len(InputCombinedITkTracks)==1
else True
330 InputCombinedITkTracks: list[str] =
None,
331 StatTrackCollections: list[str] =
None,
332 StatTrackTruthCollections: list[str] =
None):
334 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
335 assert StatTrackCollections
is not None and isinstance(StatTrackCollections, list)
336 assert StatTrackTruthCollections
is not None and isinstance(StatTrackTruthCollections, list)
339 result = ComponentAccumulator()
340 if len(InputCombinedITkTracks) == 0:
343 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
344 TrackContainer =
"CombinedITkTracks"
347 InputCombinedITkTracks += [flags.Overlay.BkgPrefix + TrackContainer]
349 from TrkConfig.TrkConfigFlags
import TrackingComponent
350 doGNNWithoutAmbiReso = (TrackingComponent.GNNChain
in flags.Tracking.recoChain
and (
not flags.Tracking.GNN.doAmbiResolution))
351 skipClusterMerge = doGNNWithoutAmbiReso
or flags.Tracking.doITkFastTracking
353 from TrkConfig.TrkTrackCollectionMergerConfig
import (
354 ITkTrackCollectionMergerAlgCfg)
355 result.merge(ITkTrackCollectionMergerAlgCfg(
357 InputCombinedTracks=InputCombinedITkTracks,
358 OutputCombinedTracks=TrackContainer,
360 "" if skipClusterMerge
else
361 f
"PRDtoTrackMapMerge_{TrackContainer}")))
363 if flags.Tracking.doTruth:
364 from InDetConfig.ITkTrackTruthConfig
import ITkTrackTruthCfg
365 result.merge(ITkTrackTruthCfg(
367 Tracks=TrackContainer,
368 DetailedTruth=f
"{TrackContainer}DetailedTruth",
369 TracksTruth=f
"{TrackContainer}TruthCollection"))
371 StatTrackCollections += [TrackContainer]
372 StatTrackTruthCollections += [f
"{TrackContainer}TruthCollection"]
374 if flags.Tracking.doSlimming:
375 from TrkConfig.TrkTrackSlimmerConfig
import TrackSlimmerCfg
376 result.merge(TrackSlimmerCfg(
378 TrackLocation=[TrackContainer]))
383 if flags.Tracking.perigeeExpression ==
"BeamLine":
384 from xAODTrackingCnv.xAODTrackingCnvConfig
import ITkTrackParticleCnvAlgCfg
385 result.merge(ITkTrackParticleCnvAlgCfg(
387 ClusterSplitProbabilityName=(
388 "" if skipClusterMerge
else
391 "" if skipClusterMerge
else
392 f
"PRDtoTrackMapMerge_{TrackContainer}"),
393 isActsAmbi =
'ActsValidateResolvedTracks' in splitProbName
or \
394 'ActsValidateAmbiguityResolution' in splitProbName
or \
395 'ActsValidateScoreBasedAmbiguityResolution' in splitProbName
or \
396 'ActsConversion' in splitProbName
or \
397 'LargeD0' in splitProbName
or \
398 'ActsValidateLargeRadiusStandalone' in splitProbName
or \
399 'ActsLowPt' in splitProbName
or \
400 (
'Acts' in splitProbName
and 'Validate' not in splitProbName) ))
406 StatTrackTruthCollections=None):
407 result = ComponentAccumulator()
409 from InDetConfig.InDetRecStatisticsConfig
import (
410 ITkRecStatisticsAlgCfg)
411 result.merge(ITkRecStatisticsAlgCfg(
413 TrackCollectionKeys=StatTrackCollections,
414 TrackTruthCollectionKeys=(
415 StatTrackTruthCollections
if flags.Tracking.doTruth
else [])))
417 if flags.Tracking.doTruth:
418 from InDetConfig.InDetTrackClusterAssValidationConfig
import (
419 ITkTrackClusterAssValidationCfg)
420 result.merge(ITkTrackClusterAssValidationCfg(
422 TracksLocation=StatTrackCollections))
437 result = ComponentAccumulator()
439 if flags.Tracking.doTIDE_AmbiTrackMonitoring:
440 from InDetConfig.InDetPrepRawDataToxAODConfig
import (
441 ITkPixelPrepDataToxAOD_ExtraTruthCfg
as PixelPrepDataToxAODCfg,
442 ITkStripPrepDataToxAOD_ExtraTruthCfg
as StripPrepDataToxAODCfg)
444 from InDetConfig.InDetPrepRawDataToxAODConfig
import (
445 ITkPixelPrepDataToxAODCfg
as PixelPrepDataToxAODCfg,
446 ITkStripPrepDataToxAODCfg
as StripPrepDataToxAODCfg)
448 result.merge(PixelPrepDataToxAODCfg(
450 ClusterSplitProbabilityName=(
451 "" if flags.Tracking.doITkFastTracking
else
453 result.merge(StripPrepDataToxAODCfg(flags))
455 from DerivationFrameworkInDet.InDetToolsConfig
import (
456 ITkTSOS_CommonKernelCfg)
461 listOfExtensionsRequesting = [
462 e
for e
in _extensions_list
if (e ==
'')
463 or (flags.Tracking[f
"ITk{e}Pass"].storeTrackSeeds)
464 or (flags.Tracking[f
"ITk{e}Pass"].storeSiSPSeededTracks)
465 or (flags.Tracking[f
"ITk{e}Pass"].storeSeparateContainer) ]
467 result.merge(ITkTSOS_CommonKernelCfg(
468 flags, listOfExtensions = listOfExtensionsRequesting))
470 if flags.Tracking.doStoreTrackSeeds:
471 from DerivationFrameworkInDet.InDetToolsConfig
import (
472 ITkSiSPSeedsTSOS_CommonKernelCfg)
474 listOfExtensionsRequesting = [
475 e
for e
in _extensions_list
if (e ==
'')
or
476 flags.Tracking[f
"ITk{e}Pass"].storeTrackSeeds ]
477 result.merge(ITkSiSPSeedsTSOS_CommonKernelCfg(
478 flags, listOfExtensions = listOfExtensionsRequesting))
480 if flags.Tracking.doStoreSiSPSeededTracks:
481 listOfExtensionsRequesting = [
482 e
for e
in _extensions_list
if (e==
'')
or
483 flags.Tracking[f
"ITk{e}Pass"].storeSiSPSeededTracks ]
484 from DerivationFrameworkInDet.InDetToolsConfig
import (
485 ITkSiSPTSOS_CommonKernelCfg)
486 result.merge(ITkSiSPTSOS_CommonKernelCfg(flags, listOfExtensions = listOfExtensionsRequesting))
489 listOfExtensionsRequesting = [
490 e
for e
in _extensions_list
if (e==
'')
or
491 (flags.Tracking[f
"ITk{e}Pass"].storeSiSPSeededTracks
and
492 flags.Tracking[f
"ITk{e}Pass"].storeSeparateContainer) ]
493 from InDetPhysValMonitoring.InDetPhysValDecorationConfig
import (
494 ITkPhysHitDecoratorAlgCfg)
495 for extension
in listOfExtensionsRequesting:
496 result.merge(ITkPhysHitDecoratorAlgCfg(
498 name=f
"ITkPhysHit{extension}DecoratorAlg",
499 TrackParticleContainerName=f
"InDet{extension}TrackParticles"))
510 """Configures complete ITk tracking """
512 from InDetConfig.ITkActsHelpers
import primaryPassUsesActs
513 if primaryPassUsesActs(flags):
514 from InDetConfig.ITkActsTrackRecoConfig
import ITkActsTrackRecoCfg
515 return ITkActsTrackRecoCfg(flags)
517 result = ComponentAccumulator()
519 if flags.Input.Format
is Format.BS:
520 if flags.Detector.EnableITkPixel:
521 from ITkPixelByteStreamCnv.ITkPixelByteStreamCnvConfig
import ITkPixelDecodingAlgCfg
522 result.merge( ITkPixelDecodingAlgCfg(flags) )
524 if flags.Detector.EnableITkStrip:
525 from ITkStripsByteStreamCnv.ITkStripByteStreamCnvConfig
import ITkStripRawDataProviderCfg
526 result.merge(ITkStripRawDataProviderCfg(flags))
537 InputCombinedITkTracks = []
539 InputCombinedActsTracks = []
541 InputExtendedITkTracks = []
543 ClusterSplitProbContainer =
""
545 StatTrackCollections = []
546 StatTrackTruthCollections = []
548 previousActsExtension =
None
550 from InDetConfig.SiliconPreProcessing
import ITkRecPreProcessingSiliconCfg
552 for current_flags
in flags_set:
553 printActiveConfig(current_flags)
556 extension = current_flags.Tracking.ActiveConfig.extension
557 if extension
not in _actsExtensions:
558 _extensions_list.append(extension)
561 _outputExtensions.append(extension)
569 result.merge(ITkRecPreProcessingSiliconCfg(current_flags,
570 previousActsExtension=previousActsExtension))
581 previousActsExtension,
582 InputCombinedITkTracks=InputCombinedITkTracks,
583 InputCombinedActsTracks=InputCombinedActsTracks,
584 InputExtendedITkTracks=InputExtendedITkTracks,
585 StatTrackCollections=StatTrackCollections,
586 StatTrackTruthCollections=StatTrackTruthCollections,
587 ClusterSplitProbContainer=ClusterSplitProbContainer)
591 if 'Acts' in extension:
592 previousActsExtension = extension
596 if InputCombinedITkTracks:
600 InputCombinedITkTracks=InputCombinedITkTracks,
601 StatTrackCollections=StatTrackCollections,
602 StatTrackTruthCollections=StatTrackTruthCollections))
608 if InputCombinedActsTracks:
614 ActsTrackContainerName =
"InDetTrackParticles" if not InputCombinedITkTracks
else "InDetActsTrackParticles"
615 ActsPrimaryVertices =
"PrimaryVertices" if not InputCombinedITkTracks
else "ActsPrimaryVertices"
618 InputCombinedITkTracks=InputCombinedActsTracks,
619 ActsTrackContainerName=ActsTrackContainerName))
622 if flags.Tracking.doVertexFinding:
624 from InDetConfig.InDetPriVxFinderConfig
import primaryVertexFindingCfg
628 if InputCombinedITkTracks:
629 result.merge(primaryVertexFindingCfg(flags))
635 if InputCombinedActsTracks:
636 result.merge(primaryVertexFindingCfg(flags,
637 name=
"ActsPriVxFinderAlg",
638 TracksName=ActsTrackContainerName,
639 vxCandidatesOutputName=ActsPrimaryVertices))
643 print(
"-------- POST PROCESSING --------")
644 for current_flags
in flags_set:
645 extension = current_flags.Tracking.ActiveConfig.extension
646 print(f
"- Running post-processing for extension: {extension}")
659 if current_flags.Tracking.ActiveConfig.doAthenaTrack:
660 if current_flags.Tracking.doStoreTrackSeeds:
661 from InDetConfig.ITkPersistificationConfig
import ITkTrackSeedsFinalCfg
662 result.merge(ITkTrackSeedsFinalCfg(current_flags))
670 if current_flags.Tracking.ActiveConfig.doAthenaTrack
or current_flags.Tracking.ActiveConfig.doActsToAthenaTrack:
671 if current_flags.Tracking.doStoreSiSPSeededTracks:
672 from InDetConfig.ITkPersistificationConfig
import ITkSiSPSeededTracksFinalCfg
673 result.merge(ITkSiSPSeededTracksFinalCfg(current_flags))
675 if flags.Tracking.doStats:
679 StatTrackCollections=StatTrackCollections,
680 StatTrackTruthCollections=StatTrackTruthCollections))
683 if flags.Tracking.GNN.ActsPipeline.saveEdgeScore:
684 from ActsConfig.ActsObjectDecorationConfig
import ActsGNNScoreDecoratorAlgCfg
685 result.merge(ActsGNNScoreDecoratorAlgCfg(flags,
686 name=
"ActsGNNScoreDecoratorAlg"))
689 if flags.Tracking.writeExtendedSi_PRDInfo:
698 from InDetConfig.ITkTrackOutputConfig
import ITkTrackRecoOutputCfg
699 result.merge(ITkTrackRecoOutputCfg(flags, _outputExtensions))
700 result.printConfig(withDetails =
False, summariseProps =
False)