ATLAS Offline Software
Functions
python.EGammaCommonConfig Namespace Reference

Functions

def EGammaCommonCfg (flags)
 

Function Documentation

◆ EGammaCommonCfg()

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

Definition at line 15 of file EGammaCommonConfig.py.

15 def 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(
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(
60  )
61  acc.addPublicTool(ElectronVariableCorrectionTool)
62 
63  PhotonVariableCorrectionTool = acc.popToolsAndMerge(
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(
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(
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(
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(
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(
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(
155  flags,
156  name="ElectronDNNSelectorLoose",
157  WorkingPoint="LooseDNNElectron",
158  )
159  )
160  acc.addPublicTool(ElectronDNNSelectorLoose)
161 
162  # Medium
163  ElectronDNNSelectorMedium = acc.popToolsAndMerge(
165  flags,
166  name="ElectronDNNSelectorMedium",
167  WorkingPoint="MediumDNNElectron",
168  )
169  )
170  acc.addPublicTool(ElectronDNNSelectorMedium)
171 
172  # Tight
173  ElectronDNNSelectorTight = acc.popToolsAndMerge(
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(
188  flags,
189  name="ElectronDNNSelectorVeryLooseNoCF97",
190  WorkingPoint="VeryLooseNoCF97DNNElectron",
191  )
192  )
193  acc.addPublicTool(ElectronDNNSelectorVeryLooseNoCF97)
194 
195  # Loose
196  ElectronDNNSelectorLooseNoCF = acc.popToolsAndMerge(
198  flags,
199  name="ElectronDNNSelectorLooseNoCF",
200  WorkingPoint="LooseNoCFDNNElectron",
201  )
202  )
203  acc.addPublicTool(ElectronDNNSelectorLooseNoCF)
204 
205  # Medium
206  ElectronDNNSelectorMediumNoCF = acc.popToolsAndMerge(
208  flags,
209  name="ElectronDNNSelectorMediumNoCF",
210  WorkingPoint="MediumNoCFDNNElectron",
211  )
212  )
213  acc.addPublicTool(ElectronDNNSelectorMediumNoCF)
214 
215  # Tight
216  ElectronDNNSelectorTightNoCF = acc.popToolsAndMerge(
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(
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(
254  flags,
255  name="ForwardElectronLHSelectorLoose",
256  WorkingPoint="LooseLHForwardElectron",
257  )
258  )
259  acc.addPublicTool(ForwardElectronLHSelectorLoose)
260 
261  ForwardElectronLHSelectorMedium = acc.popToolsAndMerge(
263  flags,
264  name="ForwardElectronLHSelectorMedium",
265  WorkingPoint="MediumLHForwardElectron",
266  )
267  )
268  acc.addPublicTool(ForwardElectronLHSelectorMedium)
269 
270  ForwardElectronLHSelectorTight = acc.popToolsAndMerge(
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(
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(
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(
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(
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(
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(
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(
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(
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(
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(
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(
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(
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(
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(
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(
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(
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 
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
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
python.AsgForwardElectronLikelihoodToolConfig.AsgForwardElectronLikelihoodToolCfg
def AsgForwardElectronLikelihoodToolCfg(flags, name, **kwargs)
Definition: AsgForwardElectronLikelihoodToolConfig.py:6
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:342
python.JetRecConfig.getInputAlgs
def getInputAlgs(jetOrConstitdef, flags, context="default", monTool=None)
Definition: JetRecConfig.py:279
python.JetRecConfig.reOrderAlgs
def reOrderAlgs(algs)
Definition: JetRecConfig.py:806
IsolationSteeringDerivConfig.IsolationSteeringDerivCfg
def IsolationSteeringDerivCfg(flags, name='IsolationSteeringDeriv', inType='EMPFlow')
Definition: IsolationSteeringDerivConfig.py:9
python.EGammaToolsConfig.EGSelectionToolWrapperCfg
def EGSelectionToolWrapperCfg(flags, name, **kwargs)
Definition: EGammaToolsConfig.py:21
python.AsgElectronLikelihoodToolsConfig.AsgElectronLikelihoodToolCfg
def AsgElectronLikelihoodToolCfg(flag, name, quality, menu=electronLHmenu.offlineMC21)
Definition: AsgElectronLikelihoodToolsConfig.py:13
python.AsgElectronChargeIDSelectorToolConfig.AsgElectronChargeIDSelectorToolCfg
def AsgElectronChargeIDSelectorToolCfg(flags, name, **kwargs)
Definition: AsgElectronChargeIDSelectorToolConfig.py:6
EventDensityConfig.configEventDensityTool
def configEventDensityTool(name, jetOrConstitdef, radius=0.4, **options)
Definition: EventDensityConfig.py:36
python.AsgPhotonIsEMSelectorsConfig.AsgPhotonIsEMSelectorCfg
def AsgPhotonIsEMSelectorCfg(flags, name, quality, menu=photonPIDmenu.offlineMC20, trigger=False)
Definition: AsgPhotonIsEMSelectorsConfig.py:15
python.TruthDerivationToolsConfig.TruthIsolationToolCfg
def TruthIsolationToolCfg(flags, name, **kwargs)
Definition: TruthDerivationToolsConfig.py:183
python.EGammaToolsConfig.EGElectronAmbiguityToolCfg
def EGElectronAmbiguityToolCfg(flags, name, **kwargs)
Definition: EGammaToolsConfig.py:70
DerivationFrameworkCaloConfig.EgammaCoreCellRecoveryCfg
def EgammaCoreCellRecoveryCfg(flags, **kwargs)
Definition: DerivationFrameworkCaloConfig.py:58
python.EGammaVariableCorrectionConfig.ElectronVariableCorrectionToolCfg
def ElectronVariableCorrectionToolCfg(flags, name="ElectronVariableCorrectionTool", **kwargs)
Definition: EGammaVariableCorrectionConfig.py:5
python.EGammaVariableCorrectionConfig.PhotonVariableCorrectionToolCfg
def PhotonVariableCorrectionToolCfg(flags, name="PhotonVariableCorrectionTool", **kwargs)
Definition: EGammaVariableCorrectionConfig.py:15
python.EGammaToolsConfig.EGPhotonCleaningWrapperCfg
def EGPhotonCleaningWrapperCfg(flags, name, **kwargs)
Definition: EGammaToolsConfig.py:58
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:26
python.EGammaToolsConfig.EGElectronLikelihoodToolWrapperCfg
def EGElectronLikelihoodToolWrapperCfg(flags, name, **kwargs)
Definition: EGammaToolsConfig.py:34
python.EGammaToolsConfig.BkgElectronClassificationCfg
def BkgElectronClassificationCfg(flags, name, **kwargs)
Definition: EGammaToolsConfig.py:79
python.JetRecConfig.getConstitPJGAlg
def getConstitPJGAlg(constitdef, suffix=None, flags=None, parent_jetdef=None)
Definition: JetRecConfig.py:350
python.AsgElectronSelectorToolConfig.AsgElectronSelectorToolCfg
def AsgElectronSelectorToolCfg(ConfigFlags, name, **kwargs)
Definition: AsgElectronSelectorToolConfig.py:7
python.EGammaToolsConfig.PhotonsDirectionToolCfg
def PhotonsDirectionToolCfg(flags, name, **kwargs)
Definition: EGammaToolsConfig.py:13
DerivationTrackIsoConfig.DerivationTrackIsoCfg
def DerivationTrackIsoCfg(flags, **jwarg)
Definition: DerivationTrackIsoConfig.py:10
DerivationFrameworkCaloConfig.CaloFillRectangularClusterCfg
def CaloFillRectangularClusterCfg(flags, **kwargs)
Definition: DerivationFrameworkCaloConfig.py:72
python.EGammaCommonConfig.EGammaCommonCfg
def EGammaCommonCfg(flags)
Definition: EGammaCommonConfig.py:15