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(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 =
" && ".join(
185 [
"(abs(TruthParticles.pdgId) >= 23)",
"(abs(TruthParticles.pdgId) <= 25)"]
188 truth_cond_lep =
" && ".join(
189 [
"(abs(TruthParticles.pdgId) >= 11)",
"(abs(TruthParticles.pdgId) <= 16)"]
192 truth_cond_top =
"(abs(TruthParticles.pdgId) == 6)"
194 truth_cond_gam =
" && ".join(
195 [
"(abs(TruthParticles.pdgId) == 22)",
"(TruthParticles.pt > 1*GeV)"]
198 truth_cond_finalState =
"(TruthParticles.isGenStable)"
213 + truth_cond_finalState
216 print(
"EGAM9 truth thinning expression: ", truth_expression)
218 EGAM9TruthThinningTool = CompFactory.DerivationFramework.GenericTruthThinning(
219 name=
"EGAM9TruthThinningTool",
220 StreamName=streamName,
221 ParticleSelectionString=truth_expression,
222 PreserveDescendants=
False,
223 PreserveGeneratorDescendants=
True,
224 PreserveAncestors=
True,
226 acc.addPublicTool(EGAM9TruthThinningTool)
227 thinningTools.append(EGAM9TruthThinningTool)
231 from DerivationFrameworkCalo.CaloCellDFGetterConfig
import thinCaloCellsForDFCfg
234 thinCaloCellsForDFCfg(
236 inputClusterKeys=[
"egammaClusters"],
237 streamName=
"StreamDAOD_EGAM9",
238 inputCellKey=
"AllCalo",
239 outputCellKey=
"DFEGAMCellContainer",
248 CompFactory.DerivationFramework.DerivationKernel(
250 SkimmingTools=[skimmingTool],
251 AugmentationTools=augmentationTools,
252 ThinningTools=thinningTools,
260 acc = ComponentAccumulator()
269 from DerivationFrameworkPhys.TriggerListsHelper
import TriggerListsHelper
271 EGAM9TriggerListsHelper = TriggerListsHelper(flags)
278 StreamName=
"StreamDAOD_EGAM9",
279 TriggerListsHelper=EGAM9TriggerListsHelper,
284 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
285 from xAODMetaDataCnv.InfileMetaDataConfig
import SetupMetaDataForStreamCfg
286 from DerivationFrameworkCore.SlimmingHelper
import SlimmingHelper
289 "EGAM9SlimmingHelper",
290 NamesAndTypes=flags.Input.TypedCollections,
299 EGAM9SlimmingHelper.AllVariables = [
308 if flags.Trigger.EDMVersion == 2:
310 elif flags.Trigger.EDMVersion == 3:
314 EGAM9SlimmingHelper.AllVariables += ExtraContainersTrigger[MenuType]
315 EGAM9SlimmingHelper.AllVariables += ExtraContainersPhotonTrigger[MenuType]
316 if not flags.Input.isMC:
317 EGAM9SlimmingHelper.AllVariables += ExtraContainersTriggerDataOnly[MenuType]
321 EGAM9SlimmingHelper.AllVariables += [
325 "egammaTruthParticles",
336 EGAM9SlimmingHelper.SmartCollections = [
339 "InDetTrackParticles",
343 EGAM9SlimmingHelper.SmartCollections += [
"AntiKt4EMPFlowJets"]
345 EGAM9SlimmingHelper.SmartCollections += [
347 "AntiKt4TruthDressedWZJets",
353 EGAM9SlimmingHelper.ExtraVariables += [
"Photons.DFCommonLoosePrime5"]
356 EGAM9SlimmingHelper.ExtraVariables += [
357 "GSFConversionVertices.x.y.z.px.py.pz.pt1.pt2.etaAtCalo.phiAtCalo",
358 "GSFConversionVertices.trackParticleLinks",
362 EGAM9SlimmingHelper.ExtraVariables += [
"PrimaryVertices.x.y.sumPt2"]
366 EGAM9SlimmingHelper.ExtraVariables += [
367 "AntiKt4PV0TrackJets.pt.eta.phi.e.m.btaggingLink.constituentLinks"
371 EGAM9SlimmingHelper.ExtraVariables += PhotonsCPDetailedContent
372 EGAM9SlimmingHelper.ExtraVariables += ElectronsCPDetailedContent
373 EGAM9SlimmingHelper.ExtraVariables += GSFTracksCPDetailedContent
376 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig
import (
378 getClusterEnergyPerLayerDecorations,
381 gainDecorations = getGainDecorations(acc, flags,
"EGAM9Kernel")
382 print(
"EGAM9 gain decorations: ", gainDecorations)
383 EGAM9SlimmingHelper.ExtraVariables.extend(gainDecorations)
384 clusterEnergyDecorations = getClusterEnergyPerLayerDecorations(acc,
"EGAM9Kernel")
385 print(
"EGAM9 cluster energy decorations: ", clusterEnergyDecorations)
386 EGAM9SlimmingHelper.ExtraVariables.extend(clusterEnergyDecorations)
389 EGAM9SlimmingHelper.ExtraVariables += [
390 "TopoClusterIsoCentralEventShape.Density",
391 "TopoClusterIsoForwardEventShape.Density",
392 "NeutralParticleFlowIsoCentralEventShape.Density",
393 "NeutralParticleFlowIsoForwardEventShape.Density",
398 EGAM9SlimmingHelper.ExtraVariables += [
399 "Photons.truthClassification.truthOrigin.truthType.truthParticleLink"
403 if flags.Derivation.Egamma.doEventInfoSlimming:
404 EGAM9SlimmingHelper.SmartCollections.append(
"EventInfo")
406 EGAM9SlimmingHelper.AllVariables += [
"EventInfo"]
409 EGAM9SlimmingHelper.IncludeEGammaTriggerContent =
True
413 if flags.Trigger.EDMVersion == 2:
414 from DerivationFrameworkPhys.TriggerMatchingCommonConfig
import AddRun2TriggerMatchingToSlimmingHelper
415 AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = EGAM9SlimmingHelper,
416 OutputContainerPrefix =
"TrigMatch_",
417 TriggerList = EGAM9TriggerListsHelper.Run2TriggerNamesNoTau)
419 if flags.Trigger.EDMVersion == 3
or (flags.Trigger.EDMVersion == 2
and flags.Trigger.doEDMVersionConversion):
420 from TrigNavSlimmingMT.TrigNavSlimmingMTConfig
import AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
421 AddRun3TrigNavSlimmingCollectionsToSlimmingHelper(EGAM9SlimmingHelper)
426 EGAM9SlimmingHelper.StaticContent = [
427 "CaloCellContainer#DFEGAMCellContainer",
428 "CaloClusterCellLinkContainer#egammaClusters_links",
431 EGAM9SlimmingHelper.StaticContent = [
432 "CaloCellContainer#AllCalo",
433 "CaloClusterCellLinkContainer#egammaClusters_links",
436 EGAM9ItemList = EGAM9SlimmingHelper.GetItemList()
441 ItemList=EGAM9ItemList,
442 AcceptAlgs=[
"EGAM9Kernel"],
446 SetupMetaDataForStreamCfg(
449 AcceptAlgs=[
"EGAM9Kernel"],
451 MetadataCategory.CutFlowMetaData,
452 MetadataCategory.TruthMetaData,