5 '''@file InDetTrackPerfMonConfig.py
8 @brief Main CA-based python configuration for InDetTrackPerfMonTool
11 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
12 from AthenaConfiguration.ComponentFactory
import CompFactory
13 from AthenaCommon.Logging
import logging
18 Tool to read the plots definitions from an input file in JSON format
20 log = logging.getLogger(
"JsonPlotsDefReadTool" )
24 from InDetTrackPerfMon.ConfigUtils
import getPlotsDefList
26 log.debug(
"Loading the following plot definitions:" )
27 for plotDef
in plotsDefList : log.debug(
"\t-> %s", plotDef )
29 kwargs.setdefault(
"PlotsDefs", plotsDefList )
32 CompFactory.IDTPM.JsonPlotsDefReadTool( name, **kwargs ) )
38 CA-based configuration for the Tool to read the plots definition
40 log = logging.getLogger(
"PlotsDefReadTool" )
42 if flags.PhysVal.IDTPM.plotsDefFormat ==
"JSON" :
44 flags, name =
"JsonPlotsDefReadTool" +
45 flags.PhysVal.IDTPM.currentTrkAna.anaTag, **kwargs )
47 log.error(
"Non supported plots definition file type %s",
48 flags.PhysVal.IDTPM.plotsDefFormat )
54 CA-based configuration for the PlotsDefinition Service
58 if "PlotsDefReadTool" not in kwargs:
59 kwargs.setdefault(
"PlotsDefReadTool", acc.popToolsAndMerge(
63 CompFactory.PlotsDefinitionSvc( name, **kwargs ) )
69 Tool to write TrackAnalysisInfo to StoreGate
73 kwargs.setdefault(
"AnaTag", flags.PhysVal.IDTPM.currentTrkAna.anaTag )
75 acc.setPrivateTools( CompFactory.IDTPM.TrackAnalysisInfoWriteTool( name, **kwargs ) )
81 CA-based configuration for the TrackAnalysisDefinition Service
83 log = logging.getLogger(
"TrkAnaDefSvc"+flags.PhysVal.IDTPM.currentTrkAna.anaTag )
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 )
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 )
95 kwargs.setdefault(
"pileupSwitch", flags.PhysVal.IDTPM.currentTrkAna.pileupSwitch )
96 kwargs.setdefault(
"hasFullPileupTruth",
97 (
"xAOD::TruthPileupEventContainer#TruthPileupEvents" in flags.Input.TypedCollections ) )
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 ) )
103 kwargs.setdefault(
"MatchingType", flags.PhysVal.IDTPM.currentTrkAna.MatchingType )
104 kwargs.setdefault(
"MatchingTruthProb", flags.PhysVal.IDTPM.currentTrkAna.truthProbCut )
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" )
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 )
133 kwargs.setdefault(
"EtaBins", flags.Tracking.ITkMainPass.etaBins
if flags.Detector.GeometryITk
else [-1, 9999.])
134 kwargs.setdefault(
"MinSilHits", flags.Tracking.ITkMainPass.minClusters
if flags.Detector.GeometryITk
else [flags.Tracking.MainPass.minClusters])
136 trkAnaSvc = CompFactory.TrackAnalysisDefinitionSvc( name, **kwargs )
137 acc.addService( trkAnaSvc )
143 Main IDTPM tool instance CA-based configuration
145 log = logging.getLogger(
"InDetTrackPerfMonTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag )
148 kwargs.setdefault(
"AnaTag", flags.PhysVal.IDTPM.currentTrkAna.anaTag )
151 kwargs.setdefault(
"OfflineTrkParticleContainerName",
152 flags.PhysVal.IDTPM.currentTrkAna.OfflineTrkKey )
153 kwargs.setdefault(
"OfflineVertexContainerName",
154 flags.PhysVal.IDTPM.currentTrkAna.OfflineVtxKey )
156 kwargs.setdefault(
"TruthParticleContainerName",
157 flags.PhysVal.IDTPM.currentTrkAna.TruthPartKey )
158 kwargs.setdefault(
"TruthVertexContainerName",
159 flags.PhysVal.IDTPM.currentTrkAna.TruthVtxKey )
161 kwargs.setdefault(
"TriggerTrkParticleContainerName",
162 flags.PhysVal.IDTPM.currentTrkAna.TrigTrkKey )
163 kwargs.setdefault(
"TriggerVertexContainerName",
164 flags.PhysVal.IDTPM.currentTrkAna.TrigVtxKey )
167 if flags.Output.doWriteAOD_IDTPM :
168 kwargs.setdefault(
"writeOut",
True )
169 kwargs.setdefault(
"TrkAnaInfoKey",
170 "TrkAnaInfo"+flags.PhysVal.IDTPM.currentTrkAna.anaTag )
172 if "TrackAnalysisInfoWriteTool" not in kwargs :
173 kwargs.setdefault(
"TrackAnalysisInfoWriteTool", acc.popToolsAndMerge(
175 name=
"TrackAnalysisInfoWriteTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
179 name=
"TrkAnaDefSvc"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) )
183 name=
"PlotsDefSvc"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) )
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." )
193 from InDetTrackPerfMon.InDetAlgorithmConfig
import TruthHitDecoratorAlgCfg, TruthDecoratorAlgCfg
198 if ( ( flags.PhysVal.IDTPM.currentTrkAna.SelectOfflineObject )
and
199 (
"Truth" not in flags.PhysVal.IDTPM.currentTrkAna.SelectOfflineObject ) ):
200 from InDetTrackPerfMon.InDetAlgorithmConfig
import OfflineObjectDecoratorAlgCfg
204 if "TrackQualitySelectionTool" not in kwargs:
205 from InDetTrackPerfMon.InDetSelectionConfig
import TrackQualitySelectionToolCfg
206 kwargs.setdefault(
"TrackQualitySelectionTool", acc.popToolsAndMerge(
208 name=
"TrackQualitySelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
210 if "VertexQualitySelectionTool" not in kwargs:
211 from InDetTrackPerfMon.InDetSelectionConfig
import VertexQualitySelectionToolCfg
212 kwargs.setdefault(
"VertexQualitySelectionTool", acc.popToolsAndMerge(
214 name=
"VertexQualitySelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
216 if flags.PhysVal.IDTPM.currentTrkAna.doTrigNavigation:
218 if "TrigDecisionTool" not in kwargs:
219 from TrigDecisionTool.TrigDecisionToolConfig
import TrigDecisionToolCfg
220 kwargs.setdefault(
"TrigDecisionTool",
223 if "RoiSelectionTool" not in kwargs:
224 from InDetTrackPerfMon.InDetSelectionConfig
import RoiSelectionToolCfg
225 kwargs.setdefault(
"RoiSelectionTool", acc.popToolsAndMerge(
227 name=
"RoiSelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
229 if "TrackRoiSelectionTool" not in kwargs:
230 from InDetTrackPerfMon.InDetSelectionConfig
import TrackRoiSelectionToolCfg
231 kwargs.setdefault(
"TrackRoiSelectionTool", acc.popToolsAndMerge(
233 name=
"TrackRoiSelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
235 if "VertexRoiSelectionTool" not in kwargs:
236 from InDetTrackPerfMon.InDetSelectionConfig
import VertexRoiSelectionToolCfg
237 kwargs.setdefault(
"VertexRoiSelectionTool", acc.popToolsAndMerge(
239 name=
"VertexRoiSelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
241 if "TrackMatchingTool" not in kwargs:
242 from InDetTrackPerfMon.InDetMatchingConfig
import TrackMatchingToolCfg
244 if matchToolCfg
is not None :
245 kwargs.setdefault(
"doMatch",
True )
246 kwargs.setdefault(
"TrackMatchingTool", acc.popToolsAndMerge( matchToolCfg ) )
248 acc.setPrivateTools( CompFactory.InDetTrackPerfMonTool( name, **kwargs ) )
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
259 if ( flags.PhysVal.IDTPM.currentTrkAna.RefType ==
"Trigger" or
260 flags.PhysVal.IDTPM.currentTrkAna.TestType ==
"Trigger" or
261 flags.PhysVal.IDTPM.currentTrkAna.doTrigNavigation ):
267 folderStr = flags.PhysVal.IDTPM.DirName +
"/"
268 if flags.PhysVal.IDTPM.sortPlotsByChain :
269 folderStr +=
"Offline/" + flags.PhysVal.IDTPM.currentTrkAna.SubFolder
271 folderStr += flags.PhysVal.IDTPM.currentTrkAna.SubFolder +
"/Offline"
272 kwargs.setdefault(
"folder", folderStr )
274 typedCollections = flags.Input.TypedCollections
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 )
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 )
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 )
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 )
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 )
313 acc.setPrivateTools( CompFactory.ActsTrk.PhysValTool( name, **kwargs ) )
319 CA-based configuration of all tool instances (= TrackAnalyses)
321 log = logging.getLogger(
"InDetTrackPerfMonCfg" )
327 for trkAnaName
in flags.PhysVal.IDTPM.trkAnaNames :
329 flags_thisTrkAna = flags.cloneAndReplace(
"PhysVal.IDTPM.currentTrkAna",
330 "PhysVal.IDTPM."+trkAnaName )
332 if flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.enabled:
333 log.debug(
"Scheduling TrackAnalysis: %s",
334 flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.anaTag )
339 name=
"InDetTrackPerfMonTool"+
340 flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
343 if flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.doClusterValidation :
345 name=
"InDetClusterPerfMonTool"+
346 flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.anaTag )
347 if tool : tools.append( acc.popToolsAndMerge( tool ) )
349 from PhysValMonitoring.PhysValMonitoringConfig
import PhysValMonitoringCfg
353 if flags.Output.doWriteAOD_IDTPM :
354 from InDetTrackPerfMon.InDetOutputConfig
import InDetOutputCfg