ATLAS Offline Software
Loading...
Searching...
No Matches
EGAM3.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2# ====================================================================
3# EGAM3.py
4# This defines DAOD_EGAM3, a skimmed DAOD format for Run 3.
5# Z->eegamma reduction for low-pT electron and photon studies
6# It requires the flag EGAM3 in Derivation_tf.py
7# ====================================================================
8
9from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
10from AthenaConfiguration.ComponentFactory import CompFactory
11from AthenaConfiguration.Enums import MetadataCategory
12
13from AthenaCommon.SystemOfUnits import MeV
14
15from DerivationFrameworkEGamma.ElectronsCPDetailedContent import (
16 ElectronsCPDetailedContent,
17 GSFTracksCPDetailedContent,
18)
19
20from DerivationFrameworkEGamma.TriggerContent import (
21 ExtraContainersTrigger,
22 ExtraContainersPhotonTrigger,
23 ExtraContainersElectronTrigger,
24 ExtraContainersTriggerDataOnly,
25 ExtraVariablesHLTPhotons,
26)
27
28
30 """Configure the EGAM3 skimming tool"""
31
32 # eegamma or eee selection for photon efficiency studies, ee triggers
33 expression1a = " && ".join(
34 [
35 "(count(DFCommonPhotons_et>9.5*GeV)>=1)",
36 "(count(EGAM3_DiElectronMass1 > 40.0*GeV)>=1)",
37 ]
38 )
39 expression1b = " && ".join(
40 [
41 "(count(Electrons.pt>9.5*GeV)>=3)",
42 "(count(EGAM3_DiElectronMass1 > 40.0*GeV)>=1)",
43 ]
44 )
45
46 # eegamma selection for low-pT central electron studies with T&P
47 expression2 = " && ".join(
48 [
49 "(count(DFCommonPhotons_et>9.5*GeV && "
50 + "Photons.DFCommonPhotonsIsEMTight)>=1)",
51 "(count(EGAM3_DiElectronMass2 > 40.0*GeV)>=1)",
52 ]
53 )
54
55 # eegamma selection for low-pT forward electron studies with T&P
56 expression3 = " && ".join(
57 [
58 "(count(DFCommonPhotons_et>9.5*GeV && "
59 + "Photons.DFCommonPhotonsIsEMTight)>=1)",
60 "(count(EGAM3_DiElectronMass3 > 40.0*GeV)>=1)",
61 ]
62 )
63
64 # take OR of previous selections
65 expression = (
66 "( "
67 + expression1a
68 + " ) || "
69 + "( "
70 + expression1b
71 + " ) || "
72 + "( "
73 + expression2
74 + " ) || "
75 + "( "
76 + expression3
77 + " )"
78 )
79 print("EGAM3 skimming expression: ", expression)
80
81 from DerivationFrameworkTools.DerivationFrameworkToolsConfig import (
82 xAODStringSkimmingToolCfg)
83 return xAODStringSkimmingToolCfg(flags, name = "EGAM3SkimmingTool",
84 expression = expression)
85
86
88 """Configure the EGAM3 ee invariant mass augmentation tool 1"""
89 acc = ComponentAccumulator()
90
91 # ====================================================================
92 # 1. ee invariant mass of events passing eegamma or eee selection for
93 # photon efficiency studies, di-electron triggers
94 #
95 # two opposite-sign medium el, pT>10 GeV, |eta|<2.5, mee>40 GeV
96 # eegamma: one reco photon, ET>10 GeV< |eta|<2.5
97 # eee: 3 electrons, pT>10 GeV, mee>40 GeV
98 # if skim size too large either require tight electrons (at least one)
99 # or raise electron pT threshold (at least one)
100 # ====================================================================
101
102 requirementElectrons = " && ".join(
103 ["(Electrons.DFCommonElectronsLHMedium)", "(Electrons.pt > 9.5*GeV)"]
104 )
105
106 acc.setPrivateTools(
107 CompFactory.DerivationFramework.EGInvariantMassTool(
108 name="EGAM3_EEMassTool11",
109 Object1Requirements=requirementElectrons,
110 Object2Requirements=requirementElectrons,
111 StoreGateEntryName="EGAM3_DiElectronMass1",
112 Mass1Hypothesis=0.511 * MeV,
113 Mass2Hypothesis=0.511 * MeV,
114 Container1Name="Electrons",
115 Container2Name="Electrons",
116 CheckCharge=True,
117 DoTransverseMass=False,
118 MinDeltaR=0.0,
119 )
120 )
121
122 return acc
123
124
126 """Configure the EGAM3 ee invariant mass augmentation tool 2"""
127 acc = ComponentAccumulator()
128
129 # ====================================================================
130 # 2. dielectron invariant mass for eegamma selection for low-pT
131 # electron studies with T&P
132 #
133 # tag e: tight, |eta|<2.5, pT>25 GeV
134 # probe e: reco, ET>7 GeV, central electron
135 # gamma: tight, ET>10 GeV
136 # ====================================================================
137 # asymmetric electron cuts/single e trigger, low pT cut for subleading
138 # e (for e calibration studies at low pT)
139
140 requirementElectron1 = " && ".join(
141 ["(Electrons.DFCommonElectronsLHTight)", "(Electrons.pt > 24.5*GeV)"]
142 )
143 requirementElectron2 = "(Electrons.pt > 6.5*GeV)"
144
145 acc.setPrivateTools(
146 CompFactory.DerivationFramework.EGInvariantMassTool(
147 name="EGAM3_ZEEMassTool2",
148 Object1Requirements=requirementElectron1,
149 Object2Requirements=requirementElectron2,
150 StoreGateEntryName="EGAM3_DiElectronMass2",
151 Mass1Hypothesis=0.511 * MeV,
152 Mass2Hypothesis=0.511 * MeV,
153 Container1Name="Electrons",
154 Container2Name="Electrons",
155 CheckCharge=True,
156 DoTransverseMass=False,
157 MinDeltaR=0.0,
158 )
159 )
160
161 return acc
162
163
165 """Configure the EGAM3 ee invariant mass augmentation tool 3"""
166 acc = ComponentAccumulator()
167
168 # ====================================================================
169 # 3. eegamma selection for low-pT electron studies with T&P
170 # tag e: tight, |eta|<2.5, pT>25 GeV
171 # probe e: reco, ET>7 GeV, forward electron
172 # gamma: tight, ET>10 GeV
173 # ====================================================================
174
175 requirementElectron1 = " && ".join(
176 ["(Electrons.DFCommonElectronsLHTight)", "(Electrons.pt > 24.5*GeV)"]
177 )
178 requirementElectron2 = "(ForwardElectrons.pt > 6.5*GeV)"
179
180 acc.setPrivateTools(
181 CompFactory.DerivationFramework.EGInvariantMassTool(
182 name="EGAM3_EEMassTool3",
183 Object1Requirements=requirementElectron1,
184 Object2Requirements=requirementElectron2,
185 StoreGateEntryName="EGAM3_DiElectronMass3",
186 Mass1Hypothesis=0.511 * MeV,
187 Mass2Hypothesis=0.511 * MeV,
188 Container1Name="Electrons",
189 Container2Name="ForwardElectrons",
190 CheckCharge=True,
191 DoTransverseMass=False,
192 MinDeltaR=0.0,
193 )
194 )
195
196 return acc
197
198
199# Main algorithm config
200def EGAM3KernelCfg(flags, name="EGAM3Kernel", **kwargs):
201 """Configure the derivation framework driving algorithm (kernel)
202 for EGAM3"""
203 acc = ComponentAccumulator()
204
205 # Common augmentations
206 from DerivationFrameworkPhys.PhysCommonConfig import PhysCommonAugmentationsCfg
207
208 acc.merge(
209 PhysCommonAugmentationsCfg(
210 flags, TriggerListsHelper=kwargs["TriggerListsHelper"]
211 )
212 )
213
214 # EGAM3 augmentations
215 augmentationTools = []
216
217 # ====================================================================
218 # ee and egamma invariant masses
219 # ====================================================================
220 EGAM3eeMassTool1 = acc.popToolsAndMerge(EGAM3eeMassTool1Cfg(flags))
221 acc.addPublicTool(EGAM3eeMassTool1)
222 augmentationTools.append(EGAM3eeMassTool1)
223
224 EGAM3eeMassTool2 = acc.popToolsAndMerge(EGAM3eeMassTool2Cfg(flags))
225 acc.addPublicTool(EGAM3eeMassTool2)
226 augmentationTools.append(EGAM3eeMassTool2)
227
228 EGAM3eeMassTool3 = acc.popToolsAndMerge(EGAM3eeMassTool3Cfg(flags))
229 acc.addPublicTool(EGAM3eeMassTool3)
230 augmentationTools.append(EGAM3eeMassTool3)
231
232 # ====================================================================
233 # Common calo decoration tools
234 # ====================================================================
235 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig import (
236 CaloDecoratorKernelCfg)
237 acc.merge(CaloDecoratorKernelCfg(flags))
238
239 # thinning tools
240 thinningTools = []
241 streamName = kwargs["StreamName"]
242
243 # Track thinning
244 if flags.Derivation.Egamma.doTrackThinning:
245 from DerivationFrameworkInDet.InDetToolsConfig import (
246 TrackParticleThinningCfg,
247 MuonTrackParticleThinningCfg,
248 TauTrackParticleThinningCfg,
249 )
250
251 TrackThinningKeepElectronTracks = True
252 TrackThinningKeepAllElectronTracks = False
253 TrackThinningKeepPhotonTracks = True
254 TrackThinningKeepAllPhotonTracks = True
255 TrackThinningKeepJetTracks = False
256 TrackThinningKeepMuonTracks = False
257 TrackThinningKeepTauTracks = False
258 TrackThinningKeepPVTracks = True
259
260 # Tracks associated with Electrons
261 if TrackThinningKeepElectronTracks:
262 EGAM3ElectronTPThinningTool = (
263 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
264 name="EGAM3ElectronTPThinningTool",
265 StreamName=streamName,
266 SGKey="Electrons",
267 GSFTrackParticlesKey="GSFTrackParticles",
268 InDetTrackParticlesKey="InDetTrackParticles",
269 SelectionString="Electrons.pt > 0*GeV",
270 BestMatchOnly=True,
271 ConeSize=0.3,
272 )
273 )
274 acc.addPublicTool(EGAM3ElectronTPThinningTool)
275 thinningTools.append(EGAM3ElectronTPThinningTool)
276
277 # Tracks associated with Electrons (all tracks, large cone, for track
278 # isolation studies of the selected electrons)
279 if TrackThinningKeepAllElectronTracks:
280 EGAM3ElectronTPThinningTool2 = (
281 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
282 name="EGAM3ElectronTPThinningTool2",
283 StreamName=streamName,
284 SGKey="Electrons",
285 GSFTrackParticlesKey="GSFTrackParticles",
286 InDetTrackParticlesKey="InDetTrackParticles",
287 SelectionString="Electrons.pt > 4*GeV",
288 BestMatchOnly=False,
289 ConeSize=0.6,
290 )
291 )
292 acc.addPublicTool(EGAM3ElectronTPThinningTool2)
293 thinningTools.append(EGAM3ElectronTPThinningTool2)
294
295 # Tracks associated with Photons
296 if TrackThinningKeepPhotonTracks:
297 EGAM3PhotonTPThinningTool = (
298 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
299 name="EGAM3PhotonTPThinningTool",
300 StreamName=streamName,
301 SGKey="Photons",
302 GSFTrackParticlesKey="GSFTrackParticles",
303 InDetTrackParticlesKey="InDetTrackParticles",
304 GSFConversionVerticesKey="GSFConversionVertices",
305 SelectionString="Photons.pt > 0*GeV",
306 BestMatchOnly=True,
307 ConeSize=0.3,
308 )
309 )
310 acc.addPublicTool(EGAM3PhotonTPThinningTool)
311 thinningTools.append(EGAM3PhotonTPThinningTool)
312
313 # Tracks associated with Photons (all tracks, large cone,
314 # for track isolation studies of the selected photons)
315 if TrackThinningKeepAllPhotonTracks:
316 EGAM3PhotonTPThinningTool2 = (
317 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
318 name="EGAM3PhotonTPThinningTool2",
319 StreamName=streamName,
320 SGKey="Photons",
321 GSFTrackParticlesKey="GSFTrackParticles",
322 InDetTrackParticlesKey="InDetTrackParticles",
323 GSFConversionVerticesKey="GSFConversionVertices",
324 SelectionString="Photons.pt > 9.5*GeV",
325 BestMatchOnly=False,
326 ConeSize=0.6,
327 )
328 )
329 acc.addPublicTool(EGAM3PhotonTPThinningTool2)
330 thinningTools.append(EGAM3PhotonTPThinningTool2)
331
332 # Tracks associated with Jets
333 if TrackThinningKeepJetTracks:
334 EGAM3JetTPThinningTool = (
335 CompFactory.DerivationFramework.JetTrackParticleThinning(
336 name="EGAM3JetTPThinningTool",
337 StreamName=streamName,
338 JetKey="AntiKt4EMPFlowJets",
339 InDetTrackParticlesKey="InDetTrackParticles",
340 )
341 )
342 acc.addPublicTool(EGAM3JetTPThinningTool)
343 thinningTools.append(EGAM3JetTPThinningTool)
344
345 # Tracks associated with Muons
346 if TrackThinningKeepMuonTracks:
347 EGAM3MuonTPThinningTool = acc.getPrimaryAndMerge(
348 MuonTrackParticleThinningCfg(
349 flags,
350 name="EGAM3MuonTPThinningTool",
351 StreamName=streamName,
352 MuonKey="Muons",
353 InDetTrackParticlesKey="InDetTrackParticles",
354 )
355 )
356 thinningTools.append(EGAM3MuonTPThinningTool)
357
358 # Tracks associated with Taus
359 if TrackThinningKeepTauTracks:
360 EGAM3TauTPThinningTool = acc.getPrimaryAndMerge(
361 TauTrackParticleThinningCfg(
362 flags,
363 name="EGAM3TauTPThinningTool",
364 StreamName=streamName,
365 TauKey="TauJets",
366 ConeSize=0.6,
367 InDetTrackParticlesKey="InDetTrackParticles",
368 DoTauTracksThinning=True,
369 TauTracksKey="TauTracks",
370 )
371 )
372 thinningTools.append(EGAM3TauTPThinningTool)
373
374 # Tracks from primary vertex
375 thinning_expression = " && ".join(
376 [
377 "(InDetTrackParticles.DFCommonTightPrimary)",
378 "(abs(DFCommonInDetTrackZ0AtPV)*sin(InDetTrackParticles.theta)<3*mm)",
379 "(InDetTrackParticles.pt>10*GeV)",
380 ]
381 )
382 if TrackThinningKeepPVTracks:
383 EGAM3TPThinningTool = acc.getPrimaryAndMerge(
384 TrackParticleThinningCfg(
385 flags,
386 name="EGAM3TPThinningTool",
387 StreamName=streamName,
388 SelectionString=thinning_expression,
389 InDetTrackParticlesKey="InDetTrackParticles",
390 )
391 )
392 thinningTools.append(EGAM3TPThinningTool)
393
394 # skimming
395 skimmingTool = acc.getPrimaryAndMerge(EGAM3SkimmingToolCfg(flags))
396
397 # setup the kernel
398 acc.addEventAlgo(
399 CompFactory.DerivationFramework.DerivationKernel(
400 name,
401 SkimmingTools=[skimmingTool],
402 AugmentationTools=augmentationTools,
403 ThinningTools=thinningTools,
404 )
405 )
406
407 return acc
408
409
410def EGAM3Cfg(flags):
411 acc = ComponentAccumulator()
412
413 # Get the lists of triggers needed for trigger matching.
414 # This is needed at this scope (for the slimming) and further down
415 # in the config chain for actually configuring the matching, so we create
416 # it here and pass it down
417 # TODO: this should ideally be called higher up to avoid it being run
418 # multiple times in a train
419 from DerivationFrameworkPhys.TriggerListsHelper import TriggerListsHelper
420
421 EGAM3TriggerListsHelper = TriggerListsHelper(flags)
422
423 # configure skimming/thinning/augmentation tools
424 acc.merge(
426 flags,
427 name="EGAM3Kernel",
428 StreamName="StreamDAOD_EGAM3",
429 TriggerListsHelper=EGAM3TriggerListsHelper,
430 )
431 )
432
433 # configure slimming
434 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
435 from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
436 from DerivationFrameworkCore.SlimmingHelper import SlimmingHelper
437
438 EGAM3SlimmingHelper = SlimmingHelper(
439 "EGAM3SlimmingHelper",
440 NamesAndTypes=flags.Input.TypedCollections,
441 flags=flags,
442 )
443
444 # ------------------------------------------
445 # containers for which we save all variables
446 # -------------------------------------------
447
448 # baseline
449 EGAM3SlimmingHelper.AllVariables = [
450 "Photons",
451 "GSFTrackParticles",
452 "egammaClusters",
453 "ForwardElectrons",
454 "ForwardElectronClusters",
455 ]
456
457 # for trigger studies we also add:
458 MenuType = ""
459 if flags.Trigger.EDMVersion == 2:
460 MenuType = "Run2"
461 elif flags.Trigger.EDMVersion == 3:
462 MenuType = "Run3"
463
464 if MenuType:
465 EGAM3SlimmingHelper.AllVariables += ExtraContainersTrigger[MenuType]
466 EGAM3SlimmingHelper.AllVariables += ExtraContainersPhotonTrigger[MenuType]
467 EGAM3SlimmingHelper.AllVariables += ExtraContainersElectronTrigger[MenuType]
468 if not flags.Input.isMC:
469 EGAM3SlimmingHelper.AllVariables += ExtraContainersTriggerDataOnly[MenuType]
470
471 # and on MC we also add:
472 if flags.Input.isMC:
473 EGAM3SlimmingHelper.AllVariables += [
474 "TruthEvents",
475 "TruthParticles",
476 "TruthVertices",
477 "egammaTruthParticles",
478 "MuonTruthParticles",
479 ]
480
481 # -------------------------------------------
482 # containers that we slim
483 # -------------------------------------------
484
485 # first add variables from smart-slimming
486 # adding only also those for which we add all variables since
487 # the XXXCPContent.py files also bring in some extra variables
488 # for other collections
489 EGAM3SlimmingHelper.SmartCollections = [
490 "Electrons",
491 "Photons",
492 "Muons",
493 "TauJets",
494 "PrimaryVertices",
495 "InDetTrackParticles",
496 "AntiKt4EMPFlowJets",
497
498 "MET_Baseline_AntiKt4EMPFlow",
499 ]
500 if flags.Input.isMC:
501 EGAM3SlimmingHelper.SmartCollections += [
502 "AntiKt4TruthJets",
503 "AntiKt4TruthDressedWZJets",
504 ]
505 if flags.Derivation.Egamma.addHLTJets:
506 EGAM3SlimmingHelper.SmartCollections += [
507 "HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf",
508 ]
509
510 # then add extra variables:
511
512 # electrons
513 EGAM3SlimmingHelper.ExtraVariables += ["Electrons.Loose.Medium.Tight"]
514
515 # muons
516 EGAM3SlimmingHelper.ExtraVariables += [
517 "Muons.ptcone20.ptcone30.ptcone40.etcone20.etcone30.etcone40"
518 ]
519
520 # conversion vertices
521 EGAM3SlimmingHelper.ExtraVariables += [
522 "GSFConversionVertices.x.y.z.px.py.pz.pt1.pt2.etaAtCalo.phiAtCalo",
523 "GSFConversionVertices.trackParticleLinks",
524 ]
525
526 # primary vertices
527 EGAM3SlimmingHelper.ExtraVariables += ["PrimaryVertices.x.y.sumPt2"]
528
529 # energy density
530 EGAM3SlimmingHelper.ExtraVariables += [
531 "TopoClusterIsoCentralEventShape.Density",
532 "TopoClusterIsoForwardEventShape.Density",
533 "NeutralParticleFlowIsoCentralEventShape.Density",
534 "NeutralParticleFlowIsoForwardEventShape.Density",
535 ]
536
537 from DerivationFrameworkEGamma import EGammaIsoConfig
538
539 (
540 pflowIsoVar,
541 densityList,
542 densityDict,
543 acc1,
544 ) = EGammaIsoConfig.makeEGammaCommonIsoCfg(flags)
545 acc.merge(acc1)
546 EGAM3SlimmingHelper.AppendToDictionary.update(densityDict)
547 EGAM3SlimmingHelper.ExtraVariables += densityList
548
549 # To have ptcone40
550 from IsolationAlgs.DerivationTrackIsoConfig import DerivationTrackIsoCfg
551
552 acc.merge(
553 DerivationTrackIsoCfg(
554 flags, object_types=("Photons",), ptCuts=(500, 1000), postfix="Extra"
555 )
556 )
557
558 # electrons: detailed shower shape and track variables
559 EGAM3SlimmingHelper.ExtraVariables += ElectronsCPDetailedContent
560 EGAM3SlimmingHelper.ExtraVariables += GSFTracksCPDetailedContent
561
562 # photons and electrons: gain and cluster energy per layer
563 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig import (
564 getGainDecorations,
565 getClusterEnergyPerLayerDecorations,
566 )
567
568 gainDecorations = getGainDecorations(acc, flags, "EGAM3Kernel")
569 print("EGAM3 gain decorations: ", gainDecorations)
570 EGAM3SlimmingHelper.ExtraVariables.extend(gainDecorations)
571 clusterEnergyDecorations = getClusterEnergyPerLayerDecorations(acc, "EGAM3Kernel")
572 print("EGAM3 cluster energy decorations: ", clusterEnergyDecorations)
573 EGAM3SlimmingHelper.ExtraVariables.extend(clusterEnergyDecorations)
574
575 # photon HLT variables
576 if MenuType:
577 EGAM3SlimmingHelper.ExtraVariables += ExtraVariablesHLTPhotons[MenuType]
578
579 # truth
580 if flags.Input.isMC:
581 EGAM3SlimmingHelper.ExtraVariables += [
582 "Electrons.truthOrigin.truthType.truthParticleLink"
583 ]
584
585 # Add event info
586 if flags.Derivation.Egamma.doEventInfoSlimming:
587 EGAM3SlimmingHelper.SmartCollections.append("EventInfo")
588 else:
589 EGAM3SlimmingHelper.AllVariables += ["EventInfo"]
590
591 # Add egamma trigger objects
592 EGAM3SlimmingHelper.IncludeEGammaTriggerContent = True
593
594 # Trigger matching
595 # Run 2
596 if flags.Trigger.EDMVersion == 2:
597 from DerivationFrameworkPhys.TriggerMatchingCommonConfig import AddRun2TriggerMatchingToSlimmingHelper
598 AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = EGAM3SlimmingHelper,
599 OutputContainerPrefix = "TrigMatch_",
600 TriggerList = EGAM3TriggerListsHelper.Run2TriggerNamesNoTau)
601 # Run 3, or Run 2 with navigation conversion
602 if flags.Trigger.EDMVersion == 3 or (flags.Trigger.EDMVersion == 2 and flags.Trigger.doEDMVersionConversion):
603 from TrigNavSlimmingMT.TrigNavSlimmingMTConfig import AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
604 AddRun3TrigNavSlimmingCollectionsToSlimmingHelper(EGAM3SlimmingHelper)
605
606 # Add full CellContainer
607 EGAM3SlimmingHelper.StaticContent = [
608 "CaloCellContainer#AllCalo",
609 "CaloClusterCellLinkContainer#egammaClusters_links",
610 ]
611
612 EGAM3ItemList = EGAM3SlimmingHelper.GetItemList()
613 acc.merge(
614 OutputStreamCfg(
615 flags,
616 "DAOD_EGAM3",
617 ItemList=EGAM3ItemList,
618 AcceptAlgs=["EGAM3Kernel"],
619 )
620 )
621 acc.merge(
622 SetupMetaDataForStreamCfg(
623 flags,
624 "DAOD_EGAM3",
625 AcceptAlgs=["EGAM3Kernel"],
626 createMetadata=[
627 MetadataCategory.CutFlowMetaData,
628 MetadataCategory.TruthMetaData,
629 ],
630 )
631 )
632
633 return acc
void print(char *figname, TCanvas *c1)
EGAM3eeMassTool2Cfg(flags)
Definition EGAM3.py:125
EGAM3eeMassTool3Cfg(flags)
Definition EGAM3.py:164
EGAM3KernelCfg(flags, name="EGAM3Kernel", **kwargs)
Definition EGAM3.py:200
EGAM3Cfg(flags)
Definition EGAM3.py:410
EGAM3SkimmingToolCfg(flags)
Definition EGAM3.py:29
EGAM3eeMassTool1Cfg(flags)
Definition EGAM3.py:87