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 ) )
196 acc.merge( TruthDecoratorAlgCfg( flags ) )
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 ) )
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 ) ) )
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 ) ) )
217 if flags.PhysVal.IDTPM.currentTrkAna.doTrigNavigation:
219 if "TrigDecisionTool" not in kwargs:
220 from TrigDecisionTool.TrigDecisionToolConfig
import TrigDecisionToolCfg
221 kwargs.setdefault(
"TrigDecisionTool",
222 acc.getPrimaryAndMerge( TrigDecisionToolCfg( flags ) ) )
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 ) ) )
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 ) ) )
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 ) ) )
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 )
247 kwargs.setdefault(
"TrackMatchingTool", acc.popToolsAndMerge( matchToolCfg ) )
249 acc.setPrivateTools( CompFactory.InDetTrackPerfMonTool( name, **kwargs ) )
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
260 if ( flags.PhysVal.IDTPM.currentTrkAna.RefType ==
"Trigger" or
261 flags.PhysVal.IDTPM.currentTrkAna.TestType ==
"Trigger" or
262 flags.PhysVal.IDTPM.currentTrkAna.doTrigNavigation ):
265 acc = ComponentAccumulator()
268 folderStr = flags.PhysVal.IDTPM.DirName +
"/"
269 if flags.PhysVal.IDTPM.sortPlotsByChain :
270 folderStr +=
"Offline/" + flags.PhysVal.IDTPM.currentTrkAna.SubFolder
272 folderStr += flags.PhysVal.IDTPM.currentTrkAna.SubFolder +
"/Offline"
273 kwargs.setdefault(
"folder", folderStr )
275 typedCollections = flags.Input.TypedCollections
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 )
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 )
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 )
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 )
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 )
314 acc.setPrivateTools( CompFactory.ActsTrk.PhysValTool( name, **kwargs ) )
320 CA-based configuration of all tool instances (= TrackAnalyses)
322 log = logging.getLogger(
"InDetTrackPerfMonCfg" )
323 acc = ComponentAccumulator()
328 for trkAnaName
in flags.PhysVal.IDTPM.trkAnaNames :
330 flags_thisTrkAna = flags.cloneAndReplace(
"PhysVal.IDTPM.currentTrkAna",
331 "PhysVal.IDTPM."+trkAnaName )
333 if flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.enabled:
334 log.debug(
"Scheduling TrackAnalysis: %s",
335 flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.anaTag )
340 name=
"InDetTrackPerfMonTool"+
341 flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
344 if flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.doClusterValidation :
346 name=
"InDetClusterPerfMonTool"+
347 flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.anaTag )
348 if tool : tools.append( acc.popToolsAndMerge( tool ) )
350 from PhysValMonitoring.PhysValMonitoringConfig
import PhysValMonitoringCfg
351 acc.merge( PhysValMonitoringCfg( flags, tools=tools ) )
354 if flags.Output.doWriteAOD_IDTPM :
355 from InDetTrackPerfMon.InDetOutputConfig
import InDetOutputCfg
356 acc.merge( InDetOutputCfg(flags) )