ATLAS Offline Software
Loading...
Searching...
No Matches
ITkTrackOutputConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
4from InDetConfig.InDetTrackOutputConfig import FTAG_AUXDATA
5
6def ITkTrackRecoOutputCfg(flags, extensions_list=None):
7 if extensions_list is None:
8 extensions_list = []
9
10 from OutputStreamAthenaPool.OutputStreamConfig import addToESD, addToAOD
11 toAOD = []
12 toESD = []
13
14 # excluded track aux data
15 excludedAuxData = ('-clusterAssociation.-TTVA_AMVFVertices_forReco.-AssoClustersUFO'
16 '.-TTVA_AMVFWeights_forReco')
17 # remove track decorations used internally by FTAG software
18 excludedAuxData += '.-'.join([''] + FTAG_AUXDATA)
19
20 # exclude TTVA decorations
21 excludedAuxData += '.-TTVA_AMVFVertices.-TTVA_AMVFWeights'
22
23 # exclude IDTIDE decorations
24 from DerivationFrameworkInDet.IDTIDE import IDTIDE_AOD_EXCLUDED_AUXDATA
25 excludedAuxData += '.-'.join([''] + IDTIDE_AOD_EXCLUDED_AUXDATA)
26 from DerivationFrameworkInDet.IDTRKVALID import IDTRKVALID_AOD_EXCLUDED_AUXDATA
27 excludedAuxData += '.-'.join([''] + IDTRKVALID_AOD_EXCLUDED_AUXDATA)
28
29 if not flags.Tracking.writeExtendedSi_PRDInfo:
30 excludedAuxData += '.-msosLink'
31
32 # Save PRD
33 toESD += [
34 "InDet::SCT_ClusterContainer#ITkStripClusters",
35 "InDet::PixelClusterContainer#ITkPixelClusters",
36 "InDet::PixelGangedClusterAmbiguities#ITkPixelClusterAmbiguitiesMap",
37 ]
38 if flags.Tracking.doPixelClusterSplitting:
39 toESD += [
40 "InDet::PixelGangedClusterAmbiguities#ITkSplitClusterAmbiguityMap"]
41
42 from InDetConfig.ITkTrackRecoConfig import ITkClusterSplitProbabilityContainerName
43 toESD += ["Trk::ClusterSplitProbabilityContainer#" +
44 ITkClusterSplitProbabilityContainerName(flags)]
45
46 # Save (Detailed) Track Truth
47 if flags.Tracking.doTruth:
48 toESD += [
49 "TrackTruthCollection#CombinedITkTracksTrackTruthCollection",
50 "DetailedTrackTruthCollection#CombinedITkTracksDetailedTrackTruth"]
51
52 if flags.Tracking.doStoreTrackSeeds:
53 listOfExtensionsRequesting = [
54 e for e in extensions_list
55 if (e == '' or flags.Tracking[f"ITk{e}Pass"].storeTrackSeeds) ]
56
57 for extension in listOfExtensionsRequesting:
58 toESD += ["TrackCollection#SiSPSeedSegments"+extension]
59
60 toESD += ["TrackCollection#CombinedITkTracks"]
61
62
63 toAOD += [
64 "xAOD::TrackParticleContainer#InDetTrackParticles",
65 f"xAOD::TrackParticleAuxContainer#InDetTrackParticlesAux.{excludedAuxData}"
66 ]
67
68 # This should be activated only if both Legacy and Acts-based tracking
69 # are executed at the same time during reconstruction
70 toAOD += [
71 "xAOD::TrackParticleContainer#ActsInDetTrackParticles",
72 f"xAOD::TrackParticleAuxContainer#ActsInDetTrackParticlesAux.{excludedAuxData}"]
73
74 if flags.Tracking.writeExtendedSi_PRDInfo:
75 # Different convention wrt Run 3 for TrackMeasurementValidationContainer
76 # from ITkPixelClusters to ITkPixelMeasurements
77 # This is to avoid clashes with the xAOD::ClusterContainer names, which was not
78 # an issue for Run 3 since they were not xAOD back then
79 toAOD += [
80 "xAOD::TrackMeasurementValidationContainer#ITkPixelMeasurements",
81 "xAOD::TrackMeasurementValidationAuxContainer#ITkPixelMeasurementsAux.",
82 "xAOD::TrackMeasurementValidationContainer#ITkStripMeasurements",
83 "xAOD::TrackMeasurementValidationAuxContainer#ITkStripMeasurementsAux.",
84 "xAOD::TrackStateValidationContainer#ITkPixelMSOSs",
85 "xAOD::TrackStateValidationAuxContainer#ITkPixelMSOSsAux.",
86 "xAOD::TrackStateValidationContainer#ITkStripMSOSs",
87 "xAOD::TrackStateValidationAuxContainer#ITkStripMSOSsAux."
88 ]
89
90 if flags.Tracking.doStoreSiSPSeededTracks:
91 toAOD += [
92 "xAOD::TrackStateValidationContainer#SiSP_ITkPixel_MSOSs",
93 "xAOD::TrackStateValidationAuxContainer#SiSP_ITkPixel_MSOSsAux.",
94 "xAOD::TrackStateValidationContainer#SiSP_ITkStrip_MSOSs",
95 "xAOD::TrackStateValidationAuxContainer#SiSP_ITkStrip_MSOSsAux."
96 ]
97
98 if (flags.Tracking.doLargeD0 and
99 flags.Tracking.storeSeparateLargeD0Container):
100 toAOD += [
101 "xAOD::TrackParticleContainer#InDetLargeD0TrackParticles",
102 f"xAOD::TrackParticleAuxContainer#InDetLargeD0TrackParticlesAux.{excludedAuxData}"
103 ]
104
105 if flags.Tracking.doStoreSiSPSeededTracks:
106 # get list of extensions requesting track candidates. Add always the Primary Pass.
107 listOfExtensionsRequesting = [
108 e for e in extensions_list
109 if (e == '' or flags.Tracking[f"ITk{e}Pass"].storeSiSPSeededTracks) ]
110
111 for extension in listOfExtensionsRequesting:
112 toAOD += [
113 f"xAOD::TrackParticleContainer#SiSPSeededTracks{extension}TrackParticles",
114 f"xAOD::TrackParticleAuxContainer#SiSPSeededTracks{extension}TrackParticlesAux.{excludedAuxData}"]
115
116 if flags.Tracking.doStoreTrackSeeds:
117 # get list of extensions requesting track seeds. Add always the Primary Pass.
118 listOfExtensionsRequesting = [
119 e for e in extensions_list
120 if (e == '' or flags.Tracking[f"ITk{e}Pass"].storeTrackSeeds) ]
121 for extension in listOfExtensionsRequesting:
122 toAOD += [
123 f"xAOD::TrackParticleContainer#SiSPSeedSegments{extension}PixelTrackParticles",
124 f"xAOD::TrackParticleAuxContainer#SiSPSeedSegments{extension}PixelTrackParticlesAux.",
125 f"xAOD::TrackParticleContainer#SiSPSeedSegments{extension}StripTrackParticles",
126 f"xAOD::TrackParticleAuxContainer#SiSPSeedSegments{extension}StripTrackParticlesAux."
127 ]
128
129 result = ComponentAccumulator()
130 result.merge(addToESD(flags, toAOD+toESD))
131 result.merge(addToAOD(flags, toAOD))
132 return result
ITkTrackRecoOutputCfg(flags, extensions_list=None)