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

Functions

 EGammaCommonCfg (flags)

Function Documentation

◆ EGammaCommonCfg()

python.EGammaCommonConfig.EGammaCommonCfg ( flags)
Main config method for e-gamma decorations

Definition at line 15 of file EGammaCommonConfig.py.

15def EGammaCommonCfg(flags):
16 """Main config method for e-gamma decorations"""
17
18 acc = ComponentAccumulator()
19
20 includeFwdElectrons = "ForwardElectrons" in flags.Input.Collections
21
22 # ====================================================================
23 # PHOTON ETA (=ETA2), ET (=E/COSH(ETA2))
24 # ====================================================================
25 from DerivationFrameworkEGamma.EGammaToolsConfig import PhotonsDirectionToolCfg
26
27 DFCommonPhotonsDirection = acc.addPublicTool(acc.popToolsAndMerge(
28 PhotonsDirectionToolCfg(
29 flags,
30 name="DFCommonPhotonsDirection",
31 EtaSGEntry="DFCommonPhotons_eta",
32 PhiSGEntry="DFCommonPhotons_phi",
33 EtSGEntry="DFCommonPhotons_et",
34 )
35 ))
36
37 # ====================================================================
38 # SHOWER SHAPE CORRECTIONS IN MC
39 # TUNE27: e FUDGE FACTORS RUN2 FULL DATA, derived with rel 22.2
40 # TUNE25: gamma FUDGE FACTORS RUN2 FULL DATA, derived with or 21.2
41 # AF3 is tuned to FullSim, so same FFs can be used for AF3 and FS
42 # ====================================================================
43 isMC = flags.Input.isMC
44 isFullSim = False
45 if isMC:
46 isFullSim = flags.Sim.ISF.Simulator.isFullSim()
47
48 print("EGammaCommon: isMC = ", isMC)
49 if isMC:
50 print("EGammaCommon: isFullSim = ", isFullSim)
51
52 if isMC:
53 from EGammaVariableCorrection.EGammaVariableCorrectionConfig import (
54 ElectronVariableCorrectionToolCfg,
55 PhotonVariableCorrectionToolCfg,
56 )
57
58 ElectronVariableCorrectionTool = acc.popToolsAndMerge(
59 ElectronVariableCorrectionToolCfg(flags)
60 )
61 acc.addPublicTool(ElectronVariableCorrectionTool)
62
63 PhotonVariableCorrectionTool = acc.popToolsAndMerge(
64 PhotonVariableCorrectionToolCfg(flags)
65 )
66 acc.addPublicTool(PhotonVariableCorrectionTool)
67
68 # ====================================================================
69 # ELECTRON LH SELECTORS
70 # see Reconstruction/egamma/egammaTools/python/EMPIDBuilderBase.py
71 # on how to configure the selectors
72 # ====================================================================
73 from ROOT import LikeEnum
74
75 from ElectronPhotonSelectorTools.AsgElectronLikelihoodToolsConfig import (
76 AsgElectronLikelihoodToolCfg,
77 )
78 from ElectronPhotonSelectorTools.ElectronLikelihoodToolMapping import electronLHmenu
79
80 lhMenu = electronLHmenu.offlineMC21
81 from AthenaConfiguration.Enums import LHCPeriod
82 if flags.GeoModel.Run is LHCPeriod.Run2:
83 lhMenu = electronLHmenu.offlineMC20
84
85 # Very Loose
86 ElectronLHSelectorVeryLoose = acc.popToolsAndMerge(
87 AsgElectronLikelihoodToolCfg(
88 flags,
89 name="ElectronLHSelectorVeryLoose",
90 quality=LikeEnum.VeryLoose,
91 menu=lhMenu,
92 )
93 )
94 ElectronLHSelectorVeryLoose.primaryVertexContainer = "PrimaryVertices"
95 acc.addPublicTool(ElectronLHSelectorVeryLoose)
96
97 # Loose
98 ElectronLHSelectorLoose = acc.popToolsAndMerge(
99 AsgElectronLikelihoodToolCfg(
100 flags,
101 name="ElectronLHSelectorLoose",
102 quality=LikeEnum.Loose,
103 menu=lhMenu,
104 )
105 )
106 ElectronLHSelectorLoose.primaryVertexContainer = "PrimaryVertices"
107 acc.addPublicTool(ElectronLHSelectorLoose)
108
109 # LooseBL
110 ElectronLHSelectorLooseBL = acc.popToolsAndMerge(
111 AsgElectronLikelihoodToolCfg(
112 flags,
113 name="ElectronLHSelectorLooseBL",
114 quality=LikeEnum.LooseBL,
115 menu=lhMenu,
116 )
117 )
118 ElectronLHSelectorLooseBL.primaryVertexContainer = "PrimaryVertices"
119 acc.addPublicTool(ElectronLHSelectorLooseBL)
120
121 # Medium
122 ElectronLHSelectorMedium = acc.popToolsAndMerge(
123 AsgElectronLikelihoodToolCfg(
124 flags,
125 name="ElectronLHSelectorMedium",
126 quality=LikeEnum.Medium,
127 menu=lhMenu,
128 )
129 )
130 ElectronLHSelectorMedium.primaryVertexContainer = "PrimaryVertices"
131 acc.addPublicTool(ElectronLHSelectorMedium)
132
133 # Tight
134 ElectronLHSelectorTight = acc.popToolsAndMerge(
135 AsgElectronLikelihoodToolCfg(
136 flags,
137 name="ElectronLHSelectorTight",
138 quality=LikeEnum.Tight,
139 menu=lhMenu,
140 )
141 )
142 ElectronLHSelectorTight.primaryVertexContainer = "PrimaryVertices"
143 acc.addPublicTool(ElectronLHSelectorTight)
144
145 # ====================================================================
146 # ELECTRON DNN SELECTORS
147 # ====================================================================
148 from ElectronPhotonSelectorTools.AsgElectronSelectorToolConfig import (
149 AsgElectronSelectorToolCfg,
150 )
151
152 # Loose
153 ElectronDNNSelectorLoose = acc.popToolsAndMerge(
154 AsgElectronSelectorToolCfg(
155 flags,
156 name="ElectronDNNSelectorLoose",
157 WorkingPoint="LooseDNNElectron",
158 )
159 )
160 acc.addPublicTool(ElectronDNNSelectorLoose)
161
162 # Medium
163 ElectronDNNSelectorMedium = acc.popToolsAndMerge(
164 AsgElectronSelectorToolCfg(
165 flags,
166 name="ElectronDNNSelectorMedium",
167 WorkingPoint="MediumDNNElectron",
168 )
169 )
170 acc.addPublicTool(ElectronDNNSelectorMedium)
171
172 # Tight
173 ElectronDNNSelectorTight = acc.popToolsAndMerge(
174 AsgElectronSelectorToolCfg(
175 flags,
176 name="ElectronDNNSelectorTight",
177 WorkingPoint="TightDNNElectron",
178 )
179 )
180 acc.addPublicTool(ElectronDNNSelectorTight)
181
182 # ====================================================================
183 # ELECTRON DNN SELECTORS WITHOUT CF REJECTION
184 # ====================================================================
185 # Very-Loose 97%
186 ElectronDNNSelectorVeryLooseNoCF97 = acc.popToolsAndMerge(
187 AsgElectronSelectorToolCfg(
188 flags,
189 name="ElectronDNNSelectorVeryLooseNoCF97",
190 WorkingPoint="VeryLooseNoCF97DNNElectron",
191 )
192 )
193 acc.addPublicTool(ElectronDNNSelectorVeryLooseNoCF97)
194
195 # Loose
196 ElectronDNNSelectorLooseNoCF = acc.popToolsAndMerge(
197 AsgElectronSelectorToolCfg(
198 flags,
199 name="ElectronDNNSelectorLooseNoCF",
200 WorkingPoint="LooseNoCFDNNElectron",
201 )
202 )
203 acc.addPublicTool(ElectronDNNSelectorLooseNoCF)
204
205 # Medium
206 ElectronDNNSelectorMediumNoCF = acc.popToolsAndMerge(
207 AsgElectronSelectorToolCfg(
208 flags,
209 name="ElectronDNNSelectorMediumNoCF",
210 WorkingPoint="MediumNoCFDNNElectron",
211 )
212 )
213 acc.addPublicTool(ElectronDNNSelectorMediumNoCF)
214
215 # Tight
216 ElectronDNNSelectorTightNoCF = acc.popToolsAndMerge(
217 AsgElectronSelectorToolCfg(
218 flags,
219 name="ElectronDNNSelectorTightNoCF",
220 WorkingPoint="TightNoCFDNNElectron",
221 )
222 )
223 acc.addPublicTool(ElectronDNNSelectorTightNoCF)
224
225 # ====================================================================
226 # ELECTRON CHARGE SELECTION
227 # ====================================================================
228 if flags.Derivation.Egamma.addECIDS:
229 from ElectronPhotonSelectorTools.AsgElectronChargeIDSelectorToolConfig import (
230 AsgElectronChargeIDSelectorToolCfg,
231 )
232
233 ElectronChargeIDSelector = acc.popToolsAndMerge(
234 AsgElectronChargeIDSelectorToolCfg(
235 flags, name="ElectronChargeIDSelectorLoose"
236 )
237 )
238 ElectronChargeIDSelector.primaryVertexContainer = "PrimaryVertices"
239 ElectronChargeIDSelector.TrainingFile = (
240 "ElectronPhotonSelectorTools/ChargeID/ECIDS_20180731rel21Summer2018.root"
241 )
242 acc.addPublicTool(ElectronChargeIDSelector)
243
244 # ====================================================================
245 # FWD ELECTRON LH SELECTORS
246 # ====================================================================
247 if includeFwdElectrons:
248 from ElectronPhotonSelectorTools.AsgForwardElectronLikelihoodToolConfig import (
249 AsgForwardElectronLikelihoodToolCfg,
250 )
251
252 ForwardElectronLHSelectorLoose = acc.popToolsAndMerge(
253 AsgForwardElectronLikelihoodToolCfg(
254 flags,
255 name="ForwardElectronLHSelectorLoose",
256 WorkingPoint="LooseLHForwardElectron",
257 )
258 )
259 acc.addPublicTool(ForwardElectronLHSelectorLoose)
260
261 ForwardElectronLHSelectorMedium = acc.popToolsAndMerge(
262 AsgForwardElectronLikelihoodToolCfg(
263 flags,
264 name="ForwardElectronLHSelectorMedium",
265 WorkingPoint="MediumLHForwardElectron",
266 )
267 )
268 acc.addPublicTool(ForwardElectronLHSelectorMedium)
269
270 ForwardElectronLHSelectorTight = acc.popToolsAndMerge(
271 AsgForwardElectronLikelihoodToolCfg(
272 flags,
273 name="ForwardElectronLHSelectorTight",
274 WorkingPoint="TightLHForwardElectron",
275 )
276 )
277 acc.addPublicTool(ForwardElectronLHSelectorTight)
278
279 # ====================================================================
280 # PHOTON SELECTION (loose and tight cut-based)
281 # ====================================================================
282 from ROOT import egammaPID
283
284 from ElectronPhotonSelectorTools.AsgPhotonIsEMSelectorsConfig import (
285 AsgPhotonIsEMSelectorCfg,
286 )
287 from ElectronPhotonSelectorTools.PhotonIsEMSelectorMapping import photonPIDmenu
288 pidMenu = photonPIDmenu.offlineMC21
289 if flags.GeoModel.Run is LHCPeriod.Run2:
290 pidMenu = photonPIDmenu.offlineMC20
291
292 # Loose
293 PhotonIsEMSelectorLoose = acc.popToolsAndMerge(
294 AsgPhotonIsEMSelectorCfg(
295 flags,
296 name="PhotonIsEMSelectorLoose",
297 quality=egammaPID.PhotonIDLoose,
298 menu=pidMenu
299 )
300 )
301 acc.addPublicTool(PhotonIsEMSelectorLoose)
302
303 # Medium
304 PhotonIsEMSelectorMedium = acc.popToolsAndMerge(
305 AsgPhotonIsEMSelectorCfg(
306 flags,
307 name="PhotonIsEMSelectorMedium",
308 quality=egammaPID.PhotonIDMedium,
309 menu=pidMenu
310 )
311 )
312 acc.addPublicTool(PhotonIsEMSelectorMedium)
313
314 # Tight
315 PhotonIsEMSelectorTight = acc.popToolsAndMerge(
316 AsgPhotonIsEMSelectorCfg(
317 flags,
318 name="PhotonIsEMSelectorTight",
319 quality=egammaPID.PhotonIDTight,
320 menu=pidMenu
321 )
322 )
323 acc.addPublicTool(PhotonIsEMSelectorTight)
324
325
326 # ====================================================================
327 # RECTANGULAR CLUSTER TOOLS
328 # ====================================================================
329
330 from egammaCaloTools.egammaCaloToolsConfig import CaloFillRectangularClusterCfg
331
332 EGAMCOM_caloFillRect55 = acc.popToolsAndMerge(
333 CaloFillRectangularClusterCfg(
334 flags,
335 name="EGAMCOMCaloFillRectangularCluster55",
336 cells_name="AllCalo",
337 eta_size=5,
338 phi_size=5,
339 fill_cluster=True,
340 )
341 )
342 acc.addPublicTool(EGAMCOM_caloFillRect55)
343
344 EGAMCOM_caloFillRect35 = acc.popToolsAndMerge(
345 CaloFillRectangularClusterCfg(
346 flags,
347 name="EGAMCOMCaloFillRectangularCluster35",
348 cells_name="AllCalo",
349 eta_size=3,
350 phi_size=5,
351 fill_cluster=True,
352 )
353 )
354 acc.addPublicTool(EGAMCOM_caloFillRect35)
355
356 EGAMCOM_caloFillRect37 = acc.popToolsAndMerge(
357 CaloFillRectangularClusterCfg(
358 flags,
359 name="EGAMCOMCaloFillRectangularCluster37",
360 cells_name="AllCalo",
361 eta_size=3,
362 phi_size=7,
363 fill_cluster=True,
364 )
365 )
366 acc.addPublicTool(EGAMCOM_caloFillRect37)
367
368 EGAMCOM_caloFillRect711 = acc.popToolsAndMerge(
369 CaloFillRectangularClusterCfg(
370 flags,
371 name="EGAMCOMCaloFillRectangularCluster711",
372 cells_name="AllCalo",
373 eta_size=7,
374 phi_size=11,
375 fill_cluster=True,
376 )
377 )
378 acc.addPublicTool(EGAMCOM_caloFillRect711)
379
380 # ====================================================================
381 # AUGMENTATION TOOLS
382 # ====================================================================
383 from DerivationFrameworkEGamma.EGammaToolsConfig import EGSelectionToolWrapperCfg
384 from DerivationFrameworkEGamma.EGammaToolsConfig import (
385 EGElectronLikelihoodToolWrapperCfg,
386 )
387
388 # Note: LH selectors don't need fudging since the LH is tuned to data
389
390 # decorate electrons with the output of LH very loose
391 ElectronPassLHVeryLoose = acc.addPublicTool(acc.popToolsAndMerge(EGElectronLikelihoodToolWrapperCfg(
392 flags,
393 name="ElectronPassLHVeryLoose",
394 EGammaElectronLikelihoodTool=ElectronLHSelectorVeryLoose,
395 EGammaFudgeMCTool=None,
396 CutType="",
397 StoreGateEntryName="DFCommonElectronsLHVeryLoose",
398 ContainerName="Electrons",
399 StoreTResult=False,
400 )
401 ))
402
403 # decorate electrons with the output of LH loose
404 ElectronPassLHLoose = acc.addPublicTool(acc.popToolsAndMerge(EGElectronLikelihoodToolWrapperCfg(
405 flags,
406 name="ElectronPassLHLoose",
407 EGammaElectronLikelihoodTool=ElectronLHSelectorLoose,
408 EGammaFudgeMCTool=None,
409 CutType="",
410 StoreGateEntryName="DFCommonElectronsLHLoose",
411 ContainerName="Electrons",
412 StoreTResult=False,
413 )
414 ))
415
416 # decorate electrons with the output of LH loose+BL
417 ElectronPassLHLooseBL = acc.addPublicTool(acc.popToolsAndMerge(EGElectronLikelihoodToolWrapperCfg(
418 flags,
419 name="ElectronPassLHLooseBL",
420 EGammaElectronLikelihoodTool=ElectronLHSelectorLooseBL,
421 EGammaFudgeMCTool=None,
422 CutType="",
423 StoreGateEntryName="DFCommonElectronsLHLooseBL",
424 ContainerName="Electrons",
425 StoreTResult=False,
426 )
427 ))
428
429 # decorate electrons with the output of LH medium
430 ElectronPassLHMedium = acc.addPublicTool(acc.popToolsAndMerge(EGElectronLikelihoodToolWrapperCfg(
431 flags,
432 name="ElectronPassLHMedium",
433 EGammaElectronLikelihoodTool=ElectronLHSelectorMedium,
434 EGammaFudgeMCTool=None,
435 CutType="",
436 StoreGateEntryName="DFCommonElectronsLHMedium",
437 ContainerName="Electrons",
438 StoreTResult=False,
439 )
440 ))
441
442 # decorate electrons with the output of LH tight
443 ElectronPassLHTight = acc.addPublicTool(acc.popToolsAndMerge(EGElectronLikelihoodToolWrapperCfg(
444 flags,
445 name="ElectronPassLHTight",
446 EGammaElectronLikelihoodTool=ElectronLHSelectorTight,
447 EGammaFudgeMCTool=None,
448 CutType="",
449 StoreGateEntryName="DFCommonElectronsLHTight",
450 ContainerName="Electrons",
451 StoreTResult=False,
452 )
453 ))
454
455 # decorate electrons with the output of DNN Loose
456 ElectronPassDNNLoose = acc.addPublicTool(acc.popToolsAndMerge(EGElectronLikelihoodToolWrapperCfg(
457 flags,
458 name="ElectronPassDNNLoose",
459 EGammaElectronLikelihoodTool=ElectronDNNSelectorLoose,
460 EGammaFudgeMCTool=(ElectronVariableCorrectionTool if isMC else None),
461 CutType="",
462 StoreGateEntryName="DFCommonElectronsDNNLoose",
463 ContainerName="Electrons",
464 StoreTResult=False,
465 StoreGateEntryMultipleNames=[
466 "DFCommonElectronsDNN_pel",
467 "DFCommonElectronsDNN_pcf",
468 "DFCommonElectronsDNN_ppc",
469 "DFCommonElectronsDNN_phf",
470 "DFCommonElectronsDNN_ple",
471 "DFCommonElectronsDNN_plh",
472 ],
473 StoreMultipleOutputs=True,
474 )
475 ))
476
477 # decorate electrons with the output of DNN Medium
478 ElectronPassDNNMedium = acc.addPublicTool(acc.popToolsAndMerge(EGElectronLikelihoodToolWrapperCfg(
479 flags,
480 name="ElectronPassDNNMedium",
481 EGammaElectronLikelihoodTool=ElectronDNNSelectorMedium,
482 EGammaFudgeMCTool=(ElectronVariableCorrectionTool if isMC else None),
483 CutType="",
484 StoreGateEntryName="DFCommonElectronsDNNMedium",
485 ContainerName="Electrons",
486 StoreTResult=False,
487 )
488 ))
489
490 # decorate electrons with the output of DNN Tight
491 ElectronPassDNNTight = acc.addPublicTool(acc.popToolsAndMerge(EGElectronLikelihoodToolWrapperCfg(
492 flags,
493 name="ElectronPassDNNTight",
494 EGammaElectronLikelihoodTool=ElectronDNNSelectorTight,
495 EGammaFudgeMCTool=(ElectronVariableCorrectionTool if isMC else None),
496 CutType="",
497 StoreGateEntryName="DFCommonElectronsDNNTight",
498 ContainerName="Electrons",
499 StoreTResult=False,
500 )
501 ))
502
503 # decorate electrons with the output of DNN VeryLoose97 without CF
504 ElectronPassDNNVeryLooseNoCF97 = acc.addPublicTool(acc.popToolsAndMerge(EGElectronLikelihoodToolWrapperCfg(
505 flags,
506 name="ElectronPassDNNVeryLooseNoCF97",
507 EGammaElectronLikelihoodTool=ElectronDNNSelectorVeryLooseNoCF97,
508 EGammaFudgeMCTool=(ElectronVariableCorrectionTool if isMC else None),
509 CutType="",
510 StoreGateEntryName="DFCommonElectronsDNNVeryLooseNoCF97",
511 ContainerName="Electrons",
512 StoreTResult=False,
513 )
514 ))
515 # decorate electrons with the output of DNN Loose without CF
516 ElectronPassDNNLooseNoCF = acc.addPublicTool(acc.popToolsAndMerge(EGElectronLikelihoodToolWrapperCfg(
517 flags,
518 name="ElectronPassDNNLooseNoCF",
519 EGammaElectronLikelihoodTool=ElectronDNNSelectorLooseNoCF,
520 EGammaFudgeMCTool=(ElectronVariableCorrectionTool if isMC else None),
521 CutType="",
522 StoreGateEntryName="DFCommonElectronsDNNLooseNoCF",
523 ContainerName="Electrons",
524 StoreTResult=False,
525 )
526 ))
527
528 # decorate electrons with the output of DNN Medium without CF
529 ElectronPassDNNMediumNoCF = acc.addPublicTool(acc.popToolsAndMerge(EGElectronLikelihoodToolWrapperCfg(
530 flags,
531 name="ElectronPassDNNMediumNoCF",
532 EGammaElectronLikelihoodTool=ElectronDNNSelectorMediumNoCF,
533 EGammaFudgeMCTool=(ElectronVariableCorrectionTool if isMC else None),
534 CutType="",
535 StoreGateEntryName="DFCommonElectronsDNNMediumNoCF",
536 ContainerName="Electrons",
537 StoreTResult=False,
538 )
539 ))
540
541 # decorate electrons with the output of DNN Tight without CF
542 ElectronPassDNNTightNoCF = acc.addPublicTool(acc.popToolsAndMerge(EGElectronLikelihoodToolWrapperCfg(
543 flags,
544 name="ElectronPassDNNTightNoCF",
545 EGammaElectronLikelihoodTool=ElectronDNNSelectorTightNoCF,
546 EGammaFudgeMCTool=(ElectronVariableCorrectionTool if isMC else None),
547 CutType="",
548 StoreGateEntryName="DFCommonElectronsDNNTightNoCF",
549 ContainerName="Electrons",
550 StoreTResult=False,
551 )
552 ))
553
554 # decorate electrons with the output of ECIDS
555 if flags.Derivation.Egamma.addECIDS:
556 ElectronPassECIDS = acc.addPublicTool(acc.popToolsAndMerge(EGElectronLikelihoodToolWrapperCfg(
557 flags,
558 name="ElectronPassECIDS",
559 EGammaElectronLikelihoodTool=ElectronChargeIDSelector,
560 EGammaFudgeMCTool=None,
561 CutType="",
562 StoreGateEntryName="DFCommonElectronsECIDS",
563 ContainerName="Electrons",
564 StoreTResult=True,
565 )
566 ))
567
568 if includeFwdElectrons:
569 # decorate forward electrons with the output of LH loose
570 ForwardElectronPassLHLoose = acc.addPublicTool(acc.popToolsAndMerge(EGElectronLikelihoodToolWrapperCfg(
571 flags,
572 name="ForwardElectronPassLHLoose",
573 EGammaElectronLikelihoodTool=ForwardElectronLHSelectorLoose,
574 EGammaFudgeMCTool=None,
575 CutType="",
576 StoreGateEntryName="DFCommonForwardElectronsLHLoose",
577 ContainerName="ForwardElectrons",
578 )
579 ))
580
581 # decorate forward electrons with the output of LH medium
582 ForwardElectronPassLHMedium = acc.addPublicTool(acc.popToolsAndMerge(EGElectronLikelihoodToolWrapperCfg(
583 flags,
584 name="ForwardElectronPassLHMedium",
585 EGammaElectronLikelihoodTool=ForwardElectronLHSelectorMedium,
586 EGammaFudgeMCTool=None,
587 CutType="",
588 StoreGateEntryName="DFCommonForwardElectronsLHMedium",
589 ContainerName="ForwardElectrons",
590 )
591 ))
592
593 # decorate forward electrons with the output of LH tight
594 ForwardElectronPassLHTight = acc.addPublicTool(acc.popToolsAndMerge(EGElectronLikelihoodToolWrapperCfg(
595 flags,
596 name="ForwardElectronPassLHTight",
597 EGammaElectronLikelihoodTool=ForwardElectronLHSelectorTight,
598 EGammaFudgeMCTool=None,
599 CutType="",
600 StoreGateEntryName="DFCommonForwardElectronsLHTight",
601 ContainerName="ForwardElectrons",
602 )
603 ))
604
605 # decorate photons with the output of IsEM loose
606 # on MC, fudge the shower shapes before computing the ID (but the
607 # original shower shapes are not overridden)
608 PhotonPassIsEMLoose = acc.addPublicTool(acc.popToolsAndMerge(
609 EGSelectionToolWrapperCfg(
610 flags,
611 name="PhotonPassIsEMLoose",
612 EGammaSelectionTool=PhotonIsEMSelectorLoose,
613 EGammaFudgeMCTool=(PhotonVariableCorrectionTool if isFullSim else None),
614 CutType="",
615 StoreGateEntryName="DFCommonPhotonsIsEMLoose",
616 ContainerName="Photons",
617 )
618 ))
619
620 # decorate photons with the output of IsEM medium
621 # on MC, fudge the shower shapes before computing the ID (but the
622 # original shower shapes are not overridden)
623 PhotonPassIsEMMedium = acc.addPublicTool(acc.popToolsAndMerge(
624 EGSelectionToolWrapperCfg(
625 flags,
626 name="PhotonPassIsEMMedium",
627 EGammaSelectionTool=PhotonIsEMSelectorMedium,
628 EGammaFudgeMCTool=(PhotonVariableCorrectionTool if isFullSim else None),
629 CutType="",
630 StoreGateEntryName="DFCommonPhotonsIsEMMedium",
631 ContainerName="Photons",
632 )
633 ))
634
635 # decorate photons with the output of IsEM tight
636 # on full-sim MC, fudge the shower shapes before computing the ID
637 # (but the original shower shapes are not overridden)
638 PhotonPassIsEMTight = acc.addPublicTool(acc.popToolsAndMerge(
639 EGSelectionToolWrapperCfg(
640 flags,
641 name="PhotonPassIsEMTight",
642 EGammaSelectionTool=PhotonIsEMSelectorTight,
643 EGammaFudgeMCTool=(PhotonVariableCorrectionTool if isFullSim else None),
644 CutType="",
645 StoreGateEntryName="DFCommonPhotonsIsEMTight",
646 ContainerName="Photons",
647 )
648 ))
649
650
651 # decorate photons with the photon cleaning flags
652 # on MC, fudge the shower shapes before computing the flags
653 from DerivationFrameworkEGamma.EGammaToolsConfig import EGPhotonCleaningWrapperCfg
654
655 PhotonPassCleaning = acc.addPublicTool(acc.popToolsAndMerge(
656 EGPhotonCleaningWrapperCfg(
657 flags,
658 name="PhotonPassCleaning",
659 EGammaFudgeMCTool=(PhotonVariableCorrectionTool if isFullSim else None),
660 StoreGateEntryName="DFCommonPhotonsCleaning",
661 ContainerName="Photons",
662 )
663 ))
664
665 # decorate some electrons with an additional ambiguity flag
666 # against internal and early material conversion
667 from DerivationFrameworkEGamma.EGammaToolsConfig import EGElectronAmbiguityToolCfg
668
669 ElectronAmbiguity = acc.addPublicTool(acc.popToolsAndMerge(
670 EGElectronAmbiguityToolCfg(
671 flags,
672 name="ElectronAdditionnalAmbiguity",
673 isMC=flags.Input.isMC,
674 )
675 ))
676
677 # list of all the decorators so far
678 EGAugmentationTools = [
679 DFCommonPhotonsDirection,
680 ElectronPassLHVeryLoose,
681 ElectronPassLHLoose,
682 ElectronPassLHLooseBL,
683 ElectronPassLHMedium,
684 ElectronPassLHTight,
685 ElectronPassDNNLoose,
686 ElectronPassDNNMedium,
687 ElectronPassDNNTight,
688 ElectronPassDNNVeryLooseNoCF97,
689 ElectronPassDNNLooseNoCF,
690 ElectronPassDNNMediumNoCF,
691 ElectronPassDNNTightNoCF,
692 PhotonPassIsEMLoose,
693 PhotonPassIsEMMedium,
694 PhotonPassIsEMTight,
695 PhotonPassCleaning,
696 ElectronAmbiguity,
697 ]
698
699 if flags.Derivation.Egamma.addECIDS:
700 EGAugmentationTools.extend([ElectronPassECIDS])
701
702 if includeFwdElectrons:
703 EGAugmentationTools.extend(
704 [
705 ForwardElectronPassLHLoose,
706 ForwardElectronPassLHMedium,
707 ForwardElectronPassLHTight,
708 ]
709 )
710
711 if flags.Derivation.Egamma.addMissingCellInfo:
712 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig import (
713 EgammaCoreCellRecoveryCfg,
714 )
715
716 CoreCellRecoveryTool = acc.popToolsAndMerge(
717 EgammaCoreCellRecoveryCfg(flags)
718 )
719 acc.addPublicTool(CoreCellRecoveryTool)
720 EGAugmentationTools.append(CoreCellRecoveryTool)
721
722 # ==================================================
723 # Truth Related tools
724 if flags.Input.isMC:
725 # Decorate Electron with bkg electron type/origin
726 from DerivationFrameworkEGamma.EGammaToolsConfig import (
727 BkgElectronClassificationCfg,
728 )
729
730 BkgElectronClassificationTool = acc.addPublicTool(acc.popToolsAndMerge(
731 BkgElectronClassificationCfg(
732 flags,
733 name="BkgElectronClassificationTool"
734 )
735 ))
736 EGAugmentationTools.append(BkgElectronClassificationTool)
737
738 # Decorate egammaTruthParticles with truth-particle-level etcone20,30,40
739 from DerivationFrameworkMCTruth.TruthDerivationToolsConfig import (
740 TruthIsolationToolCfg,
741 )
742
743 TruthEgetIsolationTool = acc.getPrimaryAndMerge(
744 TruthIsolationToolCfg(
745 flags,
746 name="TruthEgetIsolationTool",
747 isoParticlesKey="egammaTruthParticles",
748 allParticlesKey="TruthParticles",
749 particleIDsToCalculate=[-11, 11, 22],
750 IsolationConeSizes=[0.2, 0.3, 0.4],
751 excludeIDsFromCone=[-16, -14, -13, -12, 12, 13, 14, 16],
752 IsolationVarNamePrefix="etcone",
753 ChargedParticlesOnly=False,
754 )
755 )
756 EGAugmentationTools.append(TruthEgetIsolationTool)
757
758 # Decorate egammaTruthParticles with truth-particle-level ptcone20,30,40
759 TruthEgptIsolationTool = acc.getPrimaryAndMerge(
760 TruthIsolationToolCfg(
761 flags,
762 name="TruthEgptIsolationTool",
763 isoParticlesKey="egammaTruthParticles",
764 allParticlesKey="TruthParticles",
765 particleIDsToCalculate=[-11, 11, 22],
766 IsolationConeSizes=[0.2, 0.3, 0.4],
767 IsolationVarNamePrefix="ptcone",
768 ChargedParticlesOnly=True,
769 )
770 )
771 EGAugmentationTools.append(TruthEgptIsolationTool)
772
773 # Compute the truth-particle-level energy density in the central eta region
774 from EventShapeTools.EventDensityConfig import configEventDensityTool
775 from JetRecConfig.JetRecConfig import (
776 getInputAlgs,
777 getConstitPJGAlg,
778 reOrderAlgs,
779 )
780 from JetRecConfig.StandardJetConstits import stdConstitDic as cst
781
782 # Schedule PseudoJetTruth
783 constit_algs = getInputAlgs(cst.Truth, flags=flags)
784 constit_algs, ca = reOrderAlgs([a for a in constit_algs if a is not None])
785 acc.merge(ca)
786 for a in constit_algs:
787 acc.addEventAlgo(a)
788 constitPJAlg = getConstitPJGAlg(cst.Truth, suffix=None)
789 acc.addEventAlgo(constitPJAlg)
790
791 tc = configEventDensityTool(
792 "EDTruthCentralTool",
793 cst.Truth,
794 0.5,
795 AbsRapidityMin=0.0,
796 AbsRapidityMax=1.5,
797 OutputContainer="TruthIsoCentralEventShape",
798 OutputLevel=3,
799 )
800 acc.addPublicTool(tc)
801
802 # Compute the truth-particle-level energy density in the forward eta region
803 tf = configEventDensityTool(
804 "EDTruthForwardTool",
805 cst.Truth,
806 0.5,
807 AbsRapidityMin=1.5,
808 AbsRapidityMax=3.0,
809 OutputContainer="TruthIsoForwardEventShape",
810 OutputLevel=3,
811 )
812 acc.addPublicTool(tf)
813
814 acc.addEventAlgo(
815 CompFactory.EventDensityAthAlg("EDTruthCentralAlg", EventDensityTool=tc)
816 )
817 acc.addEventAlgo(
818 CompFactory.EventDensityAthAlg("EDTruthForwardAlg", EventDensityTool=tf)
819 )
820
821 # =======================================
822 # CREATE THE DERIVATION KERNEL ALGORITHM
823 # =======================================
824
825 acc.addEventAlgo(
826 CompFactory.DerivationFramework.CommonAugmentation(
827 "EGammaCommonKernel", AugmentationTools=EGAugmentationTools
828 )
829 )
830
831 # =======================================
832 # ADD TOOLS : custom electron, photon and muon track isolation
833 # =======================================
834 from IsolationAlgs.DerivationTrackIsoConfig import DerivationTrackIsoCfg
835
836 acc.merge(DerivationTrackIsoCfg(flags, object_types=("Electrons", "Muons")))
837
838 hasFlowObject = (
839 "JetETMissChargedParticleFlowObjects" in flags.Input.Collections
840 and "JetETMissNeutralParticleFlowObjects" in flags.Input.Collections
841 )
842 if hasFlowObject:
843 from IsolationAlgs.IsolationSteeringDerivConfig import IsolationSteeringDerivCfg
844
845 acc.merge(IsolationSteeringDerivCfg(flags))
846
847 return acc
void print(char *figname, TCanvas *c1)