3 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
4 from AthenaConfiguration.Enums
import Format
5 from TrkConfig.TrackingPassFlags
import printActiveConfig
19 from TrkConfig.TrkConfigFlags
import TrackingComponent
20 validation_configurations = {
21 TrackingComponent.ActsValidateClusters :
"ActsValidateClusters",
22 TrackingComponent.ActsValidateSpacePoints :
"ActsValidateSpacePoints",
23 TrackingComponent.ActsValidateSeeds :
"ActsValidateSeeds",
24 TrackingComponent.ActsValidateConversionSeeds :
"ActsValidateConversionSeeds",
25 TrackingComponent.ActsValidateLargeRadiusSeeds:
"ActsValidateLargeRadiusSeeds",
26 TrackingComponent.ActsValidateTracks :
"ActsValidateTracks",
27 TrackingComponent.ActsValidateAmbiguityResolution :
"ActsValidateAmbiguityResolution"
31 if TrackingComponent.AthenaChain
in flags.Tracking.recoChain:
32 flags_set += [flags.cloneAndReplace(
33 "Tracking.ActiveConfig",
34 f
"Tracking.{flags.Tracking.ITkPrimaryPassConfig.value}Pass")]
37 if TrackingComponent.ActsChain
in flags.Tracking.recoChain:
38 flags_set += [flags.cloneAndReplace(
39 "Tracking.ActiveConfig",
40 "Tracking.ITkActsPass")]
43 if TrackingComponent.ActsHeavyIon
in flags.Tracking.recoChain:
44 flags_set += [flags.cloneAndReplace(
45 "Tracking.ActiveConfig",
46 "Tracking.ITkActsHeavyIonPass")]
49 if TrackingComponent.GNNChain
in flags.Tracking.recoChain:
50 flags_set += [flags.cloneAndReplace(
51 "Tracking.ActiveConfig",
52 "Tracking.ITkGNNPass")]
55 if flags.Acts.doLargeRadius:
56 flags_set += [flags.cloneAndReplace(
57 "Tracking.ActiveConfig",
58 "Tracking.ITkActsLargeRadiusPass")]
61 if flags.Detector.EnableCalo
and flags.Acts.doITkConversion
and \
62 TrackingComponent.ActsValidateConversionSeeds
not in flags.Tracking.recoChain:
63 flags_set += [flags.cloneAndReplace(
64 "Tracking.ActiveConfig",
65 "Tracking.ITkActsConversionPass")]
68 if flags.Acts.doLowPt:
69 flags_set += [flags.cloneAndReplace(
70 "Tracking.ActiveConfig",
71 "Tracking.ITkActsLowPtPass")]
74 for [configuration, key]
in validation_configurations.items():
75 if configuration
in flags.Tracking.recoChain:
76 toAdd = eval(f
"flags.cloneAndReplace('Tracking.ActiveConfig', 'Tracking.ITk{key}Pass')")
80 if flags.Tracking.doLargeD0:
81 if flags.Tracking.doITkFastTracking:
82 flagsLRT = flags.cloneAndReplace(
"Tracking.ActiveConfig",
83 "Tracking.ITkLargeD0FastPass")
85 flagsLRT = flags.cloneAndReplace(
"Tracking.ActiveConfig",
86 "Tracking.ITkLargeD0Pass")
87 flags_set += [flagsLRT]
90 if flags.Detector.EnableCalo
and flags.Tracking.doITkConversion:
91 flagsConv = flags.cloneAndReplace(
"Tracking.ActiveConfig",
92 "Tracking.ITkConversionPass")
93 flags_set += [flagsConv]
96 if flags.Tracking.doLowPt:
97 flagsLowPt = flags.cloneAndReplace(
"Tracking.ActiveConfig",
98 "Tracking.ITkLowPtPass")
99 flags_set += [flagsLowPt]
101 _flags_set = flags_set
108 extension = flags_set[-1].Tracking.ActiveConfig.extension
109 ClusterSplitProbContainer =
"ITkAmbiguityProcessorSplitProb" + extension
110 return ClusterSplitProbContainer
114 TrackContainer: str =
"",
115 ClusterSplitProbContainer: str =
"") -> ComponentAccumulator:
117 extension = flags.Tracking.ActiveConfig.extension
118 if hasattr(flags.TrackOverlay,
"ActiveConfig"):
119 doTrackOverlay = getattr(flags.TrackOverlay.ActiveConfig,
"doTrackOverlay",
None)
121 doTrackOverlay = flags.Overlay.doTrackOverlay
125 InputTracks = [flags.Overlay.SigPrefix+TrackContainer,
126 flags.Overlay.BkgPrefix+TrackContainer]
127 AssociationMapName = (
"PRDtoTrackMapMerge_Resolved" +
128 extension +
"Tracks")
129 MergerOutputTracks = TrackContainer
131 from TrkConfig.TrkTrackCollectionMergerConfig
import TrackCollectionMergerAlgCfg
134 name=
"TrackCollectionMergerAlgCfg"+extension,
135 InputCombinedTracks=InputTracks,
136 OutputCombinedTracks=MergerOutputTracks,
137 AssociationMapName=AssociationMapName))
140 if flags.Tracking.doTruth
and extension
not in [
'Acts',
'ActsConversion',
'ActsLargeRadius',
'ActsLowPt']:
141 from InDetConfig.ITkTrackTruthConfig
import ITkTrackTruthCfg
144 Tracks=TrackContainer,
145 DetailedTruth=TrackContainer+
"DetailedTruth",
146 TracksTruth=TrackContainer+
"TruthCollection"))
150 if extension
not in [
'Acts',
'ActsConversion',
'ActsLargeRadius',
'ActsLowPt']:
152 from xAODTrackingCnv.xAODTrackingCnvConfig
import ITkTrackParticleCnvAlgCfg
155 name=extension +
"TrackParticleCnvAlg",
156 TrackContainerName=TrackContainer,
157 xAODTrackParticlesFromTracksContainerName=(
158 "InDet" + extension +
"TrackParticles"),
159 ClusterSplitProbabilityName=(
160 "" if flags.Tracking.doITkFastTracking
else
161 ClusterSplitProbContainer),
162 AssociationMapName=
""))
165 from ActsConfig.ActsTrackFindingConfig
import ActsTrackToTrackParticleCnvAlgCfg
167 prefix = flags.Tracking.ActiveConfig.extension
169 ACTSTracksLocation=TrackContainer,
170 TrackParticlesOutKey=f
'{TrackContainer}ParticlesAlt'))
172 if flags.Tracking.doTruth :
173 from ActsConfig.ActsTruthConfig
import ActsTrackParticleTruthDecorationAlgCfg
175 name=f
'{TrackContainer}ParticleTruthDecorationAlg',
176 TrackToTruthAssociationMaps = [f
'{TrackContainer}ToTruthParticleAssociation'],
177 TrackParticleContainerName = f
'{TrackContainer}ParticlesAlt'
184 previousActsExtension: str =
None,
185 InputCombinedITkTracks: list[str] =
None,
186 InputCombinedActsTracks: list[str] =
None,
187 InputExtendedITkTracks: list[str] =
None,
188 StatTrackCollections: list[str] =
None,
189 StatTrackTruthCollections: list[str] =
None,
190 ClusterSplitProbContainer: str =
""):
193 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
194 assert InputCombinedActsTracks
is not None and isinstance(InputCombinedActsTracks, list)
195 assert InputExtendedITkTracks
is not None and isinstance(InputExtendedITkTracks, list)
196 assert StatTrackCollections
is not None and isinstance(StatTrackCollections, list)
197 assert StatTrackTruthCollections
is not None and isinstance(StatTrackTruthCollections ,list)
200 extension = flags.Tracking.ActiveConfig.extension
203 if hasattr(flags.TrackOverlay,
"ActiveConfig"):
204 doTrackOverlay = getattr(flags.TrackOverlay.ActiveConfig,
"doTrackOverlay",
None)
206 doTrackOverlay = flags.Overlay.doTrackOverlay
210 TrackContainer =
"Resolved" + extension +
"Tracks"
212 if extension
in [
'Acts',
'ActsConversion',
'ActsLargeRadius',
'ActsLowPt']:
213 TrackContainer = extension +
"ResolvedTracks"
214 if doTrackOverlay
and extension ==
"Conversion":
215 TrackContainer = flags.Overlay.SigPrefix + TrackContainer
218 SiSPSeededTracks =
"SiSPSeeded" + extension +
"Tracks"
220 if extension
in [
'Acts',
'ActsConversion',
'ActsLargeRadius',
'ActsLowPt']:
221 SiSPSeededTracks = extension +
"Tracks"
224 from InDetConfig.ITkTrackingSiPatternConfig
import ITkTrackingSiPatternCfg
227 previousActsExtension=previousActsExtension,
228 InputCollections=InputExtendedITkTracks,
229 ResolvedTrackCollectionKey=TrackContainer,
230 SiSPSeededTrackCollectionKey=SiSPSeededTracks,
231 ClusterSplitProbContainer=ClusterSplitProbContainer))
232 StatTrackCollections += [SiSPSeededTracks, TrackContainer]
233 StatTrackTruthCollections += [SiSPSeededTracks+
"TruthCollection",
234 TrackContainer+
"TruthCollection"]
236 if doTrackOverlay
and extension ==
"Conversion":
237 TrackContainer =
"Resolved" + extension +
"Tracks"
240 TrackContainer=TrackContainer,
241 ClusterSplitProbContainer=ClusterSplitProbContainer))
243 if flags.Tracking.ActiveConfig.storeSeparateContainer:
249 inputTrack = TrackContainer
250 if extension
in [
'Acts',
'ActsConversion',
'ActsLargeRadius',
'ActsLowPt']
and not flags.Tracking.ActiveConfig.doActsAmbiguityResolution:
251 inputTrack = SiSPSeededTracks
255 TrackContainer=inputTrack,
256 ClusterSplitProbContainer=ClusterSplitProbContainer))
260 ClusterSplitProbContainer = (
261 "ITkAmbiguityProcessorSplitProb" + extension)
264 if extension
not in [
'Acts',
'ActsConversion',
'ActsLargeRadius',
'ActsLowPt']:
265 InputCombinedITkTracks += [TrackContainer]
267 InputCombinedActsTracks += [TrackContainer]
271 if extension
not in [
'Acts',
'ActsConversion',
'ActsLargeRadius',
'ActsLowPt']:
272 InputExtendedITkTracks += [TrackContainer]
274 return result, ClusterSplitProbContainer
278 InputCombinedITkTracks: list[str] =
None) -> ComponentAccumulator:
280 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
283 if len(InputCombinedITkTracks) == 0:
286 mergeTrackContainer =
"ActsCombinedTracks"
288 from ActsConfig.ActsTrackFindingConfig
import ActsTrackToTrackParticleCnvAlgCfg
290 ACTSTracksLocation=InputCombinedITkTracks,
291 TrackParticlesOutKey=f
'{mergeTrackContainer}ParticlesAlt'))
292 if flags.Tracking.doTruth :
293 from ActsConfig.ActsTruthConfig
import ActsTrackParticleTruthDecorationAlgCfg
294 track_to_truth_maps=[]
295 for track_container
in InputCombinedITkTracks :
296 track_to_truth_maps += [f
'{track_container}ToTruthParticleAssociation']
302 name=f
'{mergeTrackContainer}ParticleTruthDecorationAlg',
303 TrackToTruthAssociationMaps = track_to_truth_maps,
304 TrackParticleContainerName = f
'{mergeTrackContainer}ParticlesAlt',
305 OutputLevel=WARNING
if len(InputCombinedITkTracks)==1
else INFO,
306 ComputeTrackRecoEfficiency=
False if len(InputCombinedITkTracks)==1
else True
311 InputCombinedITkTracks: list[str] =
None,
312 StatTrackCollections: list[str] =
None,
313 StatTrackTruthCollections: list[str] =
None):
315 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
316 assert StatTrackCollections
is not None and isinstance(StatTrackCollections, list)
317 assert StatTrackTruthCollections
is not None and isinstance(StatTrackTruthCollections, list)
320 if hasattr(flags.TrackOverlay,
"ActiveConfig"):
321 doTrackOverlay = getattr(flags.TrackOverlay.ActiveConfig,
"doTrackOverlay",
None)
323 doTrackOverlay = flags.Overlay.doTrackOverlay
325 TrackContainer =
"CombinedITkTracks"
328 InputCombinedITkTracks += [flags.Overlay.BkgPrefix + TrackContainer]
331 from TrkConfig.TrkTrackCollectionMergerConfig
import (
332 ITkTrackCollectionMergerAlgCfg)
335 InputCombinedTracks=InputCombinedITkTracks,
336 OutputCombinedTracks=TrackContainer,
338 "" if flags.Tracking.doITkFastTracking
else
339 f
"PRDtoTrackMapMerge_{TrackContainer}")))
341 if flags.Tracking.doTruth:
342 from InDetConfig.ITkTrackTruthConfig
import ITkTrackTruthCfg
345 Tracks=TrackContainer,
346 DetailedTruth=f
"{TrackContainer}DetailedTruth",
347 TracksTruth=f
"{TrackContainer}TruthCollection"))
349 StatTrackCollections += [TrackContainer]
350 StatTrackTruthCollections += [f
"{TrackContainer}TruthCollection"]
352 if flags.Tracking.doSlimming:
353 from TrkConfig.TrkTrackSlimmerConfig
import TrackSlimmerCfg
356 TrackLocation=[TrackContainer]))
361 from xAODTrackingCnv.xAODTrackingCnvConfig
import ITkTrackParticleCnvAlgCfg
364 ClusterSplitProbabilityName=(
365 "" if flags.Tracking.doITkFastTracking
else
368 "" if flags.Tracking.doITkFastTracking
else
369 f
"PRDtoTrackMapMerge_{TrackContainer}"),
370 isActsAmbi =
'ActsValidateResolvedTracks' in splitProbName
or \
371 'ActsValidateAmbiguityResolution' in splitProbName
or \
372 'ActsConversion' in splitProbName
or \
373 'ActsLargeRadius' in splitProbName
or \
374 'ActsLowPt' in splitProbName
or \
375 (
'Acts' in splitProbName
and 'Validate' not in splitProbName) ))
385 listOfExtensionsRequesting = [
386 e
for e
in _extensions_list
387 if (e ==
'' or flags.Tracking.__getattr__(f
"ITk{e}Pass").storeTrackSeeds) ]
389 for extension
in listOfExtensionsRequesting:
390 TrackContainer =
"SiSPSeedSegments"+extension
392 if flags.Tracking.doTruth:
393 from InDetConfig.ITkTrackTruthConfig
import ITkTrackTruthCfg
396 Tracks=TrackContainer,
397 DetailedTruth=f
"{TrackContainer}DetailedTruth",
398 TracksTruth=f
"{TrackContainer}TruthCollection"))
400 from xAODTrackingCnv.xAODTrackingCnvConfig
import (
401 ITkTrackParticleCnvAlgCfg)
404 name=f
"{TrackContainer}CnvAlg",
405 TrackContainerName=TrackContainer,
406 xAODTrackParticlesFromTracksContainerName=(
407 f
"{TrackContainer}TrackParticles")))
415 primaryPassExtension = flags.Tracking.__getattr__(f
"{flags.Tracking.ITkPrimaryPassConfig.value}Pass").extension
419 listOfExtensionsRequesting = [
420 e
for e
in _extensions_list
421 if (e==
'' or flags.Tracking.__getattr__(f
"ITk{e}Pass").storeSiSPSeededTracks) ]
423 for extension
in listOfExtensionsRequesting:
424 AssociationMapNameKey=
"PRDtoTrackMapMerge_CombinedITkTracks"
425 if 'Acts' in extension:
426 AssociationMapNameKey=
"PRDtoTrackMapMerge_CombinedITkTracks"
427 elif not (extension == primaryPassExtension):
428 AssociationMapNameKey = f
"ITkPRDtoTrackMap{extension}"
430 from xAODTrackingCnv.xAODTrackingCnvConfig
import (
431 ITkTrackParticleCnvAlgCfg)
434 name = f
"SiSPSeededTracks{extension}CnvAlg",
435 TrackContainerName = f
"SiSPSeeded{extension}Tracks",
436 xAODTrackParticlesFromTracksContainerName=(
437 f
"SiSPSeededTracks{extension}TrackParticles"),
438 AssociationMapName=AssociationMapNameKey))
444 StatTrackTruthCollections=None):
447 from InDetConfig.InDetRecStatisticsConfig
import (
448 ITkRecStatisticsAlgCfg)
451 TrackCollectionKeys=StatTrackCollections,
452 TrackTruthCollectionKeys=(
453 StatTrackTruthCollections
if flags.Tracking.doTruth
else [])))
455 if flags.Tracking.doTruth:
456 from InDetConfig.InDetTrackClusterAssValidationConfig
import (
457 ITkTrackClusterAssValidationCfg)
460 TracksLocation=StatTrackCollections))
468 if flags.Tracking.doTIDE_AmbiTrackMonitoring:
469 from InDetConfig.InDetPrepRawDataToxAODConfig
import (
470 ITkPixelPrepDataToxAOD_ExtraTruthCfg
as PixelPrepDataToxAODCfg,
471 ITkStripPrepDataToxAOD_ExtraTruthCfg
as StripPrepDataToxAODCfg)
473 from InDetConfig.InDetPrepRawDataToxAODConfig
import (
474 ITkPixelPrepDataToxAODCfg
as PixelPrepDataToxAODCfg,
475 ITkStripPrepDataToxAODCfg
as StripPrepDataToxAODCfg)
477 result.merge(PixelPrepDataToxAODCfg(
479 ClusterSplitProbabilityName=(
481 result.merge(StripPrepDataToxAODCfg(flags))
483 from DerivationFrameworkInDet.InDetToolsConfig
import (
484 ITkTSOS_CommonKernelCfg)
487 if flags.Tracking.doStoreSiSPSeededTracks:
488 listOfExtensionsRequesting = [
489 e
for e
in _extensions_list
if (e==
'')
or
490 flags.Tracking.__getattr__(f
"ITk{e}Pass").storeSiSPSeededTracks ]
491 from DerivationFrameworkInDet.InDetToolsConfig
import (
492 ITkSiSPTSOS_CommonKernelCfg)
496 listOfExtensionsRequesting = [
497 e
for e
in _extensions_list
if (e==
'')
or
498 (flags.Tracking.__getattr__(f
"ITk{e}Pass").storeSiSPSeededTracks
and
499 flags.Tracking.__getattr__(f
"ITk{e}Pass").storeSeparateContainer) ]
500 from InDetPhysValMonitoring.InDetPhysValDecorationConfig
import (
501 ITkPhysHitDecoratorAlgCfg)
502 for extension
in listOfExtensionsRequesting:
505 name=f
"ITkPhysHit{extension}DecoratorAlg",
506 TrackParticleContainerName=f
"InDet{extension}TrackParticles"))
517 """Configures complete ITk tracking """
520 if flags.Input.Format
is Format.BS:
522 raise RuntimeError(
"ByteStream inputs not supported")
531 InputCombinedITkTracks = []
533 InputCombinedActsTracks = []
535 InputExtendedITkTracks = []
537 ClusterSplitProbContainer =
""
539 StatTrackCollections = []
540 StatTrackTruthCollections = []
542 previousActsExtension =
None
544 from InDetConfig.SiliconPreProcessing
import ITkRecPreProcessingSiliconCfg
546 for current_flags
in flags_set:
549 extension = current_flags.Tracking.ActiveConfig.extension
550 _extensions_list.append(extension)
559 previousActsExtension=previousActsExtension))
570 previousActsExtension,
571 InputCombinedITkTracks=InputCombinedITkTracks,
572 InputCombinedActsTracks=InputCombinedActsTracks,
573 InputExtendedITkTracks=InputExtendedITkTracks,
574 StatTrackCollections=StatTrackCollections,
575 StatTrackTruthCollections=StatTrackTruthCollections,
576 ClusterSplitProbContainer=ClusterSplitProbContainer)
580 if 'Acts' in extension:
581 previousActsExtension = extension
587 InputCombinedITkTracks=InputCombinedITkTracks,
588 StatTrackCollections=StatTrackCollections,
589 StatTrackTruthCollections=StatTrackTruthCollections))
593 InputCombinedITkTracks=InputCombinedActsTracks))
597 if flags.Tracking.doStoreTrackSeeds:
600 if flags.Tracking.doStoreSiSPSeededTracks:
604 if flags.Tracking.doVertexFinding:
606 from InDetConfig.InDetPriVxFinderConfig
import primaryVertexFindingCfg
613 if InputCombinedActsTracks:
615 name=
"ActsPriVxFinderAlg",
616 TracksName=
"ActsCombinedTracksParticlesAlt",
617 vxCandidatesOutputName=
"ActsPrimaryVertices"))
620 if flags.Tracking.doStats:
623 StatTrackCollections=StatTrackCollections,
624 StatTrackTruthCollections=StatTrackTruthCollections))
626 if flags.Tracking.writeExtendedSi_PRDInfo:
631 from InDetConfig.ITkTrackOutputConfig
import ITkTrackRecoOutputCfg
633 result.printConfig(withDetails =
False, summariseProps =
False)
637 if __name__ ==
"__main__":
638 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
642 flags.Detector.EnableCalo =
False
644 from AthenaConfiguration.TestDefaults
import defaultTestFiles
645 flags.Input.Files = defaultTestFiles.RDO_RUN4
648 if "--doFTF" in sys.argv:
649 flags.Tracking.useITkFTF =
True
650 flags.Tracking.doITkFastTracking =
True
654 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
657 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
661 from xAODTruthCnv.xAODTruthCnvConfig
import GEN_AOD2xAODCfg
667 top_acc.foreach_component(
"AthEventSeq/*").OutputLevel = DEBUG
668 top_acc.printConfig(withDetails=
True, summariseProps=
True)
669 top_acc.store(
open(
"ITkTrackReco.pkl",
"wb"))
671 if "--norun" not in sys.argv: