81 CA-based configuration for the TrackAnalysisDefinition Service
83 log = logging.getLogger(
"TrkAnaDefSvc"+flags.PhysVal.IDTPM.currentTrkAna.anaTag )
84 acc = ComponentAccumulator()
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 )
146 acc = ComponentAccumulator()
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
194 acc.merge( TruthHitDecoratorAlgCfg( flags ) )
195 acc.merge( TruthDecoratorAlgCfg( flags ) )
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 ) )
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 ) ) )
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 ) ) )
216 if flags.PhysVal.IDTPM.currentTrkAna.doTrigNavigation:
218 if "TrigDecisionTool" not in kwargs:
219 from TrigDecisionTool.TrigDecisionToolConfig
import TrigDecisionToolCfg
220 kwargs.setdefault(
"TrigDecisionTool",
221 acc.getPrimaryAndMerge( TrigDecisionToolCfg( flags ) ) )
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 ) ) )
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 ) ) )
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 ) ) )
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 )
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 ):
264 acc = ComponentAccumulator()
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" )
322 acc = ComponentAccumulator()
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
350 acc.merge( PhysValMonitoringCfg( flags, tools=tools ) )
353 if flags.Output.doWriteAOD_IDTPM :
354 from InDetTrackPerfMon.InDetOutputConfig
import InDetOutputCfg
355 acc.merge( InDetOutputCfg(flags) )