ATLAS Offline Software
Loading...
Searching...
No Matches
python.EGAM5 Namespace Reference

Functions

 EGAM5SkimmingToolCfg (flags)
 EGAM5enuTransverseMassToolCfg (flags)
 EGAM5KernelCfg (flags, name="EGAM5Kernel", **kwargs)
 EGAM5Cfg (flags)

Function Documentation

◆ EGAM5Cfg()

python.EGAM5.EGAM5Cfg ( flags)

Definition at line 311 of file EGAM5.py.

311def EGAM5Cfg(flags):
312 acc = ComponentAccumulator()
313
314 # Get the lists of triggers needed for trigger matching.
315 # This is needed at this scope (for the slimming) and further down
316 # in the config chain for actually configuring the matching, so we create
317 # it here and pass it down
318 # TODO: this should ideally be called higher up to avoid it being run
319 # multiple times in a train.
320 # DODO: restrict it to relevant triggers
321 from DerivationFrameworkPhys.TriggerListsHelper import TriggerListsHelper
322
323 EGAM5TriggerListsHelper = TriggerListsHelper(flags)
324
325 # configure skimming/thinning/augmentation tools
326 acc.merge(
327 EGAM5KernelCfg(
328 flags,
329 name="EGAM5Kernel",
330 StreamName="StreamDAOD_EGAM5",
331 TriggerListsHelper=EGAM5TriggerListsHelper,
332 )
333 )
334
335 # configure slimming
336 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
337 from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
338 from DerivationFrameworkCore.SlimmingHelper import SlimmingHelper
339
340 EGAM5SlimmingHelper = SlimmingHelper(
341 "EGAM5SlimmingHelper",
342 NamesAndTypes=flags.Input.TypedCollections,
343 flags=flags,
344 )
345
346 # ------------------------------------------
347 # containers for which we save all variables
348 # -------------------------------------------
349
350 # baseline
351 EGAM5SlimmingHelper.AllVariables = [
352 "Electrons",
353 "GSFTrackParticles",
354 "egammaClusters",
355 ]
356
357 # for trigger studies we also add:
358 MenuType = ""
359 if flags.Trigger.EDMVersion == 2:
360 MenuType = "Run2"
361 elif flags.Trigger.EDMVersion == 3:
362 MenuType = "Run3"
363
364 if MenuType:
365 EGAM5SlimmingHelper.AllVariables += ExtraContainersTrigger[MenuType]
366 EGAM5SlimmingHelper.AllVariables += ExtraContainersElectronTrigger[MenuType]
367 if not flags.Input.isMC:
368 EGAM5SlimmingHelper.AllVariables += ExtraContainersTriggerDataOnly[MenuType]
369
370 # and on MC we also add:
371 if flags.Input.isMC:
372 EGAM5SlimmingHelper.AllVariables += [
373 "TruthEvents",
374 "TruthParticles",
375 "TruthVertices",
376 "egammaTruthParticles",
377 ]
378
379 # -------------------------------------------
380 # containers that we slim
381 # -------------------------------------------
382
383 # first add variables from smart-slimming
384 # adding only also those for which we add all variables since
385 # the XXXCPContent.py files also bring in some extra variables
386 # for other collections
387 EGAM5SlimmingHelper.SmartCollections = [
388 "Electrons",
389 "Photons",
390 "Muons",
391 "TauJets",
392 "InDetTrackParticles",
393 "PrimaryVertices",
394 "AntiKt4EMPFlowJets",
395 "MET_Baseline_AntiKt4EMPFlow",
396
397 ]
398 # muons, tau, MET, b-tagging could be switched off if not needed
399 # and use too much space
400 if flags.Input.isMC:
401 EGAM5SlimmingHelper.SmartCollections += [
402 "AntiKt4TruthJets",
403 "AntiKt4TruthDressedWZJets",
404 ]
405
406 # then add extra variables:
407
408 # muons
409 EGAM5SlimmingHelper.ExtraVariables += [
410 "Muons.ptcone20.ptcone30.ptcone40.etcone20.etcone30.etcone40"
411 ]
412
413 # conversion vertices
414 EGAM5SlimmingHelper.ExtraVariables += [
415 "GSFConversionVertices.x.y.z.px.py.pz.pt1.pt2.etaAtCalo.phiAtCalo",
416 "GSFConversionVertices.trackParticleLinks",
417 ]
418
419 # primary vertices
420 EGAM5SlimmingHelper.ExtraVariables += ["PrimaryVertices.x.y.sumPt2"]
421
422 # photons: detailed shower shape variables
423 EGAM5SlimmingHelper.ExtraVariables += PhotonsCPDetailedContent
424
425 # photons and electrons: gain and cluster energy per layer
426 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig import (
427 getGainDecorations,
428 getClusterEnergyPerLayerDecorations,
429 )
430
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)
437
438 # energy density
439 EGAM5SlimmingHelper.ExtraVariables += [
440 "TopoClusterIsoCentralEventShape.Density",
441 "TopoClusterIsoForwardEventShape.Density",
442 "NeutralParticleFlowIsoCentralEventShape.Density",
443 "NeutralParticleFlowIsoForwardEventShape.Density",
444 ]
445
446 # truth
447 if flags.Input.isMC:
448 EGAM5SlimmingHelper.ExtraVariables += [
449 "MuonTruthParticles.e.px.py.pz.status.pdgId.truthOrigin.truthType"
450 ]
451
452 EGAM5SlimmingHelper.ExtraVariables += [
453 "Photons.truthOrigin.truthType.truthParticleLink"
454 ]
455
456 # Add event info
457 if flags.Derivation.Egamma.doEventInfoSlimming:
458 EGAM5SlimmingHelper.SmartCollections.append("EventInfo")
459 else:
460 EGAM5SlimmingHelper.AllVariables += ["EventInfo"]
461
462 # Add egamma trigger objects
463 EGAM5SlimmingHelper.IncludeEGammaTriggerContent = True
464
465 # Trigger matching
466 # Run 2
467 if flags.Trigger.EDMVersion == 2:
468 from DerivationFrameworkPhys.TriggerMatchingCommonConfig import AddRun2TriggerMatchingToSlimmingHelper
469 AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = EGAM5SlimmingHelper,
470 OutputContainerPrefix = "TrigMatch_",
471 TriggerList = EGAM5TriggerListsHelper.Run2TriggerNamesNoTau)
472 # Run 3, or Run 2 with navigation conversion
473 if flags.Trigger.EDMVersion == 3 or (flags.Trigger.EDMVersion == 2 and flags.Trigger.doEDMVersionConversion):
474 from TrigNavSlimmingMT.TrigNavSlimmingMTConfig import AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
475 AddRun3TrigNavSlimmingCollectionsToSlimmingHelper(EGAM5SlimmingHelper)
476
477 EGAM5ItemList = EGAM5SlimmingHelper.GetItemList()
478 acc.merge(
479 OutputStreamCfg(
480 flags,
481 "DAOD_EGAM5",
482 ItemList=EGAM5ItemList,
483 AcceptAlgs=["EGAM5Kernel"],
484 )
485 )
486 acc.merge(
487 SetupMetaDataForStreamCfg(
488 flags,
489 "DAOD_EGAM5",
490 AcceptAlgs=["EGAM5Kernel"],
491 createMetadata=[
492 MetadataCategory.CutFlowMetaData,
493 MetadataCategory.TruthMetaData,
494 ],
495 )
496 )
497
498 return acc
void print(char *figname, TCanvas *c1)

