ATLAS Offline Software
Loading...
Searching...
No Matches
CaloTester.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
10
11
16#include "GaudiKernel/ServiceHandle.h"
20
29 : m_mgr_up (std::make_unique<CaloDetDescrManager>())
30{
31 // Make a manager instance.
32 m_mgr = m_mgr_up.get();
33 m_mgr->set_helper (&m_helpers.caloID());
34 m_mgr->initialize();
35}
36
37
42{
43 //Mock ConditonStore-infrastructure
45 EventContext ctx(0, 0);
46 DataObjID id1 ("testDetDescr");
47 ServiceHandle<StoreGateSvc> condStore ("ConditionStore", "test");
48 auto mgr_cc=std::make_unique<CondCont<CaloDetDescrManager> >(rcu, id1);
49 CHECK_WITH_CONTEXT(mgr_cc->insert(IOVInfiniteRange::infiniteTime(),std::move(m_mgr_up),ctx),"CaloTester");
50 CHECK_WITH_CONTEXT(condStore->record(std::move(mgr_cc),"CaloDetDescrManager"),"CaloTester");
51
52 return StatusCode::SUCCESS;
53}
54
55
63{
64 const CaloCell_Base_ID& helper = m_helpers.caloID();
65
66 Identifier id = helper.cell_id (hashid);
67 Identifier reg_id;
68 int subcalo = helper.sub_calo (id);
69 if (subcalo == CaloCell_ID::TILE) {
70 int section = helper.section (id);
71 int side = helper.side (id);
72 reg_id = helper.region_id (subcalo, section, side, 0);
73 }
74 else {
75 int sampling = helper.sampling (id);
76 int posneg = helper.pos_neg (id);
77 int region = helper.region (id);
78 reg_id = helper.region_id (subcalo, posneg, sampling, region);
79 }
80
81 const CaloDetDescriptor* dd = m_mgr->get_descriptor (reg_id);
82 if (!dd) {
83 auto ddp = std::make_unique<CaloDetDescriptor> (reg_id,
84 &m_helpers.tileID(),
85 &helper);
86
87 if (subcalo != CaloCell_ID::TILE) {
88 float eta0 = helper.eta0 (reg_id);
89 float eta1 = eta0 + (helper.eta_max (reg_id) - helper.eta_min (reg_id)) * helper.etaGranularity (reg_id);
90
91 if (ddp->calo_sign() >= 0) {
92 ddp->setLArRegMin (eta0);
93 ddp->setLArRegMax (eta1);
94 ddp->setCaloEtaMin (eta0);
95 ddp->setCaloEtaMax (eta1);
96 }
97 else {
98 ddp->setLArRegMin (-eta1);
99 ddp->setLArRegMax (-eta0);
100 ddp->setCaloEtaMin (-eta1);
101 ddp->setCaloEtaMax (-eta0);
102 }
103
104 ddp->setLArEtaMin (eta0);
105 ddp->setLArPhiMin (0);
106 }
107
108 dd = ddp.get();
109 m_mgr->add (std::move (ddp));
110 }
111 return dd;
112}
113
114
122{
123 return find_dd (m_helpers.caloID().calo_cell_hash (cell_id));
124}
125
126
131std::unique_ptr<CaloCell> CaloTester::make_cell (int hashid)
132{
133 const CaloDetDescriptor* descr = find_dd (hashid);
134 auto ddep = std::make_unique<DummyDetDescrElement> (hashid -
135 descr->caloCellMin(),
136 0,
137 0,
138 descr);
139 CaloDetDescrElement* dde = ddep.get();
140
141 int ieta_min = m_helpers.caloID().eta_min (descr->identify());
142 int iphi_min = m_helpers.caloID().phi_min (descr->identify());
143 int ieta = m_helpers.caloID().eta (dde->identify());
144 int iphi = m_helpers.caloID().phi (dde->identify());
145 float r = 0; // FIXME; not filled in
146 float phi = descr->calo_phi_min() + (iphi - iphi_min) * descr->dphi();
147 float eta;
148 if (descr->calo_sign() > 0) {
149 eta = descr->calo_eta_min() + (ieta - ieta_min) * descr->deta();
150 }
151 else {
152 eta = descr->calo_eta_max() - (ieta - ieta_min) * descr->deta();
153 }
154
155 ddep->set_cylindric (eta, phi, r);
156 ddep->set_cylindric_size (descr->deta(), descr->dphi(), 0);
157
158 // mgr takes ownership of LAr ddes, but not tile...
159 m_mgr->add (dde);
160 if (m_helpers.caloID().is_tile (hashid)) {
161 m_tileddes.push_back (std::move (ddep));
162 }
163 else {
164 ddep.release();
165 }
166
167 return std::make_unique<CaloCell> (dde, 1, 1, 1, CaloGain::LARHIGHGAIN);
168}
169
170
175{
176 size_t hashmax = m_helpers.caloID().calo_cell_hash_max();
177 m_cells.reserve (hashmax);
178 for (size_t i = 0; i < hashmax; i++)
179 m_cells.push_back (make_cell (i));
180}
181
182
187std::vector<CaloCell*> CaloTester::get_cells()
188{
189 if (m_cells.empty()) {
190 make_cells();
191 }
192 std::vector<CaloCell*> cells;
193 cells.reserve (m_cells.size());
194 for (const std::unique_ptr<CaloCell>& cell : m_cells) {
195 cells.push_back (cell.get());
196 }
197 return cells;
198}
199
200
205std::vector<const CaloCell*> CaloTester::get_const_cells()
206{
207 if (m_cells.empty()) {
208 make_cells();
209 }
210 std::vector<const CaloCell*> cells;
211 cells.reserve (m_cells.size());
212 for (const std::unique_ptr<CaloCell>& cell : m_cells) {
213 cells.push_back (cell.get());
214 }
215 return cells;
216}
217
218
224std::unique_ptr<CaloCellContainer> CaloTester::make_ccc()
225{
226 if (m_cells.empty()) {
227 make_cells();
228 }
229 auto ccc = std::make_unique<CaloCellContainer> (SG::VIEW_ELEMENTS);
230 for (std::unique_ptr<CaloCell>& cell : m_cells) {
231 ccc->push_back (cell.get());
232 }
233 ccc->initializeLookUpTable();
234 return ccc;
235}
236
237
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
Calo Subsystem specific Detector Elements + Dummy element for testing.
Helpers for creating calorimeter objects for unit tests.
Hold mappings of ranges to condition objects.
Helpers for checking error return status codes and reporting errors.
#define CHECK_WITH_CONTEXT(...)
Evaluate an expression and check for errors, with an explicitly specified context name.
A no-op implementation of IRCUSvc, for use in unit tests.
void section(const std::string &sec)
Helper base class for offline cell identifiers.
This class groups all DetDescr information related to a CaloCell.
Identifier identify() const override final
cell identifier
This class provides the client interface for accessing the detector description information common to...
This is a base class for LAr and Tile Descriptors The primary goal is to speed up loops over all the ...
void make_cells()
Create all calo cells and save in internal list.
CaloHelpersTest m_helpers
The ID helpers.
Definition CaloTester.h:146
std::unique_ptr< CaloCell > make_cell(int hashid)
Create a calorimeter cell.
std::vector< std::unique_ptr< CaloCell > > m_cells
The cells made by make_cells().
Definition CaloTester.h:153
std::unique_ptr< CaloDetDescrManager > m_mgr_up
Owning pointer to the manager object.
Definition CaloTester.h:160
std::unique_ptr< CaloCellContainer > make_ccc()
Return a CaloCellContainer for all cells.
std::vector< std::unique_ptr< CaloDetDescrElement > > m_tileddes
All Tile detdescr elements.
Definition CaloTester.h:150
CaloDetDescrManager * m_mgr
The manager object.
Definition CaloTester.h:156
std::vector< CaloCell * > get_cells()
Return a vector of all cells.
std::vector< const CaloCell * > get_const_cells()
Return a vector of all cells as const pointers.
StatusCode record_mgr()
Record the CaloDetDescrManager in the detector store.
const CaloDetDescriptor * find_dd(int hashid)
Return a region descriptor corresponding to a given cell.
CaloTester()
Constructor.
static EventIDRange infiniteTime()
Produces an EventIDRange that is inifinite in Time and invalid in RunLumi.
int r
Definition globals.cxx:22
@ LARHIGHGAIN
Definition CaloGain.h:18
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
STL namespace.