28 """Configure the EGAM5 skimming tool"""
29 acc = ComponentAccumulator()
35 if flags.Trigger.EDMVersion == 2:
37 elif flags.Trigger.EDMVersion == 3:
41 triggers = WTnPTriggers[MenuType]
42 print(
"EGAM5 trigger skimming list (OR): ", triggers)
44 EGAM5_TriggerSkimmingTool = CompFactory.DerivationFramework.TriggerSkimmingTool(
45 name=
"EGAM5_TriggerSkimmingTool", TriggerListOR=triggers
48 acc.addPublicTool(EGAM5_TriggerSkimmingTool)
49 skimmingTools += [EGAM5_TriggerSkimmingTool]
52 expression2 =
"count(EGAM5_ENuTransverseMass > 40*GeV)>=1"
53 print(
"EGAM5 offline skimming expression: ", expression2)
55 from DerivationFrameworkTools.DerivationFrameworkToolsConfig
import (
56 xAODStringSkimmingToolCfg)
57 EGAM5_OfflineSkimmingTool = acc.getPrimaryAndMerge(xAODStringSkimmingToolCfg(
58 flags, name =
"EGAM5_OfflineSkimmingTool", expression = expression2))
59 skimmingTools += [EGAM5_OfflineSkimmingTool]
62 if flags.Trigger.EDMVersion >=0:
63 expression3a =
" || ".join(
65 "HLT_e60_lhloose_xe60noL1",
69 "HLT_xe80_tc_lcw_L1XE50",
70 "HLT_xe90_mht_L1XE50",
71 "HLT_xe90_tc_lcw_wEFMu_L1XE50",
72 "HLT_xe90_mht_wEFMu_L1XE50",
75 expression3b =
"count(Electrons.pt > 14.5*GeV) >= 1"
76 expression3 =
"( " + expression3a +
" ) && ( " + expression3b +
" )"
77 print(
"EGAM5 mixed offline-online skimming expression: ", expression3)
79 EGAM5_OnlineOfflineSkimmingTool = acc.getPrimaryAndMerge(
80 xAODStringSkimmingToolCfg(
81 flags, name =
"EGAM5_OnlineOfflineSkimmingTool",
82 expression = expression3))
83 skimmingTools += [EGAM5_OnlineOfflineSkimmingTool]
86 print(
"EGAM5 skimming is logical OR of previous selections")
87 EGAM5_SkimmingTool = CompFactory.DerivationFramework.FilterCombinationOR(
88 name=
"EGAM5_SkimmingTool",
89 FilterList=skimmingTools
92 acc.addPublicTool(EGAM5_SkimmingTool, primary=
True)
128 """Configure the derivation framework driving algorithm (kernel)
130 acc = ComponentAccumulator()
133 from DerivationFrameworkPhys.PhysCommonConfig
import PhysCommonAugmentationsCfg
136 PhysCommonAugmentationsCfg(
137 flags, TriggerListsHelper=kwargs[
"TriggerListsHelper"]
142 augmentationTools = []
147 EGAM5enuTransverseMassTool = acc.popToolsAndMerge(
150 acc.addPublicTool(EGAM5enuTransverseMassTool)
151 augmentationTools.append(EGAM5enuTransverseMassTool)
156 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig
import (
157 CaloDecoratorKernelCfg)
158 acc.merge(CaloDecoratorKernelCfg(flags))
162 streamName = kwargs[
"StreamName"]
165 if flags.Derivation.Egamma.doTrackThinning:
166 from DerivationFrameworkInDet.InDetToolsConfig
import (
167 TrackParticleThinningCfg,
168 MuonTrackParticleThinningCfg,
169 TauTrackParticleThinningCfg,
172 TrackThinningKeepElectronTracks =
True
173 TrackThinningKeepPhotonTracks =
True
174 TrackThinningKeepAllElectronTracks =
False
175 TrackThinningKeepJetTracks =
False
176 TrackThinningKeepMuonTracks =
False
177 TrackThinningKeepTauTracks =
False
178 TrackThinningKeepPVTracks =
True
181 if TrackThinningKeepElectronTracks:
182 EGAM5ElectronTPThinningTool = (
183 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
184 name=
"EGAM5ElectronTPThinningTool",
185 StreamName=streamName,
187 GSFTrackParticlesKey=
"GSFTrackParticles",
188 InDetTrackParticlesKey=
"InDetTrackParticles",
189 SelectionString=
"Electrons.pt > 0*GeV",
194 acc.addPublicTool(EGAM5ElectronTPThinningTool)
195 thinningTools.append(EGAM5ElectronTPThinningTool)
199 if TrackThinningKeepAllElectronTracks:
200 EGAM5ElectronTPThinningTool2 = (
201 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
202 name=
"EGAM5ElectronTPThinningTool2",
203 StreamName=streamName,
205 GSFTrackParticlesKey=
"GSFTrackParticles",
206 InDetTrackParticlesKey=
"InDetTrackParticles",
207 SelectionString=
"Electrons.pt > 4*GeV",
212 acc.addPublicTool(EGAM5ElectronTPThinningTool2)
213 thinningTools.append(EGAM5ElectronTPThinningTool2)
216 if TrackThinningKeepPhotonTracks:
217 EGAM5PhotonTPThinningTool = (
218 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
219 name=
"EGAM5PhotonTPThinningTool",
220 StreamName=streamName,
222 GSFTrackParticlesKey=
"GSFTrackParticles",
223 InDetTrackParticlesKey=
"InDetTrackParticles",
224 GSFConversionVerticesKey=
"GSFConversionVertices",
225 SelectionString=
"Photons.pt > 0*GeV",
230 acc.addPublicTool(EGAM5PhotonTPThinningTool)
231 thinningTools.append(EGAM5PhotonTPThinningTool)
234 if TrackThinningKeepJetTracks:
235 EGAM5JetTPThinningTool = (
236 CompFactory.DerivationFramework.JetTrackParticleThinning(
237 name=
"EGAM5JetTPThinningTool",
238 StreamName=streamName,
239 JetKey=
"AntiKt4EMPFlowJets",
240 InDetTrackParticlesKey=
"InDetTrackParticles",
243 acc.addPublicTool(EGAM5JetTPThinningTool)
244 thinningTools.append(EGAM5JetTPThinningTool)
247 if TrackThinningKeepMuonTracks:
248 EGAM5MuonTPThinningTool = acc.getPrimaryAndMerge(
249 MuonTrackParticleThinningCfg(
251 name=
"EGAM5MuonTPThinningTool",
252 StreamName=streamName,
254 InDetTrackParticlesKey=
"InDetTrackParticles",
257 thinningTools.append(EGAM5MuonTPThinningTool)
260 if TrackThinningKeepTauTracks:
261 EGAM5TauTPThinningTool = acc.getPrimaryAndMerge(
262 TauTrackParticleThinningCfg(
264 name=
"EGAM5TauTPThinningTool",
265 StreamName=streamName,
268 InDetTrackParticlesKey=
"InDetTrackParticles",
269 DoTauTracksThinning=
True,
270 TauTracksKey=
"TauTracks",
273 thinningTools.append(EGAM5TauTPThinningTool)
276 thinning_expression =
" && ".join(
278 "(InDetTrackParticles.DFCommonTightPrimary)",
279 "(abs(DFCommonInDetTrackZ0AtPV)*sin(InDetTrackParticles.theta)<3*mm)",
280 "(InDetTrackParticles.pt>10*GeV)",
283 if TrackThinningKeepPVTracks:
284 EGAM5TPThinningTool = acc.getPrimaryAndMerge(
285 TrackParticleThinningCfg(
287 name=
"EGAM5TPThinningTool",
288 StreamName=streamName,
289 SelectionString=thinning_expression,
290 InDetTrackParticlesKey=
"InDetTrackParticles",
293 thinningTools.append(EGAM5TPThinningTool)
300 CompFactory.DerivationFramework.DerivationKernel(
302 SkimmingTools=[skimmingTool],
303 AugmentationTools=augmentationTools,
304 ThinningTools=thinningTools,
312 acc = ComponentAccumulator()
321 from DerivationFrameworkPhys.TriggerListsHelper
import TriggerListsHelper
323 EGAM5TriggerListsHelper = TriggerListsHelper(flags)
330 StreamName=
"StreamDAOD_EGAM5",
331 TriggerListsHelper=EGAM5TriggerListsHelper,
336 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
337 from xAODMetaDataCnv.InfileMetaDataConfig
import SetupMetaDataForStreamCfg
338 from DerivationFrameworkCore.SlimmingHelper
import SlimmingHelper
341 "EGAM5SlimmingHelper",
342 NamesAndTypes=flags.Input.TypedCollections,
351 EGAM5SlimmingHelper.AllVariables = [
359 if flags.Trigger.EDMVersion == 2:
361 elif flags.Trigger.EDMVersion == 3:
365 EGAM5SlimmingHelper.AllVariables += ExtraContainersTrigger[MenuType]
366 EGAM5SlimmingHelper.AllVariables += ExtraContainersElectronTrigger[MenuType]
367 if not flags.Input.isMC:
368 EGAM5SlimmingHelper.AllVariables += ExtraContainersTriggerDataOnly[MenuType]
372 EGAM5SlimmingHelper.AllVariables += [
376 "egammaTruthParticles",
387 EGAM5SlimmingHelper.SmartCollections = [
392 "InDetTrackParticles",
394 "AntiKt4EMPFlowJets",
395 "MET_Baseline_AntiKt4EMPFlow",
401 EGAM5SlimmingHelper.SmartCollections += [
403 "AntiKt4TruthDressedWZJets",
409 EGAM5SlimmingHelper.ExtraVariables += [
410 "Muons.ptcone20.ptcone30.ptcone40.etcone20.etcone30.etcone40"
414 EGAM5SlimmingHelper.ExtraVariables += [
415 "GSFConversionVertices.x.y.z.px.py.pz.pt1.pt2.etaAtCalo.phiAtCalo",
416 "GSFConversionVertices.trackParticleLinks",
420 EGAM5SlimmingHelper.ExtraVariables += [
"PrimaryVertices.x.y.sumPt2"]
423 EGAM5SlimmingHelper.ExtraVariables += PhotonsCPDetailedContent
426 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig
import (
428 getClusterEnergyPerLayerDecorations,
431 gainDecorations = getGainDecorations(acc, flags,
"EGAM5Kernel")
432 print(
"EGAM5 gain decorations: ", gainDecorations)
433 EGAM5SlimmingHelper.ExtraVariables.extend(gainDecorations)
434 clusterEnergyDecorations = getClusterEnergyPerLayerDecorations(acc,
"EGAM5Kernel")
435 print(
"EGAM5 cluster energy decorations: ", clusterEnergyDecorations)
436 EGAM5SlimmingHelper.ExtraVariables.extend(clusterEnergyDecorations)
439 EGAM5SlimmingHelper.ExtraVariables += [
440 "TopoClusterIsoCentralEventShape.Density",
441 "TopoClusterIsoForwardEventShape.Density",
442 "NeutralParticleFlowIsoCentralEventShape.Density",
443 "NeutralParticleFlowIsoForwardEventShape.Density",
448 EGAM5SlimmingHelper.ExtraVariables += [
449 "MuonTruthParticles.e.px.py.pz.status.pdgId.truthClassification.truthOrigin.truthType"
452 EGAM5SlimmingHelper.ExtraVariables += [
453 "Photons.truthClassification.truthOrigin.truthType.truthParticleLink"
457 if flags.Derivation.Egamma.doEventInfoSlimming:
458 EGAM5SlimmingHelper.SmartCollections.append(
"EventInfo")
460 EGAM5SlimmingHelper.AllVariables += [
"EventInfo"]
463 EGAM5SlimmingHelper.IncludeEGammaTriggerContent =
True
467 if flags.Trigger.EDMVersion == 2:
468 from DerivationFrameworkPhys.TriggerMatchingCommonConfig
import AddRun2TriggerMatchingToSlimmingHelper
469 AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = EGAM5SlimmingHelper,
470 OutputContainerPrefix =
"TrigMatch_",
471 TriggerList = EGAM5TriggerListsHelper.Run2TriggerNamesNoTau)
473 if flags.Trigger.EDMVersion == 3
or (flags.Trigger.EDMVersion == 2
and flags.Trigger.doEDMVersionConversion):
474 from TrigNavSlimmingMT.TrigNavSlimmingMTConfig
import AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
475 AddRun3TrigNavSlimmingCollectionsToSlimmingHelper(EGAM5SlimmingHelper)
477 EGAM5ItemList = EGAM5SlimmingHelper.GetItemList()
482 ItemList=EGAM5ItemList,
483 AcceptAlgs=[
"EGAM5Kernel"],
487 SetupMetaDataForStreamCfg(
490 AcceptAlgs=[
"EGAM5Kernel"],
492 MetadataCategory.CutFlowMetaData,
493 MetadataCategory.TruthMetaData,