◆ EGAM5enuTransverseMassToolCfg()

python.EGAM5.EGAM5enuTransverseMassToolCfg ( flags)
Configure the EGAM5 enu transverse mass augmentation tool

Definition at line 97 of file EGAM5.py.

97def EGAM5enuTransverseMassToolCfg(flags):
98 """Configure the EGAM5 enu transverse mass augmentation tool"""
99 acc = ComponentAccumulator()
100
101 # ====================================================================
102 # enu transverse mass
103 #
104 # 1 tight electron with pT>25 GeV + MET > 25 GeV
105 # ====================================================================
106 electronPtRequirement = "(Electrons.pt > 24.5*GeV)"
107 electronQualityRequirement = "(Electrons.DFCommonElectronsLHTight)"
108 requirement_el = (
109 "(" + electronQualityRequirement + "&&" + electronPtRequirement + ")"
110 )
111
112 acc.setPrivateTools(
113 CompFactory.DerivationFramework.EGTransverseMassTool(
114 name="EGAM5_enuTransverseMassTool",
115 ObjectRequirements=requirement_el,
116 METmin=25 * GeV,
117 StoreGateEntryName="EGAM5_ENuTransverseMass",
118 ObjectMassHypothesis=0.511 * MeV,
119 ObjectContainerName="Electrons",
120 METContainerName="MET_Core_AntiKt4EMPFlow",
121 )
122 )
123
124 return acc
125
126

