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 acc.merge( TruthDecoratorAlgCfg( flags ) )
196
197
198 if ( ( flags.PhysVal.IDTPM.currentTrkAna.SelectOfflineObject ) and
199 ( "Truth" not in flags.PhysVal.IDTPM.currentTrkAna.SelectOfflineObject ) ):
200 from InDetTrackPerfMon.InDetAlgorithmConfig import OfflineObjectDecoratorAlgCfg
201 acc.merge( OfflineObjectDecoratorAlgCfg( flags ) )
202
203
204 if "TrackQualitySelectionTool" not in kwargs:
205 from InDetTrackPerfMon.InDetSelectionConfig import TrackQualitySelectionToolCfg
206 kwargs.setdefault( "TrackQualitySelectionTool", acc.popToolsAndMerge(
207 TrackQualitySelectionToolCfg( flags,
208 name="TrackQualitySelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
209
210 if "VertexQualitySelectionTool" not in kwargs:
211 from InDetTrackPerfMon.InDetSelectionConfig import VertexQualitySelectionToolCfg
212 kwargs.setdefault( "VertexQualitySelectionTool", acc.popToolsAndMerge(
213 VertexQualitySelectionToolCfg( flags,
214 name="VertexQualitySelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
215
216 if flags.PhysVal.IDTPM.currentTrkAna.doTrigNavigation:
217
218 if "TrigDecisionTool" not in kwargs:
219 from TrigDecisionTool.TrigDecisionToolConfig import TrigDecisionToolCfg
220 kwargs.setdefault( "TrigDecisionTool",
221 acc.getPrimaryAndMerge( TrigDecisionToolCfg( flags ) ) )
222
223 if "RoiSelectionTool" not in kwargs:
224 from InDetTrackPerfMon.InDetSelectionConfig import RoiSelectionToolCfg
225 kwargs.setdefault( "RoiSelectionTool", acc.popToolsAndMerge(
226 RoiSelectionToolCfg( flags,
227 name="RoiSelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
228
229 if "TrackRoiSelectionTool" not in kwargs:
230 from InDetTrackPerfMon.InDetSelectionConfig import TrackRoiSelectionToolCfg
231 kwargs.setdefault( "TrackRoiSelectionTool", acc.popToolsAndMerge(
232 TrackRoiSelectionToolCfg( flags,
233 name="TrackRoiSelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
234
235 if "VertexRoiSelectionTool" not in kwargs:
236 from InDetTrackPerfMon.InDetSelectionConfig import VertexRoiSelectionToolCfg
237 kwargs.setdefault( "VertexRoiSelectionTool", acc.popToolsAndMerge(
238 VertexRoiSelectionToolCfg( flags,
239 name="VertexRoiSelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
240
241 if "TrackMatchingTool" not in kwargs:
242 from InDetTrackPerfMon.InDetMatchingConfig import TrackMatchingToolCfg
243 matchToolCfg = TrackMatchingToolCfg( flags )
244 if matchToolCfg is not None :
245 kwargs.setdefault( "doMatch", True ) # = False by default
246 kwargs.setdefault( "TrackMatchingTool", acc.popToolsAndMerge( matchToolCfg ) )
247
248 acc.setPrivateTools( CompFactory.InDetTrackPerfMonTool( name, **kwargs ) )
249 return acc
250
251
252def InDetClusterPerfMonToolCfg( flags, name="InDetClusterPerfMonTool", **kwargs ):
253 '''
254 Tool instance CA-based configuration for cluster and space-points validation
255 Currently only available for offline-type analyses (i.e. full-scan) and Run4/ITk/ACTS
256 '''
257
258
259 if ( flags.PhysVal.IDTPM.currentTrkAna.RefType == "Trigger" or
260 flags.PhysVal.IDTPM.currentTrkAna.TestType == "Trigger" or
261 flags.PhysVal.IDTPM.currentTrkAna.doTrigNavigation ):
262 return None
263
264 acc = ComponentAccumulator()
265
266
267 folderStr = flags.PhysVal.IDTPM.DirName + "/"
268 if flags.PhysVal.IDTPM.sortPlotsByChain :
269 folderStr += "Offline/" + flags.PhysVal.IDTPM.currentTrkAna.SubFolder
270 else :
271 folderStr += flags.PhysVal.IDTPM.currentTrkAna.SubFolder + "/Offline"
272 kwargs.setdefault( "folder", folderStr )
273
274 typedCollections = flags.Input.TypedCollections
275
276
277 if ( flags.PhysVal.IDTPM.currentTrkAna.PixelClusterKey and
278 "xAOD::PixelClusterContainer#"+flags.PhysVal.IDTPM.currentTrkAna.PixelClusterKey in typedCollections ):
279 kwargs.setdefault( "doPixelClusters", True )
280 kwargs.setdefault( "pixelClustersDirectory", "PixelClusters" )
281 kwargs.setdefault( "PixelClusterContainerKey",
282 flags.PhysVal.IDTPM.currentTrkAna.PixelClusterKey )
283
284 if ( flags.PhysVal.IDTPM.currentTrkAna.StripClusterKey and
285 "xAOD::StripClusterContainer#"+flags.PhysVal.IDTPM.currentTrkAna.StripClusterKey in typedCollections ):
286 kwargs.setdefault( "doStripClusters", True )
287 kwargs.setdefault( "stripClustersDirectory", "StripClusters" )
288 kwargs.setdefault( "StripClusterContainerKey",
289 flags.PhysVal.IDTPM.currentTrkAna.StripClusterKey )
290
291
292 if ( flags.PhysVal.IDTPM.currentTrkAna.PixelSpacePointKey and
293 "xAOD::SpacePointContainer#"+flags.PhysVal.IDTPM.currentTrkAna.PixelSpacePointKey in typedCollections ):
294 kwargs.setdefault( "doPixelSpacePoints", True )
295 kwargs.setdefault( "pixelSpacePointsDirectory", "PixelSpacePoints" )
296 kwargs.setdefault( "PixelSpacePointContainerKey",
297 flags.PhysVal.IDTPM.currentTrkAna.PixelSpacePointKey )
298
299 if ( flags.PhysVal.IDTPM.currentTrkAna.StripSpacePointKey and
300 "xAOD::SpacePointContainer#"+flags.PhysVal.IDTPM.currentTrkAna.StripSpacePointKey in typedCollections ):
301 kwargs.setdefault( "doStripSpacePoints", True )
302 kwargs.setdefault( "stripSpacePointsDirectory", "StripSpacePoints" )
303 kwargs.setdefault( "StripSpacePointContainerKey",
304 flags.PhysVal.IDTPM.currentTrkAna.StripSpacePointKey )
305
306 if ( flags.PhysVal.IDTPM.currentTrkAna.StripOverlapSpacePointKey and
307 "xAOD::SpacePointContainer#"+flags.PhysVal.IDTPM.currentTrkAna.StripOverlapSpacePointKey in typedCollections ):
308 kwargs.setdefault( "doStripOverlapSpacePoints", True )
309 kwargs.setdefault( "stripSpaceOverlapPointsDirectory", "StripOverlapSpacePoints" )
310 kwargs.setdefault( "StripOverlapSpacePointContainerKey",
311 flags.PhysVal.IDTPM.currentTrkAna.StripOverlapSpacePointKey )
312
313 acc.setPrivateTools( CompFactory.ActsTrk.PhysValTool( name, **kwargs ) )
314 return acc
315
316
318 '''
319 CA-based configuration of all tool instances (= TrackAnalyses)
320 '''
321 log = logging.getLogger( "InDetTrackPerfMonCfg" )
322 acc = ComponentAccumulator()
323
324
325 tools = []
326
327 for trkAnaName in flags.PhysVal.IDTPM.trkAnaNames :
328
329 flags_thisTrkAna = flags.cloneAndReplace( "PhysVal.IDTPM.currentTrkAna",
330 "PhysVal.IDTPM."+trkAnaName )
331
332 if flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.enabled:
333 log.debug( "Scheduling TrackAnalysis: %s",
334 flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.anaTag )
335
336
337 tools.append(
338 acc.popToolsAndMerge( InDetTrackPerfMonToolCfg( flags_thisTrkAna,
339 name="InDetTrackPerfMonTool"+
340 flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
341
342
343 if flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.doClusterValidation :
344 tool = InDetClusterPerfMonToolCfg( flags_thisTrkAna,
345 name="InDetClusterPerfMonTool"+
346 flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.anaTag )
347 if tool : tools.append( acc.popToolsAndMerge( tool ) )
348
349 from PhysValMonitoring.PhysValMonitoringConfig import PhysValMonitoringCfg
350 acc.merge( PhysValMonitoringCfg( flags, tools=tools ) )
351
352
353 if flags.Output.doWriteAOD_IDTPM :
354 from InDetTrackPerfMon.InDetOutputConfig import InDetOutputCfg
355 acc.merge( InDetOutputCfg(flags) )
356
357 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)