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.ActsEventCnvConfig
import ActsTrackToTrackParticleCnvAlgCfg
181 prefix = flags.Tracking.ActiveConfig.extension
182 from InDetConfig.ITkActsHelpers
import separateTrackParticleContainerName
183 TrackParticleContainer = separateTrackParticleContainerName(flags)
184 result.merge(ActsTrackToTrackParticleCnvAlgCfg(flags, f
"{prefix}ResolvedTrackToAltTrackParticleCnvAlg",
185 ACTSTracksLocation=[TrackContainer],
186 TrackParticlesOutKey=TrackParticleContainer))
188 if flags.Tracking.doTruth :
189 from ActsConfig.ActsTruthConfig
import ActsTrackParticleTruthDecorationAlgCfg
190 result.merge(ActsTrackParticleTruthDecorationAlgCfg(flags,
191 name=f
'{TrackContainer}ParticleTruthDecorationAlg',
192 TrackToTruthAssociationMaps = [f
'{TrackContainer}ToTruthParticleAssociation'],
193 TrackParticleContainerName = TrackParticleContainer
200 previousActsExtension: str =
None,
201 InputCombinedITkTracks: list[str] =
None,
202 InputCombinedActsTracks: list[str] =
None,
203 InputExtendedITkTracks: list[str] =
None,
204 StatTrackCollections: list[str] =
None,
205 StatTrackTruthCollections: list[str] =
None,
206 ClusterSplitProbContainer: str =
""):
209 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
210 assert InputCombinedActsTracks
is not None and isinstance(InputCombinedActsTracks, list)
211 assert InputExtendedITkTracks
is not None and isinstance(InputExtendedITkTracks, list)
212 assert StatTrackCollections
is not None and isinstance(StatTrackCollections, list)
213 assert StatTrackTruthCollections
is not None and isinstance(StatTrackTruthCollections ,list)
216 extension = flags.Tracking.ActiveConfig.extension
218 result = ComponentAccumulator()
221 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
222 TrackContainer =
"Resolved" + extension +
"Tracks"
224 if extension
in _actsExtensions:
225 TrackContainer = extension +
"ResolvedTracks" if flags.Acts.doAmbiguityResolution
else extension +
"Tracks"
226 if doTrackOverlay
and extension ==
"Conversion":
227 TrackContainer = flags.Overlay.SigPrefix + TrackContainer
230 SiSPSeededTracks =
"SiSPSeeded" + extension +
"Tracks"
232 if extension
in _actsExtensions:
233 SiSPSeededTracks = extension +
"Tracks"
236 from InDetConfig.ITkTrackingSiPatternConfig
import ITkTrackingSiPatternCfg
237 result.merge(ITkTrackingSiPatternCfg(
239 previousActsExtension=previousActsExtension,
240 InputCollections=InputExtendedITkTracks,
241 ResolvedTrackCollectionKey=TrackContainer,
242 SiSPSeededTrackCollectionKey=SiSPSeededTracks,
243 ClusterSplitProbContainer=ClusterSplitProbContainer))
244 StatTrackCollections += [SiSPSeededTracks, TrackContainer]
245 StatTrackTruthCollections += [SiSPSeededTracks+
"TruthCollection",
246 TrackContainer+
"TruthCollection"]
248 if doTrackOverlay
and extension ==
"Conversion":
250 TrackContainer =
"Resolved" + extension +
"Tracks"
255 from TrkConfig.TrkTrackCollectionMergerConfig
import ITkTrackCollectionMergerAlgCfg
256 result.merge(ITkTrackCollectionMergerAlgCfg(
258 name=
"ITkTrackCollectionMergerAlgCfgConversion",
259 InputCombinedTracks=[flags.Overlay.SigPrefix + TrackContainer,
260 flags.Overlay.BkgPrefix + TrackContainer],
261 OutputCombinedTracks=TrackContainer,
262 AssociationMapName=
"PRDtoTrackMapMerge_" + TrackContainer))
264 if flags.Tracking.ActiveConfig.storeSeparateContainer:
270 inputTrack = TrackContainer
271 if extension
in _actsExtensions
and not flags.Tracking.ActiveConfig.doActsAmbiguityResolution:
272 inputTrack = SiSPSeededTracks
276 TrackContainer=inputTrack,
277 ClusterSplitProbContainer=ClusterSplitProbContainer))
281 ClusterSplitProbContainer = (
282 "ITkAmbiguityProcessorSplitProb" + extension)
285 if extension
not in _actsExtensions:
286 InputCombinedITkTracks += [TrackContainer]
288 InputCombinedActsTracks += [TrackContainer]
292 if extension
not in _actsExtensions:
293 InputExtendedITkTracks += [TrackContainer]
295 return result, ClusterSplitProbContainer
299 InputCombinedITkTracks: list[str] =
None,
300 ActsTrackContainerName=
"InDetActsTrackParticles") -> ComponentAccumulator:
302 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
304 acc = ComponentAccumulator()
305 if len(InputCombinedITkTracks) == 0:
309 from ActsConfig.ActsEventCnvConfig
import ActsTrackToTrackParticleCnvAlgCfg
310 acc.merge(ActsTrackToTrackParticleCnvAlgCfg(flags,
"ActsCombinedTrackToTrackParticleCnvAlg",
311 ACTSTracksLocation=InputCombinedITkTracks,
312 TrackParticlesOutKey=ActsTrackContainerName))
313 if flags.Tracking.doTruth :
314 from ActsConfig.ActsTruthConfig
import ActsTrackParticleTruthDecorationAlgCfg
315 track_to_truth_maps=[]
316 for track_container
in InputCombinedITkTracks :
317 track_to_truth_maps += [f
'{track_container}ToTruthParticleAssociation']
321 acc.merge(ActsTrackParticleTruthDecorationAlgCfg(
323 name=f
'{ActsTrackContainerName}TruthDecorationAlg',
324 TrackToTruthAssociationMaps = track_to_truth_maps,
325 TrackParticleContainerName = ActsTrackContainerName,
326 OutputLevel=WARNING
if len(InputCombinedITkTracks)==1
else INFO,
327 ComputeTrackRecoEfficiency=
False if len(InputCombinedITkTracks)==1
else True
332 InputCombinedITkTracks: list[str] =
None,
333 StatTrackCollections: list[str] =
None,
334 StatTrackTruthCollections: list[str] =
None):
336 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
337 assert StatTrackCollections
is not None and isinstance(StatTrackCollections, list)
338 assert StatTrackTruthCollections
is not None and isinstance(StatTrackTruthCollections, list)
341 result = ComponentAccumulator()
342 if len(InputCombinedITkTracks) == 0:
345 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
346 TrackContainer =
"CombinedITkTracks"
349 InputCombinedITkTracks += [flags.Overlay.BkgPrefix + TrackContainer]
351 from TrkConfig.TrkConfigFlags
import TrackingComponent
352 doGNNWithoutAmbiReso = (TrackingComponent.GNNChain
in flags.Tracking.recoChain
and (
not flags.Tracking.GNN.doAmbiResolution))
353 skipClusterMerge = doGNNWithoutAmbiReso
or flags.Tracking.doITkFastTracking
355 from TrkConfig.TrkTrackCollectionMergerConfig
import (
356 ITkTrackCollectionMergerAlgCfg)
357 result.merge(ITkTrackCollectionMergerAlgCfg(
359 InputCombinedTracks=InputCombinedITkTracks,
360 OutputCombinedTracks=TrackContainer,
362 "" if skipClusterMerge
else
363 f
"PRDtoTrackMapMerge_{TrackContainer}")))
365 if flags.Tracking.doTruth:
366 from InDetConfig.ITkTrackTruthConfig
import ITkTrackTruthCfg
367 result.merge(ITkTrackTruthCfg(
369 Tracks=TrackContainer,
370 DetailedTruth=f
"{TrackContainer}DetailedTruth",
371 TracksTruth=f
"{TrackContainer}TruthCollection"))
373 StatTrackCollections += [TrackContainer]
374 StatTrackTruthCollections += [f
"{TrackContainer}TruthCollection"]
376 if flags.Tracking.doSlimming:
377 from TrkConfig.TrkTrackSlimmerConfig
import TrackSlimmerCfg
378 result.merge(TrackSlimmerCfg(
380 TrackLocation=[TrackContainer]))
385 if flags.Tracking.perigeeExpression ==
"BeamLine":
386 from xAODTrackingCnv.xAODTrackingCnvConfig
import ITkTrackParticleCnvAlgCfg
387 result.merge(ITkTrackParticleCnvAlgCfg(
389 ClusterSplitProbabilityName=(
390 "" if skipClusterMerge
else
393 "" if skipClusterMerge
else
394 f
"PRDtoTrackMapMerge_{TrackContainer}"),
395 isActsAmbi =
'ActsValidateResolvedTracks' in splitProbName
or \
396 'ActsValidateAmbiguityResolution' in splitProbName
or \
397 'ActsValidateScoreBasedAmbiguityResolution' in splitProbName
or \
398 'ActsConversion' in splitProbName
or \
399 'ActsLargeRadius' in splitProbName
or \
400 'ActsValidateLargeRadiusStandalone' in splitProbName
or \
401 'ActsLowPt' in splitProbName
or \
402 (
'Acts' in splitProbName
and 'Validate' not in splitProbName) ))
408 StatTrackTruthCollections=None):
409 result = ComponentAccumulator()
411 from InDetConfig.InDetRecStatisticsConfig
import (
412 ITkRecStatisticsAlgCfg)
413 result.merge(ITkRecStatisticsAlgCfg(
415 TrackCollectionKeys=StatTrackCollections,
416 TrackTruthCollectionKeys=(
417 StatTrackTruthCollections
if flags.Tracking.doTruth
else [])))
419 if flags.Tracking.doTruth:
420 from InDetConfig.InDetTrackClusterAssValidationConfig
import (
421 ITkTrackClusterAssValidationCfg)
422 result.merge(ITkTrackClusterAssValidationCfg(
424 TracksLocation=StatTrackCollections))
439 result = ComponentAccumulator()
441 if flags.Tracking.doTIDE_AmbiTrackMonitoring:
442 from InDetConfig.InDetPrepRawDataToxAODConfig
import (
443 ITkPixelPrepDataToxAOD_ExtraTruthCfg
as PixelPrepDataToxAODCfg,
444 ITkStripPrepDataToxAOD_ExtraTruthCfg
as StripPrepDataToxAODCfg)
446 from InDetConfig.InDetPrepRawDataToxAODConfig
import (
447 ITkPixelPrepDataToxAODCfg
as PixelPrepDataToxAODCfg,
448 ITkStripPrepDataToxAODCfg
as StripPrepDataToxAODCfg)
450 result.merge(PixelPrepDataToxAODCfg(
452 ClusterSplitProbabilityName=(
453 "" if flags.Tracking.doITkFastTracking
else
455 result.merge(StripPrepDataToxAODCfg(flags))
457 from DerivationFrameworkInDet.InDetToolsConfig
import (
458 ITkTSOS_CommonKernelCfg)
463 listOfExtensionsRequesting = [
464 e
for e
in _extensions_list
if (e ==
'')
465 or (flags.Tracking[f
"ITk{e}Pass"].storeTrackSeeds)
466 or (flags.Tracking[f
"ITk{e}Pass"].storeSiSPSeededTracks)
467 or (flags.Tracking[f
"ITk{e}Pass"].storeSeparateContainer) ]
469 result.merge(ITkTSOS_CommonKernelCfg(
470 flags, listOfExtensions = listOfExtensionsRequesting))
472 if flags.Tracking.doStoreTrackSeeds:
473 from DerivationFrameworkInDet.InDetToolsConfig
import (
474 ITkSiSPSeedsTSOS_CommonKernelCfg)
476 listOfExtensionsRequesting = [
477 e
for e
in _extensions_list
if (e ==
'')
or
478 flags.Tracking[f
"ITk{e}Pass"].storeTrackSeeds ]
479 result.merge(ITkSiSPSeedsTSOS_CommonKernelCfg(
480 flags, listOfExtensions = listOfExtensionsRequesting))
482 if flags.Tracking.doStoreSiSPSeededTracks:
483 listOfExtensionsRequesting = [
484 e
for e
in _extensions_list
if (e==
'')
or
485 flags.Tracking[f
"ITk{e}Pass"].storeSiSPSeededTracks ]
486 from DerivationFrameworkInDet.InDetToolsConfig
import (
487 ITkSiSPTSOS_CommonKernelCfg)
488 result.merge(ITkSiSPTSOS_CommonKernelCfg(flags, listOfExtensions = listOfExtensionsRequesting))
491 listOfExtensionsRequesting = [
492 e
for e
in _extensions_list
if (e==
'')
or
493 (flags.Tracking[f
"ITk{e}Pass"].storeSiSPSeededTracks
and
494 flags.Tracking[f
"ITk{e}Pass"].storeSeparateContainer) ]
495 from InDetPhysValMonitoring.InDetPhysValDecorationConfig
import (
496 ITkPhysHitDecoratorAlgCfg)
497 for extension
in listOfExtensionsRequesting:
498 result.merge(ITkPhysHitDecoratorAlgCfg(
500 name=f
"ITkPhysHit{extension}DecoratorAlg",
501 TrackParticleContainerName=f
"InDet{extension}TrackParticles"))
512 """Configures complete ITk tracking """
514 from InDetConfig.ITkActsHelpers
import primaryPassUsesActs
515 if primaryPassUsesActs(flags):
516 from InDetConfig.ITkActsTrackRecoConfig
import ITkActsTrackRecoCfg
517 return ITkActsTrackRecoCfg(flags)
519 result = ComponentAccumulator()
521 if flags.Input.Format
is Format.BS:
522 if flags.Detector.EnableITkPixel:
523 from ITkPixelByteStreamCnv.ITkPixelByteStreamCnvConfig
import ITkPixelDecodingAlgCfg
524 result.merge( ITkPixelDecodingAlgCfg(flags) )
526 if flags.Detector.EnableITkStrip:
527 from ITkStripsByteStreamCnv.ITkStripByteStreamCnvConfig
import ITkStripRawDataProviderCfg
528 result.merge(ITkStripRawDataProviderCfg(flags))
539 InputCombinedITkTracks = []
541 InputCombinedActsTracks = []
543 InputExtendedITkTracks = []
545 ClusterSplitProbContainer =
""
547 StatTrackCollections = []
548 StatTrackTruthCollections = []
550 previousActsExtension =
None
552 from InDetConfig.SiliconPreProcessing
import ITkRecPreProcessingSiliconCfg
554 for current_flags
in flags_set:
555 printActiveConfig(current_flags)
558 extension = current_flags.Tracking.ActiveConfig.extension
559 if extension
not in _actsExtensions:
560 _extensions_list.append(extension)
563 _outputExtensions.append(extension)
571 result.merge(ITkRecPreProcessingSiliconCfg(current_flags,
572 previousActsExtension=previousActsExtension))
583 previousActsExtension,
584 InputCombinedITkTracks=InputCombinedITkTracks,
585 InputCombinedActsTracks=InputCombinedActsTracks,
586 InputExtendedITkTracks=InputExtendedITkTracks,
587 StatTrackCollections=StatTrackCollections,
588 StatTrackTruthCollections=StatTrackTruthCollections,
589 ClusterSplitProbContainer=ClusterSplitProbContainer)
593 if 'Acts' in extension:
594 previousActsExtension = extension
598 if InputCombinedITkTracks:
602 InputCombinedITkTracks=InputCombinedITkTracks,
603 StatTrackCollections=StatTrackCollections,
604 StatTrackTruthCollections=StatTrackTruthCollections))
610 if InputCombinedActsTracks:
616 ActsTrackContainerName =
"InDetTrackParticles" if not InputCombinedITkTracks
else "InDetActsTrackParticles"
617 ActsPrimaryVertices =
"PrimaryVertices" if not InputCombinedITkTracks
else "ActsPrimaryVertices"
620 InputCombinedITkTracks=InputCombinedActsTracks,
621 ActsTrackContainerName=ActsTrackContainerName))
624 if flags.Tracking.doVertexFinding:
626 from InDetConfig.InDetPriVxFinderConfig
import primaryVertexFindingCfg
630 if InputCombinedITkTracks:
631 result.merge(primaryVertexFindingCfg(flags))
637 if InputCombinedActsTracks:
638 result.merge(primaryVertexFindingCfg(flags,
639 name=
"ActsPriVxFinderAlg",
640 TracksName=ActsTrackContainerName,
641 vxCandidatesOutputName=ActsPrimaryVertices))
645 print(
"-------- POST PROCESSING --------")
646 for current_flags
in flags_set:
647 extension = current_flags.Tracking.ActiveConfig.extension
648 print(f
"- Running post-processing for extension: {extension}")
661 if current_flags.Tracking.ActiveConfig.doAthenaTrack:
662 if current_flags.Tracking.doStoreTrackSeeds:
663 from InDetConfig.ITkPersistificationConfig
import ITkTrackSeedsFinalCfg
664 result.merge(ITkTrackSeedsFinalCfg(current_flags))
672 if current_flags.Tracking.ActiveConfig.doAthenaTrack
or current_flags.Tracking.ActiveConfig.doActsToAthenaTrack:
673 if current_flags.Tracking.doStoreSiSPSeededTracks:
674 from InDetConfig.ITkPersistificationConfig
import ITkSiSPSeededTracksFinalCfg
675 result.merge(ITkSiSPSeededTracksFinalCfg(current_flags))
677 if flags.Tracking.doStats:
681 StatTrackCollections=StatTrackCollections,
682 StatTrackTruthCollections=StatTrackTruthCollections))
685 if flags.Tracking.GNN.ActsPipeline.saveEdgeScore:
686 from ActsConfig.ActsObjectDecorationConfig
import ActsGNNScoreDecoratorAlgCfg
687 result.merge(ActsGNNScoreDecoratorAlgCfg(flags,
688 name=
"ActsGNNScoreDecoratorAlg"))
691 if flags.Tracking.writeExtendedSi_PRDInfo:
700 from InDetConfig.ITkTrackOutputConfig
import ITkTrackRecoOutputCfg
701 result.merge(ITkTrackRecoOutputCfg(flags, _outputExtensions))
702 result.printConfig(withDetails =
False, summariseProps =
False)