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)
62 kwargs.setdefault(
"vetoPdgId", flags.PhysVal.IDPVM.vetoPdgId)
63 kwargs.setdefault(
"pdgId", flags.PhysVal.IDPVM.pdgId)
65 if "radiusCylinder" in kwargs
or "zDisc" in kwargs:
66 from TrkConfig.AtlasExtrapolatorConfig
import AtlasExtrapolatorCfg
68 acc.addPublicTool(extrapolator)
69 kwargs.setdefault(
"Extrapolator", extrapolator)
71 kwargs.setdefault(
"Extrapolator",
None)
73 acc.setPrivateTools(CompFactory.AthTruthSelectionTool(name, **kwargs))
80 from GoodRunsLists.GoodRunsListsDictionary
import getGoodRunsLists
83 cvmfs =
'/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/'
85 '2015': cvmfs +
''.
join(GRLDict[
'GRL2015']),
86 '2016': cvmfs +
''.
join(GRLDict[
'GRL2016']),
87 '2017': cvmfs +
''.
join(GRLDict[
'GRL2017_Triggerno17e33prim']),
88 '2018': cvmfs +
''.
join(GRLDict[
'GRL2018_Triggerno17e33prim']),
89 '2022': cvmfs +
''.
join(GRLDict[
'GRL2022']),
90 '2023': cvmfs +
''.
join(GRLDict[
'GRL2023']),
91 '2024': cvmfs +
''.
join(GRLDict[
'GRL2024'])
94 acc.setPrivateTools(CompFactory.GoodRunsListSelectionTool(
95 name=
"GoodRunsListSelectionTool",
96 GoodRunsListVec=[grldict[p]
for p
in flags.PhysVal.IDPVM.GRL],
104 acc.setPrivateTools(CompFactory.InDetVertexTruthMatchTool(**kwargs))
109 from InDetPhysValMonitoring.InDetPhysValDecorationConfig
import (
110 AddDecoratorIfNeededCfg)
112 kwargs.setdefault(
"useTrackSelection",
False)
113 kwargs.setdefault(
"EnableLumi",
False)
116 kwargs.setdefault(
'VertexContainerName', flags.PhysVal.IDPVM.PrimaryVertexContainer)
119 if flags.PhysVal.IDPVM.hardScatterStrategy
in [2, 3]:
121 from InDetPhysValMonitoring.addRecoJetsConfig
import (
122 AddRecoJetsIfNotExistingCfg)
124 flags, flags.PhysVal.IDPVM.jetsNameForHardScatter))
127 if flags.PhysVal.IDPVM.hardScatterStrategy == 3:
128 from InDetConfig.InDetGNNHardScatterSelectionConfig
import (
133 if flags.PhysVal.IDPVM.hardScatterStrategy == 4:
134 from DerivationFrameworkHiggs.HIGG1D1CustomVertexConfig
import DiPhotonVertexCfg
137 if flags.PhysVal.IDPVM.GRL:
138 kwargs.setdefault(
"useGRL",
True)
139 kwargs.setdefault(
'GoodRunsListSelectionTool', acc.popToolsAndMerge(
142 kwargs.setdefault(
"doIDTIDEPlots", flags.PhysVal.IDPVM.doIDTIDE)
143 kwargs.setdefault(
"setCSVName", flags.PhysVal.IDPVM.setCSVName)
145 if flags.PhysVal.IDPVM.doValidateTracksInJets:
146 kwargs.setdefault(
"JetContainerName", flags.PhysVal.IDPVM.jetCollection)
147 kwargs.setdefault(
"FillTrackInJetPlots",
True)
148 kwargs.setdefault(
'JetAbsEtaMin', 0)
149 kwargs.setdefault(
'JetAbsEtaMax', flags.PhysVal.IDPVM.JetAbsEtaMax)
150 kwargs.setdefault(
'JetPtMin', flags.PhysVal.IDPVM.JetPtMin)
151 kwargs.setdefault(
'JetPtMax', flags.PhysVal.IDPVM.JetPtMax)
152 kwargs.setdefault(
'maxTrkJetDR', flags.PhysVal.IDPVM.maxTrkJetDR)
153 kwargs.setdefault(
"FillTrackInBJetPlots",
154 flags.PhysVal.IDPVM.doValidateTracksInBJets)
156 kwargs.setdefault(
"JetContainerName",
'')
157 kwargs.setdefault(
"FillTrackInJetPlots",
False)
159 kwargs.setdefault(
"doPerAuthorPlots",
160 flags.PhysVal.IDPVM.doPerAuthorPlots)
162 if flags.Input.isMC
and not flags.PhysVal.IDPVM.doRecoOnly:
163 kwargs.setdefault(
"TruthParticleContainerName",
"TruthParticles")
164 if 'TruthSelectionTool' not in kwargs:
165 kwargs.setdefault(
"TruthSelectionTool", acc.popToolsAndMerge(
168 doHyyHSSelection = flags.PhysVal.IDPVM.hardScatterStrategy == 4
169 if 'hardScatterSelectionTool' not in kwargs:
170 from InDetConfig.InDetHardScatterSelectionToolConfig
import (
171 InDetHardScatterSelectionToolCfg)
172 kwargs.setdefault(
"hardScatterSelectionTool", acc.popToolsAndMerge(
175 RedoHardScatter=
not doHyyHSSelection,
176 SelectionMode=flags.PhysVal.IDPVM.hardScatterStrategy,
178 JetContainer=flags.PhysVal.IDPVM.jetsNameForHardScatter,
179 VertexContainer=flags.PhysVal.IDPVM.PrimaryVertexContainer
183 assert flags.PhysVal.IDPVM.PrimaryVertexContainer ==
'HggPrimaryVertices'
185 kwargs.setdefault(
"FillTruthToRecoNtuple",
186 flags.PhysVal.IDPVM.doValidateTruthToRecoNtuple)
187 kwargs.setdefault(
"doTruthOriginPlots",
188 flags.PhysVal.IDPVM.doTruthOriginPlots)
189 kwargs.setdefault(
"doDuplicatePlots",
190 flags.PhysVal.IDPVM.doDuplicatePlots)
191 kwargs.setdefault(
"doHitLevelPlots",
192 flags.PhysVal.IDPVM.doHitLevelPlots)
195 if not flags.PhysVal.IDPVM.doIDTIDE:
196 kwargs.setdefault(
"useVertexTruthMatchTool",
True)
197 kwargs.setdefault(
"VertexTruthMatchTool", acc.popToolsAndMerge(
200 if "trackTruthOriginTool" not in kwargs:
201 from InDetTrackSystematicsTools.InDetTrackSystematicsToolsConfig
import InDetTrackTruthOriginToolCfg
202 kwargs.setdefault(
"trackTruthOriginTool", acc.popToolsAndMerge(
206 if flags.PhysVal.IDPVM.setTruthStrategy
in [
'All',
'PileUp']:
207 if not(
"xAOD::TruthPileupEventContainer#TruthPileupEvents"
208 in flags.Input.TypedCollections):
209 print(
'WARNING Truth Strategy for InDetPhysValMonitoring set to %s but TruthPileupEvents are missing in the input' % (flags.PhysVal.IDPVM.setTruthStrategy))
210 kwargs.setdefault(
"PileupSwitch",
211 flags.PhysVal.IDPVM.setTruthStrategy)
213 elif flags.PhysVal.IDPVM.setTruthStrategy !=
'HardScatter':
214 print(
'WARNING Truth Strategy for for InDetPhysValMonitoring set to invalid option %s; valid flags are ["HardScatter", "All", "PileUp"]' % (
215 flags.PhysVal.IDPVM.setTruthStrategy))
219 kwargs.setdefault(
"TruthParticleContainerName",
'')
220 kwargs.setdefault(
"TruthVertexContainerName",
'')
221 kwargs.setdefault(
"TruthEvents",
'')
222 kwargs.setdefault(
"TruthPileupEvents",
'')
223 kwargs.setdefault(
"TruthSelectionTool",
None)
224 kwargs.setdefault(
"FillTruthToRecoNtuple",
False)
226 if flags.Detector.GeometryITk:
228 kwargs.setdefault(
"doTRTExtensionPlots",
False)
229 kwargs.setdefault(
"isITk",
True)
231 if flags.PhysVal.IDPVM.doTechnicalEfficiency:
232 kwargs.setdefault(
"fillTechnicalEfficiency",
True)
233 kwargs.setdefault(
"EtaBins", flags.Tracking.ITkMainPass.etaBins
if flags.Detector.GeometryITk
235 kwargs.setdefault(
"MinNumberClusters", flags.Tracking.ITkMainPass.minClusters
if flags.Detector.GeometryITk
236 else [flags.Tracking.MainPass.minClusters])
239 kwargs.setdefault(
"DetailLevel", 200
if flags.PhysVal.IDPVM.doExpertOutput
else 100)
242 if flags.PhysVal.IDPVM.doIDTIDE:
243 kwargs.setdefault(
"doIDTIDEPlots",
True)
244 kwargs.setdefault(
"JetContainerName",
'AntiKt4EMPFlowJets')
245 kwargs.setdefault(
"FillTrackInJetPlots",
True)
248 kwargs.setdefault(
'JetAbsEtaMin', 0)
249 kwargs.setdefault(
'JetAbsEtaMax',
250 flags.PhysVal.IDPVM.JetAbsEtaMax)
251 kwargs.setdefault(
'maxTrkJetDR',
252 flags.PhysVal.IDPVM.maxTrkJetDR)
254 kwargs.setdefault(
'JetPtMin', 100)
255 kwargs.setdefault(
'JetPtMax', 5000)
257 kwargs.setdefault(
"doPRW", flags.PhysVal.IDPVM.doPRW)
259 acc.setPrivateTools(CompFactory.InDetPhysValMonitoringTool(**kwargs))
266 if 'TrackSelectionTool' not in kwargs:
267 from InDetConfig.InDetTrackSelectionToolConfig
import (
268 InDetTrackSelectionTool_Loose_Cfg)
269 kwargs.setdefault(
"TrackSelectionTool", acc.popToolsAndMerge(
272 kwargs.setdefault(
"SubFolder",
'Loose/')
273 kwargs.setdefault(
"useTrackSelection",
True)
276 flags, name=
"InDetPhysValMonitoringToolLoose", **kwargs)))
283 if 'TrackSelectionTool' not in kwargs:
284 from InDetConfig.InDetTrackSelectionToolConfig
import (
285 InDetTrackSelectionTool_TightPrimary_Cfg)
286 kwargs.setdefault(
"TrackSelectionTool", acc.popToolsAndMerge(
289 kwargs.setdefault(
"SubFolder",
'TightPrimary/')
290 kwargs.setdefault(
"useTrackSelection",
True)
293 flags, name=
"InDetPhysValMonitoringToolTightPrimary", **kwargs)))
300 if 'TrackSelectionTool' not in kwargs:
301 from InDetConfig.InDetTrackSelectionToolConfig
import (
302 InDetTrackSelectionTool_HILoose_Cfg)
303 kwargs.setdefault(
"TrackSelectionTool", acc.popToolsAndMerge(
306 kwargs.setdefault(
"SubFolder",
'HILoose/')
307 kwargs.setdefault(
"useTrackSelection",
True)
310 flags, name=
"InDetPhysValMonitoringToolHILoose", **kwargs)))
315 kwargs.setdefault(
"SubFolder",
'GSF/')
316 kwargs.setdefault(
"TrackParticleContainerName",
'GSFTrackParticles')
317 kwargs.setdefault(
"useTrackSelection",
True)
319 flags, name=
"InDetPhysValMonitoringToolGSF", **kwargs)
325 kwargs.setdefault(
"TruthSelectionTool", acc.popToolsAndMerge(
327 flags, name=
"AthTruthSelectionToolForIDPVM_Electrons",
331 kwargs.setdefault(
"onlyFillTruthMatched",
True)
332 kwargs.setdefault(
"SubFolder",
'Electrons/')
335 flags, name=
'InDetPhysValMonitoringToolElectrons', **kwargs)))
342 kwargs.setdefault(
"TruthSelectionTool", acc.popToolsAndMerge(
344 flags, name=
"AthTruthSelectionToolForIDPVM_Muons",
348 kwargs.setdefault(
"onlyFillTruthMatched",
True)
349 kwargs.setdefault(
"SubFolder",
'Muons/')
352 flags, name=
'InDetPhysValMonitoringToolMuons', **kwargs)))
359 kwargs.setdefault(
"SubFolder",
'LRT/')
360 kwargs.setdefault(
"TruthSelectionTool", acc.popToolsAndMerge(
362 kwargs.setdefault(
"TrackParticleContainerName",
363 flags.PhysVal.IDPVM.largeD0TrackCollection
364 if flags.Tracking.storeSeparateLargeD0Container
else
365 'InDetTrackParticles')
366 kwargs.setdefault(
"useTrackSelection",
True)
369 flags, name=
'InDetPhysValMonitoringToolLargeD0', **kwargs)))
376 kwargs.setdefault(
"SubFolder",
'LRTMerged/')
377 kwargs.setdefault(
"TruthSelectionTool", acc.popToolsAndMerge(
379 kwargs.setdefault(
"TrackParticleContainerName",
380 'InDetWithLRTTrackParticles'
381 if flags.Tracking.storeSeparateLargeD0Container
else
382 'InDetTrackParticles')
383 kwargs.setdefault(
"useTrackSelection",
True)
386 flags, name=
'InDetPhysValMonitoringToolMergedLargeD0', **kwargs)))
391 kwargs.setdefault(
"SubFolder",
'LowPtRoI/')
392 kwargs.setdefault(
"TruthSelectionTool", acc.popToolsAndMerge(
394 kwargs.setdefault(
"TrackParticleContainerName",
395 'InDetLowPtRoITrackParticles')
397 flags, name=
'InDetPhysValMonitoringToolLowPtRoI', **kwargs)))
405 if flags.PhysVal.IDPVM.doValidateMergedLargeD0Tracks:
406 from DerivationFrameworkInDet.InDetToolsConfig
import InDetLRTMergeCfg
410 InDetPhysValMonitoringToolCfg),
411 (flags.PhysVal.IDPVM.doValidateMuonMatchedTracks,
412 InDetPhysValMonitoringToolMuonsCfg),
413 (flags.PhysVal.IDPVM.doValidateElectronMatchedTracks,
414 InDetPhysValMonitoringToolElectronsCfg),
415 (flags.PhysVal.IDPVM.doValidateLargeD0Tracks,
416 InDetLargeD0PhysValMonitoringToolCfg),
417 (flags.PhysVal.IDPVM.doValidateMergedLargeD0Tracks,
418 InDetMergedLargeD0PhysValMonitoringToolCfg),
419 (flags.PhysVal.IDPVM.doValidateLowPtRoITracks,
420 InDetLowPtRoIPhysValMonitoringToolCfg),
421 (flags.PhysVal.IDPVM.doValidateLooseTracks,
422 InDetPhysValMonitoringToolLooseCfg),
423 (flags.PhysVal.IDPVM.doValidateTightPrimaryTracks,
424 InDetPhysValMonitoringToolTightPrimaryCfg),
425 (flags.PhysVal.IDPVM.doValidateHILoose,
426 InDetPhysValMonitoringToolHILooseCfg),
427 (flags.PhysVal.IDPVM.doValidateGSFTracks,
428 InDetPhysValMonitoringToolGSFCfg)
432 for enabled, creator
in mons:
434 tools.append(acc.popToolsAndMerge(creator(flags)))
436 for col
in flags.PhysVal.IDPVM.validateExtraTrackCollections:
439 flags, name=
'InDetPhysValMonitoringTool'+prefix,
440 SubFolder=prefix+
'Tracks/',
441 TrackParticleContainerName=prefix+
'TrackParticles'
444 from PhysValMonitoring.PhysValMonitoringConfig
import PhysValMonitoringCfg