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)
54 EGAM5_OfflineSkimmingTool = CompFactory.DerivationFramework.xAODStringSkimmingTool(
55 name=
"EGAM5_OfflineSkimmingTool", expression=expression2
57 if flags.Trigger.EDMVersion < 0:
58 EGAM5_OfflineSkimmingTool.TrigDecisionTool=
None
60 acc.addPublicTool(EGAM5_OfflineSkimmingTool)
61 skimmingTools += [EGAM5_OfflineSkimmingTool]
64 if flags.Trigger.EDMVersion >=0:
65 expression3a =
" || ".join(
67 "HLT_e60_lhloose_xe60noL1",
71 "HLT_xe80_tc_lcw_L1XE50",
72 "HLT_xe90_mht_L1XE50",
73 "HLT_xe90_tc_lcw_wEFMu_L1XE50",
74 "HLT_xe90_mht_wEFMu_L1XE50",
77 expression3b =
"count(Electrons.pt > 14.5*GeV) >= 1"
78 expression3 =
"( " + expression3a +
" ) && ( " + expression3b +
" )"
79 print(
"EGAM5 mixed offline-online skimming expression: ", expression3)
81 EGAM5_OnlineOfflineSkimmingTool = (
82 CompFactory.DerivationFramework.xAODStringSkimmingTool(
83 name=
"EGAM5_OnlineOfflineSkimmingTool", expression=expression3
87 acc.addPublicTool(EGAM5_OnlineOfflineSkimmingTool)
88 skimmingTools += [EGAM5_OnlineOfflineSkimmingTool]
91 print(
"EGAM5 skimming is logical OR of previous selections")
92 EGAM5_SkimmingTool = CompFactory.DerivationFramework.FilterCombinationOR(
93 name=
"EGAM5_SkimmingTool",
94 FilterList=skimmingTools
97 acc.addPublicTool(EGAM5_SkimmingTool, primary=
True)
133 """Configure the derivation framework driving algorithm (kernel)
135 acc = ComponentAccumulator()
138 from DerivationFrameworkPhys.PhysCommonConfig
import PhysCommonAugmentationsCfg
141 PhysCommonAugmentationsCfg(
142 flags, TriggerListsHelper=kwargs[
"TriggerListsHelper"]
147 augmentationTools = []
152 EGAM5enuTransverseMassTool = acc.popToolsAndMerge(
155 acc.addPublicTool(EGAM5enuTransverseMassTool)
156 augmentationTools.append(EGAM5enuTransverseMassTool)
161 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig
import (
162 CaloDecoratorKernelCfg)
163 acc.merge(CaloDecoratorKernelCfg(flags))
167 streamName = kwargs[
"StreamName"]
170 if flags.Derivation.Egamma.doTrackThinning:
171 from DerivationFrameworkInDet.InDetToolsConfig
import (
172 TrackParticleThinningCfg,
173 MuonTrackParticleThinningCfg,
174 TauTrackParticleThinningCfg,
177 TrackThinningKeepElectronTracks =
True
178 TrackThinningKeepPhotonTracks =
True
179 TrackThinningKeepAllElectronTracks =
False
180 TrackThinningKeepJetTracks =
False
181 TrackThinningKeepMuonTracks =
False
182 TrackThinningKeepTauTracks =
False
183 TrackThinningKeepPVTracks =
True
186 if TrackThinningKeepElectronTracks:
187 EGAM5ElectronTPThinningTool = (
188 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
189 name=
"EGAM5ElectronTPThinningTool",
190 StreamName=streamName,
192 GSFTrackParticlesKey=
"GSFTrackParticles",
193 InDetTrackParticlesKey=
"InDetTrackParticles",
194 SelectionString=
"Electrons.pt > 0*GeV",
199 acc.addPublicTool(EGAM5ElectronTPThinningTool)
200 thinningTools.append(EGAM5ElectronTPThinningTool)
204 if TrackThinningKeepAllElectronTracks:
205 EGAM5ElectronTPThinningTool2 = (
206 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
207 name=
"EGAM5ElectronTPThinningTool2",
208 StreamName=streamName,
210 GSFTrackParticlesKey=
"GSFTrackParticles",
211 InDetTrackParticlesKey=
"InDetTrackParticles",
212 SelectionString=
"Electrons.pt > 4*GeV",
217 acc.addPublicTool(EGAM5ElectronTPThinningTool2)
218 thinningTools.append(EGAM5ElectronTPThinningTool2)
221 if TrackThinningKeepPhotonTracks:
222 EGAM5PhotonTPThinningTool = (
223 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
224 name=
"EGAM5PhotonTPThinningTool",
225 StreamName=streamName,
227 GSFTrackParticlesKey=
"GSFTrackParticles",
228 InDetTrackParticlesKey=
"InDetTrackParticles",
229 GSFConversionVerticesKey=
"GSFConversionVertices",
230 SelectionString=
"Photons.pt > 0*GeV",
235 acc.addPublicTool(EGAM5PhotonTPThinningTool)
236 thinningTools.append(EGAM5PhotonTPThinningTool)
239 if TrackThinningKeepJetTracks:
240 EGAM5JetTPThinningTool = (
241 CompFactory.DerivationFramework.JetTrackParticleThinning(
242 name=
"EGAM5JetTPThinningTool",
243 StreamName=streamName,
244 JetKey=
"AntiKt4EMPFlowJets",
245 InDetTrackParticlesKey=
"InDetTrackParticles",
248 acc.addPublicTool(EGAM5JetTPThinningTool)
249 thinningTools.append(EGAM5JetTPThinningTool)
252 if TrackThinningKeepMuonTracks:
253 EGAM5MuonTPThinningTool = acc.getPrimaryAndMerge(
254 MuonTrackParticleThinningCfg(
256 name=
"EGAM5MuonTPThinningTool",
257 StreamName=streamName,
259 InDetTrackParticlesKey=
"InDetTrackParticles",
262 thinningTools.append(EGAM5MuonTPThinningTool)
265 if TrackThinningKeepTauTracks:
266 EGAM5TauTPThinningTool = acc.getPrimaryAndMerge(
267 TauTrackParticleThinningCfg(
269 name=
"EGAM5TauTPThinningTool",
270 StreamName=streamName,
273 InDetTrackParticlesKey=
"InDetTrackParticles",
274 DoTauTracksThinning=
True,
275 TauTracksKey=
"TauTracks",
278 thinningTools.append(EGAM5TauTPThinningTool)
281 thinning_expression =
" && ".join(
283 "(InDetTrackParticles.DFCommonTightPrimary)",
284 "(abs(DFCommonInDetTrackZ0AtPV)*sin(InDetTrackParticles.theta)<3*mm)",
285 "(InDetTrackParticles.pt>10*GeV)",
288 if TrackThinningKeepPVTracks:
289 EGAM5TPThinningTool = acc.getPrimaryAndMerge(
290 TrackParticleThinningCfg(
292 name=
"EGAM5TPThinningTool",
293 StreamName=streamName,
294 SelectionString=thinning_expression,
295 InDetTrackParticlesKey=
"InDetTrackParticles",
298 thinningTools.append(EGAM5TPThinningTool)
305 CompFactory.DerivationFramework.DerivationKernel(
307 SkimmingTools=[skimmingTool],
308 AugmentationTools=augmentationTools,
309 ThinningTools=thinningTools,
317 acc = ComponentAccumulator()
326 from DerivationFrameworkPhys.TriggerListsHelper
import TriggerListsHelper
328 EGAM5TriggerListsHelper = TriggerListsHelper(flags)
335 StreamName=
"StreamDAOD_EGAM5",
336 TriggerListsHelper=EGAM5TriggerListsHelper,
341 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
342 from xAODMetaDataCnv.InfileMetaDataConfig
import SetupMetaDataForStreamCfg
343 from DerivationFrameworkCore.SlimmingHelper
import SlimmingHelper
346 "EGAM5SlimmingHelper",
347 NamesAndTypes=flags.Input.TypedCollections,
356 EGAM5SlimmingHelper.AllVariables = [
364 if flags.Trigger.EDMVersion == 2:
366 elif flags.Trigger.EDMVersion == 3:
370 EGAM5SlimmingHelper.AllVariables += ExtraContainersTrigger[MenuType]
371 EGAM5SlimmingHelper.AllVariables += ExtraContainersElectronTrigger[MenuType]
372 if not flags.Input.isMC:
373 EGAM5SlimmingHelper.AllVariables += ExtraContainersTriggerDataOnly[MenuType]
377 EGAM5SlimmingHelper.AllVariables += [
381 "egammaTruthParticles",
392 EGAM5SlimmingHelper.SmartCollections = [
397 "InDetTrackParticles",
399 "AntiKt4EMPFlowJets",
400 "MET_Baseline_AntiKt4EMPFlow",
406 EGAM5SlimmingHelper.SmartCollections += [
408 "AntiKt4TruthDressedWZJets",
414 EGAM5SlimmingHelper.ExtraVariables += [
415 "Muons.ptcone20.ptcone30.ptcone40.etcone20.etcone30.etcone40"
419 EGAM5SlimmingHelper.ExtraVariables += [
420 "GSFConversionVertices.x.y.z.px.py.pz.pt1.pt2.etaAtCalo.phiAtCalo",
421 "GSFConversionVertices.trackParticleLinks",
425 EGAM5SlimmingHelper.ExtraVariables += [
"PrimaryVertices.x.y.sumPt2"]
428 EGAM5SlimmingHelper.ExtraVariables += PhotonsCPDetailedContent
431 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig
import (
433 getClusterEnergyPerLayerDecorations,
436 gainDecorations = getGainDecorations(acc, flags,
"EGAM5Kernel")
437 print(
"EGAM5 gain decorations: ", gainDecorations)
438 EGAM5SlimmingHelper.ExtraVariables.extend(gainDecorations)
439 clusterEnergyDecorations = getClusterEnergyPerLayerDecorations(acc,
"EGAM5Kernel")
440 print(
"EGAM5 cluster energy decorations: ", clusterEnergyDecorations)
441 EGAM5SlimmingHelper.ExtraVariables.extend(clusterEnergyDecorations)
444 EGAM5SlimmingHelper.ExtraVariables += [
445 "TopoClusterIsoCentralEventShape.Density",
446 "TopoClusterIsoForwardEventShape.Density",
447 "NeutralParticleFlowIsoCentralEventShape.Density",
448 "NeutralParticleFlowIsoForwardEventShape.Density",
453 EGAM5SlimmingHelper.ExtraVariables += [
454 "MuonTruthParticles.e.px.py.pz.status.pdgId.truthOrigin.truthType"
457 EGAM5SlimmingHelper.ExtraVariables += [
458 "Photons.truthOrigin.truthType.truthParticleLink"
462 if flags.Derivation.Egamma.doEventInfoSlimming:
463 EGAM5SlimmingHelper.SmartCollections.append(
"EventInfo")
465 EGAM5SlimmingHelper.AllVariables += [
"EventInfo"]
468 EGAM5SlimmingHelper.IncludeEGammaTriggerContent =
True
472 if flags.Trigger.EDMVersion == 2:
473 from DerivationFrameworkPhys.TriggerMatchingCommonConfig
import AddRun2TriggerMatchingToSlimmingHelper
474 AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = EGAM5SlimmingHelper,
475 OutputContainerPrefix =
"TrigMatch_",
476 TriggerList = EGAM5TriggerListsHelper.Run2TriggerNamesNoTau)
478 if flags.Trigger.EDMVersion == 3
or (flags.Trigger.EDMVersion == 2
and flags.Trigger.doEDMVersionConversion):
479 from TrigNavSlimmingMT.TrigNavSlimmingMTConfig
import AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
480 AddRun3TrigNavSlimmingCollectionsToSlimmingHelper(EGAM5SlimmingHelper)
482 EGAM5ItemList = EGAM5SlimmingHelper.GetItemList()
487 ItemList=EGAM5ItemList,
488 AcceptAlgs=[
"EGAM5Kernel"],
492 SetupMetaDataForStreamCfg(
495 AcceptAlgs=[
"EGAM5Kernel"],
497 MetadataCategory.CutFlowMetaData,
498 MetadataCategory.TruthMetaData,