ATLAS Offline Software
InDetTrackPerfMonConfig.py
Go to the documentation of this file.
1 #
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 
11 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
12 from AthenaConfiguration.ComponentFactory import CompFactory
13 from AthenaCommon.Logging import logging
14 
15 
16 def 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 
36 def 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 
52 def 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 
67 def TrackAnalysisDefinitionSvcCfg( flags, name="TrkAnaDefSvc", **kwargs ):
68  '''
69  CA-based configuration for the TrackAnalysisDefinition Service
70  '''
71  acc = ComponentAccumulator()
72 
73  kwargs.setdefault( "DirName", flags.PhysVal.IDTPM.DirName )
74  kwargs.setdefault( "sortPlotsByChain", flags.PhysVal.IDTPM.sortPlotsByChain )
75  kwargs.setdefault( "SubFolder", flags.PhysVal.IDTPM.currentTrkAna.SubFolder )
76  kwargs.setdefault( "TrkAnaTag", flags.PhysVal.IDTPM.currentTrkAna.anaTag )
77 
78  kwargs.setdefault( "TestType", flags.PhysVal.IDTPM.currentTrkAna.TestType )
79  kwargs.setdefault( "RefType", flags.PhysVal.IDTPM.currentTrkAna.RefType )
80 
81  from InDetTrackPerfMon.ConfigUtils import getTag
82  kwargs.setdefault( "TestTag", getTag( flags, flags.PhysVal.IDTPM.currentTrkAna.TestType ) )
83  kwargs.setdefault( "RefTag", getTag( flags, flags.PhysVal.IDTPM.currentTrkAna.RefType ) )
84 
85  kwargs.setdefault( "MatchingType", flags.PhysVal.IDTPM.currentTrkAna.MatchingType )
86 
87  if ( ( "Trigger" in flags.PhysVal.IDTPM.currentTrkAna.TestType and "EFTrigger" not in flags.PhysVal.IDTPM.currentTrkAna.TestType) or
88  ( "Trigger" in flags.PhysVal.IDTPM.currentTrkAna.RefType and "EFTrigger" not in flags.PhysVal.IDTPM.currentTrkAna.RefType ) ):
89  kwargs.setdefault( "ChainNames", flags.PhysVal.IDTPM.currentTrkAna.ChainNames )
90 
91  kwargs.setdefault( "plotTrackParameters", flags.PhysVal.IDTPM.currentTrkAna.plotTrackParameters )
92  kwargs.setdefault( "plotEfficiencies", flags.PhysVal.IDTPM.currentTrkAna.plotEfficiencies )
93  kwargs.setdefault( "plotOfflineElectrons", flags.PhysVal.IDTPM.currentTrkAna.plotOfflineElectrons )
94 
95  trkAnaSvc = CompFactory.TrackAnalysisDefinitionSvc( name, **kwargs )
96  acc.addService( trkAnaSvc )
97  return acc
98 
99 
100 def InDetTrackPerfMonToolCfg( flags, name="InDetTrackPerfMonTool", **kwargs ):
101  '''
102  Main IDTPM tool instance CA-based configuration
103  '''
104  acc = ComponentAccumulator()
105 
106  kwargs.setdefault( "OfflineTrkParticleContainerName",
107  flags.PhysVal.IDTPM.currentTrkAna.OfflineTrkKey )
108  kwargs.setdefault( "TruthParticleContainerName",
109  flags.PhysVal.IDTPM.currentTrkAna.TruthPartKey )
110 
111  kwargs.setdefault( "AnaTag", flags.PhysVal.IDTPM.currentTrkAna.anaTag )
112 
113 
114  acc.merge( TrackAnalysisDefinitionSvcCfg( flags,
115  name="TrkAnaDefSvc"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) )
116 
117 
118  acc.merge( PlotsDefinitionSvcCfg( flags,
119  name="PlotsDefSvc"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) )
120 
121 
122  if "TrackQualitySelectionTool" not in kwargs:
123  from InDetTrackPerfMon.InDetSelectionConfig import TrackQualitySelectionToolCfg
124  kwargs.setdefault( "TrackQualitySelectionTool", acc.popToolsAndMerge(
126  name="TrackQualitySelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
127 
128  if "Truth" in flags.PhysVal.IDTPM.currentTrkAna.RefType or "Truth" in flags.PhysVal.IDTPM.currentTrkAna.TestType:
129  from InDetTrackPerfMon.InDetAlgorithmConfig import TruthHitDecoratorAlgCfg
130  acc.merge( TruthHitDecoratorAlgCfg(flags) )
131 
132  if ( ( "Trigger" in flags.PhysVal.IDTPM.currentTrkAna.TestType ) or
133  ( "Trigger" in flags.PhysVal.IDTPM.currentTrkAna.RefType ) ):
134 
135  kwargs.setdefault( "TriggerTrkParticleContainerName",
136  flags.PhysVal.IDTPM.currentTrkAna.TrigTrkKey )
137 
138  if ( "EFTrigger" not in flags.PhysVal.IDTPM.currentTrkAna.TestType and "EFTrigger" not in flags.PhysVal.IDTPM.currentTrkAna.RefType ):
139  if "TrigDecisionTool" not in kwargs:
140  from TrigDecisionTool.TrigDecisionToolConfig import TrigDecisionToolCfg
141  kwargs.setdefault( "TrigDecisionTool",
142  acc.getPrimaryAndMerge( TrigDecisionToolCfg(flags) ) )
143 
144  if "RoiSelectionTool" not in kwargs:
145  from InDetTrackPerfMon.InDetSelectionConfig import RoiSelectionToolCfg
146  kwargs.setdefault( "RoiSelectionTool", acc.popToolsAndMerge(
147  RoiSelectionToolCfg( flags,
148  name="RoiSelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
149 
150  if "TrackRoiSelectionTool" not in kwargs:
151  from InDetTrackPerfMon.InDetSelectionConfig import TrackRoiSelectionToolCfg
152  kwargs.setdefault( "TrackRoiSelectionTool", acc.popToolsAndMerge(
154  name="TrackRoiSelectionTool"+flags.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
155 
156  if "TrackMatchingTool" not in kwargs:
157  from InDetTrackPerfMon.InDetMatchingConfig import TrackMatchingToolCfg
158  matchToolCfg = TrackMatchingToolCfg( flags )
159  if matchToolCfg is not None :
160  kwargs.setdefault( "doMatch", True ) # = False by default
161  kwargs.setdefault( "TrackMatchingTool", acc.popToolsAndMerge( matchToolCfg ) )
162 
163  acc.setPrivateTools( CompFactory.InDetTrackPerfMonTool( name, **kwargs ) )
164  return acc
165 
166 
167 def InDetTrackPerfMonCfg( flags ):
168  '''
169  CA-based configuration of all tool instances (= TrackAnalyses)
170  '''
171  log = logging.getLogger( "InDetTrackPerfMonCfg" )
172  acc = ComponentAccumulator()
173 
174 
175  useOfflineObject = False
176  for trkAnaName in flags.PhysVal.IDTPM.trkAnaNames :
177  obj = getattr( flags.PhysVal.IDTPM, trkAnaName+".SelectOfflineObject" )
178  if ( not obj or "Truth" in obj ) :
179  # Do not schedule algorithm
180  # if SelectOfflineObject id empty or
181  # for Truth-match offline selection
182  continue
183  useOfflineObject = True
184  break
185 
186  if useOfflineObject:
187  from InDetTrackPerfMon.InDetAlgorithmConfig import OfflineObjectDecoratorAlgCfg
188  acc.merge( OfflineObjectDecoratorAlgCfg(flags) )
189 
190 
191  tools = []
192 
193  for trkAnaName in flags.PhysVal.IDTPM.trkAnaNames :
194 
195  flags_thisTrkAna = flags.cloneAndReplace( "PhysVal.IDTPM.currentTrkAna",
196  "PhysVal.IDTPM."+trkAnaName )
197 
198  if flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.enabled:
199  log.debug( "Scheduling TrackAnalysis: %s",
200  flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.anaTag )
201 
202  tools.append(
203  acc.popToolsAndMerge( InDetTrackPerfMonToolCfg( flags_thisTrkAna,
204  name="InDetTrackPerfMonTool"+
205  flags_thisTrkAna.PhysVal.IDTPM.currentTrkAna.anaTag ) ) )
206 
207  from PhysValMonitoring.PhysValMonitoringConfig import PhysValMonitoringCfg
208  acc.merge( PhysValMonitoringCfg( flags, tools=tools ) )
209 
210 
211  if flags.Output.doWriteAOD_IDTPM :
212  from InDetTrackPerfMon.InDetOutputConfig import InDetOutputCfg
213  acc.merge( InDetOutputCfg(flags) )
214 
215  return acc
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
InDetMatchingConfig.TrackMatchingToolCfg
def TrackMatchingToolCfg(flags, **kwargs)
Definition: InDetMatchingConfig.py:84
InDetTrackPerfMonConfig.JsonPlotsDefReadToolCfg
def JsonPlotsDefReadToolCfg(flags, name="JsonPlotsDefReadTool", **kwargs)
Definition: InDetTrackPerfMonConfig.py:16
InDetOutputConfig.InDetOutputCfg
def InDetOutputCfg(flags, **kwargs)
Definition: InDetOutputConfig.py:15
InDetTrackPerfMonConfig.PlotsDefinitionSvcCfg
def PlotsDefinitionSvcCfg(flags, name="PlotsDefSvc", **kwargs)
Definition: InDetTrackPerfMonConfig.py:52
InDetSelectionConfig.TrackRoiSelectionToolCfg
def TrackRoiSelectionToolCfg(flags, name="TrackRoiSelectionTool", **kwargs)
Definition: InDetSelectionConfig.py:33
InDetAlgorithmConfig.OfflineObjectDecoratorAlgCfg
def OfflineObjectDecoratorAlgCfg(flags, name="OfflineObjectDecoratorAlg", **kwargs)
Definition: InDetAlgorithmConfig.py:95
InDetTrackPerfMonConfig.InDetTrackPerfMonToolCfg
def InDetTrackPerfMonToolCfg(flags, name="InDetTrackPerfMonTool", **kwargs)
Definition: InDetTrackPerfMonConfig.py:100
PhysValMonitoringConfig.PhysValMonitoringCfg
def PhysValMonitoringCfg(flags, name="PhysValMonManager", tools=None, **kwargs)
Definition: PhysValMonitoringConfig.py:35
ConfigUtils.getPlotsDefList
def getPlotsDefList(flags)
Definition: ConfigUtils.py:102
InDetAlgorithmConfig.TruthHitDecoratorAlgCfg
def TruthHitDecoratorAlgCfg(flags, name="TruthHitDecoratorAlg", **kwargs)
Definition: InDetAlgorithmConfig.py:15
InDetSelectionConfig.TrackQualitySelectionToolCfg
def TrackQualitySelectionToolCfg(flags, name="TrackQualitySelectionTool", **kwargs)
Definition: InDetSelectionConfig.py:67
InDetSelectionConfig.RoiSelectionToolCfg
def RoiSelectionToolCfg(flags, name="RoiSelectionTool", **kwargs)
Definition: InDetSelectionConfig.py:15
python.TriggerInterface.TrigDecisionToolCfg
def TrigDecisionToolCfg(flags)
Definition: TriggerInterface.py:14
ConfigUtils.getTag
def getTag(flags, key)
Definition: ConfigUtils.py:208
InDetTrackPerfMonConfig.PlotsDefReadToolCfg
def PlotsDefReadToolCfg(flags, name="PlotsDefReadTool", **kwargs)
Definition: InDetTrackPerfMonConfig.py:36
InDetTrackPerfMonConfig.TrackAnalysisDefinitionSvcCfg
def TrackAnalysisDefinitionSvcCfg(flags, name="TrkAnaDefSvc", **kwargs)
Definition: InDetTrackPerfMonConfig.py:67
InDetTrackPerfMonConfig.InDetTrackPerfMonCfg
def InDetTrackPerfMonCfg(flags)
Definition: InDetTrackPerfMonConfig.py:167