27 """Configure the EGAM2 skimming tool"""
28 acc = ComponentAccumulator()
34 "(count(EGAM2_DiElectronMass1 > 1.0*GeV && "
35 +
"EGAM2_DiElectronMass1 < 5.0*GeV)>=1)"
38 "(count(EGAM2_DiElectronMass2 > 1.0*GeV && "
39 +
"EGAM2_DiElectronMass2 < 6.0*GeV)>=1)"
41 expression = expression_calib +
" || " + expression_TP
42 print(
"EGAM2 offline skimming expression: ", expression)
44 EGAM2_OfflineSkimmingTool = CompFactory.DerivationFramework.xAODStringSkimmingTool(
45 name=
"EGAM2_OfflineSkimmingTool", expression=expression
47 if flags.Trigger.EDMVersion < 0:
48 EGAM2_OfflineSkimmingTool.TrigDecisionTool =
None
50 acc.addPublicTool(EGAM2_OfflineSkimmingTool)
51 skimmingTools += [EGAM2_OfflineSkimmingTool]
55 if flags.Trigger.EDMVersion == 2:
57 elif flags.Trigger.EDMVersion == 3:
61 triggers = JPsiTriggers[MenuType]
62 print(
"EGAM2 trigger skimming list (OR): ", triggers)
64 EGAM2_TriggerSkimmingTool = CompFactory.DerivationFramework.TriggerSkimmingTool(
65 name=
"EGAM2_TriggerSkimmingTool", TriggerListOR=triggers
67 acc.addPublicTool(EGAM2_TriggerSkimmingTool)
68 skimmingTools += [EGAM2_TriggerSkimmingTool]
71 print(
"EGAM2 skimming is logical OR of previous selections")
72 EGAM2_SkimmingTool = CompFactory.DerivationFramework.FilterCombinationOR(
73 name=
"EGAM2_SkimmingTool",
74 FilterList=skimmingTools,
77 acc.addPublicTool(EGAM2_SkimmingTool, primary=
True)
158 """Configure the derivation framework driving algorithm (kernel)
160 acc = ComponentAccumulator()
163 from DerivationFrameworkPhys.PhysCommonConfig
import PhysCommonAugmentationsCfg
166 PhysCommonAugmentationsCfg(
167 flags, TriggerListsHelper=kwargs[
"TriggerListsHelper"]
172 augmentationTools = []
178 acc.addPublicTool(EGAM2JpsieeMassTool1)
179 augmentationTools.append(EGAM2JpsieeMassTool1)
182 acc.addPublicTool(EGAM2JpsieeMassTool2)
183 augmentationTools.append(EGAM2JpsieeMassTool2)
188 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig
import (
189 CaloDecoratorKernelCfg,
192 acc.merge(CaloDecoratorKernelCfg(flags))
196 streamName = kwargs[
"StreamName"]
199 if flags.Derivation.Egamma.doTrackThinning:
200 from DerivationFrameworkInDet.InDetToolsConfig
import (
201 TrackParticleThinningCfg,
202 MuonTrackParticleThinningCfg,
203 TauTrackParticleThinningCfg,
206 TrackThinningKeepElectronTracks =
True
207 TrackThinningKeepPhotonTracks =
True
208 TrackThinningKeepAllElectronTracks =
False
209 TrackThinningKeepJetTracks =
False
210 TrackThinningKeepMuonTracks =
False
211 TrackThinningKeepTauTracks =
False
212 TrackThinningKeepPVTracks =
False
215 if TrackThinningKeepElectronTracks:
216 EGAM2ElectronTPThinningTool = (
217 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
218 name=
"EGAM2ElectronTPThinningTool",
219 StreamName=streamName,
221 GSFTrackParticlesKey=
"GSFTrackParticles",
222 InDetTrackParticlesKey=
"InDetTrackParticles",
223 SelectionString=
"Electrons.pt > 0*GeV",
228 acc.addPublicTool(EGAM2ElectronTPThinningTool)
229 thinningTools.append(EGAM2ElectronTPThinningTool)
233 if TrackThinningKeepAllElectronTracks:
234 EGAM2ElectronTPThinningTool2 = (
235 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
236 name=
"EGAM2ElectronTPThinningTool2",
237 StreamName=streamName,
239 GSFTrackParticlesKey=
"GSFTrackParticles",
240 InDetTrackParticlesKey=
"InDetTrackParticles",
241 SelectionString=
"Electrons.pt > 4*GeV",
246 acc.addPublicTool(EGAM2ElectronTPThinningTool2)
247 thinningTools.append(EGAM2ElectronTPThinningTool2)
250 if TrackThinningKeepPhotonTracks:
251 EGAM2PhotonTPThinningTool = (
252 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
253 name=
"EGAM2PhotonTPThinningTool",
254 StreamName=streamName,
256 GSFTrackParticlesKey=
"GSFTrackParticles",
257 InDetTrackParticlesKey=
"InDetTrackParticles",
258 GSFConversionVerticesKey=
"GSFConversionVertices",
259 SelectionString=
"Photons.pt > 0*GeV",
264 acc.addPublicTool(EGAM2PhotonTPThinningTool)
265 thinningTools.append(EGAM2PhotonTPThinningTool)
268 if TrackThinningKeepJetTracks:
269 EGAM2JetTPThinningTool = (
270 CompFactory.DerivationFramework.JetTrackParticleThinning(
271 name=
"EGAM2JetTPThinningTool",
272 StreamName=streamName,
273 JetKey=
"AntiKt4EMPFlowJets",
274 InDetTrackParticlesKey=
"InDetTrackParticles",
277 acc.addPublicTool(EGAM2JetTPThinningTool)
278 thinningTools.append(EGAM2JetTPThinningTool)
281 if TrackThinningKeepMuonTracks:
282 EGAM2MuonTPThinningTool = acc.getPrimaryAndMerge(
283 MuonTrackParticleThinningCfg(
285 name=
"EGAM2MuonTPThinningTool",
286 StreamName=streamName,
288 InDetTrackParticlesKey=
"InDetTrackParticles",
291 thinningTools.append(EGAM2MuonTPThinningTool)
294 if TrackThinningKeepTauTracks:
295 EGAM2TauTPThinningTool = acc.getPrimaryAndMerge(
296 TauTrackParticleThinningCfg(
298 name=
"EGAM2TauTPThinningTool",
299 StreamName=streamName,
302 InDetTrackParticlesKey=
"InDetTrackParticles",
303 DoTauTracksThinning=
True,
304 TauTracksKey=
"TauTracks",
307 thinningTools.append(EGAM2TauTPThinningTool)
310 thinning_expression =
" && ".join(
312 "(InDetTrackParticles.DFCommonTightPrimary)",
313 "(abs(DFCommonInDetTrackZ0AtPV)*sin(InDetTrackParticles.theta)<3*mm)",
314 "(InDetTrackParticles.pt > 10*GeV)",
317 if TrackThinningKeepPVTracks:
318 EGAM2TPThinningTool = acc.getPrimaryAndMerge(
319 TrackParticleThinningCfg(
321 name=
"EGAM2TPThinningTool",
322 StreamName=streamName,
323 SelectionString=thinning_expression,
324 InDetTrackParticlesKey=
"InDetTrackParticles",
327 thinningTools.append(EGAM2TPThinningTool)
334 CompFactory.DerivationFramework.DerivationKernel(
336 SkimmingTools=[skimmingTool],
337 AugmentationTools=augmentationTools,
338 ThinningTools=thinningTools,
346 acc = ComponentAccumulator()
355 from DerivationFrameworkPhys.TriggerListsHelper
import TriggerListsHelper
357 EGAM2TriggerListsHelper = TriggerListsHelper(flags)
364 StreamName=
"StreamDAOD_EGAM2",
365 TriggerListsHelper=EGAM2TriggerListsHelper,
370 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
371 from xAODMetaDataCnv.InfileMetaDataConfig
import SetupMetaDataForStreamCfg
372 from DerivationFrameworkCore.SlimmingHelper
import SlimmingHelper
375 "EGAM2SlimmingHelper",
376 NamesAndTypes=flags.Input.TypedCollections,
385 EGAM2SlimmingHelper.AllVariables = [
393 if flags.Trigger.EDMVersion == 2:
395 elif flags.Trigger.EDMVersion == 3:
399 EGAM2SlimmingHelper.AllVariables += ExtraContainersTrigger[MenuType]
400 EGAM2SlimmingHelper.AllVariables += ExtraContainersElectronTrigger[MenuType]
404 EGAM2SlimmingHelper.AllVariables += [
408 "egammaTruthParticles",
421 EGAM2SlimmingHelper.SmartCollections = [
426 "InDetTrackParticles",
428 "AntiKt4EMPFlowJets",
429 "MET_Baseline_AntiKt4EMPFlow",
433 EGAM2SlimmingHelper.SmartCollections += [
435 "AntiKt4TruthDressedWZJets",
441 EGAM2SlimmingHelper.ExtraVariables += [
442 "Muons.ptcone20.ptcone30.ptcone40.etcone20.etcone30.etcone40"
446 EGAM2SlimmingHelper.ExtraVariables += [
447 "GSFConversionVertices.x.y.z.px.py.pz.pt1.pt2.etaAtCalo.phiAtCalo",
448 "GSFConversionVertices.trackParticleLinks",
452 EGAM2SlimmingHelper.ExtraVariables += [
"PrimaryVertices.x.y.sumPt2"]
455 EGAM2SlimmingHelper.ExtraVariables += PhotonsCPDetailedContent
458 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig
import (
460 getClusterEnergyPerLayerDecorations,
463 gainDecorations = getGainDecorations(acc, flags,
"EGAM2Kernel")
464 print(
"EGAM2 gain decorations: ", gainDecorations)
465 EGAM2SlimmingHelper.ExtraVariables.extend(gainDecorations)
466 clusterEnergyDecorations = getClusterEnergyPerLayerDecorations(acc,
"EGAM2Kernel")
467 print(
"EGAM2 cluster energy decorations: ", clusterEnergyDecorations)
468 EGAM2SlimmingHelper.ExtraVariables.extend(clusterEnergyDecorations)
471 EGAM2SlimmingHelper.ExtraVariables += [
472 "TopoClusterIsoCentralEventShape.Density",
473 "TopoClusterIsoForwardEventShape.Density",
474 "NeutralParticleFlowIsoCentralEventShape.Density",
475 "NeutralParticleFlowIsoForwardEventShape.Density",
480 EGAM2SlimmingHelper.ExtraVariables += [
481 "MuonTruthParticles.e.px.py.pz.status.pdgId.truthOrigin.truthType"
484 EGAM2SlimmingHelper.ExtraVariables += [
485 "Photons.truthOrigin.truthType.truthParticleLink"
489 if flags.Derivation.Egamma.doEventInfoSlimming:
490 EGAM2SlimmingHelper.SmartCollections.append(
"EventInfo")
492 EGAM2SlimmingHelper.AllVariables += [
"EventInfo"]
495 EGAM2SlimmingHelper.IncludeEGammaTriggerContent =
True
499 if flags.Trigger.EDMVersion == 2:
500 from DerivationFrameworkPhys.TriggerMatchingCommonConfig
import AddRun2TriggerMatchingToSlimmingHelper
501 AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = EGAM2SlimmingHelper,
502 OutputContainerPrefix =
"TrigMatch_",
503 TriggerList = EGAM2TriggerListsHelper.Run2TriggerNamesNoTau)
508 from DerivationFrameworkPhys.TriggerMatchingCommonConfig
import (
509 TriggerMatchingCommonRun2Cfg
511 EGAM2TrigMatchList = [
512 "HLT_e5_lhtight_nod0",
513 "HLT_e9_lhtight_nod0",
514 "HLT_e14_lhtight_nod0",
516 acc.merge(TriggerMatchingCommonRun2Cfg(
518 name=
"EGAM2TrigMatch",
519 OutputContainerPrefix=
"TrigMatch_",
520 ChainNames=EGAM2TrigMatchList)
522 AddRun2TriggerMatchingToSlimmingHelper(
523 SlimmingHelper=EGAM2SlimmingHelper,
524 OutputContainerPrefix=
"TrigMatch_",
525 TriggerList=EGAM2TrigMatchList
529 if flags.Trigger.EDMVersion == 3
or (flags.Trigger.EDMVersion == 2
and flags.Trigger.doEDMVersionConversion):
530 from TrigNavSlimmingMT.TrigNavSlimmingMTConfig
import AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
531 AddRun3TrigNavSlimmingCollectionsToSlimmingHelper(EGAM2SlimmingHelper)
534 EGAM2ItemList = EGAM2SlimmingHelper.GetItemList()
539 ItemList=EGAM2ItemList,
540 AcceptAlgs=[
"EGAM2Kernel"],
544 SetupMetaDataForStreamCfg(
547 AcceptAlgs=[
"EGAM2Kernel"],
549 MetadataCategory.CutFlowMetaData,
550 MetadataCategory.TruthMetaData,