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(
"plotHitsOnTracksReference", flags.PhysVal.IDTPM.currentTrkAna.plotHitsOnTracksReference )
123 kwargs.setdefault(
"plotHitsOnMatchedTracks", flags.PhysVal.IDTPM.currentTrkAna.plotHitsOnMatchedTracks )
124 kwargs.setdefault(
"plotHitsOnFakeTracks", flags.PhysVal.IDTPM.currentTrkAna.plotHitsOnFakeTracks )
125 kwargs.setdefault(
"plotVertexParameters", flags.PhysVal.IDTPM.currentTrkAna.plotVertexParameters )
126 kwargs.setdefault(
"useSelectedVertexTracks", flags.PhysVal.IDTPM.currentTrkAna.useSelectedVertexTracks )
127 kwargs.setdefault(
"plotOfflineElectrons", flags.PhysVal.IDTPM.currentTrkAna.plotOfflineElectrons )
128 kwargs.setdefault(
"ResolutionMethod", flags.PhysVal.IDTPM.currentTrkAna.ResolutionMethod )
129 kwargs.setdefault(
"isITk", flags.Detector.GeometryITk )
130 kwargs.setdefault(
"plotTracksInJets",
"Jet" in flags.PhysVal.IDTPM.currentTrkAna.SelectOfflineObject )
132 kwargs.setdefault(
"EtaBins", flags.Tracking.ITkMainPass.etaBins
if flags.Detector.GeometryITk
else [-1, 9999.])
133 kwargs.setdefault(
"MinSilHits", flags.Tracking.ITkMainPass.minClusters
if flags.Detector.GeometryITk
else [flags.Tracking.MainPass.minClusters])
135 trkAnaSvc = CompFactory.TrackAnalysisDefinitionSvc( name, **kwargs )
136 acc.addService( trkAnaSvc )
142 Main IDTPM tool instance CA-based configuration
144 log = logging.getLogger(
"InDetTrackPerfMonTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag )
147 kwargs.setdefault(
"AnaTag", flags.PhysVal.IDTPM.currentTrkAna.anaTag )
150 kwargs.setdefault(
"OfflineTrkParticleContainerName",
151 flags.PhysVal.IDTPM.currentTrkAna.OfflineTrkKey )
152 kwargs.setdefault(
"OfflineVertexContainerName",
153 flags.PhysVal.IDTPM.currentTrkAna.OfflineVtxKey )
155 kwargs.setdefault(
"TruthParticleContainerName",
156 flags.PhysVal.IDTPM.currentTrkAna.TruthPartKey )
157 kwargs.setdefault(
"TruthVertexContainerName",
158 flags.PhysVal.IDTPM.currentTrkAna.TruthVtxKey )
160 kwargs.setdefault(
"TriggerTrkParticleContainerName",
161 flags.PhysVal.IDTPM.currentTrkAna.TrigTrkKey )
162 kwargs.setdefault(
"TriggerVertexContainerName",
163 flags.PhysVal.IDTPM.currentTrkAna.TrigVtxKey )
166 if flags.Output.doWriteAOD_IDTPM :
167 kwargs.setdefault(
"writeOut",
True )
168 kwargs.setdefault(
"TrkAnaInfoKey",
169 "TrkAnaInfo"+flags.PhysVal.IDTPM.currentTrkAna.anaTag )
171 if "TrackAnalysisInfoWriteTool" not in kwargs :
172 kwargs.setdefault(
"TrackAnalysisInfoWriteTool", acc.popToolsAndMerge(
174 name=
"TrackAnalysisInfoWriteTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
178 name=
"TrkAnaDefSvc"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) )
182 name=
"PlotsDefSvc"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) )
186 if ( (
"Truth" in flags.PhysVal.IDTPM.currentTrkAna.RefType )
or
187 (
"Truth" in flags.PhysVal.IDTPM.currentTrkAna.TestType ) ):
188 if not flags.Input.isMC:
189 log.error(
"Trying to use Truth collections with non-MC sample." )
192 from InDetTrackPerfMon.InDetAlgorithmConfig
import TruthHitDecoratorAlgCfg, TruthDecoratorAlgCfg
197 if ( ( flags.PhysVal.IDTPM.currentTrkAna.SelectOfflineObject )
and
198 (
"Truth" not in flags.PhysVal.IDTPM.currentTrkAna.SelectOfflineObject ) ):
199 from InDetTrackPerfMon.InDetAlgorithmConfig
import OfflineObjectDecoratorAlgCfg
203 if "TrackQualitySelectionTool" not in kwargs:
204 from InDetTrackPerfMon.InDetSelectionConfig
import TrackQualitySelectionToolCfg
205 kwargs.setdefault(
"TrackQualitySelectionTool", acc.popToolsAndMerge(
207 name=
"TrackQualitySelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
209 if "VertexQualitySelectionTool" not in kwargs:
210 from InDetTrackPerfMon.InDetSelectionConfig
import VertexQualitySelectionToolCfg
211 kwargs.setdefault(
"VertexQualitySelectionTool", acc.popToolsAndMerge(
213 name=
"VertexQualitySelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
215 if flags.PhysVal.IDTPM.currentTrkAna.doTrigNavigation:
217 if "TrigDecisionTool" not in kwargs:
218 from TrigDecisionTool.TrigDecisionToolConfig
import TrigDecisionToolCfg
219 kwargs.setdefault(
"TrigDecisionTool",
222 if "RoiSelectionTool" not in kwargs:
223 from InDetTrackPerfMon.InDetSelectionConfig
import RoiSelectionToolCfg
224 kwargs.setdefault(
"RoiSelectionTool", acc.popToolsAndMerge(
226 name=
"RoiSelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
228 if "TrackRoiSelectionTool" not in kwargs:
229 from InDetTrackPerfMon.InDetSelectionConfig
import TrackRoiSelectionToolCfg
230 kwargs.setdefault(
"TrackRoiSelectionTool", acc.popToolsAndMerge(
232 name=
"TrackRoiSelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
234 if "VertexRoiSelectionTool" not in kwargs:
235 from InDetTrackPerfMon.InDetSelectionConfig
import VertexRoiSelectionToolCfg
236 kwargs.setdefault(
"VertexRoiSelectionTool", acc.popToolsAndMerge(
238 name=
"VertexRoiSelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
240 if "TrackMatchingTool" not in kwargs:
241 from InDetTrackPerfMon.InDetMatchingConfig
import TrackMatchingToolCfg
243 if matchToolCfg
is not None :
244 kwargs.setdefault(
"doMatch",
True )
245 kwargs.setdefault(
"TrackMatchingTool", acc.popToolsAndMerge( matchToolCfg ) )
247 acc.setPrivateTools( CompFactory.InDetTrackPerfMonTool( name, **kwargs ) )
253 Tool instance CA-based configuration for cluster and space-points validation
254 Currently only available for offline-type analyses (i.e. full-scan) and Run4/ITk/ACTS
258 if ( flags.PhysVal.IDTPM.currentTrkAna.RefType ==
"Trigger" or
259 flags.PhysVal.IDTPM.currentTrkAna.TestType ==
"Trigger" or
260 flags.PhysVal.IDTPM.currentTrkAna.doTrigNavigation ):
266 folderStr = flags.PhysVal.IDTPM.DirName +
"/"
267 if flags.PhysVal.IDTPM.sortPlotsByChain :
268 folderStr +=
"Offline/" + flags.PhysVal.IDTPM.currentTrkAna.SubFolder
270 folderStr += flags.PhysVal.IDTPM.currentTrkAna.SubFolder +
"/Offline"
271 kwargs.setdefault(
"folder", folderStr )
273 typedCollections = flags.Input.TypedCollections
276 if ( flags.PhysVal.IDTPM.currentTrkAna.PixelClusterKey
and
277 "xAOD::PixelClusterContainer#"+flags.PhysVal.IDTPM.currentTrkAna.PixelClusterKey
in typedCollections ):
278 kwargs.setdefault(
"doPixelClusters",
True )
279 kwargs.setdefault(
"pixelClustersDirectory",
"PixelClusters" )
280 kwargs.setdefault(
"PixelClusterContainerKey",
281 flags.PhysVal.IDTPM.currentTrkAna.PixelClusterKey )
283 if ( flags.PhysVal.IDTPM.currentTrkAna.StripClusterKey
and
284 "xAOD::StripClusterContainer#"+flags.PhysVal.IDTPM.currentTrkAna.StripClusterKey
in typedCollections ):
285 kwargs.setdefault(
"doStripClusters",
True )
286 kwargs.setdefault(
"stripClustersDirectory",
"StripClusters" )
287 kwargs.setdefault(
"StripClusterContainerKey",
288 flags.PhysVal.IDTPM.currentTrkAna.StripClusterKey )
291 if ( flags.PhysVal.IDTPM.currentTrkAna.PixelSpacePointKey
and
292 "xAOD::SpacePointContainer#"+flags.PhysVal.IDTPM.currentTrkAna.PixelSpacePointKey
in typedCollections ):
293 kwargs.setdefault(
"doPixelSpacePoints",
True )
294 kwargs.setdefault(
"pixelSpacePointsDirectory",
"PixelSpacePoints" )
295 kwargs.setdefault(
"PixelSpacePointContainerKey",
296 flags.PhysVal.IDTPM.currentTrkAna.PixelSpacePointKey )
298 if ( flags.PhysVal.IDTPM.currentTrkAna.StripSpacePointKey
and
299 "xAOD::SpacePointContainer#"+flags.PhysVal.IDTPM.currentTrkAna.StripSpacePointKey
in typedCollections ):
300 kwargs.setdefault(
"doStripSpacePoints",
True )
301 kwargs.setdefault(
"stripSpacePointsDirectory",
"StripSpacePoints" )
302 kwargs.setdefault(
"StripSpacePointContainerKey",
303 flags.PhysVal.IDTPM.currentTrkAna.StripSpacePointKey )
305 if ( flags.PhysVal.IDTPM.currentTrkAna.StripOverlapSpacePointKey
and
306 "xAOD::SpacePointContainer#"+flags.PhysVal.IDTPM.currentTrkAna.StripOverlapSpacePointKey
in typedCollections ):
307 kwargs.setdefault(
"doStripOverlapSpacePoints",
True )
308 kwargs.setdefault(
"stripSpaceOverlapPointsDirectory",
"StripOverlapSpacePoints" )
309 kwargs.setdefault(
"StripOverlapSpacePointContainerKey",
310 flags.PhysVal.IDTPM.currentTrkAna.StripOverlapSpacePointKey )
312 acc.setPrivateTools( CompFactory.ActsTrk.PhysValTool( name, **kwargs ) )
318 CA-based configuration of all tool instances (= TrackAnalyses)
320 log = logging.getLogger(
"InDetTrackPerfMonCfg" )
326 for trkAnaName
in flags.PhysVal.IDTPM.trkAnaNames :
328 flags_thisTrkAna = flags.cloneAndReplace(
"PhysVal.IDTPM.currentTrkAna",
329 "PhysVal.IDTPM."+trkAnaName )
331 if flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.enabled:
332 log.debug(
"Scheduling TrackAnalysis: %s",
333 flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.anaTag )
338 name=
"InDetTrackPerfMonTool"+
339 flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
342 if flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.doClusterValidation :
344 name=
"InDetClusterPerfMonTool"+
345 flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.anaTag )
346 if tool : tools.append( acc.popToolsAndMerge( tool ) )
348 from PhysValMonitoring.PhysValMonitoringConfig
import PhysValMonitoringCfg
352 if flags.Output.doWriteAOD_IDTPM :
353 from InDetTrackPerfMon.InDetOutputConfig
import InDetOutputCfg