5 '''@file InDetPhysValMonitoringConfig.py
8 @brief Main CA-based python configuration for InDetPhysValMonitoring
11 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
12 from AthenaConfiguration.ComponentFactory
import CompFactory
16 suffixes = [
'Tracks',
'TrackParticles']
17 for suffix
in suffixes:
18 if track_collection_name.endswith(suffix):
19 return track_collection_name.removesuffix(suffix)
20 return track_collection_name
25 if flags.Detector.GeometryID:
26 if flags.PhysVal.IDPVM.doValidateLargeD0Tracks
or flags.PhysVal.IDPVM.doValidateMergedLargeD0Tracks:
27 kwargs.setdefault(
"DefinitionSource",
"InDetPVMPlotDefLRT.xml")
29 kwargs.setdefault(
"DefinitionSource",
"InDetPVMPlotDefRun2.xml")
30 elif flags.Detector.GeometryITk:
31 kwargs.setdefault(
"DefinitionSource",
"InDetPVMPlotDefITK.xml")
32 kwargs.setdefault(
"DefinitionFormat",
"text/xml")
33 histoSvc = CompFactory.HistogramDefinitionSvc(**kwargs)
34 acc.addService(histoSvc)
39 flags, name="InDetRttTruthSelectionTool", **kwargs):
42 kwargs.setdefault(
"requireStable",
True)
43 kwargs.setdefault(
"requireCharged",
True)
44 kwargs.setdefault(
"selectedCharge", flags.PhysVal.IDPVM.selectedCharge)
45 kwargs.setdefault(
"requireOnlyPrimary",
46 True if kwargs.pop(
"OnlyDressPrimaryTracks",
True)
48 kwargs.setdefault(
"maxProdVertRadius",
49 flags.PhysVal.IDPVM.maxProdVertRadius)
51 if flags.Detector.GeometryID:
52 if flags.PhysVal.IDPVM.doValidateLargeD0Tracks
or flags.PhysVal.IDPVM.doValidateMergedLargeD0Tracks:
53 kwargs.setdefault(
"maxEta", 3.0)
55 kwargs.setdefault(
"maxEta", 2.5)
56 elif flags.Detector.GeometryITk:
57 kwargs.setdefault(
"maxEta", 4.0)
59 kwargs.setdefault(
"minPt", flags.PhysVal.IDPVM.truthMinPt)
60 kwargs.setdefault(
"ancestorList", flags.PhysVal.IDPVM.ancestorIDs)
61 kwargs.setdefault(
"requireSiHit", flags.PhysVal.IDPVM.requiredSiHits)
63 if "radiusCylinder" in kwargs
or "zDisc" in kwargs:
64 from TrkConfig.AtlasExtrapolatorConfig
import AtlasExtrapolatorCfg
66 acc.addPublicTool(extrapolator)
67 kwargs.setdefault(
"Extrapolator", extrapolator)
69 kwargs.setdefault(
"Extrapolator",
None)
71 acc.setPrivateTools(CompFactory.AthTruthSelectionTool(name, **kwargs))
78 from GoodRunsLists.GoodRunsListsDictionary
import getGoodRunsLists
81 cvmfs =
'/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/'
83 '2015': cvmfs +
''.
join(GRLDict[
'GRL2015']),
84 '2016': cvmfs +
''.
join(GRLDict[
'GRL2016']),
85 '2017': cvmfs +
''.
join(GRLDict[
'GRL2017_Triggerno17e33prim']),
86 '2018': cvmfs +
''.
join(GRLDict[
'GRL2018_Triggerno17e33prim']),
87 '2022': cvmfs +
''.
join(GRLDict[
'GRL2022']),
88 '2023': cvmfs +
''.
join(GRLDict[
'GRL2023']),
89 '2024': cvmfs +
''.
join(GRLDict[
'GRL2024'])
92 acc.setPrivateTools(CompFactory.GoodRunsListSelectionTool(
93 name=
"GoodRunsListSelectionTool",
94 GoodRunsListVec=[grldict[p]
for p
in flags.PhysVal.IDPVM.GRL],
102 acc.setPrivateTools(CompFactory.InDetVertexTruthMatchTool(**kwargs))
107 from InDetPhysValMonitoring.InDetPhysValDecorationConfig
import (
108 AddDecoratorIfNeededCfg)
110 kwargs.setdefault(
"useTrackSelection",
False)
111 kwargs.setdefault(
"EnableLumi",
False)
114 kwargs.setdefault(
'VertexContainerName', flags.PhysVal.IDPVM.PrimaryVertexContainer)
117 if flags.PhysVal.IDPVM.hardScatterStrategy
in [2, 3]:
119 from InDetPhysValMonitoring.addRecoJetsConfig
import (
120 AddRecoJetsIfNotExistingCfg)
122 flags, flags.PhysVal.IDPVM.jetsNameForHardScatter))
125 if flags.PhysVal.IDPVM.hardScatterStrategy == 3:
126 from InDetConfig.InDetGNNHardScatterSelectionConfig
import (
131 if flags.PhysVal.IDPVM.hardScatterStrategy == 4:
132 from DerivationFrameworkHiggs.HIGG1D1CustomVertexConfig
import DiPhotonVertexCfg
135 if flags.PhysVal.IDPVM.GRL:
136 kwargs.setdefault(
"useGRL",
True)
137 kwargs.setdefault(
'GoodRunsListSelectionTool', acc.popToolsAndMerge(
140 kwargs.setdefault(
"doIDTIDEPlots", flags.PhysVal.IDPVM.doIDTIDE)
141 kwargs.setdefault(
"setCSVName", flags.PhysVal.IDPVM.setCSVName)
143 if flags.PhysVal.IDPVM.doValidateTracksInJets:
144 kwargs.setdefault(
"JetContainerName", flags.PhysVal.IDPVM.jetCollection)
145 kwargs.setdefault(
"FillTrackInJetPlots",
True)
146 kwargs.setdefault(
'JetAbsEtaMin', 0)
147 kwargs.setdefault(
'JetAbsEtaMax', flags.PhysVal.IDPVM.JetAbsEtaMax)
148 kwargs.setdefault(
'JetPtMin', flags.PhysVal.IDPVM.JetPtMin)
149 kwargs.setdefault(
'JetPtMax', flags.PhysVal.IDPVM.JetPtMax)
150 kwargs.setdefault(
'maxTrkJetDR', flags.PhysVal.IDPVM.maxTrkJetDR)
151 kwargs.setdefault(
"FillTrackInBJetPlots",
152 flags.PhysVal.IDPVM.doValidateTracksInBJets)
154 kwargs.setdefault(
"JetContainerName",
'')
155 kwargs.setdefault(
"FillTrackInJetPlots",
False)
158 if flags.Input.isMC
and not flags.PhysVal.IDPVM.doRecoOnly:
159 kwargs.setdefault(
"TruthParticleContainerName",
"TruthParticles")
160 if 'TruthSelectionTool' not in kwargs:
161 kwargs.setdefault(
"TruthSelectionTool", acc.popToolsAndMerge(
164 doHyyHSSelection = flags.PhysVal.IDPVM.hardScatterStrategy == 4
165 if 'hardScatterSelectionTool' not in kwargs:
166 from InDetConfig.InDetHardScatterSelectionToolConfig
import (
167 InDetHardScatterSelectionToolCfg)
168 kwargs.setdefault(
"hardScatterSelectionTool", acc.popToolsAndMerge(
171 RedoHardScatter=
not doHyyHSSelection,
172 SelectionMode=flags.PhysVal.IDPVM.hardScatterStrategy,
174 JetContainer=flags.PhysVal.IDPVM.jetsNameForHardScatter,
175 VertexContainer=flags.PhysVal.IDPVM.PrimaryVertexContainer
179 assert flags.PhysVal.IDPVM.PrimaryVertexContainer ==
'HggPrimaryVertices'
181 kwargs.setdefault(
"FillTruthToRecoNtuple",
182 flags.PhysVal.IDPVM.doValidateTruthToRecoNtuple)
183 kwargs.setdefault(
"doTruthOriginPlots",
184 flags.PhysVal.IDPVM.doTruthOriginPlots)
185 kwargs.setdefault(
"doDuplicatePlots",
186 flags.PhysVal.IDPVM.doDuplicatePlots)
187 kwargs.setdefault(
"doPerAuthorPlots",
188 flags.PhysVal.IDPVM.doPerAuthorPlots)
189 kwargs.setdefault(
"doHitLevelPlots",
190 flags.PhysVal.IDPVM.doHitLevelPlots)
193 if not flags.PhysVal.IDPVM.doIDTIDE:
194 kwargs.setdefault(
"useVertexTruthMatchTool",
True)
195 kwargs.setdefault(
"VertexTruthMatchTool", acc.popToolsAndMerge(
198 if "trackTruthOriginTool" not in kwargs:
199 from InDetTrackSystematicsTools.InDetTrackSystematicsToolsConfig
import InDetTrackTruthOriginToolCfg
200 kwargs.setdefault(
"trackTruthOriginTool", acc.popToolsAndMerge(
204 if flags.PhysVal.IDPVM.setTruthStrategy
in [
'All',
'PileUp']:
205 if not(
"xAOD::TruthPileupEventContainer#TruthPileupEvents"
206 in flags.Input.TypedCollections):
207 print(
'WARNING Truth Strategy for InDetPhysValMonitoring set to %s but TruthPileupEvents are missing in the input' % (flags.PhysVal.IDPVM.setTruthStrategy))
208 kwargs.setdefault(
"PileupSwitch",
209 flags.PhysVal.IDPVM.setTruthStrategy)
211 elif flags.PhysVal.IDPVM.setTruthStrategy !=
'HardScatter':
212 print(
'WARNING Truth Strategy for for InDetPhysValMonitoring set to invalid option %s; valid flags are ["HardScatter", "All", "PileUp"]' % (
213 flags.PhysVal.IDPVM.setTruthStrategy))
217 kwargs.setdefault(
"TruthParticleContainerName",
'')
218 kwargs.setdefault(
"TruthVertexContainerName",
'')
219 kwargs.setdefault(
"TruthEvents",
'')
220 kwargs.setdefault(
"TruthPileupEvents",
'')
221 kwargs.setdefault(
"TruthSelectionTool",
None)
222 kwargs.setdefault(
"FillTruthToRecoNtuple",
False)
224 if flags.Detector.GeometryITk:
226 kwargs.setdefault(
"doTRTExtensionPlots",
False)
227 kwargs.setdefault(
"isITk",
True)
229 if flags.PhysVal.IDPVM.doTechnicalEfficiency:
230 kwargs.setdefault(
"fillTechnicalEfficiency",
True)
231 kwargs.setdefault(
"EtaBins", flags.Tracking.ITkMainPass.etaBins
if flags.Detector.GeometryITk
233 kwargs.setdefault(
"MinNumberClusters", flags.Tracking.ITkMainPass.minClusters
if flags.Detector.GeometryITk
234 else [flags.Tracking.MainPass.minClusters])
237 if flags.PhysVal.IDPVM.doPhysValOutput:
238 kwargs.setdefault(
"DetailLevel", 100)
240 elif flags.PhysVal.IDPVM.doExpertOutput:
241 kwargs.setdefault(
"DetailLevel", 200)
244 if flags.PhysVal.IDPVM.doIDTIDE:
245 kwargs.setdefault(
"doIDTIDEPlots",
True)
246 kwargs.setdefault(
"JetContainerName",
'AntiKt4EMPFlowJets')
247 kwargs.setdefault(
"FillTrackInJetPlots",
True)
250 kwargs.setdefault(
'JetAbsEtaMin', 0)
251 kwargs.setdefault(
'JetAbsEtaMax',
252 flags.PhysVal.IDPVM.JetAbsEtaMax)
253 kwargs.setdefault(
'maxTrkJetDR',
254 flags.PhysVal.IDPVM.maxTrkJetDR)
256 kwargs.setdefault(
'JetPtMin', 100)
257 kwargs.setdefault(
'JetPtMax', 5000)
259 kwargs.setdefault(
"doPRW", flags.PhysVal.IDPVM.doPRW)
261 acc.setPrivateTools(CompFactory.InDetPhysValMonitoringTool(**kwargs))
268 if 'TrackSelectionTool' not in kwargs:
269 from InDetConfig.InDetTrackSelectionToolConfig
import (
270 InDetTrackSelectionTool_Loose_Cfg)
271 kwargs.setdefault(
"TrackSelectionTool", acc.popToolsAndMerge(
274 kwargs.setdefault(
"SubFolder",
'Loose/')
275 kwargs.setdefault(
"useTrackSelection",
True)
278 flags, name=
"InDetPhysValMonitoringToolLoose", **kwargs)))
285 if 'TrackSelectionTool' not in kwargs:
286 from InDetConfig.InDetTrackSelectionToolConfig
import (
287 InDetTrackSelectionTool_TightPrimary_Cfg)
288 kwargs.setdefault(
"TrackSelectionTool", acc.popToolsAndMerge(
291 kwargs.setdefault(
"SubFolder",
'TightPrimary/')
292 kwargs.setdefault(
"useTrackSelection",
True)
295 flags, name=
"InDetPhysValMonitoringToolTightPrimary", **kwargs)))
302 if 'TrackSelectionTool' not in kwargs:
303 from InDetConfig.InDetTrackSelectionToolConfig
import (
304 InDetTrackSelectionTool_HILoose_Cfg)
305 kwargs.setdefault(
"TrackSelectionTool", acc.popToolsAndMerge(
308 kwargs.setdefault(
"SubFolder",
'HILoose/')
309 kwargs.setdefault(
"useTrackSelection",
True)
312 flags, name=
"InDetPhysValMonitoringToolHILoose", **kwargs)))
317 kwargs.setdefault(
"SubFolder",
'GSF/')
318 kwargs.setdefault(
"TrackParticleContainerName",
'GSFTrackParticles')
319 kwargs.setdefault(
"useTrackSelection",
True)
321 flags, name=
"InDetPhysValMonitoringToolGSF", **kwargs)
327 kwargs.setdefault(
"TruthSelectionTool", acc.popToolsAndMerge(
329 flags, name=
"AthTruthSelectionToolForIDPVM_Electrons",
333 kwargs.setdefault(
"onlyFillTruthMatched",
True)
334 kwargs.setdefault(
"SubFolder",
'Electrons/')
337 flags, name=
'InDetPhysValMonitoringToolElectrons', **kwargs)))
344 kwargs.setdefault(
"TruthSelectionTool", acc.popToolsAndMerge(
346 flags, name=
"AthTruthSelectionToolForIDPVM_Muons",
350 kwargs.setdefault(
"onlyFillTruthMatched",
True)
351 kwargs.setdefault(
"SubFolder",
'Muons/')
354 flags, name=
'InDetPhysValMonitoringToolMuons', **kwargs)))
361 kwargs.setdefault(
"SubFolder",
'LRT/')
362 kwargs.setdefault(
"TruthSelectionTool", acc.popToolsAndMerge(
364 kwargs.setdefault(
"TrackParticleContainerName",
365 'InDetLargeD0TrackParticles'
366 if flags.Tracking.storeSeparateLargeD0Container
else
367 'InDetTrackParticles')
368 kwargs.setdefault(
"useTrackSelection",
True)
371 flags, name=
'InDetPhysValMonitoringToolLargeD0', **kwargs)))
378 kwargs.setdefault(
"SubFolder",
'LRTMerged/')
379 kwargs.setdefault(
"TruthSelectionTool", acc.popToolsAndMerge(
381 kwargs.setdefault(
"TrackParticleContainerName",
382 'InDetWithLRTTrackParticles'
383 if flags.Tracking.storeSeparateLargeD0Container
else
384 'InDetTrackParticles')
385 kwargs.setdefault(
"useTrackSelection",
True)
388 flags, name=
'InDetPhysValMonitoringToolMergedLargeD0', **kwargs)))
393 kwargs.setdefault(
"SubFolder",
'LowPtRoI/')
394 kwargs.setdefault(
"TruthSelectionTool", acc.popToolsAndMerge(
396 kwargs.setdefault(
"TrackParticleContainerName",
397 'InDetLowPtRoITrackParticles')
399 flags, name=
'InDetPhysValMonitoringToolLowPtRoI', **kwargs)))
407 if flags.PhysVal.IDPVM.doValidateMergedLargeD0Tracks:
408 from DerivationFrameworkInDet.InDetToolsConfig
import InDetLRTMergeCfg
412 InDetPhysValMonitoringToolCfg),
413 (flags.PhysVal.IDPVM.doValidateMuonMatchedTracks,
414 InDetPhysValMonitoringToolMuonsCfg),
415 (flags.PhysVal.IDPVM.doValidateElectronMatchedTracks,
416 InDetPhysValMonitoringToolElectronsCfg),
417 (flags.PhysVal.IDPVM.doValidateLargeD0Tracks,
418 InDetLargeD0PhysValMonitoringToolCfg),
419 (flags.PhysVal.IDPVM.doValidateMergedLargeD0Tracks,
420 InDetMergedLargeD0PhysValMonitoringToolCfg),
421 (flags.PhysVal.IDPVM.doValidateLowPtRoITracks,
422 InDetLowPtRoIPhysValMonitoringToolCfg),
423 (flags.PhysVal.IDPVM.doValidateLooseTracks,
424 InDetPhysValMonitoringToolLooseCfg),
425 (flags.PhysVal.IDPVM.doValidateTightPrimaryTracks,
426 InDetPhysValMonitoringToolTightPrimaryCfg),
427 (flags.PhysVal.IDPVM.doValidateHILoose,
428 InDetPhysValMonitoringToolHILooseCfg),
429 (flags.PhysVal.IDPVM.doValidateGSFTracks,
430 InDetPhysValMonitoringToolGSFCfg)
434 for enabled, creator
in mons:
436 tools.append(acc.popToolsAndMerge(creator(flags)))
438 for col
in flags.PhysVal.IDPVM.validateExtraTrackCollections:
441 flags, name=
'InDetPhysValMonitoringTool'+prefix,
442 SubFolder=prefix+
'Tracks/',
443 TrackParticleContainerName=prefix+
'TrackParticles'
446 from PhysValMonitoring.PhysValMonitoringConfig
import PhysValMonitoringCfg