ATLAS Offline Software
Loading...
Searching...
No Matches
InDetPhysValDecorationConfig.py
Go to the documentation of this file.
2# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3#
4
5from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
6from AthenaConfiguration.ComponentFactory import CompFactory
7
8
9def canAddDecorator(flags):
10 '''
11 check whether the decorator can be added.
12
13 A decorator can be added if a track particle converter alg is in the sequence or
14 if ESDs or AODs are read.
15 '''
16
17 if not (flags.Detector.GeometryID or flags.Detector.GeometryITk):
18 return False
19
20 return (flags.PhysVal.IDPVM.runDecoration and
21 ("StreamESD" in flags.Input.ProcessingTags or
22 "StreamAOD" in flags.Input.ProcessingTags or
23 (len(flags.Input.ProcessingTags) > 0 and
24 # Look for substring StreamDAOD in first processing tag to cover
25 # all DAOD flavors
26 "StreamDAOD" in flags.Input.ProcessingTags[0])))
27
28
30 flags, name="InDetPhysHitDecoratorAlg", **kwargs):
31 if flags.Detector.GeometryITk:
32 return ITkPhysHitDecoratorAlgCfg(flags, name, **kwargs)
33
34 '''
35 create decoration algorithm which decorates track particles with the unbiased hit residuals and pulls.
36 '''
37 acc = ComponentAccumulator()
38
39 if 'InDetTrackHoleSearchTool' not in kwargs:
40 from InDetConfig.InDetTrackHoleSearchConfig import (
41 InDetTrackHoleSearchToolCfg)
42 kwargs.setdefault("InDetTrackHoleSearchTool",
43 acc.popToolsAndMerge(InDetTrackHoleSearchToolCfg(flags)))
44
45 if 'Updator' not in kwargs:
46 from TrkConfig.TrkMeasurementUpdatorConfig import InDetUpdatorCfg
47 kwargs.setdefault("Updator", acc.popToolsAndMerge(InDetUpdatorCfg(flags)))
48
49 if 'LorentzAngleTool' not in kwargs:
50 from SiLorentzAngleTool.PixelLorentzAngleConfig import (
51 PixelLorentzAngleToolCfg)
52 kwargs.setdefault("LorentzAngleTool", acc.popToolsAndMerge(
53 PixelLorentzAngleToolCfg(flags)))
54
55 if 'ResidualPullCalculator' not in kwargs:
56 from TrkConfig.TrkResidualPullCalculatorConfig import (
57 ResidualPullCalculatorCfg)
58 kwargs.setdefault("ResidualPullCalculator", acc.addPublicTool(
59 acc.popToolsAndMerge(ResidualPullCalculatorCfg(flags))))
60
61 acc.addEventAlgo(CompFactory.InDetPhysHitDecoratorAlg(name, **kwargs))
62 return acc
63
64
65def ITkPhysHitDecoratorAlgCfg(flags, name="ITkPhysHitDecoratorAlg", **kwargs):
66 '''
67 create decoration algorithm which decorates track particles with the unbiased hit residuals and pulls.
68
69 '''
70 acc = ComponentAccumulator()
71
72 if 'InDetTrackHoleSearchTool' not in kwargs:
73 from InDetConfig.InDetTrackHoleSearchConfig import (
74 ITkTrackHoleSearchToolCfg)
75 kwargs.setdefault("InDetTrackHoleSearchTool", acc.popToolsAndMerge(
76 ITkTrackHoleSearchToolCfg(flags)))
77
78 if 'Updator' not in kwargs:
79 from TrkConfig.TrkMeasurementUpdatorConfig import ITkUpdatorCfg
80 kwargs.setdefault("Updator", acc.popToolsAndMerge(ITkUpdatorCfg(flags)))
81
82 if 'LorentzAngleTool' not in kwargs:
83 from SiLorentzAngleTool.ITkPixelLorentzAngleConfig import (
84 ITkPixelLorentzAngleToolCfg)
85 kwargs.setdefault("LorentzAngleTool", acc.popToolsAndMerge(
86 ITkPixelLorentzAngleToolCfg(flags)))
87
88 if 'ResidualPullCalculator' not in kwargs:
89 from TrkConfig.TrkResidualPullCalculatorConfig import (
90 ResidualPullCalculatorCfg)
91 kwargs.setdefault("ResidualPullCalculator", acc.addPublicTool(
92 acc.popToolsAndMerge(ResidualPullCalculatorCfg(flags))))
93
94 acc.addEventAlgo(CompFactory.InDetPhysHitDecoratorAlg(name, **kwargs))
95 return acc
96
97
99 flags, name="ParameterErrDecoratorAlg", **kwargs):
100 '''
101 create decoration algorithm which decorates track particles with the uncertainties of the track parameters.
102 '''
103 acc = ComponentAccumulator()
104 acc.addEventAlgo(CompFactory.ParameterErrDecoratorAlg(name, **kwargs))
105 return acc
106
107
109 flags, name="InDetPhysValTruthDecoratorAlg", **kwargs):
110 '''
111 create decoration algorithm which decorates truth particles with track parameters at the perigee.
112 '''
113 acc = ComponentAccumulator()
114
115 from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
116 extrapolator = acc.popToolsAndMerge(AtlasExtrapolatorCfg(flags))
117 acc.addPublicTool(extrapolator) # TODO: migrate to private?
118 kwargs.setdefault("Extrapolator", extrapolator)
119
120 if flags.Detector.GeometryITk:
121 kwargs.setdefault("PixelClusterContainerName", "ITkPixelMeasurements")
122 kwargs.setdefault("SCTClusterContainerName", "ITkStripMeasurements")
123
124 kwargs.setdefault('TruthParticleIndexDecoration',
125 'origTruthIndex' if flags.PhysVal.IDPVM.doTechnicalEfficiency else '')
126
127 acc.addEventAlgo(CompFactory.InDetPhysValTruthDecoratorAlg(name, **kwargs))
128 return acc
129
130
131def TruthClassDecoratorAlgCfg(flags, name="TruthClassDecoratorAlg", **kwargs):
132 '''
133 create decoration algorithm which decorates truth particles with origin and type from truth classifier.
134 '''
135 acc = ComponentAccumulator()
136 acc.addEventAlgo(CompFactory.TruthClassDecoratorAlg(name, **kwargs))
137 return acc
138
139
140def TrackDecoratorsCfg(flags, **kwargs):
141 '''
142 Get track particle decorators needed for the InDetPhysValMonitoring tool
143 '''
144 acc = ComponentAccumulator()
145
146 if "CombinedInDetTracks" in flags.Input.Collections:
147 acc.merge(InDetPhysHitDecoratorAlgCfg(flags, **kwargs))
148
149 acc.merge(ParameterErrDecoratorAlgCfg(flags, **kwargs))
150
151 return acc
152
153
154def GSFTrackDecoratorsCfg(flags, **kwargs):
155 kwargs.setdefault("TrackParticleContainerName", "GSFTrackParticles")
156 return TrackDecoratorsCfg(flags, **kwargs)
157
158
159def AddDecoratorCfg(flags, **kwargs):
160 '''
161 Add the track particle decoration algorithm to the top sequence.
162 The algorithm is to be run on RAW/RDO since it depends on full hit information
163 which is generally not available at later stages. The decorations added by this
164 algorithm are used by InDetPhysValMonitoring tool.
165 '''
166 acc = ComponentAccumulator()
167
168 acc.merge(TrackDecoratorsCfg(flags))
169
170 if flags.Input.isMC:
171 from BeamSpotConditions.BeamSpotConditionsConfig import (
172 BeamSpotCondAlgCfg)
173 acc.merge(BeamSpotCondAlgCfg(flags))
174 acc.merge(InDetPhysValTruthDecoratorAlgCfg(flags))
175
176 if flags.PhysVal.IDPVM.doValidateGSFTracks:
177 acc.merge(AddGSFTrackDecoratorAlgCfg(flags))
178
179 return acc
180
181
182def AddGSFTrackDecoratorAlgCfg(flags, **kwargs):
183 # Search egamma algorithm and add the GSF TrackParticle decorator
184 acc = ComponentAccumulator()
185
186 if flags.PhysVal.IDPVM.doValidateGSFTracks:
187 acc.merge(GSFTrackDecoratorsCfg(flags))
188
189 for col in flags.PhysVal.IDPVM.validateExtraTrackCollections:
190 acc.merge(TrackDecoratorsCfg(
191 flags, TrackParticleContainerName=col))
192
193
195 '''
196 Add the InDet decoration algorithm if it has not been ran yet.
197 '''
198
199 acc = ComponentAccumulator()
200
201 if not canAddDecorator(flags):
202 print('DEBUG addDecoratorIfNeeded ? Stage is too early or too late for running the decoration. Needs reconstructed tracks. Try again during next stage ?')
203 return acc
204
205 acc.merge(AddDecoratorCfg(flags))
206
207 return acc
void print(char *figname, TCanvas *c1)
TruthClassDecoratorAlgCfg(flags, name="TruthClassDecoratorAlg", **kwargs)
InDetPhysHitDecoratorAlgCfg(flags, name="InDetPhysHitDecoratorAlg", **kwargs)
ITkPhysHitDecoratorAlgCfg(flags, name="ITkPhysHitDecoratorAlg", **kwargs)
ParameterErrDecoratorAlgCfg(flags, name="ParameterErrDecoratorAlg", **kwargs)
InDetPhysValTruthDecoratorAlgCfg(flags, name="InDetPhysValTruthDecoratorAlg", **kwargs)