10 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
11 from AthenaConfiguration.ComponentFactory
import CompFactory
12 from AthenaConfiguration.Enums
import MetadataCategory
14 from DerivationFrameworkEGamma.PhotonsCPDetailedContent
import (
15 PhotonsCPDetailedContent,
17 from DerivationFrameworkEGamma.ElectronsCPDetailedContent
import (
18 ElectronsCPDetailedContent,
19 GSFTracksCPDetailedContent,
22 from DerivationFrameworkEGamma.TriggerContent
import (
23 BootstrapPhotonTriggers,
25 ExtraContainersTrigger,
26 ExtraContainersPhotonTrigger,
27 ExtraContainersTriggerDataOnly,
34 applyTriggerSelection =
True
39 """Configure the EGAM9 skimming tool"""
44 "(count(Photons.pt > 9.5*GeV && " +
"Photons.DFCommonPhotonsIsEMLoose) > 0)"
46 electron_selection = (
47 "(count(Electrons.pt > 9.5*GeV && "
48 +
"Electrons.DFCommonElectronsLHMedium) > 0)"
50 expression = photon_selection +
" || " + electron_selection
52 if applyTriggerSelection:
55 if flags.Trigger.EDMVersion == 2:
57 elif flags.Trigger.EDMVersion == 3:
61 triggers = BootstrapPhotonTriggers[MenuType]
62 triggers += noalgTriggers[MenuType]
63 print(
"EGAM9 trigger skimming list (OR): ", triggers)
64 EGAM9_TriggerSkimmingTool = CompFactory.DerivationFramework.TriggerSkimmingTool(
65 name=
"EGAM9_TriggerSkimmingTool", TriggerListOR=triggers
69 print(
"EGAM9 offline skimming expression: ", expression)
70 EGAM9_OfflineSkimmingTool = (
71 CompFactory.DerivationFramework.xAODStringSkimmingTool(
72 name=
"EGAM9_OfflineSkimmingTool", expression=expression
77 print(
"EGAM9 skimming is logical AND of previous selections")
78 EGAM9_SkimmingTool = CompFactory.DerivationFramework.FilterCombinationAND(
79 name=
"EGAM9_SkimmingTool",
80 FilterList=[EGAM9_OfflineSkimmingTool, EGAM9_TriggerSkimmingTool],
82 acc.addPublicTool(EGAM9_OfflineSkimmingTool)
83 acc.addPublicTool(EGAM9_TriggerSkimmingTool)
84 acc.addPublicTool(EGAM9_SkimmingTool, primary=
True)
87 print(
"EGAM9 skimming expression: ", expression)
88 EGAM9_SkimmingTool = CompFactory.DerivationFramework.xAODStringSkimmingTool(
89 name=
"EGAM9_SkimmingTool", expression=expression
91 acc.addPublicTool(EGAM9_SkimmingTool, primary=
True)
97 """Configure the derivation framework driving algorithm (kernel)
102 from DerivationFrameworkPhys.PhysCommonConfig
import PhysCommonAugmentationsCfg
106 flags, TriggerListsHelper=kwargs[
"TriggerListsHelper"]
111 augmentationTools = []
116 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig
import (
117 CaloDecoratorKernelCfg)
122 streamName = kwargs[
"StreamName"]
125 if flags.Derivation.Egamma.doTrackThinning:
126 TrackThinningKeepElectronTracks =
False
127 TrackThinningKeepPhotonTracks =
True
128 TrackThinningKeepPVTracks =
False
131 if TrackThinningKeepElectronTracks:
132 EGAM9ElectronTPThinningTool = (
133 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
134 name=
"EGAM9ElectronTPThinningTool",
135 StreamName=streamName,
137 GSFTrackParticlesKey=
"GSFTrackParticles",
138 InDetTrackParticlesKey=
"InDetTrackParticles",
139 SelectionString=
"Electrons.pt > 0*GeV",
144 acc.addPublicTool(EGAM9ElectronTPThinningTool)
145 thinningTools.append(EGAM9ElectronTPThinningTool)
148 if TrackThinningKeepPhotonTracks:
149 EGAM9PhotonTPThinningTool = (
150 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
151 name=
"EGAM9PhotonTPThinningTool",
152 StreamName=streamName,
154 GSFTrackParticlesKey=
"GSFTrackParticles",
155 InDetTrackParticlesKey=
"InDetTrackParticles",
156 GSFConversionVerticesKey=
"GSFConversionVertices",
157 SelectionString=
"Photons.pt > 0*GeV",
162 acc.addPublicTool(EGAM9PhotonTPThinningTool)
163 thinningTools.append(EGAM9PhotonTPThinningTool)
166 thinning_expression =
" && ".
join(
168 "(InDetTrackParticles.DFCommonTightPrimary)",
169 "(abs(DFCommonInDetTrackZ0AtPV)*sin(InDetTrackParticles.theta)<3*mm)",
170 "(InDetTrackParticles.pt > 10*GeV)",
173 if TrackThinningKeepPVTracks:
174 from DerivationFrameworkInDet.InDetToolsConfig
import (
175 TrackParticleThinningCfg,
178 EGAM9TPThinningTool = acc.getPrimaryAndMerge(
181 name=
"EGAM9TPThinningTool",
182 StreamName=streamName,
183 SelectionString=thinning_expression,
184 InDetTrackParticlesKey=
"InDetTrackParticles",
187 thinningTools.append(EGAM9TPThinningTool)
192 truth_cond_WZH =
" && ".
join(
193 [
"(abs(TruthParticles.pdgId) >= 23)",
"(abs(TruthParticles.pdgId) <= 25)"]
196 truth_cond_lep =
" && ".
join(
197 [
"(abs(TruthParticles.pdgId) >= 11)",
"(abs(TruthParticles.pdgId) <= 16)"]
200 truth_cond_top =
"(abs(TruthParticles.pdgId) == 6)"
202 truth_cond_gam =
" && ".
join(
203 [
"(abs(TruthParticles.pdgId) == 22)",
"(TruthParticles.pt > 1*GeV)"]
206 truth_cond_finalState =
"(TruthParticles.isGenStable)"
221 + truth_cond_finalState
224 print(
"EGAM9 truth thinning expression: ", truth_expression)
226 EGAM9TruthThinningTool = CompFactory.DerivationFramework.GenericTruthThinning(
227 name=
"EGAM9TruthThinningTool",
228 StreamName=streamName,
229 ParticleSelectionString=truth_expression,
230 PreserveDescendants=
False,
231 PreserveGeneratorDescendants=
True,
232 PreserveAncestors=
True,
234 acc.addPublicTool(EGAM9TruthThinningTool)
235 thinningTools.append(EGAM9TruthThinningTool)
239 from DerivationFrameworkCalo.CaloCellDFGetterConfig
import thinCaloCellsForDFCfg
244 inputClusterKeys=[
"egammaClusters"],
245 streamName=
"StreamDAOD_EGAM9",
246 inputCellKey=
"AllCalo",
247 outputCellKey=
"DFEGAMCellContainer",
256 CompFactory.DerivationFramework.DerivationKernel(
258 SkimmingTools=[skimmingTool],
259 AugmentationTools=augmentationTools,
260 ThinningTools=thinningTools,
277 from DerivationFrameworkPhys.TriggerListsHelper
import TriggerListsHelper
279 EGAM9TriggerListsHelper = TriggerListsHelper(flags)
286 StreamName=
"StreamDAOD_EGAM9",
287 TriggerListsHelper=EGAM9TriggerListsHelper,
292 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
293 from xAODMetaDataCnv.InfileMetaDataConfig
import SetupMetaDataForStreamCfg
294 from DerivationFrameworkCore.SlimmingHelper
import SlimmingHelper
297 "EGAM9SlimmingHelper",
298 NamesAndTypes=flags.Input.TypedCollections,
307 EGAM9SlimmingHelper.AllVariables = [
316 if flags.Trigger.EDMVersion == 2:
318 elif flags.Trigger.EDMVersion == 3:
322 EGAM9SlimmingHelper.AllVariables += ExtraContainersTrigger[MenuType]
323 EGAM9SlimmingHelper.AllVariables += ExtraContainersPhotonTrigger[MenuType]
324 if not flags.Input.isMC:
325 EGAM9SlimmingHelper.AllVariables += ExtraContainersTriggerDataOnly[MenuType]
329 EGAM9SlimmingHelper.AllVariables += [
333 "egammaTruthParticles",
344 EGAM9SlimmingHelper.SmartCollections = [
347 "InDetTrackParticles",
351 EGAM9SlimmingHelper.SmartCollections += [
"AntiKt4EMPFlowJets"]
353 EGAM9SlimmingHelper.SmartCollections += [
355 "AntiKt4TruthDressedWZJets",
361 EGAM9SlimmingHelper.ExtraVariables += [
"Photons.DFCommonLoosePrime5"]
364 EGAM9SlimmingHelper.ExtraVariables += [
365 "GSFConversionVertices.x.y.z.px.py.pz.pt1.pt2.etaAtCalo.phiAtCalo",
366 "GSFConversionVertices.trackParticleLinks",
370 EGAM9SlimmingHelper.ExtraVariables += [
"PrimaryVertices.x.y.sumPt2"]
374 EGAM9SlimmingHelper.ExtraVariables += [
375 "AntiKt4PV0TrackJets.pt.eta.phi.e.m.btaggingLink.constituentLinks"
379 EGAM9SlimmingHelper.ExtraVariables += PhotonsCPDetailedContent
380 EGAM9SlimmingHelper.ExtraVariables += ElectronsCPDetailedContent
381 EGAM9SlimmingHelper.ExtraVariables += GSFTracksCPDetailedContent
384 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig
import (
386 getClusterEnergyPerLayerDecorations,
390 print(
"EGAM9 gain decorations: ", gainDecorations)
391 EGAM9SlimmingHelper.ExtraVariables.extend(gainDecorations)
393 print(
"EGAM9 cluster energy decorations: ", clusterEnergyDecorations)
394 EGAM9SlimmingHelper.ExtraVariables.extend(clusterEnergyDecorations)
397 EGAM9SlimmingHelper.ExtraVariables += [
398 "TopoClusterIsoCentralEventShape.Density",
399 "TopoClusterIsoForwardEventShape.Density",
400 "NeutralParticleFlowIsoCentralEventShape.Density",
401 "NeutralParticleFlowIsoForwardEventShape.Density",
406 EGAM9SlimmingHelper.ExtraVariables += [
407 "Photons.truthOrigin.truthType.truthParticleLink"
411 if flags.Derivation.Egamma.doEventInfoSlimming:
412 EGAM9SlimmingHelper.SmartCollections.append(
"EventInfo")
414 EGAM9SlimmingHelper.AllVariables += [
"EventInfo"]
417 EGAM9SlimmingHelper.IncludeEGammaTriggerContent =
True
421 if flags.Trigger.EDMVersion == 2:
422 from DerivationFrameworkPhys.TriggerMatchingCommonConfig
import AddRun2TriggerMatchingToSlimmingHelper
424 OutputContainerPrefix =
"TrigMatch_",
425 TriggerList = EGAM9TriggerListsHelper.Run2TriggerNamesNoTau)
427 if flags.Trigger.EDMVersion == 3
or (flags.Trigger.EDMVersion == 2
and flags.Trigger.doEDMVersionConversion):
428 from TrigNavSlimmingMT.TrigNavSlimmingMTConfig
import AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
434 EGAM9SlimmingHelper.StaticContent = [
435 "CaloCellContainer#DFEGAMCellContainer",
436 "CaloClusterCellLinkContainer#egammaClusters_links",
439 EGAM9SlimmingHelper.StaticContent = [
440 "CaloCellContainer#AllCalo",
441 "CaloClusterCellLinkContainer#egammaClusters_links",
444 EGAM9ItemList = EGAM9SlimmingHelper.GetItemList()
449 ItemList=EGAM9ItemList,
450 AcceptAlgs=[
"EGAM9Kernel"],
457 AcceptAlgs=[
"EGAM9Kernel"],
459 MetadataCategory.CutFlowMetaData,
460 MetadataCategory.TruthMetaData,