15 if _flags_set
and not resetCache:
21 from TrkConfig.TrkConfigFlags
import TrackingComponent
22 validation_configurations = {
23 TrackingComponent.ActsValidateF100 :
"ActsValidateF100",
24 TrackingComponent.ActsValidateF150 :
"ActsValidateF150",
28 if TrackingComponent.AthenaChain
in flags.Tracking.recoChain:
29 flags_set += [flags.cloneAndReplace(
30 "Tracking.ActiveConfig",
31 f
"Tracking.{flags.Tracking.ITkPrimaryPassConfig.value}Pass")]
34 if TrackingComponent.ActsLegacyChain
in flags.Tracking.recoChain:
35 flags_set += [flags.cloneAndReplace(
36 "Tracking.ActiveConfig",
37 "Tracking.ITkActsLegacyPass")]
40 if TrackingComponent.ActsChain
in flags.Tracking.recoChain:
41 flags_set += [flags.cloneAndReplace(
42 "Tracking.ActiveConfig",
43 "Tracking.ITkActsPass")]
46 if TrackingComponent.ActsHeavyIon
in flags.Tracking.recoChain:
47 flags_set += [flags.cloneAndReplace(
48 "Tracking.ActiveConfig",
49 "Tracking.ITkActsHeavyIonPass")]
52 if TrackingComponent.GNNChain
in flags.Tracking.recoChain:
53 flags_set += [flags.cloneAndReplace(
54 "Tracking.ActiveConfig",
55 "Tracking.ITkGNNPass")]
58 if flags.Detector.EnableCalo
and flags.Acts.doITkConversion:
59 flags_set += [flags.cloneAndReplace(
60 "Tracking.ActiveConfig",
61 "Tracking.ITkActsConversionPass")]
64 if TrackingComponent.ActsChain
in flags.Tracking.recoChain
and flags.Acts.doLargeRadius:
65 flags_set += [flags.cloneAndReplace(
66 "Tracking.ActiveConfig",
67 "Tracking.ITkActsLargeRadiusPass")]
70 if flags.Acts.doLowPt:
71 flags_set += [flags.cloneAndReplace(
72 "Tracking.ActiveConfig",
73 "Tracking.ITkActsLowPtPass")]
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')")
82 if flags.Detector.EnableCalo
and flags.Tracking.doITkConversion:
83 flagsConv = flags.cloneAndReplace(
"Tracking.ActiveConfig",
84 "Tracking.ITkConversionPass")
85 flags_set += [flagsConv]
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")
96 flagsLRT = flags.cloneAndReplace(
"Tracking.ActiveConfig",
97 "Tracking.ITkLargeD0Pass")
98 flags_set += [flagsLRT]
101 if TrackingComponent.FPGAChain
in flags.Tracking.recoChain:
102 flags_set += [flags.cloneAndReplace(
103 "Tracking.ActiveConfig",
104 "Tracking.ITkFPGAPass")]
107 if flags.Tracking.doLowPt:
108 flagsLowPt = flags.cloneAndReplace(
"Tracking.ActiveConfig",
109 "Tracking.ITkLowPtPass")
110 flags_set += [flagsLowPt]
112 _flags_set = flags_set
125 TrackContainer: str =
"",
126 ClusterSplitProbContainer: str =
"") -> ComponentAccumulator:
127 result = ComponentAccumulator()
128 extension = flags.Tracking.ActiveConfig.extension
129 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
131 AssociationMapName = (
"PRDtoTrackMapMerge_Resolved" +
132 extension +
"Tracks")
133 if extension !=
"Conversion":
137 InputTracks = [flags.Overlay.SigPrefix+TrackContainer,
138 flags.Overlay.BkgPrefix+TrackContainer]
139 MergerOutputTracks = TrackContainer
141 from TrkConfig.TrkTrackCollectionMergerConfig
import ITkTrackCollectionMergerAlgCfg
142 result.merge(ITkTrackCollectionMergerAlgCfg(
144 name=
"ITkTrackCollectionMergerAlgCfg"+extension,
145 InputCombinedTracks=InputTracks,
146 OutputCombinedTracks=MergerOutputTracks,
147 AssociationMapName=AssociationMapName))
150 if flags.Tracking.doTruth
and extension
not in _actsExtensions:
151 from InDetConfig.ITkTrackTruthConfig
import ITkTrackTruthCfg
152 result.merge(ITkTrackTruthCfg(
154 Tracks=TrackContainer,
155 DetailedTruth=TrackContainer+
"DetailedTruth",
156 TracksTruth=TrackContainer+
"TruthCollection"))
160 if extension
not in _actsExtensions:
162 from xAODTrackingCnv.xAODTrackingCnvConfig
import ITkTrackParticleCnvAlgCfg
163 result.merge(ITkTrackParticleCnvAlgCfg(
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=
""))
175 from ActsConfig.ActsEventCnvConfig
import ActsTrackToTrackParticleCnvAlgCfg
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))
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
196 previousActsExtension: str =
None,
197 InputCombinedITkTracks: list[str] =
None,
198 InputCombinedActsTracks: list[str] =
None,
199 InputExtendedITkTracks: list[str] =
None,
200 StatTrackCollections: list[str] =
None,
201 StatTrackTruthCollections: list[str] =
None,
202 ClusterSplitProbContainer: str =
""):
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)
212 extension = flags.Tracking.ActiveConfig.extension
214 result = ComponentAccumulator()
217 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
218 TrackContainer =
"Resolved" + extension +
"Tracks"
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
226 SiSPSeededTracks =
"SiSPSeeded" + extension +
"Tracks"
228 if extension
in _actsExtensions:
229 SiSPSeededTracks = extension +
"Tracks"
232 from InDetConfig.ITkTrackingSiPatternConfig
import ITkTrackingSiPatternCfg
233 result.merge(ITkTrackingSiPatternCfg(
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"]
244 if doTrackOverlay
and extension ==
"Conversion":
246 TrackContainer =
"Resolved" + extension +
"Tracks"
251 from TrkConfig.TrkTrackCollectionMergerConfig
import ITkTrackCollectionMergerAlgCfg
252 result.merge(ITkTrackCollectionMergerAlgCfg(
254 name=
"ITkTrackCollectionMergerAlgCfgConversion",
255 InputCombinedTracks=[flags.Overlay.SigPrefix + TrackContainer,
256 flags.Overlay.BkgPrefix + TrackContainer],
257 OutputCombinedTracks=TrackContainer,
258 AssociationMapName=
"PRDtoTrackMapMerge_" + TrackContainer))
260 if flags.Tracking.ActiveConfig.storeSeparateContainer:
266 inputTrack = TrackContainer
267 if extension
in _actsExtensions
and not flags.Tracking.ActiveConfig.doActsAmbiguityResolution:
268 inputTrack = SiSPSeededTracks
272 TrackContainer=inputTrack,
273 ClusterSplitProbContainer=ClusterSplitProbContainer))
277 ClusterSplitProbContainer = (
278 "ITkAmbiguityProcessorSplitProb" + extension)
281 if extension
not in _actsExtensions:
282 InputCombinedITkTracks += [TrackContainer]
284 InputCombinedActsTracks += [TrackContainer]
288 if extension
not in _actsExtensions:
289 InputExtendedITkTracks += [TrackContainer]
291 return result, ClusterSplitProbContainer
295 InputCombinedITkTracks: list[str] =
None,
296 ActsTrackContainerName=
"InDetActsTrackParticles") -> ComponentAccumulator:
298 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
300 acc = ComponentAccumulator()
301 if len(InputCombinedITkTracks) == 0:
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']
317 acc.merge(ActsTrackParticleTruthDecorationAlgCfg(
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
328 InputCombinedITkTracks: list[str] =
None,
329 StatTrackCollections: list[str] =
None,
330 StatTrackTruthCollections: list[str] =
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)
337 result = ComponentAccumulator()
338 if len(InputCombinedITkTracks) == 0:
341 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
342 TrackContainer =
"CombinedITkTracks"
345 InputCombinedITkTracks += [flags.Overlay.BkgPrefix + TrackContainer]
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
351 from TrkConfig.TrkTrackCollectionMergerConfig
import (
352 ITkTrackCollectionMergerAlgCfg)
353 result.merge(ITkTrackCollectionMergerAlgCfg(
355 InputCombinedTracks=InputCombinedITkTracks,
356 OutputCombinedTracks=TrackContainer,
358 "" if skipClusterMerge
else
359 f
"PRDtoTrackMapMerge_{TrackContainer}")))
361 if flags.Tracking.doTruth:
362 from InDetConfig.ITkTrackTruthConfig
import ITkTrackTruthCfg
363 result.merge(ITkTrackTruthCfg(
365 Tracks=TrackContainer,
366 DetailedTruth=f
"{TrackContainer}DetailedTruth",
367 TracksTruth=f
"{TrackContainer}TruthCollection"))
369 StatTrackCollections += [TrackContainer]
370 StatTrackTruthCollections += [f
"{TrackContainer}TruthCollection"]
372 if flags.Tracking.doSlimming:
373 from TrkConfig.TrkTrackSlimmerConfig
import TrackSlimmerCfg
374 result.merge(TrackSlimmerCfg(
376 TrackLocation=[TrackContainer]))
381 if flags.Tracking.perigeeExpression ==
"BeamLine":
382 from xAODTrackingCnv.xAODTrackingCnvConfig
import ITkTrackParticleCnvAlgCfg
383 result.merge(ITkTrackParticleCnvAlgCfg(
385 ClusterSplitProbabilityName=(
386 "" if skipClusterMerge
else
389 "" if skipClusterMerge
else
390 f
"PRDtoTrackMapMerge_{TrackContainer}"),
391 isActsAmbi =
'Acts' in splitProbName
and 'Validate' not in splitProbName))
397 StatTrackTruthCollections=None):
398 result = ComponentAccumulator()
400 from InDetConfig.InDetRecStatisticsConfig
import (
401 ITkRecStatisticsAlgCfg)
402 result.merge(ITkRecStatisticsAlgCfg(
404 TrackCollectionKeys=StatTrackCollections,
405 TrackTruthCollectionKeys=(
406 StatTrackTruthCollections
if flags.Tracking.doTruth
else [])))
408 if flags.Tracking.doTruth:
409 from InDetConfig.InDetTrackClusterAssValidationConfig
import (
410 ITkTrackClusterAssValidationCfg)
411 result.merge(ITkTrackClusterAssValidationCfg(
413 TracksLocation=StatTrackCollections))
428 result = ComponentAccumulator()
430 if flags.Tracking.doTIDE_AmbiTrackMonitoring:
431 from InDetConfig.InDetPrepRawDataToxAODConfig
import (
432 ITkPixelPrepDataToxAOD_ExtraTruthCfg
as PixelPrepDataToxAODCfg,
433 ITkStripPrepDataToxAOD_ExtraTruthCfg
as StripPrepDataToxAODCfg)
435 from InDetConfig.InDetPrepRawDataToxAODConfig
import (
436 ITkPixelPrepDataToxAODCfg
as PixelPrepDataToxAODCfg,
437 ITkStripPrepDataToxAODCfg
as StripPrepDataToxAODCfg)
439 result.merge(PixelPrepDataToxAODCfg(
441 ClusterSplitProbabilityName=(
442 "" if flags.Tracking.doITkFastTracking
else
444 result.merge(StripPrepDataToxAODCfg(flags))
446 from DerivationFrameworkInDet.InDetToolsConfig
import (
447 ITkTSOS_CommonKernelCfg)
452 listOfExtensionsRequesting = [
453 e
for e
in _extensions_list
if (e ==
'')
454 or (flags.Tracking[f
"ITk{e}Pass"].storeTrackSeeds)
455 or (flags.Tracking[f
"ITk{e}Pass"].storeSiSPSeededTracks)
456 or (flags.Tracking[f
"ITk{e}Pass"].storeSeparateContainer) ]
458 result.merge(ITkTSOS_CommonKernelCfg(
459 flags, listOfExtensions = listOfExtensionsRequesting))
461 if flags.Tracking.doStoreTrackSeeds:
462 from DerivationFrameworkInDet.InDetToolsConfig
import (
463 ITkSiSPSeedsTSOS_CommonKernelCfg)
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))
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))
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(
489 name=f
"ITkPhysHit{extension}DecoratorAlg",
490 TrackParticleContainerName=f
"InDet{extension}TrackParticles"))
501 """Configures complete ITk tracking """
503 from InDetConfig.ITkActsHelpers
import primaryPassUsesActs
504 if primaryPassUsesActs(flags):
505 from InDetConfig.ITkActsTrackRecoConfig
import ITkActsTrackRecoCfg
506 return ITkActsTrackRecoCfg(flags)
508 result = ComponentAccumulator()
510 if flags.Input.Format
is Format.BS:
511 if flags.Detector.EnableITkPixel:
512 from ITkPixelByteStreamCnv.ITkPixelByteStreamCnvConfig
import ITkPixelDecodingAlgCfg
513 result.merge( ITkPixelDecodingAlgCfg(flags) )
515 if flags.Detector.EnableITkStrip:
516 from ITkStripsByteStreamCnv.ITkStripByteStreamCnvConfig
import ITkStripRawDataProviderCfg
517 result.merge(ITkStripRawDataProviderCfg(flags))
528 InputCombinedITkTracks = []
530 InputCombinedActsTracks = []
532 InputExtendedITkTracks = []
534 ClusterSplitProbContainer =
""
536 StatTrackCollections = []
537 StatTrackTruthCollections = []
539 previousActsExtension =
None
541 from InDetConfig.SiliconPreProcessing
import ITkRecPreProcessingSiliconCfg
543 for current_flags
in flags_set:
544 printActiveConfig(current_flags)
547 extension = current_flags.Tracking.ActiveConfig.extension
548 if extension
not in _actsExtensions:
549 _extensions_list.append(extension)
552 _outputExtensions.append(extension)
560 result.merge(ITkRecPreProcessingSiliconCfg(current_flags,
561 previousActsExtension=previousActsExtension))
572 previousActsExtension,
573 InputCombinedITkTracks=InputCombinedITkTracks,
574 InputCombinedActsTracks=InputCombinedActsTracks,
575 InputExtendedITkTracks=InputExtendedITkTracks,
576 StatTrackCollections=StatTrackCollections,
577 StatTrackTruthCollections=StatTrackTruthCollections,
578 ClusterSplitProbContainer=ClusterSplitProbContainer)
582 if 'Acts' in extension:
583 previousActsExtension = extension
587 if InputCombinedITkTracks:
591 InputCombinedITkTracks=InputCombinedITkTracks,
592 StatTrackCollections=StatTrackCollections,
593 StatTrackTruthCollections=StatTrackTruthCollections))
599 if InputCombinedActsTracks:
605 ActsTrackContainerName =
"InDetTrackParticles" if not InputCombinedITkTracks
else "InDetActsTrackParticles"
606 ActsPrimaryVertices =
"PrimaryVertices" if not InputCombinedITkTracks
else "ActsPrimaryVertices"
609 InputCombinedITkTracks=InputCombinedActsTracks,
610 ActsTrackContainerName=ActsTrackContainerName))
613 if flags.Tracking.doVertexFinding:
615 from InDetConfig.InDetPriVxFinderConfig
import primaryVertexFindingCfg
619 if InputCombinedITkTracks:
620 result.merge(primaryVertexFindingCfg(flags))
626 if InputCombinedActsTracks:
627 result.merge(primaryVertexFindingCfg(flags,
628 name=
"ActsPriVxFinderAlg",
629 TracksName=ActsTrackContainerName,
630 vxCandidatesOutputName=ActsPrimaryVertices))
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}")
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))
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))
666 if flags.Tracking.doStats:
670 StatTrackCollections=StatTrackCollections,
671 StatTrackTruthCollections=StatTrackTruthCollections))
674 if flags.Tracking.GNN.ActsPipeline.saveEdgeScore:
675 from ActsConfig.ActsObjectDecorationConfig
import ActsGNNScoreDecoratorAlgCfg
676 result.merge(ActsGNNScoreDecoratorAlgCfg(flags,
677 name=
"ActsGNNScoreDecoratorAlg"))
680 if flags.Tracking.writeExtendedSi_PRDInfo:
689 from InDetConfig.ITkTrackOutputConfig
import ITkTrackRecoOutputCfg
690 result.merge(ITkTrackRecoOutputCfg(flags, _outputExtensions))
691 result.printConfig(withDetails =
False, summariseProps =
False)