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 EGAM9_OfflineSkimmingTool = (
72 CompFactory.DerivationFramework.xAODStringSkimmingTool(
73 name=
"EGAM9_OfflineSkimmingTool", expression=expression
76 if flags.Trigger.EDMVersion < 0:
77 EGAM9_OfflineSkimmingTool.TrigDecisionTool=
None
79 acc.addPublicTool(EGAM9_OfflineSkimmingTool)
80 skimmingTools += [EGAM9_OfflineSkimmingTool]
83 print(
"EGAM9 skimming is logical AND of previous selections")
84 EGAM9_SkimmingTool = CompFactory.DerivationFramework.FilterCombinationAND(
85 name=
"EGAM9_SkimmingTool",
86 FilterList=skimmingTools
89 acc.addPublicTool(EGAM9_SkimmingTool, primary=
True)
94 """Configure the derivation framework driving algorithm (kernel)
96 acc = ComponentAccumulator()
99 from DerivationFrameworkPhys.PhysCommonConfig
import PhysCommonAugmentationsCfg
102 PhysCommonAugmentationsCfg(
103 flags, TriggerListsHelper=kwargs[
"TriggerListsHelper"]
108 augmentationTools = []
113 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig
import (
114 CaloDecoratorKernelCfg)
115 acc.merge(CaloDecoratorKernelCfg(flags))
119 streamName = kwargs[
"StreamName"]
122 if flags.Derivation.Egamma.doTrackThinning:
123 TrackThinningKeepElectronTracks =
False
124 TrackThinningKeepPhotonTracks =
True
125 TrackThinningKeepPVTracks =
False
128 if TrackThinningKeepElectronTracks:
129 EGAM9ElectronTPThinningTool = (
130 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
131 name=
"EGAM9ElectronTPThinningTool",
132 StreamName=streamName,
134 GSFTrackParticlesKey=
"GSFTrackParticles",
135 InDetTrackParticlesKey=
"InDetTrackParticles",
136 SelectionString=
"Electrons.pt > 0*GeV",
141 acc.addPublicTool(EGAM9ElectronTPThinningTool)
142 thinningTools.append(EGAM9ElectronTPThinningTool)
145 if TrackThinningKeepPhotonTracks:
146 EGAM9PhotonTPThinningTool = (
147 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
148 name=
"EGAM9PhotonTPThinningTool",
149 StreamName=streamName,
151 GSFTrackParticlesKey=
"GSFTrackParticles",
152 InDetTrackParticlesKey=
"InDetTrackParticles",
153 GSFConversionVerticesKey=
"GSFConversionVertices",
154 SelectionString=
"Photons.pt > 0*GeV",
159 acc.addPublicTool(EGAM9PhotonTPThinningTool)
160 thinningTools.append(EGAM9PhotonTPThinningTool)
163 thinning_expression =
" && ".join(
165 "(InDetTrackParticles.DFCommonTightPrimary)",
166 "(abs(DFCommonInDetTrackZ0AtPV)*sin(InDetTrackParticles.theta)<3*mm)",
167 "(InDetTrackParticles.pt > 10*GeV)",
170 if TrackThinningKeepPVTracks:
171 from DerivationFrameworkInDet.InDetToolsConfig
import (
172 TrackParticleThinningCfg,
175 EGAM9TPThinningTool = acc.getPrimaryAndMerge(
176 TrackParticleThinningCfg(
178 name=
"EGAM9TPThinningTool",
179 StreamName=streamName,
180 SelectionString=thinning_expression,
181 InDetTrackParticlesKey=
"InDetTrackParticles",
184 thinningTools.append(EGAM9TPThinningTool)
189 truth_cond_WZH =
" && ".join(
190 [
"(abs(TruthParticles.pdgId) >= 23)",
"(abs(TruthParticles.pdgId) <= 25)"]
193 truth_cond_lep =
" && ".join(
194 [
"(abs(TruthParticles.pdgId) >= 11)",
"(abs(TruthParticles.pdgId) <= 16)"]
197 truth_cond_top =
"(abs(TruthParticles.pdgId) == 6)"
199 truth_cond_gam =
" && ".join(
200 [
"(abs(TruthParticles.pdgId) == 22)",
"(TruthParticles.pt > 1*GeV)"]
203 truth_cond_finalState =
"(TruthParticles.isGenStable)"
218 + truth_cond_finalState
221 print(
"EGAM9 truth thinning expression: ", truth_expression)
223 EGAM9TruthThinningTool = CompFactory.DerivationFramework.GenericTruthThinning(
224 name=
"EGAM9TruthThinningTool",
225 StreamName=streamName,
226 ParticleSelectionString=truth_expression,
227 PreserveDescendants=
False,
228 PreserveGeneratorDescendants=
True,
229 PreserveAncestors=
True,
231 acc.addPublicTool(EGAM9TruthThinningTool)
232 thinningTools.append(EGAM9TruthThinningTool)
236 from DerivationFrameworkCalo.CaloCellDFGetterConfig
import thinCaloCellsForDFCfg
239 thinCaloCellsForDFCfg(
241 inputClusterKeys=[
"egammaClusters"],
242 streamName=
"StreamDAOD_EGAM9",
243 inputCellKey=
"AllCalo",
244 outputCellKey=
"DFEGAMCellContainer",
253 CompFactory.DerivationFramework.DerivationKernel(
255 SkimmingTools=[skimmingTool],
256 AugmentationTools=augmentationTools,
257 ThinningTools=thinningTools,
265 acc = ComponentAccumulator()
274 from DerivationFrameworkPhys.TriggerListsHelper
import TriggerListsHelper
276 EGAM9TriggerListsHelper = TriggerListsHelper(flags)
283 StreamName=
"StreamDAOD_EGAM9",
284 TriggerListsHelper=EGAM9TriggerListsHelper,
289 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
290 from xAODMetaDataCnv.InfileMetaDataConfig
import SetupMetaDataForStreamCfg
291 from DerivationFrameworkCore.SlimmingHelper
import SlimmingHelper
294 "EGAM9SlimmingHelper",
295 NamesAndTypes=flags.Input.TypedCollections,
304 EGAM9SlimmingHelper.AllVariables = [
313 if flags.Trigger.EDMVersion == 2:
315 elif flags.Trigger.EDMVersion == 3:
319 EGAM9SlimmingHelper.AllVariables += ExtraContainersTrigger[MenuType]
320 EGAM9SlimmingHelper.AllVariables += ExtraContainersPhotonTrigger[MenuType]
321 if not flags.Input.isMC:
322 EGAM9SlimmingHelper.AllVariables += ExtraContainersTriggerDataOnly[MenuType]
326 EGAM9SlimmingHelper.AllVariables += [
330 "egammaTruthParticles",
341 EGAM9SlimmingHelper.SmartCollections = [
344 "InDetTrackParticles",
348 EGAM9SlimmingHelper.SmartCollections += [
"AntiKt4EMPFlowJets"]
350 EGAM9SlimmingHelper.SmartCollections += [
352 "AntiKt4TruthDressedWZJets",
358 EGAM9SlimmingHelper.ExtraVariables += [
"Photons.DFCommonLoosePrime5"]
361 EGAM9SlimmingHelper.ExtraVariables += [
362 "GSFConversionVertices.x.y.z.px.py.pz.pt1.pt2.etaAtCalo.phiAtCalo",
363 "GSFConversionVertices.trackParticleLinks",
367 EGAM9SlimmingHelper.ExtraVariables += [
"PrimaryVertices.x.y.sumPt2"]
371 EGAM9SlimmingHelper.ExtraVariables += [
372 "AntiKt4PV0TrackJets.pt.eta.phi.e.m.btaggingLink.constituentLinks"
376 EGAM9SlimmingHelper.ExtraVariables += PhotonsCPDetailedContent
377 EGAM9SlimmingHelper.ExtraVariables += ElectronsCPDetailedContent
378 EGAM9SlimmingHelper.ExtraVariables += GSFTracksCPDetailedContent
381 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig
import (
383 getClusterEnergyPerLayerDecorations,
386 gainDecorations = getGainDecorations(acc, flags,
"EGAM9Kernel")
387 print(
"EGAM9 gain decorations: ", gainDecorations)
388 EGAM9SlimmingHelper.ExtraVariables.extend(gainDecorations)
389 clusterEnergyDecorations = getClusterEnergyPerLayerDecorations(acc,
"EGAM9Kernel")
390 print(
"EGAM9 cluster energy decorations: ", clusterEnergyDecorations)
391 EGAM9SlimmingHelper.ExtraVariables.extend(clusterEnergyDecorations)
394 EGAM9SlimmingHelper.ExtraVariables += [
395 "TopoClusterIsoCentralEventShape.Density",
396 "TopoClusterIsoForwardEventShape.Density",
397 "NeutralParticleFlowIsoCentralEventShape.Density",
398 "NeutralParticleFlowIsoForwardEventShape.Density",
403 EGAM9SlimmingHelper.ExtraVariables += [
404 "Photons.truthOrigin.truthType.truthParticleLink"
408 if flags.Derivation.Egamma.doEventInfoSlimming:
409 EGAM9SlimmingHelper.SmartCollections.append(
"EventInfo")
411 EGAM9SlimmingHelper.AllVariables += [
"EventInfo"]
414 EGAM9SlimmingHelper.IncludeEGammaTriggerContent =
True
418 if flags.Trigger.EDMVersion == 2:
419 from DerivationFrameworkPhys.TriggerMatchingCommonConfig
import AddRun2TriggerMatchingToSlimmingHelper
420 AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = EGAM9SlimmingHelper,
421 OutputContainerPrefix =
"TrigMatch_",
422 TriggerList = EGAM9TriggerListsHelper.Run2TriggerNamesNoTau)
424 if flags.Trigger.EDMVersion == 3
or (flags.Trigger.EDMVersion == 2
and flags.Trigger.doEDMVersionConversion):
425 from TrigNavSlimmingMT.TrigNavSlimmingMTConfig
import AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
426 AddRun3TrigNavSlimmingCollectionsToSlimmingHelper(EGAM9SlimmingHelper)
431 EGAM9SlimmingHelper.StaticContent = [
432 "CaloCellContainer#DFEGAMCellContainer",
433 "CaloClusterCellLinkContainer#egammaClusters_links",
436 EGAM9SlimmingHelper.StaticContent = [
437 "CaloCellContainer#AllCalo",
438 "CaloClusterCellLinkContainer#egammaClusters_links",
441 EGAM9ItemList = EGAM9SlimmingHelper.GetItemList()
446 ItemList=EGAM9ItemList,
447 AcceptAlgs=[
"EGAM9Kernel"],
451 SetupMetaDataForStreamCfg(
454 AcceptAlgs=[
"EGAM9Kernel"],
456 MetadataCategory.CutFlowMetaData,
457 MetadataCategory.TruthMetaData,