ATLAS Offline Software
CaloThinCellsByClusterAlg_test.py
Go to the documentation of this file.
1 #
2 # Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration.
3 #
4 # File: CaloRec/python/CaloThinCellsByClusterAlg_test.py
5 # Author: scott snyder
6 # Date: Nov, 2019
7 # Brief: Test for CaloThinCellsByClusterAlg.
8 #
9 
10 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
11 from AthenaConfiguration.ComponentFactory import CompFactory
12 from AthenaPython.PyAthenaComps import Alg, StatusCode
13 from math import pi
14 import ROOT
15 
16 
17 cell_hashes = set()
18 
19 
20 def make_calo_cells (mgr):
21  ccc = ROOT.CaloCellContainer()
22  for i in range (mgr.element_size()):
23  elt = mgr.get_element (ROOT.IdentifierHash (i))
24  if not elt: break
25  cc = ROOT.CaloCell (elt, 0, 0, 0, 0)
26  ccc.push_back (cc)
27  ROOT.SetOwnership (cc, False)
28  ccc.order()
29  ccc.updateCaloIterators()
30  return ccc
31 
32 
33 def make_clusters (mgr, ccc, hashes):
34  clc = ROOT.xAOD.CaloClusterContainer()
35  clc_store = ROOT.xAOD.CaloClusterAuxContainer()
36  clc.setStore (clc_store)
37 
38  ids = ROOT.vector(ROOT.IdentifierHash)()
39 
40  for i in range(2):
41  cl = ROOT.xAOD.CaloCluster()
42  clc.push_back (cl)
43  ROOT.SetOwnership (cl, False)
44  eta = 0.5 - i # 0.5 or -0.5
45  phi = 1
46  cl.setEta (eta)
47  cl.setPhi (phi)
48  cl.setClusterSize (ROOT.xAOD.CaloCluster.SW_37ele)
49  links = ROOT.CaloClusterCellLink (ccc)
50  cl.addCellLink (links)
51  ROOT.SetOwnership (links, False)
52 
53  mgr.cellsInZone (eta - 0.05, eta + 0.05, phi - 0.05, phi + 0.05, ids)
54  for hash in ids:
55  elt = mgr.get_element (hash)
56  s = elt.getSampling()
57  if s == 0 or s == 2:
58  idx = ccc.findIndex (hash)
59  if idx < 0:
60  print ("??? Can't find cell with hash ", hash)
61  else:
62  hashes.add (hash.value())
63  cl.addCell (idx, 1)
64 
65  return (clc, clc_store)
66 
67 
68 class CreateDataAlg (Alg):
69  def execute (self):
70  ctx = self.getContext()
71  mgr = self.condStore['CaloDetDescrManager'].find (ctx.eventID())
72  ccc = make_calo_cells (mgr)
73  self.evtStore.record (ccc, 'AllCalo', False)
74 
75  global cell_hashes
76  cell_hashes = set()
77  (clc, clc_store) = make_clusters (mgr, ccc, cell_hashes)
78  self.evtStore.record (clc, 'Clusters', False)
79  self.evtStore.record (clc_store, 'ClustersAux.', False)
80  return StatusCode.Success
81 
82 
83 class CheckThinningAlg (Alg):
84  def isCloseTo (self, elt, eta, phi):
85  # Assuming no phi wrapping.
86  return (abs (elt.eta() - eta) < 3*0.025 and
87  abs (elt.phi() - phi) < 7*2*pi/256)
88 
89  def execute (self):
90  ctx = self.getContext()
91  mgr = self.condStore['CaloDetDescrManager'].find (ctx.eventID())
92  dec = self.evtStore['AllCalo_THINNED_StreamAOD.thinAlg']
93 
94  global cell_hashes
95  for i in range (dec.size()):
96  elt = mgr.get_element (ROOT.IdentifierHash (i))
97  if elt.getSampling() == 3:
98  close = (self.isCloseTo (elt, 0.5, 1) or
99  self.isCloseTo (elt, -0.5, 1))
100  if not dec.thinned(i):
101  assert close
102  else:
103  assert not close
104  else:
105  if not dec.thinned(i):
106  assert i in cell_hashes
107  else:
108  assert i not in cell_hashes
109  return StatusCode.Success
110 
111 
112 def testCfg (flags):
113  result = ComponentAccumulator()
114 
115  from LArGeoAlgsNV.LArGMConfig import LArGMCfg
116  from TileGeoModel.TileGMConfig import TileGMCfg
117  result.merge(LArGMCfg(flags))
118  result.merge(TileGMCfg(flags))
119 
120  from LArCabling.LArCablingConfig import LArOnOffIdMappingCfg
121  result.merge(LArOnOffIdMappingCfg(flags))
122 
123  result.addEventAlgo (CreateDataAlg ('CreateDataAlg'))
124 
125  CaloThinCellsByClusterAlg=CompFactory.CaloThinCellsByClusterAlg
126  result.addEventAlgo (CaloThinCellsByClusterAlg ('thinAlg',
127  StreamName = 'StreamAOD',
128  Clusters = 'Clusters',
129  SamplingCellsName = ['EMB3']))
130 
131  result.addEventAlgo (CheckThinningAlg ('CheckThinningAlg'))
132  return result
133 
134 
135 # Work around issue with cling in root 6.20.06 getting confused
136 # by forward declarations.
137 ROOT.xAOD.CaloClusterContainer_v1
138 
139 
140 from AthenaConfiguration.AllConfigFlags import initConfigFlags
141 from AthenaConfiguration.TestDefaults import defaultTestFiles
143 flags.Input.Files = defaultTestFiles.RDO_RUN2
144 flags.Input.TimeStamps = [1000]
145 flags.Detector.GeometryLAr = True
146 flags.Detector.GeometryTile = True
147 flags.needFlagsCategory('Tile')
148 flags.needFlagsCategory('LAr')
149 
150 flags.lock()
151 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
152 acc = MainServicesCfg(flags)
153 
154 from McEventSelector.McEventSelectorConfig import McEventSelectorCfg
155 acc.merge (McEventSelectorCfg (flags))
156 
157 acc.merge (testCfg (flags))
158 acc.run(1)
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
python.CaloThinCellsByClusterAlg_test.CheckThinningAlg.isCloseTo
def isCloseTo(self, elt, eta, phi)
Definition: CaloThinCellsByClusterAlg_test.py:84
python.CaloThinCellsByClusterAlg_test.CreateDataAlg
Definition: CaloThinCellsByClusterAlg_test.py:68
python.CaloThinCellsByClusterAlg_test.CheckThinningAlg
Definition: CaloThinCellsByClusterAlg_test.py:83
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:260
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
python.CaloThinCellsByClusterAlg_test.make_calo_cells
def make_calo_cells(mgr)
Definition: CaloThinCellsByClusterAlg_test.py:20
LArCablingConfig.LArOnOffIdMappingCfg
def LArOnOffIdMappingCfg(configFlags)
Definition: LArCablingConfig.py:62
LArGMConfig.LArGMCfg
def LArGMCfg(flags)
Definition: LArGMConfig.py:8
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:232
python.CaloThinCellsByClusterAlg_test.testCfg
def testCfg(flags)
Definition: CaloThinCellsByClusterAlg_test.py:112
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
python.CaloThinCellsByClusterAlg_test.CheckThinningAlg.execute
def execute(self)
Definition: CaloThinCellsByClusterAlg_test.py:89
python.CaloThinCellsByClusterAlg_test.CreateDataAlg.execute
def execute(self)
Definition: CaloThinCellsByClusterAlg_test.py:69
python.CaloThinCellsByClusterAlg_test.make_clusters
def make_clusters(mgr, ccc, hashes)
Definition: CaloThinCellsByClusterAlg_test.py:33
TileGMConfig.TileGMCfg
def TileGMCfg(flags)
Definition: TileGMConfig.py:7