21 from TrkConfig.TrkConfigFlags
import TrackingComponent
22 validation_configurations = {
23 TrackingComponent.ActsValidateClusters :
"ActsValidateClusters",
24 TrackingComponent.ActsValidateSpacePoints :
"ActsValidateSpacePoints",
25 TrackingComponent.ActsValidateSeeds :
"ActsValidateSeeds",
26 TrackingComponent.ActsValidateConversionSeeds :
"ActsValidateConversionSeeds",
27 TrackingComponent.ActsValidateLargeRadiusSeeds:
"ActsValidateLargeRadiusSeeds",
28 TrackingComponent.ActsValidateLargeRadiusStandalone:
"ActsValidateLargeRadiusStandalone",
29 TrackingComponent.ActsValidateTracks :
"ActsValidateTracks",
30 TrackingComponent.ActsValidateAmbiguityResolution :
"ActsValidateAmbiguityResolution",
31 TrackingComponent.ActsValidateF100 :
"ActsValidateF100",
32 TrackingComponent.ActsValidateF150 :
"ActsValidateF150",
36 if TrackingComponent.AthenaChain
in flags.Tracking.recoChain:
37 flags_set += [flags.cloneAndReplace(
38 "Tracking.ActiveConfig",
39 f
"Tracking.{flags.Tracking.ITkPrimaryPassConfig.value}Pass")]
42 if TrackingComponent.ActsLegacyChain
in flags.Tracking.recoChain:
43 flags_set += [flags.cloneAndReplace(
44 "Tracking.ActiveConfig",
45 "Tracking.ITkActsLegacyPass")]
48 if TrackingComponent.ActsChain
in flags.Tracking.recoChain:
49 flags_set += [flags.cloneAndReplace(
50 "Tracking.ActiveConfig",
51 "Tracking.ITkActsPass")]
54 if TrackingComponent.ActsHeavyIon
in flags.Tracking.recoChain:
55 flags_set += [flags.cloneAndReplace(
56 "Tracking.ActiveConfig",
57 "Tracking.ITkActsHeavyIonPass")]
60 if TrackingComponent.GNNChain
in flags.Tracking.recoChain:
61 flags_set += [flags.cloneAndReplace(
62 "Tracking.ActiveConfig",
63 "Tracking.ITkGNNPass")]
66 if flags.Detector.EnableCalo
and flags.Acts.doITkConversion
and \
67 TrackingComponent.ActsValidateConversionSeeds
not in flags.Tracking.recoChain:
68 flags_set += [flags.cloneAndReplace(
69 "Tracking.ActiveConfig",
70 "Tracking.ITkActsConversionPass")]
73 if flags.Acts.doLargeRadius:
74 flags_set += [flags.cloneAndReplace(
75 "Tracking.ActiveConfig",
76 "Tracking.ITkActsLargeRadiusPass")]
79 if flags.Acts.doLowPt:
80 flags_set += [flags.cloneAndReplace(
81 "Tracking.ActiveConfig",
82 "Tracking.ITkActsLowPtPass")]
85 for [configuration, key]
in validation_configurations.items():
86 if configuration
in flags.Tracking.recoChain:
87 toAdd = eval(f
"flags.cloneAndReplace('Tracking.ActiveConfig', 'Tracking.ITk{key}Pass')")
91 if flags.Detector.EnableCalo
and flags.Tracking.doITkConversion:
92 flagsConv = flags.cloneAndReplace(
"Tracking.ActiveConfig",
93 "Tracking.ITkConversionPass")
94 flags_set += [flagsConv]
97 if flags.Tracking.doLargeD0:
98 if flags.Tracking.useITkFTF:
99 flagsLRT = flags.cloneAndReplace(
"Tracking.ActiveConfig",
100 "Tracking.ITkFTFLargeD0Pass")
101 elif flags.Tracking.doITkFastTracking:
102 flagsLRT = flags.cloneAndReplace(
"Tracking.ActiveConfig",
103 "Tracking.ITkLargeD0FastPass")
105 flagsLRT = flags.cloneAndReplace(
"Tracking.ActiveConfig",
106 "Tracking.ITkLargeD0Pass")
107 flags_set += [flagsLRT]
110 if TrackingComponent.FPGAChain
in flags.Tracking.recoChain:
111 flags_set += [flags.cloneAndReplace(
112 "Tracking.ActiveConfig",
113 "Tracking.ITkFPGAPass")]
116 if flags.Tracking.doLowPt:
117 flagsLowPt = flags.cloneAndReplace(
"Tracking.ActiveConfig",
118 "Tracking.ITkLowPtPass")
119 flags_set += [flagsLowPt]
121 _flags_set = flags_set
134 TrackContainer: str =
"",
135 ClusterSplitProbContainer: str =
"") -> ComponentAccumulator:
136 result = ComponentAccumulator()
137 extension = flags.Tracking.ActiveConfig.extension
138 if flags.hasCategory(
"TrackOverlay.ActiveConfig"):
139 doTrackOverlay = getattr(flags.TrackOverlay.ActiveConfig,
"doTrackOverlay",
None)
141 doTrackOverlay = flags.Overlay.doTrackOverlay
145 InputTracks = [flags.Overlay.SigPrefix+TrackContainer,
146 flags.Overlay.BkgPrefix+TrackContainer]
147 AssociationMapName = (
"PRDtoTrackMapMerge_Resolved" +
148 extension +
"Tracks")
149 MergerOutputTracks = TrackContainer
151 from TrkConfig.TrkTrackCollectionMergerConfig
import TrackCollectionMergerAlgCfg
152 result.merge(TrackCollectionMergerAlgCfg(
154 name=
"TrackCollectionMergerAlgCfg"+extension,
155 InputCombinedTracks=InputTracks,
156 OutputCombinedTracks=MergerOutputTracks,
157 AssociationMapName=AssociationMapName))
160 if flags.Tracking.doTruth
and extension
not in _actsExtensions:
161 from InDetConfig.ITkTrackTruthConfig
import ITkTrackTruthCfg
162 result.merge(ITkTrackTruthCfg(
164 Tracks=TrackContainer,
165 DetailedTruth=TrackContainer+
"DetailedTruth",
166 TracksTruth=TrackContainer+
"TruthCollection"))
170 if extension
not in _actsExtensions:
172 from xAODTrackingCnv.xAODTrackingCnvConfig
import ITkTrackParticleCnvAlgCfg
173 result.merge(ITkTrackParticleCnvAlgCfg(
175 name=extension +
"TrackParticleCnvAlg",
176 TrackContainerName=TrackContainer,
177 xAODTrackParticlesFromTracksContainerName=(
178 "InDet" + extension +
"TrackParticles"),
179 ClusterSplitProbabilityName=(
180 "" if flags.Tracking.doITkFastTracking
else
181 ClusterSplitProbContainer),
182 AssociationMapName=
""))
185 from ActsConfig.ActsTrackFindingConfig
import ActsTrackToTrackParticleCnvAlgCfg
187 prefix = flags.Tracking.ActiveConfig.extension
188 result.merge(ActsTrackToTrackParticleCnvAlgCfg(flags, f
"{prefix}ResolvedTrackToAltTrackParticleCnvAlg",
189 ACTSTracksLocation=[TrackContainer],
190 TrackParticlesOutKey=f
'InDet{prefix}TrackParticles'))
192 if flags.Tracking.doTruth :
193 from ActsConfig.ActsTruthConfig
import ActsTrackParticleTruthDecorationAlgCfg
194 result.merge(ActsTrackParticleTruthDecorationAlgCfg(flags,
195 name=f
'{TrackContainer}ParticleTruthDecorationAlg',
196 TrackToTruthAssociationMaps = [f
'{TrackContainer}ToTruthParticleAssociation'],
197 TrackParticleContainerName = f
'InDet{prefix}TrackParticles'
204 previousActsExtension: str =
None,
205 InputCombinedITkTracks: list[str] =
None,
206 InputCombinedActsTracks: list[str] =
None,
207 InputExtendedITkTracks: list[str] =
None,
208 StatTrackCollections: list[str] =
None,
209 StatTrackTruthCollections: list[str] =
None,
210 ClusterSplitProbContainer: str =
""):
213 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
214 assert InputCombinedActsTracks
is not None and isinstance(InputCombinedActsTracks, list)
215 assert InputExtendedITkTracks
is not None and isinstance(InputExtendedITkTracks, list)
216 assert StatTrackCollections
is not None and isinstance(StatTrackCollections, list)
217 assert StatTrackTruthCollections
is not None and isinstance(StatTrackTruthCollections ,list)
220 extension = flags.Tracking.ActiveConfig.extension
222 result = ComponentAccumulator()
223 if flags.hasCategory(
"TrackOverlay.ActiveConfig"):
224 doTrackOverlay = getattr(flags.TrackOverlay.ActiveConfig,
"doTrackOverlay",
None)
226 doTrackOverlay = flags.Overlay.doTrackOverlay
230 TrackContainer =
"Resolved" + extension +
"Tracks"
232 if extension
in _actsExtensions:
233 TrackContainer = extension +
"ResolvedTracks" if flags.Acts.doAmbiguityResolution
else extension +
"Tracks"
234 if doTrackOverlay
and extension ==
"Conversion":
235 TrackContainer = flags.Overlay.SigPrefix + TrackContainer
238 SiSPSeededTracks =
"SiSPSeeded" + extension +
"Tracks"
240 if extension
in _actsExtensions:
241 SiSPSeededTracks = extension +
"Tracks"
244 from InDetConfig.ITkTrackingSiPatternConfig
import ITkTrackingSiPatternCfg
245 result.merge(ITkTrackingSiPatternCfg(
247 previousActsExtension=previousActsExtension,
248 InputCollections=InputExtendedITkTracks,
249 ResolvedTrackCollectionKey=TrackContainer,
250 SiSPSeededTrackCollectionKey=SiSPSeededTracks,
251 ClusterSplitProbContainer=ClusterSplitProbContainer))
252 StatTrackCollections += [SiSPSeededTracks, TrackContainer]
253 StatTrackTruthCollections += [SiSPSeededTracks+
"TruthCollection",
254 TrackContainer+
"TruthCollection"]
256 if doTrackOverlay
and extension ==
"Conversion":
257 TrackContainer =
"Resolved" + extension +
"Tracks"
260 TrackContainer=TrackContainer,
261 ClusterSplitProbContainer=ClusterSplitProbContainer))
263 if flags.Tracking.ActiveConfig.storeSeparateContainer:
269 inputTrack = TrackContainer
270 if extension
in _actsExtensions
and not flags.Tracking.ActiveConfig.doActsAmbiguityResolution:
271 inputTrack = SiSPSeededTracks
275 TrackContainer=inputTrack,
276 ClusterSplitProbContainer=ClusterSplitProbContainer))
280 ClusterSplitProbContainer = (
281 "ITkAmbiguityProcessorSplitProb" + extension)
284 if extension
not in _actsExtensions:
285 InputCombinedITkTracks += [TrackContainer]
287 InputCombinedActsTracks += [TrackContainer]
291 if extension
not in _actsExtensions:
292 InputExtendedITkTracks += [TrackContainer]
294 return result, ClusterSplitProbContainer
298 InputCombinedITkTracks: list[str] =
None,
299 ActsTrackContainerName=
"InDetActsTrackParticles") -> ComponentAccumulator:
301 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
303 acc = ComponentAccumulator()
304 if len(InputCombinedITkTracks) == 0:
308 from ActsConfig.ActsTrackFindingConfig
import ActsTrackToTrackParticleCnvAlgCfg
309 acc.merge(ActsTrackToTrackParticleCnvAlgCfg(flags,
"ActsCombinedTrackToTrackParticleCnvAlg",
310 ACTSTracksLocation=InputCombinedITkTracks,
311 TrackParticlesOutKey=ActsTrackContainerName))
312 if flags.Tracking.doTruth :
313 from ActsConfig.ActsTruthConfig
import ActsTrackParticleTruthDecorationAlgCfg
314 track_to_truth_maps=[]
315 for track_container
in InputCombinedITkTracks :
316 track_to_truth_maps += [f
'{track_container}ToTruthParticleAssociation']
320 acc.merge(ActsTrackParticleTruthDecorationAlgCfg(
322 name=f
'{ActsTrackContainerName}TruthDecorationAlg',
323 TrackToTruthAssociationMaps = track_to_truth_maps,
324 TrackParticleContainerName = ActsTrackContainerName,
325 OutputLevel=WARNING
if len(InputCombinedITkTracks)==1
else INFO,
326 ComputeTrackRecoEfficiency=
False if len(InputCombinedITkTracks)==1
else True
331 InputCombinedITkTracks: list[str] =
None,
332 StatTrackCollections: list[str] =
None,
333 StatTrackTruthCollections: list[str] =
None):
335 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
336 assert StatTrackCollections
is not None and isinstance(StatTrackCollections, list)
337 assert StatTrackTruthCollections
is not None and isinstance(StatTrackTruthCollections, list)
340 result = ComponentAccumulator()
341 if len(InputCombinedITkTracks) == 0:
344 if flags.hasCategory(
"TrackOverlay.ActiveConfig"):
345 doTrackOverlay = getattr(flags.TrackOverlay.ActiveConfig,
"doTrackOverlay",
None)
347 doTrackOverlay = flags.Overlay.doTrackOverlay
349 TrackContainer =
"CombinedITkTracks"
352 InputCombinedITkTracks += [flags.Overlay.BkgPrefix + TrackContainer]
354 from TrkConfig.TrkConfigFlags
import TrackingComponent
355 doGNNWithoutAmbiReso = (TrackingComponent.GNNChain
in flags.Tracking.recoChain
and (
not flags.Tracking.GNN.doAmbiResolution))
356 skipClusterMerge = doGNNWithoutAmbiReso
or flags.Tracking.doITkFastTracking
358 from TrkConfig.TrkTrackCollectionMergerConfig
import (
359 ITkTrackCollectionMergerAlgCfg)
360 result.merge(ITkTrackCollectionMergerAlgCfg(
362 InputCombinedTracks=InputCombinedITkTracks,
363 OutputCombinedTracks=TrackContainer,
365 "" if skipClusterMerge
else
366 f
"PRDtoTrackMapMerge_{TrackContainer}")))
368 if flags.Tracking.doTruth:
369 from InDetConfig.ITkTrackTruthConfig
import ITkTrackTruthCfg
370 result.merge(ITkTrackTruthCfg(
372 Tracks=TrackContainer,
373 DetailedTruth=f
"{TrackContainer}DetailedTruth",
374 TracksTruth=f
"{TrackContainer}TruthCollection"))
376 StatTrackCollections += [TrackContainer]
377 StatTrackTruthCollections += [f
"{TrackContainer}TruthCollection"]
379 if flags.Tracking.doSlimming:
380 from TrkConfig.TrkTrackSlimmerConfig
import TrackSlimmerCfg
381 result.merge(TrackSlimmerCfg(
383 TrackLocation=[TrackContainer]))
388 if flags.Tracking.perigeeExpression ==
"BeamLine":
389 from xAODTrackingCnv.xAODTrackingCnvConfig
import ITkTrackParticleCnvAlgCfg
390 result.merge(ITkTrackParticleCnvAlgCfg(
392 ClusterSplitProbabilityName=(
393 "" if skipClusterMerge
else
396 "" if skipClusterMerge
else
397 f
"PRDtoTrackMapMerge_{TrackContainer}"),
398 isActsAmbi =
'ActsValidateResolvedTracks' in splitProbName
or \
399 'ActsValidateAmbiguityResolution' in splitProbName
or \
400 'ActsValidateScoreBasedAmbiguityResolution' in splitProbName
or \
401 'ActsConversion' in splitProbName
or \
402 'ActsLargeRadius' in splitProbName
or \
403 'ActsValidateLargeRadiusStandalone' in splitProbName
or \
404 'ActsLowPt' in splitProbName
or \
405 (
'Acts' in splitProbName
and 'Validate' not in splitProbName) ))
411 StatTrackTruthCollections=None):
412 result = ComponentAccumulator()
414 from InDetConfig.InDetRecStatisticsConfig
import (
415 ITkRecStatisticsAlgCfg)
416 result.merge(ITkRecStatisticsAlgCfg(
418 TrackCollectionKeys=StatTrackCollections,
419 TrackTruthCollectionKeys=(
420 StatTrackTruthCollections
if flags.Tracking.doTruth
else [])))
422 if flags.Tracking.doTruth:
423 from InDetConfig.InDetTrackClusterAssValidationConfig
import (
424 ITkTrackClusterAssValidationCfg)
425 result.merge(ITkTrackClusterAssValidationCfg(
427 TracksLocation=StatTrackCollections))
442 result = ComponentAccumulator()
444 if flags.Tracking.doTIDE_AmbiTrackMonitoring:
445 from InDetConfig.InDetPrepRawDataToxAODConfig
import (
446 ITkPixelPrepDataToxAOD_ExtraTruthCfg
as PixelPrepDataToxAODCfg,
447 ITkStripPrepDataToxAOD_ExtraTruthCfg
as StripPrepDataToxAODCfg)
449 from InDetConfig.InDetPrepRawDataToxAODConfig
import (
450 ITkPixelPrepDataToxAODCfg
as PixelPrepDataToxAODCfg,
451 ITkStripPrepDataToxAODCfg
as StripPrepDataToxAODCfg)
453 result.merge(PixelPrepDataToxAODCfg(
455 ClusterSplitProbabilityName=(
456 "" if flags.Tracking.doITkFastTracking
else
458 result.merge(StripPrepDataToxAODCfg(flags))
460 from DerivationFrameworkInDet.InDetToolsConfig
import (
461 ITkTSOS_CommonKernelCfg)
466 listOfExtensionsRequesting = [
467 e
for e
in _extensions_list
if (e ==
'')
468 or (flags.Tracking[f
"ITk{e}Pass"].storeTrackSeeds)
469 or (flags.Tracking[f
"ITk{e}Pass"].storeSiSPSeededTracks)
470 or (flags.Tracking[f
"ITk{e}Pass"].storeSeparateContainer) ]
472 result.merge(ITkTSOS_CommonKernelCfg(
473 flags, listOfExtensions = listOfExtensionsRequesting))
475 if flags.Tracking.doStoreTrackSeeds:
476 from DerivationFrameworkInDet.InDetToolsConfig
import (
477 ITkSiSPSeedsTSOS_CommonKernelCfg)
479 listOfExtensionsRequesting = [
480 e
for e
in _extensions_list
if (e ==
'')
or
481 flags.Tracking[f
"ITk{e}Pass"].storeTrackSeeds ]
482 result.merge(ITkSiSPSeedsTSOS_CommonKernelCfg(
483 flags, listOfExtensions = listOfExtensionsRequesting))
485 if flags.Tracking.doStoreSiSPSeededTracks:
486 listOfExtensionsRequesting = [
487 e
for e
in _extensions_list
if (e==
'')
or
488 flags.Tracking[f
"ITk{e}Pass"].storeSiSPSeededTracks ]
489 from DerivationFrameworkInDet.InDetToolsConfig
import (
490 ITkSiSPTSOS_CommonKernelCfg)
491 result.merge(ITkSiSPTSOS_CommonKernelCfg(flags, listOfExtensions = listOfExtensionsRequesting))
494 listOfExtensionsRequesting = [
495 e
for e
in _extensions_list
if (e==
'')
or
496 (flags.Tracking[f
"ITk{e}Pass"].storeSiSPSeededTracks
and
497 flags.Tracking[f
"ITk{e}Pass"].storeSeparateContainer) ]
498 from InDetPhysValMonitoring.InDetPhysValDecorationConfig
import (
499 ITkPhysHitDecoratorAlgCfg)
500 for extension
in listOfExtensionsRequesting:
501 result.merge(ITkPhysHitDecoratorAlgCfg(
503 name=f
"ITkPhysHit{extension}DecoratorAlg",
504 TrackParticleContainerName=f
"InDet{extension}TrackParticles"))
515 """Configures complete ITk tracking """
517 from InDetConfig.ITkActsHelpers
import primaryPassUsesActs
518 if primaryPassUsesActs(flags):
519 from InDetConfig.ITkActsTrackRecoConfig
import ITkActsTrackRecoCfg
520 return ITkActsTrackRecoCfg(flags)
522 result = ComponentAccumulator()
524 if flags.Input.Format
is Format.BS:
526 raise RuntimeError(
"ByteStream inputs not supported")
535 InputCombinedITkTracks = []
537 InputCombinedActsTracks = []
539 InputExtendedITkTracks = []
541 ClusterSplitProbContainer =
""
543 StatTrackCollections = []
544 StatTrackTruthCollections = []
546 previousActsExtension =
None
548 from InDetConfig.SiliconPreProcessing
import ITkRecPreProcessingSiliconCfg
550 for current_flags
in flags_set:
551 printActiveConfig(current_flags)
554 extension = current_flags.Tracking.ActiveConfig.extension
555 if extension
not in _actsExtensions:
556 _extensions_list.append(extension)
559 _outputExtensions.append(extension)
567 result.merge(ITkRecPreProcessingSiliconCfg(current_flags,
568 previousActsExtension=previousActsExtension))
579 previousActsExtension,
580 InputCombinedITkTracks=InputCombinedITkTracks,
581 InputCombinedActsTracks=InputCombinedActsTracks,
582 InputExtendedITkTracks=InputExtendedITkTracks,
583 StatTrackCollections=StatTrackCollections,
584 StatTrackTruthCollections=StatTrackTruthCollections,
585 ClusterSplitProbContainer=ClusterSplitProbContainer)
589 if 'Acts' in extension:
590 previousActsExtension = extension
594 if InputCombinedITkTracks:
598 InputCombinedITkTracks=InputCombinedITkTracks,
599 StatTrackCollections=StatTrackCollections,
600 StatTrackTruthCollections=StatTrackTruthCollections))
606 if InputCombinedActsTracks:
612 ActsTrackContainerName =
"InDetTrackParticles" if not InputCombinedITkTracks
else "InDetActsTrackParticles"
613 ActsPrimaryVertices =
"PrimaryVertices" if not InputCombinedITkTracks
else "ActsPrimaryVertices"
616 InputCombinedITkTracks=InputCombinedActsTracks,
617 ActsTrackContainerName=ActsTrackContainerName))
620 if flags.Tracking.doVertexFinding:
622 from InDetConfig.InDetPriVxFinderConfig
import primaryVertexFindingCfg
626 if InputCombinedITkTracks:
627 result.merge(primaryVertexFindingCfg(flags))
633 if InputCombinedActsTracks:
634 result.merge(primaryVertexFindingCfg(flags,
635 name=
"ActsPriVxFinderAlg",
636 TracksName=ActsTrackContainerName,
637 vxCandidatesOutputName=ActsPrimaryVertices))
641 print(
"-------- POST PROCESSING --------")
642 for current_flags
in flags_set:
643 extension = current_flags.Tracking.ActiveConfig.extension
644 print(f
"- Running post-processing for extension: {extension}")
657 if current_flags.Tracking.ActiveConfig.doAthenaTrack:
658 if current_flags.Tracking.doStoreTrackSeeds:
659 from InDetConfig.ITkPersistificationConfig
import ITkTrackSeedsFinalCfg
660 result.merge(ITkTrackSeedsFinalCfg(current_flags))
668 if current_flags.Tracking.ActiveConfig.doAthenaTrack
or current_flags.Tracking.ActiveConfig.doActsToAthenaTrack:
669 if current_flags.Tracking.doStoreSiSPSeededTracks:
670 from InDetConfig.ITkPersistificationConfig
import ITkSiSPSeededTracksFinalCfg
671 result.merge(ITkSiSPSeededTracksFinalCfg(current_flags))
673 if flags.Tracking.doStats:
677 StatTrackCollections=StatTrackCollections,
678 StatTrackTruthCollections=StatTrackTruthCollections))
682 if flags.Tracking.writeExtendedSi_PRDInfo:
691 from InDetConfig.ITkTrackOutputConfig
import ITkTrackRecoOutputCfg
692 result.merge(ITkTrackRecoOutputCfg(flags, _outputExtensions))
693 result.printConfig(withDetails =
False, summariseProps =
False)