ATLAS Offline Software
Loading...
Searching...
No Matches
CaloTester.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 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 DataObjID id1 ("testDetDescr");
46 ServiceHandle<StoreGateSvc> condStore ("ConditionStore", "test");
47 auto mgr_cc=std::make_unique<CondCont<CaloDetDescrManager> >(rcu, id1);
48 CHECK_WITH_CONTEXT(mgr_cc->insert(IOVInfiniteRange::infiniteTime(),std::move(m_mgr_up)),"CaloTester");
49 CHECK_WITH_CONTEXT(condStore->record(std::move(mgr_cc),"CaloDetDescrManager"),"CaloTester");
50
51 return StatusCode::SUCCESS;
52}
53
54
62{
63 const CaloCell_Base_ID& helper = m_helpers.caloID();
64
65 Identifier id = helper.cell_id (hashid);
66 Identifier reg_id;
67 int subcalo = helper.sub_calo (id);
68 if (subcalo == CaloCell_ID::TILE) {
69 int section = helper.section (id);
70 int side = helper.side (id);
71 reg_id = helper.region_id (subcalo, section, side, 0);
72 }
73 else {
74 int sampling = helper.sampling (id);
75 int posneg = helper.pos_neg (id);
76 int region = helper.region (id);
77 reg_id = helper.region_id (subcalo, posneg, sampling, region);
78 }
79
80 const CaloDetDescriptor* dd = m_mgr->get_descriptor (reg_id);
81 if (!dd) {
82 auto ddp = std::make_unique<CaloDetDescriptor> (reg_id,
83 &m_helpers.tileID(),
84 &helper);
85
86 if (subcalo != CaloCell_ID::TILE) {
87 float eta0 = helper.eta0 (reg_id);
88 float eta1 = eta0 + (helper.eta_max (reg_id) - helper.eta_min (reg_id)) * helper.etaGranularity (reg_id);
89
90 if (ddp->calo_sign() >= 0) {
91 ddp->setLArRegMin (eta0);
92 ddp->setLArRegMax (eta1);
93 ddp->setCaloEtaMin (eta0);
94 ddp->setCaloEtaMax (eta1);
95 }
96 else {
97 ddp->setLArRegMin (-eta1);
98 ddp->setLArRegMax (-eta0);
99 ddp->setCaloEtaMin (-eta1);
100 ddp->setCaloEtaMax (-eta0);
101 }
102
103 ddp->setLArEtaMin (eta0);
104 ddp->setLArPhiMin (0);
105 }
106
107 dd = ddp.get();
108 m_mgr->add (std::move (ddp));
109 }
110 return dd;
111}
112
113
121{
122 return find_dd (m_helpers.caloID().calo_cell_hash (cell_id));
123}
124
125
130std::unique_ptr<CaloCell> CaloTester::make_cell (int hashid)
131{
132 const CaloDetDescriptor* descr = find_dd (hashid);
133 auto ddep = std::make_unique<DummyDetDescrElement> (hashid -
134 descr->caloCellMin(),
135 0,
136 0,
137 descr);
138 CaloDetDescrElement* dde = ddep.get();
139
140 int ieta_min = m_helpers.caloID().eta_min (descr->identify());
141 int iphi_min = m_helpers.caloID().phi_min (descr->identify());
142 int ieta = m_helpers.caloID().eta (dde->identify());
143 int iphi = m_helpers.caloID().phi (dde->identify());
144 float r = 0; // FIXME; not filled in
145 float phi = descr->calo_phi_min() + (iphi - iphi_min) * descr->dphi();
146 float eta;
147 if (descr->calo_sign() > 0) {
148 eta = descr->calo_eta_min() + (ieta - ieta_min) * descr->deta();
149 }
150 else {
151 eta = descr->calo_eta_max() - (ieta - ieta_min) * descr->deta();
152 }
153
154 ddep->set_cylindric (eta, phi, r);
155 ddep->set_cylindric_size (descr->deta(), descr->dphi(), 0);
156
157 // mgr takes ownership of LAr ddes, but not tile...
158 m_mgr->add (dde);
159 if (m_helpers.caloID().is_tile (hashid)) {
160 m_tileddes.push_back (std::move (ddep));
161 }
162 else {
163 ddep.release();
164 }
165
166 return std::make_unique<CaloCell> (dde, 1, 1, 1, CaloGain::LARHIGHGAIN);
167}
168
169
174{
175 size_t hashmax = m_helpers.caloID().calo_cell_hash_max();
176 m_cells.reserve (hashmax);
177 for (size_t i = 0; i < hashmax; i++)
178 m_cells.push_back (make_cell (i));
179}
180
181
186std::vector<CaloCell*> CaloTester::get_cells()
187{
188 if (m_cells.empty()) {
189 make_cells();
190 }
191 std::vector<CaloCell*> cells;
192 cells.reserve (m_cells.size());
193 for (const std::unique_ptr<CaloCell>& cell : m_cells) {
194 cells.push_back (cell.get());
195 }
196 return cells;
197}
198
199
204std::vector<const CaloCell*> CaloTester::get_const_cells()
205{
206 if (m_cells.empty()) {
207 make_cells();
208 }
209 std::vector<const CaloCell*> cells;
210 cells.reserve (m_cells.size());
211 for (const std::unique_ptr<CaloCell>& cell : m_cells) {
212 cells.push_back (cell.get());
213 }
214 return cells;
215}
216
217
223std::unique_ptr<CaloCellContainer> CaloTester::make_ccc()
224{
225 if (m_cells.empty()) {
226 make_cells();
227 }
228 auto ccc = std::make_unique<CaloCellContainer> (SG::VIEW_ELEMENTS);
229 for (std::unique_ptr<CaloCell>& cell : m_cells) {
230 ccc->push_back (cell.get());
231 }
232 ccc->initializeLookUpTable();
233 return ccc;
234}
235
236
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.