21 from TrkConfig.TrkConfigFlags
import TrackingComponent
22 validation_configurations = {
23 TrackingComponent.ActsValidateClusters :
"ActsValidateClusters",
24 TrackingComponent.ActsValidateLargeRadiusStandalone:
"ActsValidateLargeRadiusStandalone",
25 TrackingComponent.ActsValidateTracks :
"ActsValidateTracks",
26 TrackingComponent.ActsValidateAmbiguityResolution :
"ActsValidateAmbiguityResolution",
27 TrackingComponent.ActsValidateF100 :
"ActsValidateF100",
28 TrackingComponent.ActsValidateF150 :
"ActsValidateF150",
32 if TrackingComponent.AthenaChain
in flags.Tracking.recoChain:
33 flags_set += [flags.cloneAndReplace(
34 "Tracking.ActiveConfig",
35 f
"Tracking.{flags.Tracking.ITkPrimaryPassConfig.value}Pass")]
38 if TrackingComponent.ActsLegacyChain
in flags.Tracking.recoChain:
39 flags_set += [flags.cloneAndReplace(
40 "Tracking.ActiveConfig",
41 "Tracking.ITkActsLegacyPass")]
44 if TrackingComponent.ActsChain
in flags.Tracking.recoChain:
45 flags_set += [flags.cloneAndReplace(
46 "Tracking.ActiveConfig",
47 "Tracking.ITkActsPass")]
50 if TrackingComponent.ActsHeavyIon
in flags.Tracking.recoChain:
51 flags_set += [flags.cloneAndReplace(
52 "Tracking.ActiveConfig",
53 "Tracking.ITkActsHeavyIonPass")]
56 if TrackingComponent.GNNChain
in flags.Tracking.recoChain:
57 flags_set += [flags.cloneAndReplace(
58 "Tracking.ActiveConfig",
59 "Tracking.ITkGNNPass")]
62 if flags.Detector.EnableCalo
and flags.Acts.doITkConversion:
63 flags_set += [flags.cloneAndReplace(
64 "Tracking.ActiveConfig",
65 "Tracking.ITkActsConversionPass")]
68 if flags.Acts.doLargeRadius:
69 flags_set += [flags.cloneAndReplace(
70 "Tracking.ActiveConfig",
71 "Tracking.ITkActsLargeRadiusPass")]
74 if flags.Acts.doLowPt:
75 flags_set += [flags.cloneAndReplace(
76 "Tracking.ActiveConfig",
77 "Tracking.ITkActsLowPtPass")]
80 for [configuration, key]
in validation_configurations.items():
81 if configuration
in flags.Tracking.recoChain:
82 toAdd = eval(f
"flags.cloneAndReplace('Tracking.ActiveConfig', 'Tracking.ITk{key}Pass')")
86 if flags.Detector.EnableCalo
and flags.Tracking.doITkConversion:
87 flagsConv = flags.cloneAndReplace(
"Tracking.ActiveConfig",
88 "Tracking.ITkConversionPass")
89 flags_set += [flagsConv]
92 if flags.Tracking.doLargeD0:
93 if flags.Tracking.useITkFTF:
94 flagsLRT = flags.cloneAndReplace(
"Tracking.ActiveConfig",
95 "Tracking.ITkFTFLargeD0Pass")
96 elif flags.Tracking.doITkFastTracking:
97 flagsLRT = flags.cloneAndReplace(
"Tracking.ActiveConfig",
98 "Tracking.ITkLargeD0FastPass")
100 flagsLRT = flags.cloneAndReplace(
"Tracking.ActiveConfig",
101 "Tracking.ITkLargeD0Pass")
102 flags_set += [flagsLRT]
105 if TrackingComponent.FPGAChain
in flags.Tracking.recoChain:
106 flags_set += [flags.cloneAndReplace(
107 "Tracking.ActiveConfig",
108 "Tracking.ITkFPGAPass")]
111 if flags.Tracking.doLowPt:
112 flagsLowPt = flags.cloneAndReplace(
"Tracking.ActiveConfig",
113 "Tracking.ITkLowPtPass")
114 flags_set += [flagsLowPt]
116 _flags_set = flags_set
129 TrackContainer: str =
"",
130 ClusterSplitProbContainer: str =
"") -> ComponentAccumulator:
131 result = ComponentAccumulator()
132 extension = flags.Tracking.ActiveConfig.extension
133 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
136 InputTracks = [flags.Overlay.SigPrefix+TrackContainer,
137 flags.Overlay.BkgPrefix+TrackContainer]
138 AssociationMapName = (
"PRDtoTrackMapMerge_Resolved" +
139 extension +
"Tracks")
140 MergerOutputTracks = TrackContainer
142 from TrkConfig.TrkTrackCollectionMergerConfig
import TrackCollectionMergerAlgCfg
143 result.merge(TrackCollectionMergerAlgCfg(
145 name=
"TrackCollectionMergerAlgCfg"+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.ActsTrackFindingConfig
import ActsTrackToTrackParticleCnvAlgCfg
178 prefix = flags.Tracking.ActiveConfig.extension
179 result.merge(ActsTrackToTrackParticleCnvAlgCfg(flags, f
"{prefix}ResolvedTrackToAltTrackParticleCnvAlg",
180 ACTSTracksLocation=[TrackContainer],
181 TrackParticlesOutKey=f
'InDet{prefix}TrackParticles'))
183 if flags.Tracking.doTruth :
184 from ActsConfig.ActsTruthConfig
import ActsTrackParticleTruthDecorationAlgCfg
185 result.merge(ActsTrackParticleTruthDecorationAlgCfg(flags,
186 name=f
'{TrackContainer}ParticleTruthDecorationAlg',
187 TrackToTruthAssociationMaps = [f
'{TrackContainer}ToTruthParticleAssociation'],
188 TrackParticleContainerName = f
'InDet{prefix}TrackParticles'
195 previousActsExtension: str =
None,
196 InputCombinedITkTracks: list[str] =
None,
197 InputCombinedActsTracks: list[str] =
None,
198 InputExtendedITkTracks: list[str] =
None,
199 StatTrackCollections: list[str] =
None,
200 StatTrackTruthCollections: list[str] =
None,
201 ClusterSplitProbContainer: str =
""):
204 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
205 assert InputCombinedActsTracks
is not None and isinstance(InputCombinedActsTracks, list)
206 assert InputExtendedITkTracks
is not None and isinstance(InputExtendedITkTracks, list)
207 assert StatTrackCollections
is not None and isinstance(StatTrackCollections, list)
208 assert StatTrackTruthCollections
is not None and isinstance(StatTrackTruthCollections ,list)
211 extension = flags.Tracking.ActiveConfig.extension
213 result = ComponentAccumulator()
216 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
217 TrackContainer =
"Resolved" + extension +
"Tracks"
219 if extension
in _actsExtensions:
220 TrackContainer = extension +
"ResolvedTracks" if flags.Acts.doAmbiguityResolution
else extension +
"Tracks"
221 if doTrackOverlay
and extension ==
"Conversion":
222 TrackContainer = flags.Overlay.SigPrefix + TrackContainer
225 SiSPSeededTracks =
"SiSPSeeded" + extension +
"Tracks"
227 if extension
in _actsExtensions:
228 SiSPSeededTracks = extension +
"Tracks"
231 from InDetConfig.ITkTrackingSiPatternConfig
import ITkTrackingSiPatternCfg
232 result.merge(ITkTrackingSiPatternCfg(
234 previousActsExtension=previousActsExtension,
235 InputCollections=InputExtendedITkTracks,
236 ResolvedTrackCollectionKey=TrackContainer,
237 SiSPSeededTrackCollectionKey=SiSPSeededTracks,
238 ClusterSplitProbContainer=ClusterSplitProbContainer))
239 StatTrackCollections += [SiSPSeededTracks, TrackContainer]
240 StatTrackTruthCollections += [SiSPSeededTracks+
"TruthCollection",
241 TrackContainer+
"TruthCollection"]
243 if doTrackOverlay
and extension ==
"Conversion":
244 TrackContainer =
"Resolved" + extension +
"Tracks"
247 TrackContainer=TrackContainer,
248 ClusterSplitProbContainer=ClusterSplitProbContainer))
250 if flags.Tracking.ActiveConfig.storeSeparateContainer:
256 inputTrack = TrackContainer
257 if extension
in _actsExtensions
and not flags.Tracking.ActiveConfig.doActsAmbiguityResolution:
258 inputTrack = SiSPSeededTracks
262 TrackContainer=inputTrack,
263 ClusterSplitProbContainer=ClusterSplitProbContainer))
267 ClusterSplitProbContainer = (
268 "ITkAmbiguityProcessorSplitProb" + extension)
271 if extension
not in _actsExtensions:
272 InputCombinedITkTracks += [TrackContainer]
274 InputCombinedActsTracks += [TrackContainer]
278 if extension
not in _actsExtensions:
279 InputExtendedITkTracks += [TrackContainer]
281 return result, ClusterSplitProbContainer
285 InputCombinedITkTracks: list[str] =
None,
286 ActsTrackContainerName=
"InDetActsTrackParticles") -> ComponentAccumulator:
288 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
290 acc = ComponentAccumulator()
291 if len(InputCombinedITkTracks) == 0:
295 from ActsConfig.ActsTrackFindingConfig
import ActsTrackToTrackParticleCnvAlgCfg
296 acc.merge(ActsTrackToTrackParticleCnvAlgCfg(flags,
"ActsCombinedTrackToTrackParticleCnvAlg",
297 ACTSTracksLocation=InputCombinedITkTracks,
298 TrackParticlesOutKey=ActsTrackContainerName))
299 if flags.Tracking.doTruth :
300 from ActsConfig.ActsTruthConfig
import ActsTrackParticleTruthDecorationAlgCfg
301 track_to_truth_maps=[]
302 for track_container
in InputCombinedITkTracks :
303 track_to_truth_maps += [f
'{track_container}ToTruthParticleAssociation']
307 acc.merge(ActsTrackParticleTruthDecorationAlgCfg(
309 name=f
'{ActsTrackContainerName}TruthDecorationAlg',
310 TrackToTruthAssociationMaps = track_to_truth_maps,
311 TrackParticleContainerName = ActsTrackContainerName,
312 OutputLevel=WARNING
if len(InputCombinedITkTracks)==1
else INFO,
313 ComputeTrackRecoEfficiency=
False if len(InputCombinedITkTracks)==1
else True
318 InputCombinedITkTracks: list[str] =
None,
319 StatTrackCollections: list[str] =
None,
320 StatTrackTruthCollections: list[str] =
None):
322 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
323 assert StatTrackCollections
is not None and isinstance(StatTrackCollections, list)
324 assert StatTrackTruthCollections
is not None and isinstance(StatTrackTruthCollections, list)
327 result = ComponentAccumulator()
328 if len(InputCombinedITkTracks) == 0:
331 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
332 TrackContainer =
"CombinedITkTracks"
335 InputCombinedITkTracks += [flags.Overlay.BkgPrefix + TrackContainer]
337 from TrkConfig.TrkConfigFlags
import TrackingComponent
338 doGNNWithoutAmbiReso = (TrackingComponent.GNNChain
in flags.Tracking.recoChain
and (
not flags.Tracking.GNN.doAmbiResolution))
339 skipClusterMerge = doGNNWithoutAmbiReso
or flags.Tracking.doITkFastTracking
341 from TrkConfig.TrkTrackCollectionMergerConfig
import (
342 ITkTrackCollectionMergerAlgCfg)
343 result.merge(ITkTrackCollectionMergerAlgCfg(
345 InputCombinedTracks=InputCombinedITkTracks,
346 OutputCombinedTracks=TrackContainer,
348 "" if skipClusterMerge
else
349 f
"PRDtoTrackMapMerge_{TrackContainer}")))
351 if flags.Tracking.doTruth:
352 from InDetConfig.ITkTrackTruthConfig
import ITkTrackTruthCfg
353 result.merge(ITkTrackTruthCfg(
355 Tracks=TrackContainer,
356 DetailedTruth=f
"{TrackContainer}DetailedTruth",
357 TracksTruth=f
"{TrackContainer}TruthCollection"))
359 StatTrackCollections += [TrackContainer]
360 StatTrackTruthCollections += [f
"{TrackContainer}TruthCollection"]
362 if flags.Tracking.doSlimming:
363 from TrkConfig.TrkTrackSlimmerConfig
import TrackSlimmerCfg
364 result.merge(TrackSlimmerCfg(
366 TrackLocation=[TrackContainer]))
371 if flags.Tracking.perigeeExpression ==
"BeamLine":
372 from xAODTrackingCnv.xAODTrackingCnvConfig
import ITkTrackParticleCnvAlgCfg
373 result.merge(ITkTrackParticleCnvAlgCfg(
375 ClusterSplitProbabilityName=(
376 "" if skipClusterMerge
else
379 "" if skipClusterMerge
else
380 f
"PRDtoTrackMapMerge_{TrackContainer}"),
381 isActsAmbi =
'ActsValidateResolvedTracks' in splitProbName
or \
382 'ActsValidateAmbiguityResolution' in splitProbName
or \
383 'ActsValidateScoreBasedAmbiguityResolution' in splitProbName
or \
384 'ActsConversion' in splitProbName
or \
385 'ActsLargeRadius' in splitProbName
or \
386 'ActsValidateLargeRadiusStandalone' in splitProbName
or \
387 'ActsLowPt' in splitProbName
or \
388 (
'Acts' in splitProbName
and 'Validate' not in splitProbName) ))
394 StatTrackTruthCollections=None):
395 result = ComponentAccumulator()
397 from InDetConfig.InDetRecStatisticsConfig
import (
398 ITkRecStatisticsAlgCfg)
399 result.merge(ITkRecStatisticsAlgCfg(
401 TrackCollectionKeys=StatTrackCollections,
402 TrackTruthCollectionKeys=(
403 StatTrackTruthCollections
if flags.Tracking.doTruth
else [])))
405 if flags.Tracking.doTruth:
406 from InDetConfig.InDetTrackClusterAssValidationConfig
import (
407 ITkTrackClusterAssValidationCfg)
408 result.merge(ITkTrackClusterAssValidationCfg(
410 TracksLocation=StatTrackCollections))
425 result = ComponentAccumulator()
427 if flags.Tracking.doTIDE_AmbiTrackMonitoring:
428 from InDetConfig.InDetPrepRawDataToxAODConfig
import (
429 ITkPixelPrepDataToxAOD_ExtraTruthCfg
as PixelPrepDataToxAODCfg,
430 ITkStripPrepDataToxAOD_ExtraTruthCfg
as StripPrepDataToxAODCfg)
432 from InDetConfig.InDetPrepRawDataToxAODConfig
import (
433 ITkPixelPrepDataToxAODCfg
as PixelPrepDataToxAODCfg,
434 ITkStripPrepDataToxAODCfg
as StripPrepDataToxAODCfg)
436 result.merge(PixelPrepDataToxAODCfg(
438 ClusterSplitProbabilityName=(
439 "" if flags.Tracking.doITkFastTracking
else
441 result.merge(StripPrepDataToxAODCfg(flags))
443 from DerivationFrameworkInDet.InDetToolsConfig
import (
444 ITkTSOS_CommonKernelCfg)
449 listOfExtensionsRequesting = [
450 e
for e
in _extensions_list
if (e ==
'')
451 or (flags.Tracking[f
"ITk{e}Pass"].storeTrackSeeds)
452 or (flags.Tracking[f
"ITk{e}Pass"].storeSiSPSeededTracks)
453 or (flags.Tracking[f
"ITk{e}Pass"].storeSeparateContainer) ]
455 result.merge(ITkTSOS_CommonKernelCfg(
456 flags, listOfExtensions = listOfExtensionsRequesting))
458 if flags.Tracking.doStoreTrackSeeds:
459 from DerivationFrameworkInDet.InDetToolsConfig
import (
460 ITkSiSPSeedsTSOS_CommonKernelCfg)
462 listOfExtensionsRequesting = [
463 e
for e
in _extensions_list
if (e ==
'')
or
464 flags.Tracking[f
"ITk{e}Pass"].storeTrackSeeds ]
465 result.merge(ITkSiSPSeedsTSOS_CommonKernelCfg(
466 flags, listOfExtensions = listOfExtensionsRequesting))
468 if flags.Tracking.doStoreSiSPSeededTracks:
469 listOfExtensionsRequesting = [
470 e
for e
in _extensions_list
if (e==
'')
or
471 flags.Tracking[f
"ITk{e}Pass"].storeSiSPSeededTracks ]
472 from DerivationFrameworkInDet.InDetToolsConfig
import (
473 ITkSiSPTSOS_CommonKernelCfg)
474 result.merge(ITkSiSPTSOS_CommonKernelCfg(flags, listOfExtensions = listOfExtensionsRequesting))
477 listOfExtensionsRequesting = [
478 e
for e
in _extensions_list
if (e==
'')
or
479 (flags.Tracking[f
"ITk{e}Pass"].storeSiSPSeededTracks
and
480 flags.Tracking[f
"ITk{e}Pass"].storeSeparateContainer) ]
481 from InDetPhysValMonitoring.InDetPhysValDecorationConfig
import (
482 ITkPhysHitDecoratorAlgCfg)
483 for extension
in listOfExtensionsRequesting:
484 result.merge(ITkPhysHitDecoratorAlgCfg(
486 name=f
"ITkPhysHit{extension}DecoratorAlg",
487 TrackParticleContainerName=f
"InDet{extension}TrackParticles"))
498 """Configures complete ITk tracking """
500 from InDetConfig.ITkActsHelpers
import primaryPassUsesActs
501 if primaryPassUsesActs(flags):
502 from InDetConfig.ITkActsTrackRecoConfig
import ITkActsTrackRecoCfg
503 return ITkActsTrackRecoCfg(flags)
505 result = ComponentAccumulator()
507 if flags.Input.Format
is Format.BS:
508 if flags.Detector.EnableITkPixel:
509 from ITkPixelByteStreamCnv.ITkPixelByteStreamCnvConfig
import ITkPixelDecodingAlgCfg
510 result.merge( ITkPixelDecodingAlgCfg(flags) )
512 if flags.Detector.EnableITkStrip:
513 from ITkStripsByteStreamCnv.ITkStripByteStreamCnvConfig
import ITkStripRawDataProviderCfg
514 result.merge(ITkStripRawDataProviderCfg(flags))
525 InputCombinedITkTracks = []
527 InputCombinedActsTracks = []
529 InputExtendedITkTracks = []
531 ClusterSplitProbContainer =
""
533 StatTrackCollections = []
534 StatTrackTruthCollections = []
536 previousActsExtension =
None
538 from InDetConfig.SiliconPreProcessing
import ITkRecPreProcessingSiliconCfg
540 for current_flags
in flags_set:
541 printActiveConfig(current_flags)
544 extension = current_flags.Tracking.ActiveConfig.extension
545 if extension
not in _actsExtensions:
546 _extensions_list.append(extension)
549 _outputExtensions.append(extension)
557 result.merge(ITkRecPreProcessingSiliconCfg(current_flags,
558 previousActsExtension=previousActsExtension))
569 previousActsExtension,
570 InputCombinedITkTracks=InputCombinedITkTracks,
571 InputCombinedActsTracks=InputCombinedActsTracks,
572 InputExtendedITkTracks=InputExtendedITkTracks,
573 StatTrackCollections=StatTrackCollections,
574 StatTrackTruthCollections=StatTrackTruthCollections,
575 ClusterSplitProbContainer=ClusterSplitProbContainer)
579 if 'Acts' in extension:
580 previousActsExtension = extension
584 if InputCombinedITkTracks:
588 InputCombinedITkTracks=InputCombinedITkTracks,
589 StatTrackCollections=StatTrackCollections,
590 StatTrackTruthCollections=StatTrackTruthCollections))
596 if InputCombinedActsTracks:
602 ActsTrackContainerName =
"InDetTrackParticles" if not InputCombinedITkTracks
else "InDetActsTrackParticles"
603 ActsPrimaryVertices =
"PrimaryVertices" if not InputCombinedITkTracks
else "ActsPrimaryVertices"
606 InputCombinedITkTracks=InputCombinedActsTracks,
607 ActsTrackContainerName=ActsTrackContainerName))
610 if flags.Tracking.doVertexFinding:
612 from InDetConfig.InDetPriVxFinderConfig
import primaryVertexFindingCfg
616 if InputCombinedITkTracks:
617 result.merge(primaryVertexFindingCfg(flags))
623 if InputCombinedActsTracks:
624 result.merge(primaryVertexFindingCfg(flags,
625 name=
"ActsPriVxFinderAlg",
626 TracksName=ActsTrackContainerName,
627 vxCandidatesOutputName=ActsPrimaryVertices))
631 print(
"-------- POST PROCESSING --------")
632 for current_flags
in flags_set:
633 extension = current_flags.Tracking.ActiveConfig.extension
634 print(f
"- Running post-processing for extension: {extension}")
647 if current_flags.Tracking.ActiveConfig.doAthenaTrack:
648 if current_flags.Tracking.doStoreTrackSeeds:
649 from InDetConfig.ITkPersistificationConfig
import ITkTrackSeedsFinalCfg
650 result.merge(ITkTrackSeedsFinalCfg(current_flags))
658 if current_flags.Tracking.ActiveConfig.doAthenaTrack
or current_flags.Tracking.ActiveConfig.doActsToAthenaTrack:
659 if current_flags.Tracking.doStoreSiSPSeededTracks:
660 from InDetConfig.ITkPersistificationConfig
import ITkSiSPSeededTracksFinalCfg
661 result.merge(ITkSiSPSeededTracksFinalCfg(current_flags))
663 if flags.Tracking.doStats:
667 StatTrackCollections=StatTrackCollections,
668 StatTrackTruthCollections=StatTrackTruthCollections))
672 if flags.Tracking.writeExtendedSi_PRDInfo:
681 from InDetConfig.ITkTrackOutputConfig
import ITkTrackRecoOutputCfg
682 result.merge(ITkTrackRecoOutputCfg(flags, _outputExtensions))
683 result.printConfig(withDetails =
False, summariseProps =
False)