ATLAS Offline Software
Loading...
Searching...
No Matches
PHYSVAL.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2#====================================================================
3# DAOD_PHYSVAL.py
4# This defines DAOD_PHYSVAL, an unskimmed DAOD format for
5# Run 3 validation. It contains the variables and objects needed for
6# most physics validation tasks in ATLAS.
7# It requires the flag PHYSVAL in Derivation_tf.py
8#====================================================================
9
10from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
11from AthenaConfiguration.ComponentFactory import CompFactory
12from DerivationFrameworkEGamma.ElectronsCPDetailedContent import GSFTracksCPDetailedContent
13from AthenaConfiguration.Enums import MetadataCategory
14
15# Main algorithm config
16def PHYSVALKernelCfg(flags, name='PHYSVALKernel', **kwargs):
17 """Configure the derivation framework driving algorithm (kernel) for PHYSVAL"""
18 acc = ComponentAccumulator()
19
20 # Common augmentations
21 from DerivationFrameworkPhys.PhysCommonConfig import PhysCommonAugmentationsCfg
22 acc.merge(PhysCommonAugmentationsCfg(flags, TriggerListsHelper = kwargs['TriggerListsHelper']))
23
24 # LLP-specific configs
25 from DerivationFrameworkLLP.PhysValLLPConfig import PhysValLLPCfg
26 acc.merge(PhysValLLPCfg(flags))
27
28 if flags.Tracking.doLargeD0:
29 # LRT Egamma
30 from DerivationFrameworkEGamma.EGammaLRTConfig import EGammaLRTCfg
31 acc.merge(EGammaLRTCfg(flags))
32
33 from DerivationFrameworkLLP.LLPToolsConfig import LRTElectronLHSelectorsCfg
34 acc.merge(LRTElectronLHSelectorsCfg(flags))
35
36 # LRT Muons
37 from DerivationFrameworkMuons.MuonsCommonConfig import MuonsCommonCfg
38 acc.merge(MuonsCommonCfg(flags,
39 suff="LRT"))
40
41 # R = 0.4 LCTopo jets (for tau validation)
42 from JetRecConfig.StandardSmallRJets import AntiKt4LCTopo
43 from JetRecConfig.JetRecConfig import JetRecCfg
44
45 acc.merge(JetRecCfg(flags,AntiKt4LCTopo))
46
47 # Kernel algorithm
48 DerivationKernel = CompFactory.DerivationFramework.DerivationKernel
49 acc.addEventAlgo(DerivationKernel(name))
50 return acc
51
52
53def PHYSVALCfg(flags):
54
55 acc = ComponentAccumulator()
56
57 # Get the lists of triggers needed for trigger matching.
58 # This is needed at this scope (for the slimming) and further down in the config chain
59 # for actually configuring the matching, so we create it here and pass it down
60 # TODO: this should ideally be called higher up to avoid it being run multiple times in a train
61 from DerivationFrameworkPhys.TriggerListsHelper import TriggerListsHelper
62 PHYSVALTriggerListsHelper = TriggerListsHelper(flags)
63
64 # Common augmentations
65 acc.merge(PHYSVALKernelCfg(flags, name="PHYSVALKernel", StreamName = 'StreamDAOD_PHYSVAL', TriggerListsHelper = PHYSVALTriggerListsHelper))
66
67 # ============================
68 # Define contents of the format
69 # =============================
70 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
71 from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
72 from DerivationFrameworkCore.SlimmingHelper import SlimmingHelper
73
74 PHYSVALSlimmingHelper = SlimmingHelper("PHYSVALSlimmingHelper", NamesAndTypes = flags.Input.TypedCollections, flags = flags)
75 PHYSVALSlimmingHelper.SmartCollections = ["EventInfo",
76 "Electrons",
77 "LRTElectrons",
78 "Photons",
79 "Muons",
80 "MuonsLRT",
81 "PrimaryVertices",
82 "InDetTrackParticles",
83 "InDetLargeD0TrackParticles",
84 "AntiKt4EMTopoJets",
85 "AntiKt4EMPFlowJets",
86 "AntiKt4LCTopoJets",
87 "MET_Baseline_AntiKt4EMTopo",
88 "MET_Baseline_AntiKt4EMPFlow",
89 "TauJets",
90 "TauJets_MuonRM",
91 "TauJets_EleRM",
92 "DiTauJets",
93 "DiTauJetsLowPt",
94 "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets"]
95
96 PHYSVALSlimmingHelper.AllVariables = ["EventInfo",
97 "Electrons", "ForwardElectrons","LRTElectrons",
98 "Photons",
99 "Muons", "CombinedMuonTrackParticles","ExtrapolatedMuonTrackParticles",
100 "MuonsLRT",
101 "MuonSpectrometerTrackParticles","MSOnlyExtrapolatedMuonTrackParticles","MuonSegments",
102 "PrimaryVertices",
103 "InDetTrackParticles","InDetForwardTrackParticles",
104 "InDetLargeD0TrackParticles",
105 "AntiKt4EMTopoJets",
106 "AntiKt4EMPFlowJets",
107 "AntiKt4LCTopoJets",
108 "TauJets",
109 "TauJets_MuonRM",
110 "TauJets_EleRM",
111 "TauTracks",
112 "TauTracks_MuonRM",
113 "TauTracks_EleRM",
114 "DiTauJets",
115 "DiTauJetsLowPt",
116 "AntiKt10LCTopoJets","AntiKt4LCTopoJets","AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets",
117 "TruthParticles", "TruthEvents", "TruthVertices", "MuonTruthParticles", "egammaTruthParticles",
118 "MuonTruthSegments",
119 "MET_Truth","MET_TruthRegions",
120 "TruthElectrons","TruthMuons","TruthPhotons","TruthTaus","TruthNeutrinos","TruthBSM","TruthTop","TruthBoson",
121 "CaloCalTopoClusters", "EMOriginTopoClusters","LCOriginTopoClusters",
122 "JetETMissChargedParticleFlowObjects", "JetETMissNeutralParticleFlowObjects"]
123
124
125 # TODO: for now we don't have a ConfigFlag for this so it is set to False
126 AddPseudoTracks = False
127 if AddPseudoTracks:
128 PseudoTrackContainers = [
129 "InDetPseudoTrackParticles",
130 "InDetReplacedWithPseudoTrackParticles",
131 "InDetReplacedWithPseudoFromBTrackParticles",
132 "InDetReplacedWithPseudoNotFromBTrackParticles",
133 "InDetPlusPseudoTrackParticles",
134 "InDetPlusPseudoFromBTrackParticles",
135 "InDetPlusPseudoNotFromBTrackParticles",
136 "InDetNoFakesTrackParticles",
137 "InDetNoFakesFromBTrackParticles",
138 "InDetNoFakesNotFromBTrackParticles",
139 "InDetSiSPSeededTracksParticles"]
140 PHYSVALSlimmingHelper.SmartCollections += PseudoTrackContainers
141 PHYSVALSlimmingHelper.AllVariables += PseudoTrackContainers
142
143 excludedVertexAuxData = "-vxTrackAtVertex.-MvfFitInfo.-isInitialized.-VTAV"
144 StaticContent = []
145 StaticContent += ["xAOD::VertexContainer#SoftBVrtClusterTool_Tight_Vertices"]
146 StaticContent += ["xAOD::VertexAuxContainer#SoftBVrtClusterTool_Tight_VerticesAux." + excludedVertexAuxData]
147 StaticContent += ["xAOD::VertexContainer#SoftBVrtClusterTool_Medium_Vertices"]
148 StaticContent += ["xAOD::VertexAuxContainer#SoftBVrtClusterTool_Medium_VerticesAux." + excludedVertexAuxData]
149 StaticContent += ["xAOD::VertexContainer#SoftBVrtClusterTool_Loose_Vertices"]
150 StaticContent += ["xAOD::VertexAuxContainer#SoftBVrtClusterTool_Loose_VerticesAux." + excludedVertexAuxData]
151 StaticContent += ["xAOD::TauJetContainer#TauJets_MuonRM"]
152 StaticContent += ["xAOD::TauJetAuxContainer#TauJets_MuonRMAux.-VertexedClusters"]
153 StaticContent += ["xAOD::VertexContainer#TauSecondaryVertices_MuonRM"]
154 StaticContent += ["xAOD::VertexAuxContainer#TauSecondaryVertices_MuonRMAux.-vxTrackAtVertex"]
155
156 for wp in ["","_LeptonsMod_LRTR3_1p0"]:
157 StaticContent += ["xAOD::VertexContainer#VrtSecInclusive_SecondaryVertices" + wp]
158 StaticContent += ["xAOD::VertexAuxContainer#VrtSecInclusive_SecondaryVertices" + wp + "Aux."]
159
160
161 PHYSVALSlimmingHelper.StaticContent = StaticContent
162
163 # Truth containers
164 if flags.Input.isMC:
165 PHYSVALSlimmingHelper.AppendToDictionary = {'TruthEvents':'xAOD::TruthEventContainer','TruthEventsAux':'xAOD::TruthEventAuxContainer',
166 'MET_Truth':'xAOD::MissingETContainer','MET_TruthAux':'xAOD::MissingETAuxContainer',
167 'TruthElectrons':'xAOD::TruthParticleContainer','TruthElectronsAux':'xAOD::TruthParticleAuxContainer',
168 'TruthMuons':'xAOD::TruthParticleContainer','TruthMuonsAux':'xAOD::TruthParticleAuxContainer',
169 'TruthPhotons':'xAOD::TruthParticleContainer','TruthPhotonsAux':'xAOD::TruthParticleAuxContainer',
170 'TruthTaus':'xAOD::TruthParticleContainer','TruthTausAux':'xAOD::TruthParticleAuxContainer',
171 'TruthNeutrinos':'xAOD::TruthParticleContainer','TruthNeutrinosAux':'xAOD::TruthParticleAuxContainer',
172 'TruthBSM':'xAOD::TruthParticleContainer','TruthBSMAux':'xAOD::TruthParticleAuxContainer',
173 'TruthBoson':'xAOD::TruthParticleContainer','TruthBosonAux':'xAOD::TruthParticleAuxContainer',
174 'TruthTop':'xAOD::TruthParticleContainer','TruthTopAux':'xAOD::TruthParticleAuxContainer',
175 'TruthForwardProtons':'xAOD::TruthParticleContainer','TruthForwardProtonsAux':'xAOD::TruthParticleAuxContainer',
176 'BornLeptons':'xAOD::TruthParticleContainer','BornLeptonsAux':'xAOD::TruthParticleAuxContainer',
177 'TruthBosonsWithDecayParticles':'xAOD::TruthParticleContainer','TruthBosonsWithDecayParticlesAux':'xAOD::TruthParticleAuxContainer',
178 'TruthBosonsWithDecayVertices':'xAOD::TruthVertexContainer','TruthBosonsWithDecayVerticesAux':'xAOD::TruthVertexAuxContainer',
179 'TruthBSMWithDecayParticles':'xAOD::TruthParticleContainer','TruthBSMWithDecayParticlesAux':'xAOD::TruthParticleAuxContainer',
180 'TruthBSMWithDecayVertices':'xAOD::TruthVertexContainer','TruthBSMWithDecayVerticesAux':'xAOD::TruthVertexAuxContainer',
181 'TruthHFWithDecayParticles':'xAOD::TruthParticleContainer','TruthHFWithDecayParticlesAux':'xAOD::TruthParticleAuxContainer',
182 'TruthHFWithDecayVertices':'xAOD::TruthVertexContainer','TruthHFWithDecayVerticesAux':'xAOD::TruthVertexAuxContainer',
183 'TruthCharm':'xAOD::TruthParticleContainer','TruthCharmAux':'xAOD::TruthParticleAuxContainer',
184 'TruthPrimaryVertices':'xAOD::TruthVertexContainer','TruthPrimaryVerticesAux':'xAOD::TruthVertexAuxContainer',
185 'AntiKt10TruthTrimmedPtFrac5SmallR20Jets':'xAOD::JetContainer', 'AntiKt10TruthTrimmedPtFrac5SmallR20JetsAux':'xAOD::JetAuxContainer',
186 'AntiKt10LCTopoJets':'xAOD::JetContainer', 'AntiKt10LCTopoJetsAux':'xAOD::JetAuxContainer',
187 'EMOriginTopoClusters':'xAOD::CaloClusterContainer', 'EMOriginTopoClustersAux':'xAOD::ShallowAuxContainer',
188 'LCOriginTopoClusters':'xAOD::CaloClusterContainer', 'LCOriginTopoClustersAux':'xAOD::ShallowAuxContainer',
189 'GlobalChargedParticleFlowObjects':'xAOD::FlowElementContainer','GlobalChargedParticleFlowObjectsAux':'xAOD::FlowElementAuxContainer',
190 'GlobalNeutralParticleFlowObjects':'xAOD::FlowElementContainer', 'GlobalNeutralParticleFlowObjectsAux':'xAOD::FlowElementAuxContainer',
191 'CHSGChargedParticleFlowObjects': 'xAOD::FlowElementContainer', 'CHSGChargedParticleFlowObjectsAux':'xAOD::ShallowAuxContainer',
192 'CHSGNeutralParticleFlowObjects': 'xAOD::FlowElementContainer', 'CHSGNeutralParticleFlowObjectsAux':'xAOD::ShallowAuxContainer'}
193
194 from DerivationFrameworkMCTruth.MCTruthCommonConfig import addTruth3ContentToSlimmerTool
195 addTruth3ContentToSlimmerTool(PHYSVALSlimmingHelper)
196 PHYSVALSlimmingHelper.AllVariables += ['TruthHFWithDecayParticles','TruthHFWithDecayVertices','TruthCharm','TruthPileupEvents','TruthPileupParticles','InTimeAntiKt4TruthJets','OutOfTimeAntiKt4TruthJets']
197 PHYSVALSlimmingHelper.SmartCollections += ['AntiKt4TruthJets']
198
199 if flags.Trigger.EDMVersion == 3:
200 # Decorate Run 3 HLT jets with truth labels
201 from DerivationFrameworkFlavourTag.FtagDerivationConfig import HLTJetFTagDecorationCfg
202 acc.merge(HLTJetFTagDecorationCfg(flags))
203
204 # End of isMC clause
205
206 PHYSVALSlimmingHelper.ExtraVariables += ["AntiKt10TruthTrimmedPtFrac5SmallR20Jets.Tau1_wta.Tau2_wta.Tau3_wta.D2.GhostBHadronsFinalCount",
207 "Electrons.TruthLink","LRTElectrons.TruthLink",
208 "Muons.TruthLink","MuonsLRT.TruthLink",
209 "Photons.TruthLink",
210 "AntiKt4EMTopoJets.DFCommonJets_QGTagger_truthjet_nCharged.DFCommonJets_QGTagger_truthjet_pt.DFCommonJets_QGTagger_truthjet_eta.DFCommonJets_QGTagger_NTracks.DFCommonJets_QGTagger_TracksWidth.DFCommonJets_QGTagger_TracksC1.PartonTruthLabelID",
211 "AntiKt4EMPFlowJets.DFCommonJets_QGTagger_truthjet_nCharged.DFCommonJets_QGTagger_truthjet_pt.DFCommonJets_QGTagger_truthjet_eta.DFCommonJets_QGTagger_NTracks.DFCommonJets_QGTagger_TracksWidth.DFCommonJets_QGTagger_TracksC1.PartonTruthLabelID.DFCommonJets_fJvt",
212 "TruthPrimaryVertices.t.x.y.z",
213 "TauNeutralParticleFlowObjects.pt.eta.phi.m.bdtPi0Score.nPi0Proto",
214 "TauChargedParticleFlowObjects.pt.eta.phi.m",
215 "TauNeutralParticleFlowObjects_MuonRM.pt.eta.phi.m.bdtPi0Score.nPi0Proto",
216 "TauChargedParticleFlowObjects_MuonRM.pt.eta.phi.m",
217 "TauNeutralParticleFlowObjects_EleRM.pt.eta.phi.m.bdtPi0Score.nPi0Proto",
218 "TauChargedParticleFlowObjects_EleRM.pt.eta.phi.m",
219 "MET_Track.sumet"]
220 PHYSVALSlimmingHelper.ExtraVariables += GSFTracksCPDetailedContent
221
222 VSITrackAuxVars = [
223 "is_selected", "is_associated", "is_svtrk_final", "pt_wrtSV", "eta_wrtSV",
224 "phi_wrtSV", "d0_wrtSV", "z0_wrtSV", "errP_wrtSV", "errd0_wrtSV",
225 "errz0_wrtSV", "chi2_toSV"
226 ]
227
228 for suffix in ["","_LeptonsMod_LRTR3_1p0"]:
229 PHYSVALSlimmingHelper.ExtraVariables += [ "InDetTrackParticles." + '.'.join( [ var + suffix for var in VSITrackAuxVars] ) ]
230 PHYSVALSlimmingHelper.ExtraVariables += [ "InDetLargeD0TrackParticles." + '.'.join( [ var + suffix for var in VSITrackAuxVars] ) ]
231 PHYSVALSlimmingHelper.ExtraVariables += [ "GSFTrackParticles." + '.'.join( [ var + suffix for var in VSITrackAuxVars] ) ]
232 PHYSVALSlimmingHelper.ExtraVariables += [ "LRTGSFTrackParticles." + '.'.join( [ var + suffix for var in VSITrackAuxVars] ) ]
233
234
235 # Trigger content
236 PHYSVALSlimmingHelper.IncludeTriggerNavigation = True
237 PHYSVALSlimmingHelper.IncludeJetTriggerContent = True
238 PHYSVALSlimmingHelper.IncludeMuonTriggerContent = True
239 PHYSVALSlimmingHelper.IncludeEGammaTriggerContent = True
240 PHYSVALSlimmingHelper.IncludeTauTriggerContent = True
241 PHYSVALSlimmingHelper.IncludeEtMissTriggerContent = True
242 PHYSVALSlimmingHelper.IncludeBJetTriggerContent = True
243 PHYSVALSlimmingHelper.IncludeBPhysTriggerContent = True
244 PHYSVALSlimmingHelper.IncludeMinBiasTriggerContent = True
245
246 # Trigger matching
247 # Run 2
248 if flags.Trigger.EDMVersion == 2:
249 from DerivationFrameworkPhys.TriggerMatchingCommonConfig import AddRun2TriggerMatchingToSlimmingHelper
250 AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = PHYSVALSlimmingHelper,
251 OutputContainerPrefix = "TrigMatch_",
252 TriggerList = PHYSVALTriggerListsHelper.Run2TriggerNamesTau)
253 AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = PHYSVALSlimmingHelper,
254 OutputContainerPrefix = "TrigMatch_",
255 TriggerList = PHYSVALTriggerListsHelper.Run2TriggerNamesNoTau)
256 # Run 3, or Run 2 with navigation conversion
257 if flags.Trigger.EDMVersion == 3 or (flags.Trigger.EDMVersion == 2 and flags.Trigger.doEDMVersionConversion):
258 from TrigNavSlimmingMT.TrigNavSlimmingMTConfig import AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
259 AddRun3TrigNavSlimmingCollectionsToSlimmingHelper(PHYSVALSlimmingHelper)
260
261 # Full trigger content (needed for T0-style monitoring)
262 PHYSVALSlimmingHelper.IncludeFullTriggerEDMLevel = "ESD"
263
264 # Output stream
265 PHYSVALItemList = PHYSVALSlimmingHelper.GetItemList()
266 acc.merge(OutputStreamCfg(flags, "DAOD_PHYSVAL", ItemList=PHYSVALItemList, AcceptAlgs=["PHYSVALKernel"]))
267 acc.merge(SetupMetaDataForStreamCfg(flags, "DAOD_PHYSVAL", AcceptAlgs=["PHYSVALKernel"], createMetadata=[MetadataCategory.CutFlowMetaData]))
268
269 return acc
270
PHYSVALCfg(flags)
Definition PHYSVAL.py:53
PHYSVALKernelCfg(flags, name='PHYSVALKernel', **kwargs)
Definition PHYSVAL.py:16