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.Detector.EnableCalo
and flags.Acts.doITkConversion
and \
67 TrackingComponent.ActsValidateConversionSeeds
not in flags.Tracking.recoChain:
68 flags_set += [flags.cloneAndReplace(
69 "Tracking.ActiveConfig",
70 "Tracking.ITkActsConversionPass")]
73 if flags.Acts.doLargeRadius:
74 flags_set += [flags.cloneAndReplace(
75 "Tracking.ActiveConfig",
76 "Tracking.ITkActsLargeRadiusPass")]
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.Detector.EnableCalo
and flags.Tracking.doITkConversion:
92 flagsConv = flags.cloneAndReplace(
"Tracking.ActiveConfig",
93 "Tracking.ITkConversionPass")
94 flags_set += [flagsConv]
97 if flags.Tracking.doLargeD0:
98 if flags.Tracking.useITkFTF:
99 flagsLRT = flags.cloneAndReplace(
"Tracking.ActiveConfig",
100 "Tracking.ITkFTFLargeD0Pass")
101 elif flags.Tracking.doITkFastTracking:
102 flagsLRT = flags.cloneAndReplace(
"Tracking.ActiveConfig",
103 "Tracking.ITkLargeD0FastPass")
105 flagsLRT = flags.cloneAndReplace(
"Tracking.ActiveConfig",
106 "Tracking.ITkLargeD0Pass")
107 flags_set += [flagsLRT]
110 if TrackingComponent.FPGAChain
in flags.Tracking.recoChain:
111 flags_set += [flags.cloneAndReplace(
112 "Tracking.ActiveConfig",
113 "Tracking.ITkFPGAPass")]
116 if flags.Tracking.doLowPt:
117 flagsLowPt = flags.cloneAndReplace(
"Tracking.ActiveConfig",
118 "Tracking.ITkLowPtPass")
119 flags_set += [flagsLowPt]
121 _flags_set = flags_set
134 TrackContainer: str =
"",
135 ClusterSplitProbContainer: str =
"") -> ComponentAccumulator:
136 result = ComponentAccumulator()
137 extension = flags.Tracking.ActiveConfig.extension
138 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
141 InputTracks = [flags.Overlay.SigPrefix+TrackContainer,
142 flags.Overlay.BkgPrefix+TrackContainer]
143 AssociationMapName = (
"PRDtoTrackMapMerge_Resolved" +
144 extension +
"Tracks")
145 MergerOutputTracks = TrackContainer
147 from TrkConfig.TrkTrackCollectionMergerConfig
import TrackCollectionMergerAlgCfg
148 result.merge(TrackCollectionMergerAlgCfg(
150 name=
"TrackCollectionMergerAlgCfg"+extension,
151 InputCombinedTracks=InputTracks,
152 OutputCombinedTracks=MergerOutputTracks,
153 AssociationMapName=AssociationMapName))
156 if flags.Tracking.doTruth
and extension
not in _actsExtensions:
157 from InDetConfig.ITkTrackTruthConfig
import ITkTrackTruthCfg
158 result.merge(ITkTrackTruthCfg(
160 Tracks=TrackContainer,
161 DetailedTruth=TrackContainer+
"DetailedTruth",
162 TracksTruth=TrackContainer+
"TruthCollection"))
166 if extension
not in _actsExtensions:
168 from xAODTrackingCnv.xAODTrackingCnvConfig
import ITkTrackParticleCnvAlgCfg
169 result.merge(ITkTrackParticleCnvAlgCfg(
171 name=extension +
"TrackParticleCnvAlg",
172 TrackContainerName=TrackContainer,
173 xAODTrackParticlesFromTracksContainerName=(
174 "InDet" + extension +
"TrackParticles"),
175 ClusterSplitProbabilityName=(
176 "" if flags.Tracking.doITkFastTracking
else
177 ClusterSplitProbContainer),
178 AssociationMapName=
""))
181 from ActsConfig.ActsTrackFindingConfig
import ActsTrackToTrackParticleCnvAlgCfg
183 prefix = flags.Tracking.ActiveConfig.extension
184 result.merge(ActsTrackToTrackParticleCnvAlgCfg(flags, f
"{prefix}ResolvedTrackToAltTrackParticleCnvAlg",
185 ACTSTracksLocation=[TrackContainer],
186 TrackParticlesOutKey=f
'InDet{prefix}TrackParticles'))
188 if flags.Tracking.doTruth :
189 from ActsConfig.ActsTruthConfig
import ActsTrackParticleTruthDecorationAlgCfg
190 result.merge(ActsTrackParticleTruthDecorationAlgCfg(flags,
191 name=f
'{TrackContainer}ParticleTruthDecorationAlg',
192 TrackToTruthAssociationMaps = [f
'{TrackContainer}ToTruthParticleAssociation'],
193 TrackParticleContainerName = f
'InDet{prefix}TrackParticles'
200 previousActsExtension: str =
None,
201 InputCombinedITkTracks: list[str] =
None,
202 InputCombinedActsTracks: list[str] =
None,
203 InputExtendedITkTracks: list[str] =
None,
204 StatTrackCollections: list[str] =
None,
205 StatTrackTruthCollections: list[str] =
None,
206 ClusterSplitProbContainer: str =
""):
209 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
210 assert InputCombinedActsTracks
is not None and isinstance(InputCombinedActsTracks, list)
211 assert InputExtendedITkTracks
is not None and isinstance(InputExtendedITkTracks, list)
212 assert StatTrackCollections
is not None and isinstance(StatTrackCollections, list)
213 assert StatTrackTruthCollections
is not None and isinstance(StatTrackTruthCollections ,list)
216 extension = flags.Tracking.ActiveConfig.extension
218 result = ComponentAccumulator()
221 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
222 TrackContainer =
"Resolved" + extension +
"Tracks"
224 if extension
in _actsExtensions:
225 TrackContainer = extension +
"ResolvedTracks" if flags.Acts.doAmbiguityResolution
else extension +
"Tracks"
226 if doTrackOverlay
and extension ==
"Conversion":
227 TrackContainer = flags.Overlay.SigPrefix + TrackContainer
230 SiSPSeededTracks =
"SiSPSeeded" + extension +
"Tracks"
232 if extension
in _actsExtensions:
233 SiSPSeededTracks = extension +
"Tracks"
236 from InDetConfig.ITkTrackingSiPatternConfig
import ITkTrackingSiPatternCfg
237 result.merge(ITkTrackingSiPatternCfg(
239 previousActsExtension=previousActsExtension,
240 InputCollections=InputExtendedITkTracks,
241 ResolvedTrackCollectionKey=TrackContainer,
242 SiSPSeededTrackCollectionKey=SiSPSeededTracks,
243 ClusterSplitProbContainer=ClusterSplitProbContainer))
244 StatTrackCollections += [SiSPSeededTracks, TrackContainer]
245 StatTrackTruthCollections += [SiSPSeededTracks+
"TruthCollection",
246 TrackContainer+
"TruthCollection"]
248 if doTrackOverlay
and extension ==
"Conversion":
249 TrackContainer =
"Resolved" + extension +
"Tracks"
252 TrackContainer=TrackContainer,
253 ClusterSplitProbContainer=ClusterSplitProbContainer))
255 if flags.Tracking.ActiveConfig.storeSeparateContainer:
261 inputTrack = TrackContainer
262 if extension
in _actsExtensions
and not flags.Tracking.ActiveConfig.doActsAmbiguityResolution:
263 inputTrack = SiSPSeededTracks
267 TrackContainer=inputTrack,
268 ClusterSplitProbContainer=ClusterSplitProbContainer))
272 ClusterSplitProbContainer = (
273 "ITkAmbiguityProcessorSplitProb" + extension)
276 if extension
not in _actsExtensions:
277 InputCombinedITkTracks += [TrackContainer]
279 InputCombinedActsTracks += [TrackContainer]
283 if extension
not in _actsExtensions:
284 InputExtendedITkTracks += [TrackContainer]
286 return result, ClusterSplitProbContainer
290 InputCombinedITkTracks: list[str] =
None,
291 ActsTrackContainerName=
"InDetActsTrackParticles") -> ComponentAccumulator:
293 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
295 acc = ComponentAccumulator()
296 if len(InputCombinedITkTracks) == 0:
300 from ActsConfig.ActsTrackFindingConfig
import ActsTrackToTrackParticleCnvAlgCfg
301 acc.merge(ActsTrackToTrackParticleCnvAlgCfg(flags,
"ActsCombinedTrackToTrackParticleCnvAlg",
302 ACTSTracksLocation=InputCombinedITkTracks,
303 TrackParticlesOutKey=ActsTrackContainerName))
304 if flags.Tracking.doTruth :
305 from ActsConfig.ActsTruthConfig
import ActsTrackParticleTruthDecorationAlgCfg
306 track_to_truth_maps=[]
307 for track_container
in InputCombinedITkTracks :
308 track_to_truth_maps += [f
'{track_container}ToTruthParticleAssociation']
312 acc.merge(ActsTrackParticleTruthDecorationAlgCfg(
314 name=f
'{ActsTrackContainerName}TruthDecorationAlg',
315 TrackToTruthAssociationMaps = track_to_truth_maps,
316 TrackParticleContainerName = ActsTrackContainerName,
317 OutputLevel=WARNING
if len(InputCombinedITkTracks)==1
else INFO,
318 ComputeTrackRecoEfficiency=
False if len(InputCombinedITkTracks)==1
else True
323 InputCombinedITkTracks: list[str] =
None,
324 StatTrackCollections: list[str] =
None,
325 StatTrackTruthCollections: list[str] =
None):
327 assert InputCombinedITkTracks
is not None and isinstance(InputCombinedITkTracks, list)
328 assert StatTrackCollections
is not None and isinstance(StatTrackCollections, list)
329 assert StatTrackTruthCollections
is not None and isinstance(StatTrackTruthCollections, list)
332 result = ComponentAccumulator()
333 if len(InputCombinedITkTracks) == 0:
336 doTrackOverlay = flags.TrackOverlay.isTrackOverlaySeq
337 TrackContainer =
"CombinedITkTracks"
340 InputCombinedITkTracks += [flags.Overlay.BkgPrefix + TrackContainer]
342 from TrkConfig.TrkConfigFlags
import TrackingComponent
343 doGNNWithoutAmbiReso = (TrackingComponent.GNNChain
in flags.Tracking.recoChain
and (
not flags.Tracking.GNN.doAmbiResolution))
344 skipClusterMerge = doGNNWithoutAmbiReso
or flags.Tracking.doITkFastTracking
346 from TrkConfig.TrkTrackCollectionMergerConfig
import (
347 ITkTrackCollectionMergerAlgCfg)
348 result.merge(ITkTrackCollectionMergerAlgCfg(
350 InputCombinedTracks=InputCombinedITkTracks,
351 OutputCombinedTracks=TrackContainer,
353 "" if skipClusterMerge
else
354 f
"PRDtoTrackMapMerge_{TrackContainer}")))
356 if flags.Tracking.doTruth:
357 from InDetConfig.ITkTrackTruthConfig
import ITkTrackTruthCfg
358 result.merge(ITkTrackTruthCfg(
360 Tracks=TrackContainer,
361 DetailedTruth=f
"{TrackContainer}DetailedTruth",
362 TracksTruth=f
"{TrackContainer}TruthCollection"))
364 StatTrackCollections += [TrackContainer]
365 StatTrackTruthCollections += [f
"{TrackContainer}TruthCollection"]
367 if flags.Tracking.doSlimming:
368 from TrkConfig.TrkTrackSlimmerConfig
import TrackSlimmerCfg
369 result.merge(TrackSlimmerCfg(
371 TrackLocation=[TrackContainer]))
376 if flags.Tracking.perigeeExpression ==
"BeamLine":
377 from xAODTrackingCnv.xAODTrackingCnvConfig
import ITkTrackParticleCnvAlgCfg
378 result.merge(ITkTrackParticleCnvAlgCfg(
380 ClusterSplitProbabilityName=(
381 "" if skipClusterMerge
else
384 "" if skipClusterMerge
else
385 f
"PRDtoTrackMapMerge_{TrackContainer}"),
386 isActsAmbi =
'ActsValidateResolvedTracks' in splitProbName
or \
387 'ActsValidateAmbiguityResolution' in splitProbName
or \
388 'ActsValidateScoreBasedAmbiguityResolution' in splitProbName
or \
389 'ActsConversion' in splitProbName
or \
390 'ActsLargeRadius' in splitProbName
or \
391 'ActsValidateLargeRadiusStandalone' in splitProbName
or \
392 'ActsLowPt' in splitProbName
or \
393 (
'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:
514 raise RuntimeError(
"ByteStream inputs not supported")
523 InputCombinedITkTracks = []
525 InputCombinedActsTracks = []
527 InputExtendedITkTracks = []
529 ClusterSplitProbContainer =
""
531 StatTrackCollections = []
532 StatTrackTruthCollections = []
534 previousActsExtension =
None
536 from InDetConfig.SiliconPreProcessing
import ITkRecPreProcessingSiliconCfg
538 for current_flags
in flags_set:
539 printActiveConfig(current_flags)
542 extension = current_flags.Tracking.ActiveConfig.extension
543 if extension
not in _actsExtensions:
544 _extensions_list.append(extension)
547 _outputExtensions.append(extension)
555 result.merge(ITkRecPreProcessingSiliconCfg(current_flags,
556 previousActsExtension=previousActsExtension))
567 previousActsExtension,
568 InputCombinedITkTracks=InputCombinedITkTracks,
569 InputCombinedActsTracks=InputCombinedActsTracks,
570 InputExtendedITkTracks=InputExtendedITkTracks,
571 StatTrackCollections=StatTrackCollections,
572 StatTrackTruthCollections=StatTrackTruthCollections,
573 ClusterSplitProbContainer=ClusterSplitProbContainer)
577 if 'Acts' in extension:
578 previousActsExtension = extension
582 if InputCombinedITkTracks:
586 InputCombinedITkTracks=InputCombinedITkTracks,
587 StatTrackCollections=StatTrackCollections,
588 StatTrackTruthCollections=StatTrackTruthCollections))
594 if InputCombinedActsTracks:
600 ActsTrackContainerName =
"InDetTrackParticles" if not InputCombinedITkTracks
else "InDetActsTrackParticles"
601 ActsPrimaryVertices =
"PrimaryVertices" if not InputCombinedITkTracks
else "ActsPrimaryVertices"
604 InputCombinedITkTracks=InputCombinedActsTracks,
605 ActsTrackContainerName=ActsTrackContainerName))
608 if flags.Tracking.doVertexFinding:
610 from InDetConfig.InDetPriVxFinderConfig
import primaryVertexFindingCfg
614 if InputCombinedITkTracks:
615 result.merge(primaryVertexFindingCfg(flags))
621 if InputCombinedActsTracks:
622 result.merge(primaryVertexFindingCfg(flags,
623 name=
"ActsPriVxFinderAlg",
624 TracksName=ActsTrackContainerName,
625 vxCandidatesOutputName=ActsPrimaryVertices))
629 print(
"-------- POST PROCESSING --------")
630 for current_flags
in flags_set:
631 extension = current_flags.Tracking.ActiveConfig.extension
632 print(f
"- Running post-processing for extension: {extension}")
645 if current_flags.Tracking.ActiveConfig.doAthenaTrack:
646 if current_flags.Tracking.doStoreTrackSeeds:
647 from InDetConfig.ITkPersistificationConfig
import ITkTrackSeedsFinalCfg
648 result.merge(ITkTrackSeedsFinalCfg(current_flags))
656 if current_flags.Tracking.ActiveConfig.doAthenaTrack
or current_flags.Tracking.ActiveConfig.doActsToAthenaTrack:
657 if current_flags.Tracking.doStoreSiSPSeededTracks:
658 from InDetConfig.ITkPersistificationConfig
import ITkSiSPSeededTracksFinalCfg
659 result.merge(ITkSiSPSeededTracksFinalCfg(current_flags))
661 if flags.Tracking.doStats:
665 StatTrackCollections=StatTrackCollections,
666 StatTrackTruthCollections=StatTrackTruthCollections))
670 if flags.Tracking.writeExtendedSi_PRDInfo:
679 from InDetConfig.ITkTrackOutputConfig
import ITkTrackRecoOutputCfg
680 result.merge(ITkTrackRecoOutputCfg(flags, _outputExtensions))
681 result.printConfig(withDetails =
False, summariseProps =
False)