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']
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.ActsValidateTracks :
"ActsValidateTracks",
29 TrackingComponent.ActsValidateAmbiguityResolution :
"ActsValidateAmbiguityResolution",
30 TrackingComponent.ActsValidateF100 :
"ActsValidateF100",
34 if TrackingComponent.AthenaChain
in flags.Tracking.recoChain:
35 flags_set += [flags.cloneAndReplace(
36 "Tracking.ActiveConfig",
37 f
"Tracking.{flags.Tracking.ITkPrimaryPassConfig.value}Pass")]
40 if TrackingComponent.ActsLegacyChain
in flags.Tracking.recoChain:
41 flags_set += [flags.cloneAndReplace(
42 "Tracking.ActiveConfig",
43 "Tracking.ITkActsLegacyPass")]
46 if TrackingComponent.ActsChain
in flags.Tracking.recoChain:
47 flags_set += [flags.cloneAndReplace(
48 "Tracking.ActiveConfig",
49 "Tracking.ITkActsPass")]
52 if TrackingComponent.ActsHeavyIon
in flags.Tracking.recoChain:
53 flags_set += [flags.cloneAndReplace(
54 "Tracking.ActiveConfig",
55 "Tracking.ITkActsHeavyIonPass")]
58 if TrackingComponent.GNNChain
in flags.Tracking.recoChain:
59 flags_set += [flags.cloneAndReplace(
60 "Tracking.ActiveConfig",
61 "Tracking.ITkGNNPass")]
64 if flags.Acts.doLargeRadius:
65 flags_set += [flags.cloneAndReplace(
66 "Tracking.ActiveConfig",
67 "Tracking.ITkActsLargeRadiusPass")]
70 if flags.Detector.EnableCalo
and flags.Acts.doITkConversion
and \
71 TrackingComponent.ActsValidateConversionSeeds
not in flags.Tracking.recoChain:
72 flags_set += [flags.cloneAndReplace(
73 "Tracking.ActiveConfig",
74 "Tracking.ITkActsConversionPass")]
77 if flags.Acts.doLowPt:
78 flags_set += [flags.cloneAndReplace(
79 "Tracking.ActiveConfig",
80 "Tracking.ITkActsLowPtPass")]
83 for [configuration, key]
in validation_configurations.items():
84 if configuration
in flags.Tracking.recoChain:
85 toAdd = eval(f
"flags.cloneAndReplace('Tracking.ActiveConfig', 'Tracking.ITk{key}Pass')")
89 if flags.Tracking.doLargeD0:
90 if flags.Tracking.useITkFTF:
91 flagsLRT = flags.cloneAndReplace(
"Tracking.ActiveConfig",
92 "Tracking.ITkFTFLargeD0Pass")
93 elif flags.Tracking.doITkFastTracking:
94 flagsLRT = flags.cloneAndReplace(
"Tracking.ActiveConfig",
95 "Tracking.ITkLargeD0FastPass")
97 flagsLRT = flags.cloneAndReplace(
"Tracking.ActiveConfig",
98 "Tracking.ITkLargeD0Pass")
99 flags_set += [flagsLRT]
102 if TrackingComponent.FPGAChain
in flags.Tracking.recoChain:
103 flags_set += [flags.cloneAndReplace(
104 "Tracking.ActiveConfig",
105 "Tracking.ITkFPGAPass")]
108 if flags.Detector.EnableCalo
and flags.Tracking.doITkConversion:
109 flagsConv = flags.cloneAndReplace(
"Tracking.ActiveConfig",
110 "Tracking.ITkConversionPass")
111 flags_set += [flagsConv]
114 if flags.Tracking.doLowPt:
115 flagsLowPt = flags.cloneAndReplace(
"Tracking.ActiveConfig",
116 "Tracking.ITkLowPtPass")
117 flags_set += [flagsLowPt]
119 _flags_set = flags_set
126 extension = flags_set[-1].Tracking.ActiveConfig.extension
127 ClusterSplitProbContainer =
"ITkAmbiguityProcessorSplitProb" + extension
128 return ClusterSplitProbContainer
132 TrackContainer: str =
"",
133 ClusterSplitProbContainer: str =
"") -> ComponentAccumulator:
135 extension = flags.Tracking.ActiveConfig.extension
136 if hasattr(flags.TrackOverlay,
"ActiveConfig"):
137 doTrackOverlay = getattr(flags.TrackOverlay.ActiveConfig,
"doTrackOverlay",
None)
139 doTrackOverlay = flags.Overlay.doTrackOverlay
143 InputTracks = [flags.Overlay.SigPrefix+TrackContainer,
144 flags.Overlay.BkgPrefix+TrackContainer]
145 AssociationMapName = (
"PRDtoTrackMapMerge_Resolved" +
146 extension +
"Tracks")
147 MergerOutputTracks = TrackContainer
149 from TrkConfig.TrkTrackCollectionMergerConfig
import TrackCollectionMergerAlgCfg
152 name=
"TrackCollectionMergerAlgCfg"+extension,
153 InputCombinedTracks=InputTracks,
154 OutputCombinedTracks=MergerOutputTracks,
155 AssociationMapName=AssociationMapName))
158 if flags.Tracking.doTruth
and extension
not in _actsExtensions:
159 from InDetConfig.ITkTrackTruthConfig
import ITkTrackTruthCfg
162 Tracks=TrackContainer,
163 DetailedTruth=TrackContainer+
"DetailedTruth",
164 TracksTruth=TrackContainer+
"TruthCollection"))
168 if extension
not in _actsExtensions:
170 from xAODTrackingCnv.xAODTrackingCnvConfig
import ITkTrackParticleCnvAlgCfg
173 name=extension +
"TrackParticleCnvAlg",
174 TrackContainerName=TrackContainer,
175 xAODTrackParticlesFromTracksContainerName=(
176 "InDet" + extension +
"TrackParticles"),
177 ClusterSplitProbabilityName=(
178 "" if flags.Tracking.doITkFastTracking
else
179 ClusterSplitProbContainer),
180 AssociationMapName=
""))
183 from ActsConfig.ActsTrackFindingConfig
import ActsTrackToTrackParticleCnvAlgCfg
185 prefix = flags.Tracking.ActiveConfig.extension
187 ACTSTracksLocation=[TrackContainer],
188 TrackParticlesOutKey=f
'InDet{prefix}TrackParticles'))
190 if flags.Tracking.doTruth :
191 from ActsConfig.ActsTruthConfig
import ActsTrackParticleTruthDecorationAlgCfg
193 name=f
'{TrackContainer}ParticleTruthDecorationAlg',
194 TrackToTruthAssociationMaps = [f
'{TrackContainer}ToTruthParticleAssociation'],
195 TrackParticleContainerName = f
'InDet{prefix}TrackParticles'
202 previousActsExtension: str =
None,
203 InputCombinedITkTracks: list[str] =
None,
204 InputCombinedActsTracks: list[str] =
None,
205 InputExtendedITkTracks: list[str] =
None,
206 StatTrackCollections: list[str] =
None,
207 StatTrackTruthCollections: list[str] =
None,
208 ClusterSplitProbContainer: str =
""):
211 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
212 assert InputCombinedActsTracks
is not None and isinstance(InputCombinedActsTracks, list)
213 assert InputExtendedITkTracks
is not None and isinstance(InputExtendedITkTracks, list)
214 assert StatTrackCollections
is not None and isinstance(StatTrackCollections, list)
215 assert StatTrackTruthCollections
is not None and isinstance(StatTrackTruthCollections ,list)
218 extension = flags.Tracking.ActiveConfig.extension
221 if hasattr(flags.TrackOverlay,
"ActiveConfig"):
222 doTrackOverlay = getattr(flags.TrackOverlay.ActiveConfig,
"doTrackOverlay",
None)
224 doTrackOverlay = flags.Overlay.doTrackOverlay
228 TrackContainer =
"Resolved" + extension +
"Tracks"
230 if extension
in _actsExtensions:
231 TrackContainer = extension +
"ResolvedTracks"
232 if doTrackOverlay
and extension ==
"Conversion":
233 TrackContainer = flags.Overlay.SigPrefix + TrackContainer
236 SiSPSeededTracks =
"SiSPSeeded" + extension +
"Tracks"
238 if extension
in _actsExtensions:
239 SiSPSeededTracks = extension +
"Tracks"
242 from InDetConfig.ITkTrackingSiPatternConfig
import ITkTrackingSiPatternCfg
245 previousActsExtension=previousActsExtension,
246 InputCollections=InputExtendedITkTracks,
247 ResolvedTrackCollectionKey=TrackContainer,
248 SiSPSeededTrackCollectionKey=SiSPSeededTracks,
249 ClusterSplitProbContainer=ClusterSplitProbContainer))
250 StatTrackCollections += [SiSPSeededTracks, TrackContainer]
251 StatTrackTruthCollections += [SiSPSeededTracks+
"TruthCollection",
252 TrackContainer+
"TruthCollection"]
254 if doTrackOverlay
and extension ==
"Conversion":
255 TrackContainer =
"Resolved" + extension +
"Tracks"
258 TrackContainer=TrackContainer,
259 ClusterSplitProbContainer=ClusterSplitProbContainer))
261 if flags.Tracking.ActiveConfig.storeSeparateContainer:
267 inputTrack = TrackContainer
268 if extension
in _actsExtensions
and not flags.Tracking.ActiveConfig.doActsAmbiguityResolution:
269 inputTrack = SiSPSeededTracks
273 TrackContainer=inputTrack,
274 ClusterSplitProbContainer=ClusterSplitProbContainer))
278 ClusterSplitProbContainer = (
279 "ITkAmbiguityProcessorSplitProb" + extension)
282 if extension
not in _actsExtensions:
283 InputCombinedITkTracks += [TrackContainer]
285 InputCombinedActsTracks += [TrackContainer]
289 if extension
not in _actsExtensions:
290 InputExtendedITkTracks += [TrackContainer]
292 return result, ClusterSplitProbContainer
296 InputCombinedITkTracks: list[str] =
None,
297 ActsTrackContainerName=
"InDetActsTrackParticles") -> ComponentAccumulator:
299 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
302 if len(InputCombinedITkTracks) == 0:
306 from ActsConfig.ActsTrackFindingConfig
import ActsTrackToTrackParticleCnvAlgCfg
308 ACTSTracksLocation=InputCombinedITkTracks,
309 TrackParticlesOutKey=ActsTrackContainerName))
310 if flags.Tracking.doTruth :
311 from ActsConfig.ActsTruthConfig
import ActsTrackParticleTruthDecorationAlgCfg
312 track_to_truth_maps=[]
313 for track_container
in InputCombinedITkTracks :
314 track_to_truth_maps += [f
'{track_container}ToTruthParticleAssociation']
320 name=f
'{ActsTrackContainerName}TruthDecorationAlg',
321 TrackToTruthAssociationMaps = track_to_truth_maps,
322 TrackParticleContainerName = ActsTrackContainerName,
323 OutputLevel=WARNING
if len(InputCombinedITkTracks)==1
else INFO,
324 ComputeTrackRecoEfficiency=
False if len(InputCombinedITkTracks)==1
else True
329 InputCombinedITkTracks: list[str] =
None,
330 StatTrackCollections: list[str] =
None,
331 StatTrackTruthCollections: list[str] =
None):
333 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
334 assert StatTrackCollections
is not None and isinstance(StatTrackCollections, list)
335 assert StatTrackTruthCollections
is not None and isinstance(StatTrackTruthCollections, list)
339 if len(InputCombinedITkTracks) == 0:
342 if hasattr(flags.TrackOverlay,
"ActiveConfig"):
343 doTrackOverlay = getattr(flags.TrackOverlay.ActiveConfig,
"doTrackOverlay",
None)
345 doTrackOverlay = flags.Overlay.doTrackOverlay
347 TrackContainer =
"CombinedITkTracks"
350 InputCombinedITkTracks += [flags.Overlay.BkgPrefix + TrackContainer]
352 from TrkConfig.TrkConfigFlags
import TrackingComponent
353 doGNNWithoutAmbiReso = (TrackingComponent.GNNChain
in flags.Tracking.recoChain
and (
not flags.Tracking.GNN.doAmbiResolution))
354 skipClusterMerge = doGNNWithoutAmbiReso
or flags.Tracking.doITkFastTracking
356 from TrkConfig.TrkTrackCollectionMergerConfig
import (
357 ITkTrackCollectionMergerAlgCfg)
360 InputCombinedTracks=InputCombinedITkTracks,
361 OutputCombinedTracks=TrackContainer,
363 "" if skipClusterMerge
else
364 f
"PRDtoTrackMapMerge_{TrackContainer}")))
366 if flags.Tracking.doTruth:
367 from InDetConfig.ITkTrackTruthConfig
import ITkTrackTruthCfg
370 Tracks=TrackContainer,
371 DetailedTruth=f
"{TrackContainer}DetailedTruth",
372 TracksTruth=f
"{TrackContainer}TruthCollection"))
374 StatTrackCollections += [TrackContainer]
375 StatTrackTruthCollections += [f
"{TrackContainer}TruthCollection"]
377 if flags.Tracking.doSlimming:
378 from TrkConfig.TrkTrackSlimmerConfig
import TrackSlimmerCfg
381 TrackLocation=[TrackContainer]))
386 if flags.Tracking.perigeeExpression ==
"BeamLine":
387 from xAODTrackingCnv.xAODTrackingCnvConfig
import ITkTrackParticleCnvAlgCfg
390 ClusterSplitProbabilityName=(
391 "" if skipClusterMerge
else
394 "" if skipClusterMerge
else
395 f
"PRDtoTrackMapMerge_{TrackContainer}"),
396 isActsAmbi =
'ActsValidateResolvedTracks' in splitProbName
or \
397 'ActsValidateAmbiguityResolution' in splitProbName
or \
398 'ActsValidateScoreBasedAmbiguityResolution' in splitProbName
or \
399 'ActsConversion' in splitProbName
or \
400 'ActsLargeRadius' in splitProbName
or \
401 'ActsLowPt' in splitProbName
or \
402 (
'Acts' in splitProbName
and 'Validate' not in splitProbName) ))
408 StatTrackTruthCollections=None):
411 from InDetConfig.InDetRecStatisticsConfig
import (
412 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)
424 TracksLocation=StatTrackCollections))
433 from InDetConfig.InDetPrepRawDataToxAODConfig
import ITkActsPrepDataToxAODCfg
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) ]
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 ]
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)
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:
500 name=f
"ITkPhysHit{extension}DecoratorAlg",
501 TrackParticleContainerName=f
"InDet{extension}TrackParticles"))
512 """Configures complete ITk tracking """
514 from InDetConfig.ITkActsHelpers
import primaryPassUsesActs
516 from InDetConfig.ITkActsTrackRecoConfig
import ITkActsTrackRecoCfg
521 if flags.Input.Format
is Format.BS:
523 raise RuntimeError(
"ByteStream inputs not supported")
532 InputCombinedITkTracks = []
534 InputCombinedActsTracks = []
536 InputExtendedITkTracks = []
538 ClusterSplitProbContainer =
""
540 StatTrackCollections = []
541 StatTrackTruthCollections = []
543 previousActsExtension =
None
545 from InDetConfig.SiliconPreProcessing
import ITkRecPreProcessingSiliconCfg
547 for current_flags
in flags_set:
551 extension = current_flags.Tracking.ActiveConfig.extension
552 if extension
not in _actsExtensions:
553 _extensions_list.append(extension)
556 _outputExtensions.append(extension)
565 previousActsExtension=previousActsExtension))
576 previousActsExtension,
577 InputCombinedITkTracks=InputCombinedITkTracks,
578 InputCombinedActsTracks=InputCombinedActsTracks,
579 InputExtendedITkTracks=InputExtendedITkTracks,
580 StatTrackCollections=StatTrackCollections,
581 StatTrackTruthCollections=StatTrackTruthCollections,
582 ClusterSplitProbContainer=ClusterSplitProbContainer)
586 if 'Acts' in extension:
587 previousActsExtension = extension
591 if InputCombinedITkTracks:
595 InputCombinedITkTracks=InputCombinedITkTracks,
596 StatTrackCollections=StatTrackCollections,
597 StatTrackTruthCollections=StatTrackTruthCollections))
603 if InputCombinedActsTracks:
609 ActsTrackContainerName =
"InDetTrackParticles" if not InputCombinedITkTracks
else "InDetActsTrackParticles"
610 ActsPrimaryVertices =
"PrimaryVertices" if not InputCombinedITkTracks
else "ActsPrimaryVertices"
613 InputCombinedITkTracks=InputCombinedActsTracks,
614 ActsTrackContainerName=ActsTrackContainerName))
617 if flags.Tracking.doVertexFinding:
619 from InDetConfig.InDetPriVxFinderConfig
import primaryVertexFindingCfg
623 if InputCombinedITkTracks:
630 if InputCombinedActsTracks:
632 name=
"ActsPriVxFinderAlg",
633 TracksName=ActsTrackContainerName,
634 vxCandidatesOutputName=ActsPrimaryVertices))
638 print(
"-------- POST PROCESSING --------")
639 for current_flags
in flags_set:
640 extension = current_flags.Tracking.ActiveConfig.extension
641 print(f
"- Running post-processing for extension: {extension}")
654 if current_flags.Tracking.ActiveConfig.doAthenaTrack:
655 if current_flags.Tracking.doStoreTrackSeeds:
656 from InDetConfig.ITkPersistificationConfig
import ITkTrackSeedsFinalCfg
665 if current_flags.Tracking.ActiveConfig.doAthenaTrack
or current_flags.Tracking.ActiveConfig.doActsToAthenaTrack:
666 if current_flags.Tracking.doStoreSiSPSeededTracks:
667 from InDetConfig.ITkPersistificationConfig
import ITkSiSPSeededTracksFinalCfg
670 if flags.Tracking.doStats:
674 StatTrackCollections=StatTrackCollections,
675 StatTrackTruthCollections=StatTrackTruthCollections))
679 if flags.Tracking.writeExtendedSi_PRDInfo:
688 from InDetConfig.ITkTrackOutputConfig
import ITkTrackRecoOutputCfg
690 result.printConfig(withDetails =
False, summariseProps =
False)
694 if __name__ ==
"__main__":
695 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
699 flags.Detector.EnableCalo =
False
701 from AthenaConfiguration.TestDefaults
import defaultTestFiles
702 flags.Input.Files = defaultTestFiles.RDO_RUN4
705 if "--doFTF" in sys.argv:
706 flags.Tracking.useITkFTF =
True
707 flags.Tracking.doITkFastTracking =
True
711 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
714 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
717 if flags.Input.isMC
and flags.Output.doGEN_AOD2xAOD:
718 from xAODTruthCnv.xAODTruthCnvConfig
import GEN_AOD2xAODCfg
724 top_acc.foreach_component(
"AthEventSeq/*").OutputLevel = DEBUG
725 top_acc.printConfig(withDetails=
True, summariseProps=
True)
726 top_acc.store(
open(
"ITkTrackReco.pkl",
"wb"))
728 if "--norun" not in sys.argv: