3 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
4 from AthenaConfiguration.Enums
import Format
5 from TrkConfig.TrackingPassFlags
import printActiveConfig
10 _actsExtensions = [
'Acts',
'ActsLegacy',
'ActsConversion',
'ActsLargeRadius',
'ActsLowPt',
'ActsValidateF100',
'ActsValidateF150',
'ActsValidateLargeRadiusStandalone']
11 _outputExtensions = []
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.Acts.doLargeRadius:
67 flags_set += [flags.cloneAndReplace(
68 "Tracking.ActiveConfig",
69 "Tracking.ITkActsLargeRadiusPass")]
72 if flags.Detector.EnableCalo
and flags.Acts.doITkConversion
and \
73 TrackingComponent.ActsValidateConversionSeeds
not in flags.Tracking.recoChain:
74 flags_set += [flags.cloneAndReplace(
75 "Tracking.ActiveConfig",
76 "Tracking.ITkActsConversionPass")]
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.Tracking.doLargeD0:
92 if flags.Tracking.useITkFTF:
93 flagsLRT = flags.cloneAndReplace(
"Tracking.ActiveConfig",
94 "Tracking.ITkFTFLargeD0Pass")
95 elif flags.Tracking.doITkFastTracking:
96 flagsLRT = flags.cloneAndReplace(
"Tracking.ActiveConfig",
97 "Tracking.ITkLargeD0FastPass")
99 flagsLRT = flags.cloneAndReplace(
"Tracking.ActiveConfig",
100 "Tracking.ITkLargeD0Pass")
101 flags_set += [flagsLRT]
104 if TrackingComponent.FPGAChain
in flags.Tracking.recoChain:
105 flags_set += [flags.cloneAndReplace(
106 "Tracking.ActiveConfig",
107 "Tracking.ITkFPGAPass")]
110 if flags.Detector.EnableCalo
and flags.Tracking.doITkConversion:
111 flagsConv = flags.cloneAndReplace(
"Tracking.ActiveConfig",
112 "Tracking.ITkConversionPass")
113 flags_set += [flagsConv]
116 if flags.Tracking.doLowPt:
117 flagsLowPt = flags.cloneAndReplace(
"Tracking.ActiveConfig",
118 "Tracking.ITkLowPtPass")
119 flags_set += [flagsLowPt]
121 _flags_set = flags_set
128 extension = flags_set[-1].Tracking.ActiveConfig.extension
129 ClusterSplitProbContainer =
"ITkAmbiguityProcessorSplitProb" + extension
130 return ClusterSplitProbContainer
134 TrackContainer: str =
"",
135 ClusterSplitProbContainer: str =
"") -> ComponentAccumulator:
137 extension = flags.Tracking.ActiveConfig.extension
138 if hasattr(flags.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
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
164 Tracks=TrackContainer,
165 DetailedTruth=TrackContainer+
"DetailedTruth",
166 TracksTruth=TrackContainer+
"TruthCollection"))
170 if extension
not in _actsExtensions:
172 from xAODTrackingCnv.xAODTrackingCnvConfig
import 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
189 ACTSTracksLocation=[TrackContainer],
190 TrackParticlesOutKey=f
'InDet{prefix}TrackParticles'))
192 if flags.Tracking.doTruth :
193 from ActsConfig.ActsTruthConfig
import ActsTrackParticleTruthDecorationAlgCfg
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
223 if hasattr(flags.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
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)
304 if len(InputCombinedITkTracks) == 0:
308 from ActsConfig.ActsTrackFindingConfig
import ActsTrackToTrackParticleCnvAlgCfg
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']
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)
341 if len(InputCombinedITkTracks) == 0:
344 if hasattr(flags.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)
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
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
383 TrackLocation=[TrackContainer]))
388 if flags.Tracking.perigeeExpression ==
"BeamLine":
389 from xAODTrackingCnv.xAODTrackingCnvConfig
import 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):
414 from InDetConfig.InDetRecStatisticsConfig
import (
415 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)
427 TracksLocation=StatTrackCollections))
436 from InDetConfig.InDetPrepRawDataToxAODConfig
import ITkActsPrepDataToxAODCfg
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) ]
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 ]
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)
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:
503 name=f
"ITkPhysHit{extension}DecoratorAlg",
504 TrackParticleContainerName=f
"InDet{extension}TrackParticles"))
515 """Configures complete ITk tracking """
517 from InDetConfig.ITkActsHelpers
import primaryPassUsesActs
519 from InDetConfig.ITkActsTrackRecoConfig
import ITkActsTrackRecoCfg
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:
554 extension = current_flags.Tracking.ActiveConfig.extension
555 if extension
not in _actsExtensions:
556 _extensions_list.append(extension)
559 _outputExtensions.append(extension)
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:
633 if InputCombinedActsTracks:
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
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
673 if flags.Tracking.doStats:
677 StatTrackCollections=StatTrackCollections,
678 StatTrackTruthCollections=StatTrackTruthCollections))
682 if flags.Tracking.writeExtendedSi_PRDInfo:
691 from InDetConfig.ITkTrackOutputConfig
import ITkTrackRecoOutputCfg
693 result.printConfig(withDetails =
False, summariseProps =
False)
697 if __name__ ==
"__main__":
698 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
702 flags.Detector.EnableCalo =
False
704 from AthenaConfiguration.TestDefaults
import defaultTestFiles
705 flags.Input.Files = defaultTestFiles.RDO_RUN4
708 if "--doFTF" in sys.argv:
709 flags.Tracking.useITkFTF =
True
710 flags.Tracking.doITkFastTracking =
True
714 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
717 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
720 if flags.Input.isMC
and flags.Output.doGEN_AOD2xAOD:
721 from xAODTruthCnv.xAODTruthCnvConfig
import GEN_AOD2xAODCfg
727 top_acc.foreach_component(
"AthEventSeq/*").OutputLevel = DEBUG
728 top_acc.printConfig(withDetails=
True, summariseProps=
True)
729 top_acc.store(
open(
"ITkTrackReco.pkl",
"wb"))
731 if "--norun" not in sys.argv: