16 if _flags_set
and not resetCache:
22 from TrkConfig.TrkConfigFlags
import TrackingComponent
23 validation_configurations = {
24 TrackingComponent.ActsValidateF100 :
"ActsValidateF100",
25 TrackingComponent.ActsValidateF150 :
"ActsValidateF150",
29 if TrackingComponent.AthenaChain
in flags.Tracking.recoChain:
30 flags_set += [flags.cloneAndReplace(
31 "Tracking.ActiveConfig",
32 f
"Tracking.{flags.Tracking.ITkPrimaryPassConfig.value}Pass")]
35 if TrackingComponent.ActsLegacyChain
in flags.Tracking.recoChain:
36 flags_set += [flags.cloneAndReplace(
37 "Tracking.ActiveConfig",
38 "Tracking.ITkActsLegacyPass")]
41 if TrackingComponent.ActsChain
in flags.Tracking.recoChain:
42 flags_set += [flags.cloneAndReplace(
43 "Tracking.ActiveConfig",
44 "Tracking.ITkActsPass")]
47 if TrackingComponent.ActsHeavyIon
in flags.Tracking.recoChain:
48 flags_set += [flags.cloneAndReplace(
49 "Tracking.ActiveConfig",
50 "Tracking.ITkActsHeavyIonPass")]
53 if TrackingComponent.GNNChain
in flags.Tracking.recoChain:
54 flags_set += [flags.cloneAndReplace(
55 "Tracking.ActiveConfig",
56 "Tracking.ITkGNNPass")]
59 if flags.Detector.EnableCalo
and flags.Acts.doITkConversion:
60 flags_set += [flags.cloneAndReplace(
61 "Tracking.ActiveConfig",
62 "Tracking.ITkActsConversionPass")]
65 if TrackingComponent.ActsChain
in flags.Tracking.recoChain
and flags.Acts.doLargeRadius:
66 flags_set += [flags.cloneAndReplace(
67 "Tracking.ActiveConfig",
68 "Tracking.ITkActsLargeRadiusPass")]
71 if flags.Acts.doLowPt:
72 flags_set += [flags.cloneAndReplace(
73 "Tracking.ActiveConfig",
74 "Tracking.ITkActsLowPtPass")]
77 for [configuration, key]
in validation_configurations.items():
78 if configuration
in flags.Tracking.recoChain:
79 toAdd = eval(f
"flags.cloneAndReplace('Tracking.ActiveConfig', 'Tracking.ITk{key}Pass')")
83 if flags.Detector.EnableCalo
and flags.Tracking.doITkConversion:
84 flagsConv = flags.cloneAndReplace(
"Tracking.ActiveConfig",
85 "Tracking.ITkConversionPass")
86 flags_set += [flagsConv]
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.Tracking.doLowPt:
109 flagsLowPt = flags.cloneAndReplace(
"Tracking.ActiveConfig",
110 "Tracking.ITkLowPtPass")
111 flags_set += [flagsLowPt]
113 _flags_set = flags_set
126 TrackContainer: str =
"",
127 ClusterSplitProbContainer: str =
"") -> ComponentAccumulator:
128 result = ComponentAccumulator()
129 extension = flags.Tracking.ActiveConfig.extension
130 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
132 AssociationMapName = (
"PRDtoTrackMapMerge_Resolved" +
133 extension +
"Tracks")
134 if extension !=
"Conversion":
138 InputTracks = [flags.Overlay.SigPrefix+TrackContainer,
139 flags.Overlay.BkgPrefix+TrackContainer]
140 MergerOutputTracks = TrackContainer
142 from TrkConfig.TrkTrackCollectionMergerConfig
import ITkTrackCollectionMergerAlgCfg
143 result.merge(ITkTrackCollectionMergerAlgCfg(
145 name=
"ITkTrackCollectionMergerAlgCfg"+extension,
146 InputCombinedTracks=InputTracks,
147 OutputCombinedTracks=MergerOutputTracks,
148 AssociationMapName=AssociationMapName))
151 if flags.Tracking.doTruth
and extension
not in _actsExtensions:
152 from InDetConfig.ITkTrackTruthConfig
import ITkTrackTruthCfg
153 result.merge(ITkTrackTruthCfg(
155 Tracks=TrackContainer,
156 DetailedTruth=TrackContainer+
"DetailedTruth",
157 TracksTruth=TrackContainer+
"TruthCollection"))
161 if extension
not in _actsExtensions:
163 from xAODTrackingCnv.xAODTrackingCnvConfig
import ITkTrackParticleCnvAlgCfg
164 result.merge(ITkTrackParticleCnvAlgCfg(
166 name=extension +
"TrackParticleCnvAlg",
167 TrackContainerName=TrackContainer,
168 xAODTrackParticlesFromTracksContainerName=(
169 "InDet" + extension +
"TrackParticles"),
170 ClusterSplitProbabilityName=(
171 "" if flags.Tracking.doITkFastTracking
else
172 ClusterSplitProbContainer),
173 AssociationMapName=
""))
176 from ActsConfig.ActsEventCnvConfig
import ActsTrackToTrackParticleCnvAlgCfg
178 prefix = flags.Tracking.ActiveConfig.extension
179 from InDetConfig.ITkActsHelpers
import separateTrackParticleContainerName
180 TrackParticleContainer = separateTrackParticleContainerName(flags)
181 result.merge(ActsTrackToTrackParticleCnvAlgCfg(flags, f
"{prefix}ResolvedTrackToAltTrackParticleCnvAlg",
182 ACTSTracksLocation=[TrackContainer],
183 TrackParticlesOutKey=TrackParticleContainer))
185 if flags.Tracking.doTruth :
186 from ActsConfig.ActsTruthConfig
import ActsTrackParticleTruthDecorationAlgCfg
187 result.merge(ActsTrackParticleTruthDecorationAlgCfg(flags,
188 name=f
'{TrackContainer}ParticleTruthDecorationAlg',
189 TrackToTruthAssociationMaps = [f
'{TrackContainer}ToTruthParticleAssociation'],
190 TrackParticleContainerName = TrackParticleContainer
197 previousActsExtension: str =
None,
198 InputCombinedITkTracks: list[str] =
None,
199 InputCombinedActsTracks: list[str] =
None,
200 InputExtendedITkTracks: list[str] =
None,
201 StatTrackCollections: list[str] =
None,
202 StatTrackTruthCollections: list[str] =
None,
203 ClusterSplitProbContainer: str =
""):
206 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
207 assert InputCombinedActsTracks
is not None and isinstance(InputCombinedActsTracks, list)
208 assert InputExtendedITkTracks
is not None and isinstance(InputExtendedITkTracks, list)
209 assert StatTrackCollections
is not None and isinstance(StatTrackCollections, list)
210 assert StatTrackTruthCollections
is not None and isinstance(StatTrackTruthCollections ,list)
213 extension = flags.Tracking.ActiveConfig.extension
215 result = ComponentAccumulator()
218 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
219 TrackContainer =
"Resolved" + extension +
"Tracks"
221 if extension
in _actsExtensions:
222 TrackContainer = extension +
"ResolvedTracks" if flags.Acts.doAmbiguityResolution
else extension +
"Tracks"
223 if doTrackOverlay
and extension ==
"Conversion":
224 TrackContainer = flags.Overlay.SigPrefix + TrackContainer
227 SiSPSeededTracks =
"SiSPSeeded" + extension +
"Tracks"
229 if extension
in _actsExtensions:
230 SiSPSeededTracks = extension +
"Tracks"
233 from InDetConfig.ITkTrackingSiPatternConfig
import ITkTrackingSiPatternCfg
234 result.merge(ITkTrackingSiPatternCfg(
236 previousActsExtension=previousActsExtension,
237 InputCollections=InputExtendedITkTracks,
238 ResolvedTrackCollectionKey=TrackContainer,
239 SiSPSeededTrackCollectionKey=SiSPSeededTracks,
240 ClusterSplitProbContainer=ClusterSplitProbContainer))
241 StatTrackCollections += [SiSPSeededTracks, TrackContainer]
242 StatTrackTruthCollections += [SiSPSeededTracks+
"TruthCollection",
243 TrackContainer+
"TruthCollection"]
245 if doTrackOverlay
and extension ==
"Conversion":
247 TrackContainer =
"Resolved" + extension +
"Tracks"
252 from TrkConfig.TrkTrackCollectionMergerConfig
import ITkTrackCollectionMergerAlgCfg
253 result.merge(ITkTrackCollectionMergerAlgCfg(
255 name=
"ITkTrackCollectionMergerAlgCfgConversion",
256 InputCombinedTracks=[flags.Overlay.SigPrefix + TrackContainer,
257 flags.Overlay.BkgPrefix + TrackContainer],
258 OutputCombinedTracks=TrackContainer,
259 AssociationMapName=
"PRDtoTrackMapMerge_" + TrackContainer))
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)
301 acc = ComponentAccumulator()
302 if len(InputCombinedITkTracks) == 0:
306 from ActsConfig.ActsEventCnvConfig
import ActsTrackToTrackParticleCnvAlgCfg
307 acc.merge(ActsTrackToTrackParticleCnvAlgCfg(flags,
"ActsCombinedTrackToTrackParticleCnvAlg",
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']
318 acc.merge(ActsTrackParticleTruthDecorationAlgCfg(
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)
338 result = ComponentAccumulator()
339 if len(InputCombinedITkTracks) == 0:
342 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
343 TrackContainer =
"CombinedITkTracks"
346 InputCombinedITkTracks += [flags.Overlay.BkgPrefix + TrackContainer]
348 from TrkConfig.TrkConfigFlags
import TrackingComponent
349 doGNNWithoutAmbiReso = (TrackingComponent.GNNChain
in flags.Tracking.recoChain
and (
not flags.Tracking.GNN.doAmbiResolution))
350 skipClusterMerge = doGNNWithoutAmbiReso
or flags.Tracking.doITkFastTracking
352 from TrkConfig.TrkTrackCollectionMergerConfig
import (
353 ITkTrackCollectionMergerAlgCfg)
354 result.merge(ITkTrackCollectionMergerAlgCfg(
356 InputCombinedTracks=InputCombinedITkTracks,
357 OutputCombinedTracks=TrackContainer,
359 "" if skipClusterMerge
else
360 f
"PRDtoTrackMapMerge_{TrackContainer}")))
362 if flags.Tracking.doTruth:
363 from InDetConfig.ITkTrackTruthConfig
import ITkTrackTruthCfg
364 result.merge(ITkTrackTruthCfg(
366 Tracks=TrackContainer,
367 DetailedTruth=f
"{TrackContainer}DetailedTruth",
368 TracksTruth=f
"{TrackContainer}TruthCollection"))
370 StatTrackCollections += [TrackContainer]
371 StatTrackTruthCollections += [f
"{TrackContainer}TruthCollection"]
373 if flags.Tracking.doSlimming:
374 from TrkConfig.TrkTrackSlimmerConfig
import TrackSlimmerCfg
375 result.merge(TrackSlimmerCfg(
377 TrackLocation=[TrackContainer]))
382 if flags.Tracking.perigeeExpression
in [
383 PerigeeExpression.BeamLine, PerigeeExpression.Origin]:
384 from xAODTrackingCnv.xAODTrackingCnvConfig
import ITkTrackParticleCnvAlgCfg
385 result.merge(ITkTrackParticleCnvAlgCfg(
387 ClusterSplitProbabilityName=(
388 "" if skipClusterMerge
else
391 "" if skipClusterMerge
else
392 f
"PRDtoTrackMapMerge_{TrackContainer}"),
393 isActsAmbi =
'Acts' in splitProbName
and 'Validate' not in splitProbName))
399 StatTrackTruthCollections=None):
400 result = ComponentAccumulator()
402 from InDetConfig.InDetRecStatisticsConfig
import (
403 ITkRecStatisticsAlgCfg)
404 result.merge(ITkRecStatisticsAlgCfg(
406 TrackCollectionKeys=StatTrackCollections,
407 TrackTruthCollectionKeys=(
408 StatTrackTruthCollections
if flags.Tracking.doTruth
else [])))
410 if flags.Tracking.doTruth:
411 from InDetConfig.InDetTrackClusterAssValidationConfig
import (
412 ITkTrackClusterAssValidationCfg)
413 result.merge(ITkTrackClusterAssValidationCfg(
415 TracksLocation=StatTrackCollections))
430 result = ComponentAccumulator()
432 if flags.Tracking.doTIDE_AmbiTrackMonitoring:
433 from InDetConfig.InDetPrepRawDataToxAODConfig
import (
434 ITkPixelPrepDataToxAOD_ExtraTruthCfg
as PixelPrepDataToxAODCfg,
435 ITkStripPrepDataToxAOD_ExtraTruthCfg
as StripPrepDataToxAODCfg)
437 from InDetConfig.InDetPrepRawDataToxAODConfig
import (
438 ITkPixelPrepDataToxAODCfg
as PixelPrepDataToxAODCfg,
439 ITkStripPrepDataToxAODCfg
as StripPrepDataToxAODCfg)
441 result.merge(PixelPrepDataToxAODCfg(
443 ClusterSplitProbabilityName=(
444 "" if flags.Tracking.doITkFastTracking
else
446 result.merge(StripPrepDataToxAODCfg(flags))
448 from DerivationFrameworkInDet.InDetToolsConfig
import (
449 ITkTSOS_CommonKernelCfg)
454 listOfExtensionsRequesting = [
455 e
for e
in _extensions_list
if (e ==
'')
456 or (flags.Tracking[f
"ITk{e}Pass"].storeTrackSeeds)
457 or (flags.Tracking[f
"ITk{e}Pass"].storeSiSPSeededTracks)
458 or (flags.Tracking[f
"ITk{e}Pass"].storeSeparateContainer) ]
460 result.merge(ITkTSOS_CommonKernelCfg(
461 flags, listOfExtensions = listOfExtensionsRequesting))
463 if flags.Tracking.doStoreTrackSeeds:
464 from DerivationFrameworkInDet.InDetToolsConfig
import (
465 ITkSiSPSeedsTSOS_CommonKernelCfg)
467 listOfExtensionsRequesting = [
468 e
for e
in _extensions_list
if (e ==
'')
or
469 flags.Tracking[f
"ITk{e}Pass"].storeTrackSeeds ]
470 result.merge(ITkSiSPSeedsTSOS_CommonKernelCfg(
471 flags, listOfExtensions = listOfExtensionsRequesting))
473 if flags.Tracking.doStoreSiSPSeededTracks:
474 listOfExtensionsRequesting = [
475 e
for e
in _extensions_list
if (e==
'')
or
476 flags.Tracking[f
"ITk{e}Pass"].storeSiSPSeededTracks ]
477 from DerivationFrameworkInDet.InDetToolsConfig
import (
478 ITkSiSPTSOS_CommonKernelCfg)
479 result.merge(ITkSiSPTSOS_CommonKernelCfg(flags, listOfExtensions = listOfExtensionsRequesting))
482 listOfExtensionsRequesting = [
483 e
for e
in _extensions_list
if (e==
'')
or
484 (flags.Tracking[f
"ITk{e}Pass"].storeSiSPSeededTracks
and
485 flags.Tracking[f
"ITk{e}Pass"].storeSeparateContainer) ]
486 from InDetPhysValMonitoring.InDetPhysValDecorationConfig
import (
487 ITkPhysHitDecoratorAlgCfg)
488 for extension
in listOfExtensionsRequesting:
489 result.merge(ITkPhysHitDecoratorAlgCfg(
491 name=f
"ITkPhysHit{extension}DecoratorAlg",
492 TrackParticleContainerName=f
"InDet{extension}TrackParticles"))
503 """Configures complete ITk tracking """
505 from InDetConfig.ITkActsHelpers
import primaryPassUsesActs
506 if primaryPassUsesActs(flags):
507 from InDetConfig.ITkActsTrackRecoConfig
import ITkActsTrackRecoCfg
508 return ITkActsTrackRecoCfg(flags)
510 result = ComponentAccumulator()
512 if flags.Input.Format
is Format.BS:
513 if flags.Detector.EnableITkPixel:
514 from ITkPixelByteStreamCnv.ITkPixelByteStreamCnvConfig
import ITkPixelDecodingAlgCfg
515 result.merge( ITkPixelDecodingAlgCfg(flags) )
517 if flags.Detector.EnableITkStrip:
518 from ITkStripsByteStreamCnv.ITkStripByteStreamCnvConfig
import ITkStripRawDataProviderCfg
519 result.merge(ITkStripRawDataProviderCfg(flags))
530 InputCombinedITkTracks = []
532 InputCombinedActsTracks = []
534 InputExtendedITkTracks = []
536 ClusterSplitProbContainer =
""
538 StatTrackCollections = []
539 StatTrackTruthCollections = []
541 previousActsExtension =
None
543 from InDetConfig.SiliconPreProcessing
import ITkRecPreProcessingSiliconCfg
545 for current_flags
in flags_set:
546 printActiveConfig(current_flags)
549 extension = current_flags.Tracking.ActiveConfig.extension
550 if extension
not in _actsExtensions:
551 _extensions_list.append(extension)
554 _outputExtensions.append(extension)
562 result.merge(ITkRecPreProcessingSiliconCfg(current_flags,
563 previousActsExtension=previousActsExtension))
574 previousActsExtension,
575 InputCombinedITkTracks=InputCombinedITkTracks,
576 InputCombinedActsTracks=InputCombinedActsTracks,
577 InputExtendedITkTracks=InputExtendedITkTracks,
578 StatTrackCollections=StatTrackCollections,
579 StatTrackTruthCollections=StatTrackTruthCollections,
580 ClusterSplitProbContainer=ClusterSplitProbContainer)
584 if 'Acts' in extension:
585 previousActsExtension = extension
589 if InputCombinedITkTracks:
593 InputCombinedITkTracks=InputCombinedITkTracks,
594 StatTrackCollections=StatTrackCollections,
595 StatTrackTruthCollections=StatTrackTruthCollections))
601 if InputCombinedActsTracks:
607 ActsTrackContainerName =
"InDetTrackParticles" if not InputCombinedITkTracks
else "InDetActsTrackParticles"
608 ActsPrimaryVertices =
"PrimaryVertices" if not InputCombinedITkTracks
else "ActsPrimaryVertices"
611 InputCombinedITkTracks=InputCombinedActsTracks,
612 ActsTrackContainerName=ActsTrackContainerName))
615 if flags.Tracking.doVertexFinding:
617 from InDetConfig.InDetPriVxFinderConfig
import primaryVertexFindingCfg
621 if InputCombinedITkTracks:
622 result.merge(primaryVertexFindingCfg(flags))
628 if InputCombinedActsTracks:
629 result.merge(primaryVertexFindingCfg(flags,
630 name=
"ActsPriVxFinderAlg",
631 TracksName=ActsTrackContainerName,
632 vxCandidatesOutputName=ActsPrimaryVertices))
636 print(
"-------- POST PROCESSING --------")
637 for current_flags
in flags_set:
638 extension = current_flags.Tracking.ActiveConfig.extension
639 print(f
"- Running post-processing for extension: {extension}")
652 if current_flags.Tracking.ActiveConfig.doAthenaTrack:
653 if current_flags.Tracking.doStoreTrackSeeds:
654 from InDetConfig.ITkPersistificationConfig
import ITkTrackSeedsFinalCfg
655 result.merge(ITkTrackSeedsFinalCfg(current_flags))
663 if current_flags.Tracking.ActiveConfig.doAthenaTrack
or current_flags.Tracking.ActiveConfig.doActsToAthenaTrack:
664 if current_flags.Tracking.doStoreSiSPSeededTracks:
665 from InDetConfig.ITkPersistificationConfig
import ITkSiSPSeededTracksFinalCfg
666 result.merge(ITkSiSPSeededTracksFinalCfg(current_flags))
668 if flags.Tracking.doStats:
672 StatTrackCollections=StatTrackCollections,
673 StatTrackTruthCollections=StatTrackTruthCollections))
676 if flags.Tracking.GNN.ActsPipeline.saveEdgeScore:
677 from ActsConfig.ActsObjectDecorationConfig
import ActsGNNScoreDecoratorAlgCfg
678 result.merge(ActsGNNScoreDecoratorAlgCfg(flags,
679 name=
"ActsGNNScoreDecoratorAlg"))
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)