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.Detector.EnablePLR:
91 toAOD += [
92 "xAOD::TrackMeasurementValidationContainer#PLRMeasurements",
93 "xAOD::TrackMeasurementValidationAuxContainer#PLRMeasurementsAux."
94 ]
95
96 if flags.Tracking.doStoreSiSPSeededTracks:
97 toAOD += [
98 "xAOD::TrackStateValidationContainer#SiSP_ITkPixel_MSOSs",
99 "xAOD::TrackStateValidationAuxContainer#SiSP_ITkPixel_MSOSsAux.",
100 "xAOD::TrackStateValidationContainer#SiSP_ITkStrip_MSOSs",
101 "xAOD::TrackStateValidationAuxContainer#SiSP_ITkStrip_MSOSsAux."
102 ]
103
104 if (flags.Tracking.doLargeD0 and
105 flags.Tracking.storeSeparateLargeD0Container):
106 toAOD += [
107 "xAOD::TrackParticleContainer#InDetLargeD0TrackParticles",
108 f"xAOD::TrackParticleAuxContainer#InDetLargeD0TrackParticlesAux.{excludedAuxData}"
109 ]
110
111 if flags.Tracking.doStoreSiSPSeededTracks:
112 # get list of extensions requesting track candidates. Add always the Primary Pass.
113 listOfExtensionsRequesting = [
114 e for e in extensions_list
115 if (e == '' or flags.Tracking[f"ITk{e}Pass"].storeSiSPSeededTracks) ]
116
117 for extension in listOfExtensionsRequesting:
118 toAOD += [
119 f"xAOD::TrackParticleContainer#SiSPSeededTracks{extension}TrackParticles",
120 f"xAOD::TrackParticleAuxContainer#SiSPSeededTracks{extension}TrackParticlesAux.{excludedAuxData}"]
121
122 if flags.Tracking.doStoreTrackSeeds:
123 # get list of extensions requesting track seeds. Add always the Primary Pass.
124 listOfExtensionsRequesting = [
125 e for e in extensions_list
126 if (e == '' or flags.Tracking[f"ITk{e}Pass"].storeTrackSeeds) ]
127 for extension in listOfExtensionsRequesting:
128 toAOD += [
129 f"xAOD::TrackParticleContainer#SiSPSeedSegments{extension}PixelTrackParticles",
130 f"xAOD::TrackParticleAuxContainer#SiSPSeedSegments{extension}PixelTrackParticlesAux.",
131 f"xAOD::TrackParticleContainer#SiSPSeedSegments{extension}StripTrackParticles",
132 f"xAOD::TrackParticleAuxContainer#SiSPSeedSegments{extension}StripTrackParticlesAux."
133 ]
134
135 result = ComponentAccumulator()
136 result.merge(addToESD(flags, toAOD+toESD))
137 result.merge(addToAOD(flags, toAOD))
138 return result
ITkTrackRecoOutputCfg(flags, extensions_list=None)