ATLAS Offline Software
IsolationBuilderConfig.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
3 """ Instantiate the electron or photon isolation """
4 
5 from AthenaCommon.Logging import logging
6 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
7 from AthenaConfiguration.ComponentFactory import CompFactory
8 
9 def egIsolationCfg(flags, name='egIsolation', noCalo=False, **kwargs):
10 
11  mlog = logging.getLogger(name)
12  mlog.info('Starting '+name+' configuration')
13 
14  acc = ComponentAccumulator()
15 
16  suff = ''
17  if name.find('photon') >= 0:
18  suff = 'photon'
19  pref = 'Ph'
20  elif name.find('electron') >= 0:
21  suff = 'electron'
22  pref = 'El'
23  else:
24  mlog.error('Name '+name+' should contain electron or photon')
25  return acc
26 
27  from xAODPrimitives.xAODIso import xAODIso as isoPar
28  from IsolationAlgs.IsoToolsConfig import (
29  TrackIsolationToolCfg, ElectronTrackIsolationToolCfg,
30  EGammaCaloIsolationToolCfg)
31 
32  isoType = []
33  isoCor = []
34  isoExCor = []
35 
36  if flags.Detector.EnableID or flags.Detector.EnableITk:
37  isoType.append([ isoPar.ptcone30, isoPar.ptcone20 ])
38  isoCor.append([ isoPar.coreTrackPtr ])
39  isoExCor.append([])
40  if 'TrackIsolationTool' not in kwargs:
41  if pref == 'Ph':
42  kwargs['TrackIsolationTool'] = acc.popToolsAndMerge(
43  TrackIsolationToolCfg(flags))
44  else:
45  kwargs['TrackIsolationTool'] = acc.popToolsAndMerge(
47 
48  if flags.Detector.EnableCalo and not noCalo:
49  isoType.append(
50  [ isoPar.topoetcone20, isoPar.topoetcone30, isoPar.topoetcone40 ])
51  isoCor.append(
52  [ isoPar.core57cells, isoPar.ptCorrection, isoPar.pileupCorrection ])
53  # do not do pileup correction if HI with subtracted clusters
54  if flags.HeavyIon.Egamma.doSubtractedClusters:
55  isoCor[-1] = [ x for x in isoCor[-1] if x != isoPar.pileupCorrection ]
56  isoExCor.append([])
57  if 'CaloTopoIsolationTool' not in kwargs:
58  kwargs['CaloTopoIsolationTool'] = acc.popToolsAndMerge(
60 
61  kwargs[f'{pref}IsoTypes'] = isoType
62  kwargs[f'{pref}CorTypes'] = isoCor
63  kwargs[f'{pref}CorTypesExtra'] = isoExCor
64 
65  kwargs['name'] = suff+'IsolationBuilder'
66 
67  acc.addEventAlgo(CompFactory.IsolationBuilder(**kwargs))
68 
69  mlog.info(suff+" isolation configured")
70 
71  return acc
72 
73 def muIsolationCfg(flags, name='muIsolation', noCalo=False, **kwargs):
74 
75  mlog = logging.getLogger(name)
76  mlog.info('Starting '+name+' configuration')
77 
78  acc = ComponentAccumulator()
79 
80  from xAODPrimitives.xAODIso import xAODIso as isoPar
81  from IsolationAlgs.IsoToolsConfig import (
82  TrackIsolationToolCfg, MuonCaloIsolationToolCfg)
83 
84  isoType = []
85  isoCor = []
86  isoExCor = []
87 
88  if flags.Detector.EnableID or flags.Detector.EnableITk:
89  isoType.append([ isoPar.ptcone40, isoPar.ptcone30, isoPar.ptcone20 ])
90  isoCor.append([ isoPar.coreTrackPtr ])
91  isoExCor.append([])
92  if 'TrackIsolationTool' not in kwargs:
93  kwargs['TrackIsolationTool'] = acc.popToolsAndMerge(
94  TrackIsolationToolCfg(flags))
95 
96  if flags.Detector.EnableCalo and not noCalo:
97  isoType.append(
98  [ isoPar.topoetcone20, isoPar.topoetcone30, isoPar.topoetcone40 ])
99  isoCor.append([ isoPar.coreCone, isoPar.pileupCorrection ])
100  # do not do pileup correction if HI with subtracted clusters
101  if flags.HeavyIon.Egamma.doSubtractedClusters:
102  isoCor[-1] = [ x for x in isoCor[-1] if x != isoPar.pileupCorrection ]
103  isoExCor.append([])
104  if ('CaloTopoIsolationTool' not in kwargs) or (
105  'PFlowIsolationTool' not in kwargs):
106  cisoTool = acc.popToolsAndMerge(MuonCaloIsolationToolCfg(flags))
107  if 'CaloTopoIsolationTool' not in kwargs:
108  kwargs['CaloTopoIsolationTool'] = cisoTool
109  if flags.Reco.EnablePFlow and 'PFlowIsolationTool' not in kwargs:
110  isoType.append(
111  [ isoPar.neflowisol20, isoPar.neflowisol30, isoPar.neflowisol40 ])
112  isoCor.append([ isoPar.coreCone, isoPar.pileupCorrection ])
113  # do not do pileup correction for HI reco...
114  # and pflow iso is more than experimental in such reco anyway
115  if flags.HeavyIon.Egamma.doSubtractedClusters:
116  isoCor[-1] = [ x for x in isoCor[-1] if x != isoPar.pileupCorrection ]
117  isoExCor.append([])
118  kwargs['PFlowIsolationTool'] = cisoTool
119 
120  kwargs['MuIsoTypes'] = isoType
121  kwargs['MuCorTypes'] = isoCor
122  kwargs['MuCorTypesExtra'] = isoExCor
123  kwargs['name'] = 'muonIsolationBuilder'
124 
125  acc.addEventAlgo(CompFactory.IsolationBuilder(**kwargs))
126 
127  mlog.info("muon isolation configured")
128 
129  return acc
130 
131 
132 if __name__ == "__main__":
133  from AthenaConfiguration.AllConfigFlags import initConfigFlags
134  from AthenaConfiguration.ComponentAccumulator import printProperties
135  from AthenaConfiguration.TestDefaults import defaultTestFiles
136  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
137  flags = initConfigFlags()
138  flags.Input.Files = defaultTestFiles.RDO_RUN2
139  flags.Output.doWriteESD = True # To test the ESD parts
140  flags.Output.doWriteAOD = True # To test the AOD parts
141  flags.lock()
142 
143  mlog = logging.getLogger("isolationConfigTest")
144  mlog.info("Configuring photon isolation: ")
145 
146  acc = MainServicesCfg(flags)
147  acc.merge(egIsolationCfg(flags,name = 'photonIsolation'))
148  acc.merge(egIsolationCfg(flags,name = 'electronIsolation'))
149  acc.merge(muIsolationCfg(flags,name = 'muonIsolation'))
150  printProperties(mlog,
151  acc.getEventAlgo("photonIsolationBuilder"),
152  nestLevel=1,
153  printDefaults=True)
154  printProperties(mlog,
155  acc.getEventAlgo("electronIsolationBuilder"),
156  nestLevel=1,
157  printDefaults=True)
158  printProperties(mlog,
159  acc.getEventAlgo("muonIsolationBuilder"),
160  nestLevel=1,
161  printDefaults=True)
162 
163  with open("isolationconfig.pkl", "wb") as f:
164  acc.store(f)
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
IsoToolsConfig.ElectronTrackIsolationToolCfg
def ElectronTrackIsolationToolCfg(flags, **kwargs)
Definition: IsoToolsConfig.py:50
IsoToolsConfig.MuonCaloIsolationToolCfg
def MuonCaloIsolationToolCfg(flags, **kwargs)
Definition: IsoToolsConfig.py:88
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:312
IsolationBuilderConfig.egIsolationCfg
def egIsolationCfg(flags, name='egIsolation', noCalo=False, **kwargs)
Definition: IsolationBuilderConfig.py:9
python.TrackIsolationDecoratorConfig.TrackIsolationToolCfg
def TrackIsolationToolCfg(ConfigFlags, name="TrackIsolationTool", **kwargs)
Definition: TrackIsolationDecoratorConfig.py:12
extractSporadic.printProperties
def printProperties(h, q, hLB)
Definition: extractSporadic.py:7
Trk::open
@ open
Definition: BinningType.h:40
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
IsolationBuilderConfig.muIsolationCfg
def muIsolationCfg(flags, name='muIsolation', noCalo=False, **kwargs)
Definition: IsolationBuilderConfig.py:73
IsoToolsConfig.EGammaCaloIsolationToolCfg
def EGammaCaloIsolationToolCfg(flags, **kwargs)
Definition: IsoToolsConfig.py:55