38 """Configure the EGAM9 skimming tool"""
39 acc = ComponentAccumulator()
43 "(count(Photons.pt > 9.5*GeV && " +
"Photons.DFCommonPhotonsIsEMLoose) > 0)"
45 electron_selection = (
46 "(count(Electrons.pt > 9.5*GeV && "
47 +
"Electrons.DFCommonElectronsLHMedium) > 0)"
49 expression = photon_selection +
" || " + electron_selection
54 if flags.Trigger.EDMVersion == 2:
56 elif flags.Trigger.EDMVersion == 3:
60 triggers = BootstrapPhotonTriggers[MenuType]
61 triggers += noalgTriggers[MenuType]
62 print(
"EGAM9 trigger skimming list (OR): ", triggers)
63 EGAM9_TriggerSkimmingTool = CompFactory.DerivationFramework.TriggerSkimmingTool(
64 name=
"EGAM9_TriggerSkimmingTool", TriggerListOR=triggers
66 acc.addPublicTool(EGAM9_TriggerSkimmingTool)
67 skimmingTools += [EGAM9_TriggerSkimmingTool]
70 print(
"EGAM9 offline skimming expression: ", expression)
71 from DerivationFrameworkTools.DerivationFrameworkToolsConfig
import (
72 xAODStringSkimmingToolCfg)
73 EGAM9_OfflineSkimmingTool = acc.getPrimaryAndMerge(xAODStringSkimmingToolCfg(
74 flags, name =
"EGAM9_OfflineSkimmingTool", expression = expression))
75 skimmingTools += [EGAM9_OfflineSkimmingTool]
78 print(
"EGAM9 skimming is logical AND of previous selections")
79 EGAM9_SkimmingTool = CompFactory.DerivationFramework.FilterCombinationAND(
80 name=
"EGAM9_SkimmingTool",
81 FilterList=skimmingTools
84 acc.addPublicTool(EGAM9_SkimmingTool, primary=
True)
89 """Configure the derivation framework driving algorithm (kernel)
91 acc = ComponentAccumulator()
94 from DerivationFrameworkPhys.PhysCommonConfig
import PhysCommonAugmentationsCfg
97 PhysCommonAugmentationsCfg(
98 flags, TriggerListsHelper=kwargs[
"TriggerListsHelper"]
103 augmentationTools = []
108 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig
import (
109 CaloDecoratorKernelCfg)
110 acc.merge(CaloDecoratorKernelCfg(flags))
114 streamName = kwargs[
"StreamName"]
117 if flags.Derivation.Egamma.doTrackThinning:
118 TrackThinningKeepElectronTracks =
False
119 TrackThinningKeepPhotonTracks =
True
120 TrackThinningKeepPVTracks =
False
123 if TrackThinningKeepElectronTracks:
124 EGAM9ElectronTPThinningTool = (
125 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
126 name=
"EGAM9ElectronTPThinningTool",
127 StreamName=streamName,
129 GSFTrackParticlesKey=
"GSFTrackParticles",
130 InDetTrackParticlesKey=
"InDetTrackParticles",
131 SelectionString=
"Electrons.pt > 0*GeV",
136 acc.addPublicTool(EGAM9ElectronTPThinningTool)
137 thinningTools.append(EGAM9ElectronTPThinningTool)
140 if TrackThinningKeepPhotonTracks:
141 EGAM9PhotonTPThinningTool = (
142 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
143 name=
"EGAM9PhotonTPThinningTool",
144 StreamName=streamName,
146 GSFTrackParticlesKey=
"GSFTrackParticles",
147 InDetTrackParticlesKey=
"InDetTrackParticles",
148 GSFConversionVerticesKey=
"GSFConversionVertices",
149 SelectionString=
"Photons.pt > 0*GeV",
154 acc.addPublicTool(EGAM9PhotonTPThinningTool)
155 thinningTools.append(EGAM9PhotonTPThinningTool)
158 thinning_expression =
" && ".join(
160 "(InDetTrackParticles.DFCommonTightPrimary)",
161 "(abs(InDetTrackParticles.DFCommonInDetTrackZ0AtPV)*sin(InDetTrackParticles.theta)<3*mm)",
162 "(InDetTrackParticles.pt > 10*GeV)",
165 if TrackThinningKeepPVTracks:
166 from DerivationFrameworkInDet.InDetToolsConfig
import (
167 TrackParticleThinningCfg,
170 EGAM9TPThinningTool = acc.getPrimaryAndMerge(
171 TrackParticleThinningCfg(
173 name=
"EGAM9TPThinningTool",
174 StreamName=streamName,
175 SelectionString=thinning_expression,
176 InDetTrackParticlesKey=
"InDetTrackParticles",
179 thinningTools.append(EGAM9TPThinningTool)
184 truth_cond_WZH =
"(TruthParticles.isW || TruthParticles.isZ || TruthParticles.isHiggs)"
186 truth_cond_lep =
"(TruthParticles.isLepton)"
188 truth_cond_top =
"(TruthParticles.isTop)"
190 truth_cond_gam =
" && ".join(
191 [
"(TruthParticles.isPhoton)",
"(TruthParticles.pt > 1*GeV)"]
194 truth_cond_finalState =
"(TruthParticles.isGenStable)"
209 + truth_cond_finalState
212 print(
"EGAM9 truth thinning expression: ", truth_expression)
214 EGAM9TruthThinningTool = CompFactory.DerivationFramework.GenericTruthThinning(
215 name=
"EGAM9TruthThinningTool",
216 StreamName=streamName,
217 ParticleSelectionString=truth_expression,
218 PreserveDescendants=
False,
219 PreserveGeneratorDescendants=
True,
220 PreserveAncestors=
True,
222 acc.addPublicTool(EGAM9TruthThinningTool)
223 thinningTools.append(EGAM9TruthThinningTool)
227 from DerivationFrameworkCalo.CaloCellDFGetterConfig
import thinCaloCellsForDFCfg
230 thinCaloCellsForDFCfg(
232 inputClusterKeys=[
"egammaClusters"],
233 streamName=
"StreamDAOD_EGAM9",
234 inputCellKey=
"AllCalo",
235 outputCellKey=
"DFEGAMCellContainer",
244 CompFactory.DerivationFramework.DerivationKernel(
246 SkimmingTools=[skimmingTool],
247 AugmentationTools=augmentationTools,
248 ThinningTools=thinningTools,
256 acc = ComponentAccumulator()
265 from DerivationFrameworkPhys.TriggerListsHelper
import TriggerListsHelper
267 EGAM9TriggerListsHelper = TriggerListsHelper(flags)
274 StreamName=
"StreamDAOD_EGAM9",
275 TriggerListsHelper=EGAM9TriggerListsHelper,
280 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
281 from xAODMetaDataCnv.InfileMetaDataConfig
import SetupMetaDataForStreamCfg
282 from DerivationFrameworkCore.SlimmingHelper
import SlimmingHelper
285 "EGAM9SlimmingHelper",
286 NamesAndTypes=flags.Input.TypedCollections,
295 EGAM9SlimmingHelper.AllVariables = [
304 if flags.Trigger.EDMVersion == 2:
306 elif flags.Trigger.EDMVersion == 3:
310 EGAM9SlimmingHelper.AllVariables += ExtraContainersTrigger[MenuType]
311 EGAM9SlimmingHelper.AllVariables += ExtraContainersPhotonTrigger[MenuType]
312 if not flags.Input.isMC:
313 EGAM9SlimmingHelper.AllVariables += ExtraContainersTriggerDataOnly[MenuType]
317 EGAM9SlimmingHelper.AllVariables += [
321 "egammaTruthParticles",
332 EGAM9SlimmingHelper.SmartCollections = [
335 "InDetTrackParticles",
339 EGAM9SlimmingHelper.SmartCollections += [
"AntiKt4EMPFlowJets"]
341 EGAM9SlimmingHelper.SmartCollections += [
343 "AntiKt4TruthDressedWZJets",
349 EGAM9SlimmingHelper.ExtraVariables += [
"Photons.DFCommonLoosePrime5"]
352 EGAM9SlimmingHelper.ExtraVariables += [
353 "GSFConversionVertices.x.y.z.px.py.pz.pt1.pt2.etaAtCalo.phiAtCalo",
354 "GSFConversionVertices.trackParticleLinks",
358 EGAM9SlimmingHelper.ExtraVariables += [
"PrimaryVertices.x.y.sumPt2"]
362 EGAM9SlimmingHelper.ExtraVariables += [
363 "AntiKt4PV0TrackJets.pt.eta.phi.e.m.btaggingLink.constituentLinks"
367 EGAM9SlimmingHelper.ExtraVariables += PhotonsCPDetailedContent
368 EGAM9SlimmingHelper.ExtraVariables += ElectronsCPDetailedContent
369 EGAM9SlimmingHelper.ExtraVariables += GSFTracksCPDetailedContent
372 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig
import (
374 getClusterEnergyPerLayerDecorations,
377 gainDecorations = getGainDecorations(acc, flags,
"EGAM9Kernel")
378 print(
"EGAM9 gain decorations: ", gainDecorations)
379 EGAM9SlimmingHelper.ExtraVariables.extend(gainDecorations)
380 clusterEnergyDecorations = getClusterEnergyPerLayerDecorations(acc,
"EGAM9Kernel")
381 print(
"EGAM9 cluster energy decorations: ", clusterEnergyDecorations)
382 EGAM9SlimmingHelper.ExtraVariables.extend(clusterEnergyDecorations)
385 EGAM9SlimmingHelper.ExtraVariables += [
386 "TopoClusterIsoCentralEventShape.Density",
387 "TopoClusterIsoForwardEventShape.Density",
388 "NeutralParticleFlowIsoCentralEventShape.Density",
389 "NeutralParticleFlowIsoForwardEventShape.Density",
394 EGAM9SlimmingHelper.ExtraVariables += [
395 "Photons.truthClassification.truthOrigin.truthType.truthParticleLink"
399 if flags.Derivation.Egamma.doEventInfoSlimming:
400 EGAM9SlimmingHelper.SmartCollections.append(
"EventInfo")
402 EGAM9SlimmingHelper.AllVariables += [
"EventInfo"]
405 EGAM9SlimmingHelper.IncludeEGammaTriggerContent =
True
409 if flags.Trigger.EDMVersion == 2:
410 from DerivationFrameworkPhys.TriggerMatchingCommonConfig
import AddRun2TriggerMatchingToSlimmingHelper
411 AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = EGAM9SlimmingHelper,
412 OutputContainerPrefix =
"TrigMatch_",
413 TriggerList = EGAM9TriggerListsHelper.Run2TriggerNamesNoTau)
415 if flags.Trigger.EDMVersion == 3
or (flags.Trigger.EDMVersion == 2
and flags.Trigger.doEDMVersionConversion):
416 from TrigNavSlimmingMT.TrigNavSlimmingMTConfig
import AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
417 AddRun3TrigNavSlimmingCollectionsToSlimmingHelper(EGAM9SlimmingHelper)
422 EGAM9SlimmingHelper.StaticContent = [
423 "CaloCellContainer#DFEGAMCellContainer",
424 "CaloClusterCellLinkContainer#egammaClusters_links",
427 EGAM9SlimmingHelper.StaticContent = [
428 "CaloCellContainer#AllCalo",
429 "CaloClusterCellLinkContainer#egammaClusters_links",
432 EGAM9ItemList = EGAM9SlimmingHelper.GetItemList()
437 ItemList=EGAM9ItemList,
438 AcceptAlgs=[
"EGAM9Kernel"],
442 SetupMetaDataForStreamCfg(
445 AcceptAlgs=[
"EGAM9Kernel"],
447 MetadataCategory.CutFlowMetaData,
448 MetadataCategory.TruthMetaData,