◆ EGAM5KernelCfg()

python.EGAM5.EGAM5KernelCfg ( flags,
name = "EGAM5Kernel",
** kwargs )
Configure the derivation framework driving algorithm (kernel)
for EGAM5

Definition at line 127 of file EGAM5.py.

127def EGAM5KernelCfg(flags, name="EGAM5Kernel", **kwargs):
128 """Configure the derivation framework driving algorithm (kernel)
129 for EGAM5"""
130 acc = ComponentAccumulator()
131
132 # Common augmentations
133 from DerivationFrameworkPhys.PhysCommonConfig import PhysCommonAugmentationsCfg
134
135 acc.merge(
136 PhysCommonAugmentationsCfg(
137 flags, TriggerListsHelper=kwargs["TriggerListsHelper"]
138 )
139 )
140
141 # EGAM5 augmentations
142 augmentationTools = []
143
144 # ====================================================================
145 # enu transverse mass
146 # ====================================================================
147 EGAM5enuTransverseMassTool = acc.popToolsAndMerge(
148 EGAM5enuTransverseMassToolCfg(flags)
149 )
150 acc.addPublicTool(EGAM5enuTransverseMassTool)
151 augmentationTools.append(EGAM5enuTransverseMassTool)
152
153 # ====================================================================
154 # Common calo decoration tools
155 # ====================================================================
156 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig import (
157 CaloDecoratorKernelCfg)
158 acc.merge(CaloDecoratorKernelCfg(flags))
159
160 # thinning tools
161 thinningTools = []
162 streamName = kwargs["StreamName"]
163
164 # Track thinning
165 if flags.Derivation.Egamma.doTrackThinning:
166 from DerivationFrameworkInDet.InDetToolsConfig import (
167 TrackParticleThinningCfg,
168 MuonTrackParticleThinningCfg,
169 TauTrackParticleThinningCfg,
170 )
171
172 TrackThinningKeepElectronTracks = True
173 TrackThinningKeepPhotonTracks = True
174 TrackThinningKeepAllElectronTracks = False
175 TrackThinningKeepJetTracks = False
176 TrackThinningKeepMuonTracks = False
177 TrackThinningKeepTauTracks = False
178 TrackThinningKeepPVTracks = True
179
180 # Tracks associated with Electrons
181 if TrackThinningKeepElectronTracks:
182 EGAM5ElectronTPThinningTool = (
183 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
184 name="EGAM5ElectronTPThinningTool",
185 StreamName=streamName,
186 SGKey="Electrons",
187 GSFTrackParticlesKey="GSFTrackParticles",
188 InDetTrackParticlesKey="InDetTrackParticles",
189 SelectionString="Electrons.pt > 0*GeV",
190 BestMatchOnly=True,
191 ConeSize=0.3,
192 )
193 )
194 acc.addPublicTool(EGAM5ElectronTPThinningTool)
195 thinningTools.append(EGAM5ElectronTPThinningTool)
196
197 # Tracks associated with Electrons (all tracks, large cone, for track
198 # isolation studies of the selected electrons)
199 if TrackThinningKeepAllElectronTracks:
200 EGAM5ElectronTPThinningTool2 = (
201 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
202 name="EGAM5ElectronTPThinningTool2",
203 StreamName=streamName,
204 SGKey="Electrons",
205 GSFTrackParticlesKey="GSFTrackParticles",
206 InDetTrackParticlesKey="InDetTrackParticles",
207 SelectionString="Electrons.pt > 4*GeV",
208 BestMatchOnly=False,
209 ConeSize=0.6,
210 )
211 )
212 acc.addPublicTool(EGAM5ElectronTPThinningTool2)
213 thinningTools.append(EGAM5ElectronTPThinningTool2)
214
215 # Tracks associated with Photons
216 if TrackThinningKeepPhotonTracks:
217 EGAM5PhotonTPThinningTool = (
218 CompFactory.DerivationFramework.EgammaTrackParticleThinning(
219 name="EGAM5PhotonTPThinningTool",
220 StreamName=streamName,
221 SGKey="Photons",
222 GSFTrackParticlesKey="GSFTrackParticles",
223 InDetTrackParticlesKey="InDetTrackParticles",
224 GSFConversionVerticesKey="GSFConversionVertices",
225 SelectionString="Photons.pt > 0*GeV",
226 BestMatchOnly=True,
227 ConeSize=0.3,
228 )
229 )
230 acc.addPublicTool(EGAM5PhotonTPThinningTool)
231 thinningTools.append(EGAM5PhotonTPThinningTool)
232
233 # Tracks associated with Jets
234 if TrackThinningKeepJetTracks:
235 EGAM5JetTPThinningTool = (
236 CompFactory.DerivationFramework.JetTrackParticleThinning(
237 name="EGAM5JetTPThinningTool",
238 StreamName=streamName,
239 JetKey="AntiKt4EMPFlowJets",
240 InDetTrackParticlesKey="InDetTrackParticles",
241 )
242 )
243 acc.addPublicTool(EGAM5JetTPThinningTool)
244 thinningTools.append(EGAM5JetTPThinningTool)
245
246 # Tracks associated with Muons
247 if TrackThinningKeepMuonTracks:
248 EGAM5MuonTPThinningTool = acc.getPrimaryAndMerge(
249 MuonTrackParticleThinningCfg(
250 flags,
251 name="EGAM5MuonTPThinningTool",
252 StreamName=streamName,
253 MuonKey="Muons",
254 InDetTrackParticlesKey="InDetTrackParticles",
255 )
256 )
257 thinningTools.append(EGAM5MuonTPThinningTool)
258
259 # Tracks associated with Taus
260 if TrackThinningKeepTauTracks:
261 EGAM5TauTPThinningTool = acc.getPrimaryAndMerge(
262 TauTrackParticleThinningCfg(
263 flags,
264 name="EGAM5TauTPThinningTool",
265 StreamName=streamName,
266 TauKey="TauJets",
267 ConeSize=0.6,
268 InDetTrackParticlesKey="InDetTrackParticles",
269 DoTauTracksThinning=True,
270 TauTracksKey="TauTracks",
271 )
272 )
273 thinningTools.append(EGAM5TauTPThinningTool)
274
275 # Tracks from primary vertex
276 thinning_expression = " && ".join(
277 [
278 "(InDetTrackParticles.DFCommonTightPrimary)",
279 "(abs(DFCommonInDetTrackZ0AtPV)*sin(InDetTrackParticles.theta)<3*mm)",
280 "(InDetTrackParticles.pt>10*GeV)",
281 ]
282 )
283 if TrackThinningKeepPVTracks:
284 EGAM5TPThinningTool = acc.getPrimaryAndMerge(
285 TrackParticleThinningCfg(
286 flags,
287 name="EGAM5TPThinningTool",
288 StreamName=streamName,
289 SelectionString=thinning_expression,
290 InDetTrackParticlesKey="InDetTrackParticles",
291 )
292 )
293 thinningTools.append(EGAM5TPThinningTool)
294
295 # skimming
296 skimmingTool = acc.getPrimaryAndMerge(EGAM5SkimmingToolCfg(flags))
297
298 # setup the kernel
299 acc.addEventAlgo(
300 CompFactory.DerivationFramework.DerivationKernel(
301 name,
302 SkimmingTools=[skimmingTool],
303 AugmentationTools=augmentationTools,
304 ThinningTools=thinningTools,
305 )
306 )
307
308 return acc
309
310

