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 cvmfs =
'/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/GoodRunsLists/'
80 '2015': cvmfs +
'data15_13TeV/20170619/data15_13TeV.periodAllYear_DetStatus-v89-pro21-02_Unknown_PHYS_StandardGRL_All_Good_25ns.xml',
81 '2016': cvmfs +
'data16_13TeV/20180129/data16_13TeV.periodAllYear_DetStatus-v89-pro21-01_DQDefects-00-02-04_PHYS_StandardGRL_All_Good_25ns.xml',
82 '2017': cvmfs +
'data17_13TeV/20180619/data17_13TeV.periodAllYear_DetStatus-v99-pro22-01_Unknown_PHYS_StandardGRL_All_Good_25ns_Triggerno17e33prim.xml',
83 '2018': cvmfs +
'data18_13TeV/20190318/data18_13TeV.periodAllYear_DetStatus-v102-pro22-04_Unknown_PHYS_StandardGRL_All_Good_25ns_Triggerno17e33prim.xml',
84 '2022': cvmfs +
'data22_13p6TeV/20220902/data22_13p6TeV.periodF_DetStatus-v108-pro28_MERGED_PHYS_StandardGRL_All_Good_25ns.xml'
87 acc.setPrivateTools(CompFactory.GoodRunsListSelectionTool(
88 name=
"GoodRunsListSelectionTool",
89 GoodRunsListVec=[grldict[p]
for p
in flags.PhysVal.IDPVM.GRL],
97 acc.setPrivateTools(CompFactory.InDetVertexTruthMatchTool(**kwargs))
102 from InDetPhysValMonitoring.InDetPhysValDecorationConfig
import (
103 AddDecoratorIfNeededCfg)
105 kwargs.setdefault(
"useTrackSelection",
False)
106 kwargs.setdefault(
"EnableLumi",
False)
109 kwargs.setdefault(
'VertexContainerName', flags.PhysVal.IDPVM.PrimaryVertexContainer)
112 if flags.PhysVal.IDPVM.hardScatterStrategy == 2:
114 from InDetPhysValMonitoring.addRecoJetsConfig
import (
115 AddRecoJetsIfNotExistingCfg)
117 flags, flags.PhysVal.IDPVM.jetsNameForHardScatter))
120 if flags.PhysVal.IDPVM.hardScatterStrategy == 3:
121 from DerivationFrameworkHiggs.HIGG1D1CustomVertexConfig
import DiPhotonVertexCfg
124 if flags.PhysVal.IDPVM.GRL:
125 kwargs.setdefault(
"useGRL",
True)
126 kwargs.setdefault(
'GoodRunsListSelectionTool', acc.popToolsAndMerge(
129 if flags.Input.isMC
and not flags.PhysVal.IDPVM.doRecoOnly:
130 kwargs.setdefault(
"TruthParticleContainerName",
"TruthParticles")
131 if 'TruthSelectionTool' not in kwargs:
132 kwargs.setdefault(
"TruthSelectionTool", acc.popToolsAndMerge(
135 doHyyHSSelection = flags.PhysVal.IDPVM.hardScatterStrategy == 3
136 if 'hardScatterSelectionTool' not in kwargs:
137 from InDetConfig.InDetHardScatterSelectionToolConfig
import (
138 InDetHardScatterSelectionToolCfg)
139 kwargs.setdefault(
"hardScatterSelectionTool", acc.popToolsAndMerge(
142 RedoHardScatter=
not doHyyHSSelection,
143 SelectionMode=flags.PhysVal.IDPVM.hardScatterStrategy,
145 JetContainer=flags.PhysVal.IDPVM.jetsNameForHardScatter,
146 VertexContainer=flags.PhysVal.IDPVM.PrimaryVertexContainer
150 assert flags.PhysVal.IDPVM.PrimaryVertexContainer ==
'HggPrimaryVertices'
152 if flags.PhysVal.IDPVM.doValidateTracksInJets:
153 kwargs.setdefault(
"JetContainerName",
'AntiKt4EMPFlowJets')
154 kwargs.setdefault(
"FillTrackInJetPlots",
True)
156 if (
"xAOD::JetContainer#AntiKt4TruthJets"
157 not in flags.Input.TypedCollections):
158 from InDetPhysValMonitoring.addTruthJetsConfig
import (
159 AddTruthJetsIfNotExistingCfg)
162 if flags.PhysVal.IDPVM.doValidateTracksInBJets:
163 kwargs.setdefault(
"FillTrackInBJetPlots",
True)
166 kwargs.setdefault(
"JetContainerName",
'')
167 kwargs.setdefault(
"FillTrackInJetPlots",
False)
169 kwargs.setdefault(
"FillTruthToRecoNtuple",
170 flags.PhysVal.IDPVM.doValidateTruthToRecoNtuple)
171 kwargs.setdefault(
"doTruthOriginPlots",
172 flags.PhysVal.IDPVM.doTruthOriginPlots)
173 kwargs.setdefault(
"doDuplicatePlots",
174 flags.PhysVal.IDPVM.doDuplicatePlots)
175 kwargs.setdefault(
"doPerAuthorPlots",
176 flags.PhysVal.IDPVM.doPerAuthorPlots)
177 kwargs.setdefault(
"doHitLevelPlots",
178 flags.PhysVal.IDPVM.doHitLevelPlots)
181 kwargs.setdefault(
"useVertexTruthMatchTool",
True)
182 kwargs.setdefault(
"VertexTruthMatchTool", acc.popToolsAndMerge(
185 if "trackTruthOriginTool" not in kwargs:
186 from InDetTrackSystematicsTools.InDetTrackSystematicsToolsConfig
import InDetTrackTruthOriginToolCfg
187 kwargs.setdefault(
"trackTruthOriginTool", acc.popToolsAndMerge(
191 if flags.PhysVal.IDPVM.setTruthStrategy
in [
'All',
'PileUp']:
192 if not(
"xAOD::TruthPileupEventContainer#TruthPileupEvents"
193 in flags.Input.TypedCollections):
194 print(
'WARNING Truth Strategy for InDetPhysValMonitoring set to %s but TruthPileupEvents are missing in the input' % (flags.PhysVal.IDPVM.setTruthStrategy))
195 kwargs.setdefault(
"PileupSwitch",
196 flags.PhysVal.IDPVM.setTruthStrategy)
198 elif flags.PhysVal.IDPVM.setTruthStrategy !=
'HardScatter':
199 print(
'WARNING Truth Strategy for for InDetPhysValMonitoring set to invalid option %s; valid flags are ["HardScatter", "All", "PileUp"]' % (
200 flags.PhysVal.IDPVM.setTruthStrategy))
204 kwargs.setdefault(
"TruthParticleContainerName",
'')
205 kwargs.setdefault(
"TruthVertexContainerName",
'')
206 kwargs.setdefault(
"TruthEvents",
'')
207 kwargs.setdefault(
"TruthPileupEvents",
'')
208 kwargs.setdefault(
"TruthSelectionTool",
None)
210 kwargs.setdefault(
"JetContainerName",
'')
211 kwargs.setdefault(
"FillTrackInJetPlots",
False)
212 kwargs.setdefault(
"FillTrackInBJetPlots",
False)
213 kwargs.setdefault(
"FillTruthToRecoNtuple",
False)
215 if flags.Detector.GeometryITk:
217 kwargs.setdefault(
"doTRTExtensionPlots",
False)
219 if flags.PhysVal.IDPVM.doTechnicalEfficiency:
220 kwargs.setdefault(
"fillTechnicalEfficiency",
True)
221 kwargs.setdefault(
"EtaBins", flags.Tracking.ITkMainPass.etaBins
if flags.Detector.GeometryITk
223 kwargs.setdefault(
"MinNumberClusters", flags.Tracking.ITkMainPass.minClusters
if flags.Detector.GeometryITk
224 else [flags.Tracking.MainPass.minClusters])
227 if flags.PhysVal.IDPVM.doPhysValOutput:
228 kwargs.setdefault(
"DetailLevel", 100)
230 elif flags.PhysVal.IDPVM.doExpertOutput:
231 kwargs.setdefault(
"DetailLevel", 200)
234 if flags.PhysVal.IDPVM.doIDTIDE:
235 kwargs.setdefault(
"doIDTIDEPlots",
True)
236 kwargs.setdefault(
"JetContainerName",
'AntiKt4EMPFlowJets')
237 kwargs.setdefault(
"FillTrackInJetPlots",
True)
240 kwargs.setdefault(
'JetAbsEtaMin', 0)
241 kwargs.setdefault(
'JetAbsEtaMax',
242 flags.PhysVal.IDPVM.JetAbsEtaMax)
243 kwargs.setdefault(
'maxTrkJetDR',
244 flags.PhysVal.IDPVM.maxTrkJetDR)
246 kwargs.setdefault(
'JetPtMin', 100)
247 kwargs.setdefault(
'JetPtMax', 5000)
249 kwargs.setdefault(
"doPRW", flags.PhysVal.IDPVM.doPRW)
251 acc.setPrivateTools(CompFactory.InDetPhysValMonitoringTool(**kwargs))
258 if 'TrackSelectionTool' not in kwargs:
259 from InDetConfig.InDetTrackSelectionToolConfig
import (
260 InDetTrackSelectionTool_Loose_Cfg)
261 kwargs.setdefault(
"TrackSelectionTool", acc.popToolsAndMerge(
264 kwargs.setdefault(
"SubFolder",
'Loose/')
265 kwargs.setdefault(
"useTrackSelection",
True)
268 flags, name=
"InDetPhysValMonitoringToolLoose", **kwargs)))
275 if 'TrackSelectionTool' not in kwargs:
276 from InDetConfig.InDetTrackSelectionToolConfig
import (
277 InDetTrackSelectionTool_TightPrimary_Cfg)
278 kwargs.setdefault(
"TrackSelectionTool", acc.popToolsAndMerge(
281 kwargs.setdefault(
"SubFolder",
'TightPrimary/')
282 kwargs.setdefault(
"useTrackSelection",
True)
285 flags, name=
"InDetPhysValMonitoringToolTightPrimary", **kwargs)))
292 if 'TrackSelectionTool' not in kwargs:
293 from InDetConfig.InDetTrackSelectionToolConfig
import (
294 InDetTrackSelectionTool_HILoose_Cfg)
295 kwargs.setdefault(
"TrackSelectionTool", acc.popToolsAndMerge(
298 kwargs.setdefault(
"SubFolder",
'HILoose/')
299 kwargs.setdefault(
"useTrackSelection",
True)
302 flags, name=
"InDetPhysValMonitoringToolHILoose", **kwargs)))
307 kwargs.setdefault(
"SubFolder",
'GSF/')
308 kwargs.setdefault(
"TrackParticleContainerName",
'GSFTrackParticles')
309 kwargs.setdefault(
"useTrackSelection",
True)
311 flags, name=
"InDetPhysValMonitoringToolGSF", **kwargs)
317 kwargs.setdefault(
"TruthSelectionTool", acc.popToolsAndMerge(
319 flags, name=
"AthTruthSelectionToolForIDPVM_Electrons",
323 kwargs.setdefault(
"onlyFillTruthMatched",
True)
324 kwargs.setdefault(
"SubFolder",
'Electrons/')
327 flags, name=
'InDetPhysValMonitoringToolElectrons', **kwargs)))
334 kwargs.setdefault(
"TruthSelectionTool", acc.popToolsAndMerge(
336 flags, name=
"AthTruthSelectionToolForIDPVM_Muons",
340 kwargs.setdefault(
"onlyFillTruthMatched",
True)
341 kwargs.setdefault(
"SubFolder",
'Muons/')
344 flags, name=
'InDetPhysValMonitoringToolMuons', **kwargs)))
351 kwargs.setdefault(
"SubFolder",
'LRT/')
352 kwargs.setdefault(
"TruthSelectionTool", acc.popToolsAndMerge(
354 kwargs.setdefault(
"TrackParticleContainerName",
355 'InDetLargeD0TrackParticles'
356 if flags.Tracking.storeSeparateLargeD0Container
else
357 'InDetTrackParticles')
358 kwargs.setdefault(
"useTrackSelection",
True)
361 flags, name=
'InDetPhysValMonitoringToolLargeD0', **kwargs)))
368 kwargs.setdefault(
"SubFolder",
'LRTMerged/')
369 kwargs.setdefault(
"TruthSelectionTool", acc.popToolsAndMerge(
371 kwargs.setdefault(
"TrackParticleContainerName",
372 'InDetWithLRTTrackParticles'
373 if flags.Tracking.storeSeparateLargeD0Container
else
374 'InDetTrackParticles')
375 kwargs.setdefault(
"useTrackSelection",
True)
378 flags, name=
'InDetPhysValMonitoringToolMergedLargeD0', **kwargs)))
383 kwargs.setdefault(
"SubFolder",
'LowPtRoI/')
384 kwargs.setdefault(
"TruthSelectionTool", acc.popToolsAndMerge(
386 kwargs.setdefault(
"TrackParticleContainerName",
387 'InDetLowPtRoITrackParticles')
389 flags, name=
'InDetPhysValMonitoringToolLowPtRoI', **kwargs)))
397 if flags.PhysVal.IDPVM.doValidateMergedLargeD0Tracks:
398 from DerivationFrameworkInDet.InDetToolsConfig
import InDetLRTMergeCfg
402 InDetPhysValMonitoringToolCfg),
403 (flags.PhysVal.IDPVM.doValidateMuonMatchedTracks,
404 InDetPhysValMonitoringToolMuonsCfg),
405 (flags.PhysVal.IDPVM.doValidateElectronMatchedTracks,
406 InDetPhysValMonitoringToolElectronsCfg),
407 (flags.PhysVal.IDPVM.doValidateLargeD0Tracks,
408 InDetLargeD0PhysValMonitoringToolCfg),
409 (flags.PhysVal.IDPVM.doValidateMergedLargeD0Tracks,
410 InDetMergedLargeD0PhysValMonitoringToolCfg),
411 (flags.PhysVal.IDPVM.doValidateLowPtRoITracks,
412 InDetLowPtRoIPhysValMonitoringToolCfg),
413 (flags.PhysVal.IDPVM.doValidateLooseTracks,
414 InDetPhysValMonitoringToolLooseCfg),
415 (flags.PhysVal.IDPVM.doValidateTightPrimaryTracks,
416 InDetPhysValMonitoringToolTightPrimaryCfg),
417 (flags.PhysVal.IDPVM.doValidateHILoose,
418 InDetPhysValMonitoringToolHILooseCfg),
419 (flags.PhysVal.IDPVM.doValidateGSFTracks,
420 InDetPhysValMonitoringToolGSFCfg)
424 for enabled, creator
in mons:
426 tools.append(acc.popToolsAndMerge(creator(flags)))
428 for col
in flags.PhysVal.IDPVM.validateExtraTrackCollections:
431 flags, name=
'InDetPhysValMonitoringTool'+prefix,
432 SubFolder=prefix+
'Tracks/',
433 TrackParticleContainerName=prefix+
'TrackParticles'
436 from PhysValMonitoring.PhysValMonitoringConfig
import PhysValMonitoringCfg