ATLAS Offline Software
Loading...
Searching...
No Matches
InDetTrackPerfMonConfig.py
Go to the documentation of this file.
2# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3#
4
5'''@file InDetTrackPerfMonConfig.py
6@author M. Aparo
7@date 2023-02-17
8@brief Main CA-based python configuration for InDetTrackPerfMonTool
9'''
10
11from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
12from AthenaConfiguration.ComponentFactory import CompFactory
13from AthenaCommon.Logging import logging
14
15
16def JsonPlotsDefReadToolCfg( flags, name="JsonPlotsDefReadTool", **kwargs ):
17 '''
18 Tool to read the plots definitions from an input file in JSON format
19 '''
20 log = logging.getLogger( "JsonPlotsDefReadTool" )
21 acc = ComponentAccumulator()
22
23
24 from InDetTrackPerfMon.ConfigUtils import getPlotsDefList
25 plotsDefList = getPlotsDefList( flags )
26 log.debug( "Loading the following plot definitions:" )
27 for plotDef in plotsDefList : log.debug( "\t-> %s", plotDef )
28
29 kwargs.setdefault( "PlotsDefs", plotsDefList )
30
31 acc.setPrivateTools(
32 CompFactory.IDTPM.JsonPlotsDefReadTool( name, **kwargs ) )
33 return acc
34
35
36def PlotsDefReadToolCfg( flags, name="PlotsDefReadTool", **kwargs ):
37 '''
38 CA-based configuration for the Tool to read the plots definition
39 '''
40 log = logging.getLogger( "PlotsDefReadTool" )
41
42 if flags.PhysVal.IDTPM.plotsDefFormat == "JSON" :
44 flags, name = "JsonPlotsDefReadTool" +
45 flags.PhysVal.IDTPM.currentTrkAna.anaTag, **kwargs )
46
47 log.error( "Non supported plots definition file type %s",
48 flags.PhysVal.IDTPM.plotsDefFormat )
49 return None
50
51
52def PlotsDefinitionSvcCfg( flags, name="PlotsDefSvc", **kwargs ):
53 '''
54 CA-based configuration for the PlotsDefinition Service
55 '''
56 acc = ComponentAccumulator()
57
58 if "PlotsDefReadTool" not in kwargs:
59 kwargs.setdefault( "PlotsDefReadTool", acc.popToolsAndMerge(
60 PlotsDefReadToolCfg( flags ) ) )
61
62 acc.addService(
63 CompFactory.PlotsDefinitionSvc( name, **kwargs ) )
64 return acc
65
66
67def TrackAnalysisInfoWriteToolCfg( flags, name="TrackAnalysisInfoWriteTool", **kwargs ):
68 '''
69 Tool to write TrackAnalysisInfo to StoreGate
70 '''
71 acc = ComponentAccumulator()
72
73 kwargs.setdefault( "AnaTag", flags.PhysVal.IDTPM.currentTrkAna.anaTag )
74
75 acc.setPrivateTools( CompFactory.IDTPM.TrackAnalysisInfoWriteTool( name, **kwargs ) )
76 return acc
77
78
79def TrackAnalysisDefinitionSvcCfg( flags, name="TrkAnaDefSvc", **kwargs ):
80 '''
81 CA-based configuration for the TrackAnalysisDefinition Service
82 '''
83 log = logging.getLogger( "TrkAnaDefSvc"+flags.PhysVal.IDTPM.currentTrkAna.anaTag )
84 acc = ComponentAccumulator()
85
86 kwargs.setdefault( "DirName", flags.PhysVal.IDTPM.DirName )
87 kwargs.setdefault( "sortPlotsByChain", flags.PhysVal.IDTPM.sortPlotsByChain )
88 kwargs.setdefault( "SubFolder", flags.PhysVal.IDTPM.currentTrkAna.SubFolder )
89 kwargs.setdefault( "TrkAnaTag", flags.PhysVal.IDTPM.currentTrkAna.anaTag )
90
91 kwargs.setdefault( "TestType", flags.PhysVal.IDTPM.currentTrkAna.TestType )
92 kwargs.setdefault( "RefType", flags.PhysVal.IDTPM.currentTrkAna.RefType )
93 kwargs.setdefault( "doTrigNavigation", flags.PhysVal.IDTPM.currentTrkAna.doTrigNavigation )
94
95 kwargs.setdefault( "pileupSwitch", flags.PhysVal.IDTPM.currentTrkAna.pileupSwitch )
96 kwargs.setdefault( "hasFullPileupTruth",
97 ( "xAOD::TruthPileupEventContainer#TruthPileupEvents" in flags.Input.TypedCollections ) )
98
99 from InDetTrackPerfMon.ConfigUtils import getTag
100 kwargs.setdefault( "TestTag", getTag( flags, flags.PhysVal.IDTPM.currentTrkAna.TestType ) )
101 kwargs.setdefault( "RefTag", getTag( flags, flags.PhysVal.IDTPM.currentTrkAna.RefType ) )
102
103 kwargs.setdefault( "MatchingType", flags.PhysVal.IDTPM.currentTrkAna.MatchingType )
104 kwargs.setdefault( "MatchingTruthProb", flags.PhysVal.IDTPM.currentTrkAna.truthProbCut )
105
106 kwargs.setdefault( "ChainNames", flags.PhysVal.IDTPM.currentTrkAna.ChainNames )
107 if ( flags.PhysVal.IDTPM.currentTrkAna.doTrigNavigation and
108 not flags.PhysVal.IDTPM.currentTrkAna.ChainNames ):
109 log.error( "Trying to set up Trigger navigation without specifying any trigger chain" )
110 return None
111
112 kwargs.setdefault( "plotTrackParameters", flags.PhysVal.IDTPM.currentTrkAna.plotTrackParameters )
113 kwargs.setdefault( "plotTrackParametersErrors", flags.PhysVal.IDTPM.currentTrkAna.plotTrackParametersErrors )
114 kwargs.setdefault( "plotTrackMultiplicities", flags.PhysVal.IDTPM.currentTrkAna.plotTrackMultiplicities )
115 kwargs.setdefault( "plotEfficiencies", flags.PhysVal.IDTPM.currentTrkAna.plotEfficiencies )
116 kwargs.setdefault( "plotTechnicalEfficiencies", flags.PhysVal.IDTPM.currentTrkAna.plotTechnicalEfficiencies )
117 kwargs.setdefault( "plotResolutions", flags.PhysVal.IDTPM.currentTrkAna.plotResolutions )
118 kwargs.setdefault( "plotFakeRates", flags.PhysVal.IDTPM.currentTrkAna.plotFakeRates )
119 kwargs.setdefault( "unlinkedAsFakes", flags.PhysVal.IDTPM.currentTrkAna.unlinkedAsFakes )
120 kwargs.setdefault( "plotDuplicateRates", flags.PhysVal.IDTPM.currentTrkAna.plotDuplicateRates )
121 kwargs.setdefault( "plotHitsOnTracks", flags.PhysVal.IDTPM.currentTrkAna.plotHitsOnTracks )
122 kwargs.setdefault( "plotHitsOnTracksExpert", flags.PhysVal.IDTPM.currentTrkAna.plotHitsOnTracksExpert )
123 kwargs.setdefault( "plotHitsOnTracksReference", flags.PhysVal.IDTPM.currentTrkAna.plotHitsOnTracksReference )
124 kwargs.setdefault( "plotHitsOnMatchedTracks", flags.PhysVal.IDTPM.currentTrkAna.plotHitsOnMatchedTracks )
125 kwargs.setdefault( "plotHitsOnFakeTracks", flags.PhysVal.IDTPM.currentTrkAna.plotHitsOnFakeTracks )
126 kwargs.setdefault( "plotVertexParameters", flags.PhysVal.IDTPM.currentTrkAna.plotVertexParameters )
127 kwargs.setdefault( "useSelectedVertexTracks", flags.PhysVal.IDTPM.currentTrkAna.useSelectedVertexTracks )
128 kwargs.setdefault( "plotOfflineElectrons", flags.PhysVal.IDTPM.currentTrkAna.plotOfflineElectrons )
129 kwargs.setdefault( "ResolutionMethod", flags.PhysVal.IDTPM.currentTrkAna.ResolutionMethod )
130 kwargs.setdefault( "isITk", flags.Detector.GeometryITk )
131 kwargs.setdefault( "plotTracksInJets", "Jet" in flags.PhysVal.IDTPM.currentTrkAna.SelectOfflineObject )
132
133 kwargs.setdefault("EtaBins", flags.Tracking.ITkMainPass.etaBins if flags.Detector.GeometryITk else [-1, 9999.]) # for technical efficiencies
134 kwargs.setdefault("MinSilHits", flags.Tracking.ITkMainPass.minClusters if flags.Detector.GeometryITk else [flags.Tracking.MainPass.minClusters]) # for technical efficiencies
135
136 trkAnaSvc = CompFactory.TrackAnalysisDefinitionSvc( name, **kwargs )
137 acc.addService( trkAnaSvc )
138 return acc
139
140
141def InDetTrackPerfMonToolCfg( flags, name="InDetTrackPerfMonTool", **kwargs ):
142 '''
143 Main IDTPM tool instance CA-based configuration
144 '''
145 log = logging.getLogger( "InDetTrackPerfMonTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag )
146 acc = ComponentAccumulator()
147
148 kwargs.setdefault( "AnaTag", flags.PhysVal.IDTPM.currentTrkAna.anaTag )
149
150
151 kwargs.setdefault( "OfflineTrkParticleContainerName",
152 flags.PhysVal.IDTPM.currentTrkAna.OfflineTrkKey )
153 kwargs.setdefault( "OfflineVertexContainerName",
154 flags.PhysVal.IDTPM.currentTrkAna.OfflineVtxKey )
155
156 kwargs.setdefault( "TruthParticleContainerName",
157 flags.PhysVal.IDTPM.currentTrkAna.TruthPartKey )
158 kwargs.setdefault( "TruthVertexContainerName",
159 flags.PhysVal.IDTPM.currentTrkAna.TruthVtxKey )
160
161 kwargs.setdefault( "TriggerTrkParticleContainerName",
162 flags.PhysVal.IDTPM.currentTrkAna.TrigTrkKey )
163 kwargs.setdefault( "TriggerVertexContainerName",
164 flags.PhysVal.IDTPM.currentTrkAna.TrigVtxKey )
165
166
167 if flags.Output.doWriteAOD_IDTPM :
168 kwargs.setdefault( "writeOut", True )
169 kwargs.setdefault( "TrkAnaInfoKey",
170 "TrkAnaInfo"+flags.PhysVal.IDTPM.currentTrkAna.anaTag )
171
172 if "TrackAnalysisInfoWriteTool" not in kwargs :
173 kwargs.setdefault( "TrackAnalysisInfoWriteTool", acc.popToolsAndMerge(
175 name="TrackAnalysisInfoWriteTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
176
177
178 acc.merge( TrackAnalysisDefinitionSvcCfg( flags,
179 name="TrkAnaDefSvc"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) )
180
181
182 acc.merge( PlotsDefinitionSvcCfg( flags,
183 name="PlotsDefSvc"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) )
184
185
187 if ( ( "Truth" in flags.PhysVal.IDTPM.currentTrkAna.RefType ) or
188 ( "Truth" in flags.PhysVal.IDTPM.currentTrkAna.TestType ) ):
189 if not flags.Input.isMC:
190 log.error( "Trying to use Truth collections with non-MC sample." )
191 return None
192
193 from InDetTrackPerfMon.InDetAlgorithmConfig import TruthHitDecoratorAlgCfg, TruthDecoratorAlgCfg
194 acc.merge( TruthHitDecoratorAlgCfg( flags ) )
195 # FIXME This algorithm should not be scheduled if the decorations already exist.
196 acc.merge( TruthDecoratorAlgCfg( flags ) )
197
198
199 if ( ( flags.PhysVal.IDTPM.currentTrkAna.SelectOfflineObject ) and
200 ( "Truth" not in flags.PhysVal.IDTPM.currentTrkAna.SelectOfflineObject ) ):
201 from InDetTrackPerfMon.InDetAlgorithmConfig import OfflineObjectDecoratorAlgCfg
202 acc.merge( OfflineObjectDecoratorAlgCfg( flags ) )
203
204
205 if "TrackQualitySelectionTool" not in kwargs:
206 from InDetTrackPerfMon.InDetSelectionConfig import TrackQualitySelectionToolCfg
207 kwargs.setdefault( "TrackQualitySelectionTool", acc.popToolsAndMerge(
208 TrackQualitySelectionToolCfg( flags,
209 name="TrackQualitySelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
210
211 if "VertexQualitySelectionTool" not in kwargs:
212 from InDetTrackPerfMon.InDetSelectionConfig import VertexQualitySelectionToolCfg
213 kwargs.setdefault( "VertexQualitySelectionTool", acc.popToolsAndMerge(
214 VertexQualitySelectionToolCfg( flags,
215 name="VertexQualitySelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
216
217 if flags.PhysVal.IDTPM.currentTrkAna.doTrigNavigation:
218
219 if "TrigDecisionTool" not in kwargs:
220 from TrigDecisionTool.TrigDecisionToolConfig import TrigDecisionToolCfg
221 kwargs.setdefault( "TrigDecisionTool",
222 acc.getPrimaryAndMerge( TrigDecisionToolCfg( flags ) ) )
223
224 if "RoiSelectionTool" not in kwargs:
225 from InDetTrackPerfMon.InDetSelectionConfig import RoiSelectionToolCfg
226 kwargs.setdefault( "RoiSelectionTool", acc.popToolsAndMerge(
227 RoiSelectionToolCfg( flags,
228 name="RoiSelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
229
230 if "TrackRoiSelectionTool" not in kwargs:
231 from InDetTrackPerfMon.InDetSelectionConfig import TrackRoiSelectionToolCfg
232 kwargs.setdefault( "TrackRoiSelectionTool", acc.popToolsAndMerge(
233 TrackRoiSelectionToolCfg( flags,
234 name="TrackRoiSelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
235
236 if "VertexRoiSelectionTool" not in kwargs:
237 from InDetTrackPerfMon.InDetSelectionConfig import VertexRoiSelectionToolCfg
238 kwargs.setdefault( "VertexRoiSelectionTool", acc.popToolsAndMerge(
239 VertexRoiSelectionToolCfg( flags,
240 name="VertexRoiSelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
241
242 if "TrackMatchingTool" not in kwargs:
243 from InDetTrackPerfMon.InDetMatchingConfig import TrackMatchingToolCfg
244 matchToolCfg = TrackMatchingToolCfg( flags )
245 if matchToolCfg is not None :
246 kwargs.setdefault( "doMatch", True ) # = False by default
247 kwargs.setdefault( "TrackMatchingTool", acc.popToolsAndMerge( matchToolCfg ) )
248
249 acc.setPrivateTools( CompFactory.InDetTrackPerfMonTool( name, **kwargs ) )
250 return acc
251
252
253def InDetClusterPerfMonToolCfg( flags, name="InDetClusterPerfMonTool", **kwargs ):
254 '''
255 Tool instance CA-based configuration for cluster and space-points validation
256 Currently only available for offline-type analyses (i.e. full-scan) and Run4/ITk/ACTS
257 '''
258
259
260 if ( flags.PhysVal.IDTPM.currentTrkAna.RefType == "Trigger" or
261 flags.PhysVal.IDTPM.currentTrkAna.TestType == "Trigger" or
262 flags.PhysVal.IDTPM.currentTrkAna.doTrigNavigation ):
263 return None
264
265 acc = ComponentAccumulator()
266
267
268 folderStr = flags.PhysVal.IDTPM.DirName + "/"
269 if flags.PhysVal.IDTPM.sortPlotsByChain :
270 folderStr += "Offline/" + flags.PhysVal.IDTPM.currentTrkAna.SubFolder
271 else :
272 folderStr += flags.PhysVal.IDTPM.currentTrkAna.SubFolder + "/Offline"
273 kwargs.setdefault( "folder", folderStr )
274
275 typedCollections = flags.Input.TypedCollections
276
277
278 if ( flags.PhysVal.IDTPM.currentTrkAna.PixelClusterKey and
279 "xAOD::PixelClusterContainer#"+flags.PhysVal.IDTPM.currentTrkAna.PixelClusterKey in typedCollections ):
280 kwargs.setdefault( "doPixelClusters", True )
281 kwargs.setdefault( "pixelClustersDirectory", "PixelClusters" )
282 kwargs.setdefault( "PixelClusterContainerKey",
283 flags.PhysVal.IDTPM.currentTrkAna.PixelClusterKey )
284
285 if ( flags.PhysVal.IDTPM.currentTrkAna.StripClusterKey and
286 "xAOD::StripClusterContainer#"+flags.PhysVal.IDTPM.currentTrkAna.StripClusterKey in typedCollections ):
287 kwargs.setdefault( "doStripClusters", True )
288 kwargs.setdefault( "stripClustersDirectory", "StripClusters" )
289 kwargs.setdefault( "StripClusterContainerKey",
290 flags.PhysVal.IDTPM.currentTrkAna.StripClusterKey )
291
292
293 if ( flags.PhysVal.IDTPM.currentTrkAna.PixelSpacePointKey and
294 "xAOD::SpacePointContainer#"+flags.PhysVal.IDTPM.currentTrkAna.PixelSpacePointKey in typedCollections ):
295 kwargs.setdefault( "doPixelSpacePoints", True )
296 kwargs.setdefault( "pixelSpacePointsDirectory", "PixelSpacePoints" )
297 kwargs.setdefault( "PixelSpacePointContainerKey",
298 flags.PhysVal.IDTPM.currentTrkAna.PixelSpacePointKey )
299
300 if ( flags.PhysVal.IDTPM.currentTrkAna.StripSpacePointKey and
301 "xAOD::SpacePointContainer#"+flags.PhysVal.IDTPM.currentTrkAna.StripSpacePointKey in typedCollections ):
302 kwargs.setdefault( "doStripSpacePoints", True )
303 kwargs.setdefault( "stripSpacePointsDirectory", "StripSpacePoints" )
304 kwargs.setdefault( "StripSpacePointContainerKey",
305 flags.PhysVal.IDTPM.currentTrkAna.StripSpacePointKey )
306
307 if ( flags.PhysVal.IDTPM.currentTrkAna.StripOverlapSpacePointKey and
308 "xAOD::SpacePointContainer#"+flags.PhysVal.IDTPM.currentTrkAna.StripOverlapSpacePointKey in typedCollections ):
309 kwargs.setdefault( "doStripOverlapSpacePoints", True )
310 kwargs.setdefault( "stripSpaceOverlapPointsDirectory", "StripOverlapSpacePoints" )
311 kwargs.setdefault( "StripOverlapSpacePointContainerKey",
312 flags.PhysVal.IDTPM.currentTrkAna.StripOverlapSpacePointKey )
313
314 acc.setPrivateTools( CompFactory.ActsTrk.PhysValTool( name, **kwargs ) )
315 return acc
316
317
319 '''
320 CA-based configuration of all tool instances (= TrackAnalyses)
321 '''
322 log = logging.getLogger( "InDetTrackPerfMonCfg" )
323 acc = ComponentAccumulator()
324
325
326 tools = []
327
328 for trkAnaName in flags.PhysVal.IDTPM.trkAnaNames :
329
330 flags_thisTrkAna = flags.cloneAndReplace( "PhysVal.IDTPM.currentTrkAna",
331 "PhysVal.IDTPM."+trkAnaName )
332
333 if flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.enabled:
334 log.debug( "Scheduling TrackAnalysis: %s",
335 flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.anaTag )
336
337
338 tools.append(
339 acc.popToolsAndMerge( InDetTrackPerfMonToolCfg( flags_thisTrkAna,
340 name="InDetTrackPerfMonTool"+
341 flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
342
343
344 if flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.doClusterValidation :
345 tool = InDetClusterPerfMonToolCfg( flags_thisTrkAna,
346 name="InDetClusterPerfMonTool"+
347 flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.anaTag )
348 if tool : tools.append( acc.popToolsAndMerge( tool ) )
349
350 from PhysValMonitoring.PhysValMonitoringConfig import PhysValMonitoringCfg
351 acc.merge( PhysValMonitoringCfg( flags, tools=tools ) )
352
353
354 if flags.Output.doWriteAOD_IDTPM :
355 from InDetTrackPerfMon.InDetOutputConfig import InDetOutputCfg
356 acc.merge( InDetOutputCfg(flags) )
357
358 return acc
JsonPlotsDefReadToolCfg(flags, name="JsonPlotsDefReadTool", **kwargs)
TrackAnalysisDefinitionSvcCfg(flags, name="TrkAnaDefSvc", **kwargs)
InDetClusterPerfMonToolCfg(flags, name="InDetClusterPerfMonTool", **kwargs)
TrackAnalysisInfoWriteToolCfg(flags, name="TrackAnalysisInfoWriteTool", **kwargs)
InDetTrackPerfMonToolCfg(flags, name="InDetTrackPerfMonTool", **kwargs)
PlotsDefinitionSvcCfg(flags, name="PlotsDefSvc", **kwargs)
PlotsDefReadToolCfg(flags, name="PlotsDefReadTool", **kwargs)