◆ EGAM5SkimmingToolCfg()

python.EGAM5.EGAM5SkimmingToolCfg ( flags)
Configure the EGAM5 skimming tool

Definition at line 27 of file EGAM5.py.

27def EGAM5SkimmingToolCfg(flags):
28 """Configure the EGAM5 skimming tool"""
29 acc = ComponentAccumulator()
30
31 skimmingTools = []
32
33 # 1st selection: trigger-based (WTP triggers)
34 MenuType = ""
35 if flags.Trigger.EDMVersion == 2:
36 MenuType = "Run2"
37 elif flags.Trigger.EDMVersion == 3:
38 MenuType = "Run3"
39
40 if MenuType:
41 triggers = WTnPTriggers[MenuType]
42 print("EGAM5 trigger skimming list (OR): ", triggers)
43
44 EGAM5_TriggerSkimmingTool = CompFactory.DerivationFramework.TriggerSkimmingTool(
45 name="EGAM5_TriggerSkimmingTool", TriggerListOR=triggers
46 )
47
48 acc.addPublicTool(EGAM5_TriggerSkimmingTool)
49 skimmingTools += [EGAM5_TriggerSkimmingTool]
50
51 # 2nd selection: off-line, based on mT(enu)
52 expression2 = "count(EGAM5_ENuTransverseMass > 40*GeV)>=1"
53 print("EGAM5 offline skimming expression: ", expression2)
54
55 from DerivationFrameworkTools.DerivationFrameworkToolsConfig import (
56 xAODStringSkimmingToolCfg)
57 EGAM5_OfflineSkimmingTool = acc.getPrimaryAndMerge(xAODStringSkimmingToolCfg(
58 flags, name = "EGAM5_OfflineSkimmingTool", expression = expression2))
59 skimmingTools += [EGAM5_OfflineSkimmingTool]
60
61 # 3rd selection: mix of off-line and on-line criteria
62 if flags.Trigger.EDMVersion >=0:
63 expression3a = " || ".join(
64 [
65 "HLT_e60_lhloose_xe60noL1",
66 "HLT_e120_lhloose",
67 "HLT_j80_xe80",
68 "HLT_xe70",
69 "HLT_xe80_tc_lcw_L1XE50",
70 "HLT_xe90_mht_L1XE50",
71 "HLT_xe90_tc_lcw_wEFMu_L1XE50",
72 "HLT_xe90_mht_wEFMu_L1XE50",
73 ]
74 )
75 expression3b = "count(Electrons.pt > 14.5*GeV) >= 1"
76 expression3 = "( " + expression3a + " ) && ( " + expression3b + " )"
77 print("EGAM5 mixed offline-online skimming expression: ", expression3)
78
79 EGAM5_OnlineOfflineSkimmingTool = acc.getPrimaryAndMerge(
80 xAODStringSkimmingToolCfg(
81 flags, name = "EGAM5_OnlineOfflineSkimmingTool",
82 expression = expression3))
83 skimmingTools += [EGAM5_OnlineOfflineSkimmingTool]
84
85 # do the OR of previous selections
86 print("EGAM5 skimming is logical OR of previous selections")
87 EGAM5_SkimmingTool = CompFactory.DerivationFramework.FilterCombinationOR(
88 name="EGAM5_SkimmingTool",
89 FilterList=skimmingTools
90 )
91
92 acc.addPublicTool(EGAM5_SkimmingTool, primary=True)
93
94 return acc
95
96