ATLAS Offline Software
Loading...
Searching...
No Matches
jTower.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5//***************************************************************************
6// jTower.h - description
7// -------------------
8// begin : 19 02 2019
9// email : Alan.Watson@cern.ch, jacob.julian.kempster@cern.ch
10// ***************************************************************************/
11
12#include "L1CaloFEXSim/jTower.h"
14#include <sstream>
15#include <cmath>
16
17
18namespace LVL1 {
19
20 const int s_nLayers = 2;
21 const int s_cells[s_nLayers] = {1,1};
22 const int s_offsets[s_nLayers] = {0,1};
23
24 // default constructor
26 m_iEta(0),
27 m_iPhi(0),
28 m_tower_id(-9999999),
29 m_tower_id_online(0xffff),
30 m_posneg(0),
31 m_centre_eta(0.),
32 m_centre_phi(0.),
33 m_fcal_layer(-1)
34 {
35 this->clearET();
36 }
37
39 jTower::jTower(int ieta, int iphi, int towerid, int posneg, float centre_eta, float centre_phi, int fcal_layer):
40 m_iEta(ieta),
41 m_iPhi(iphi),
42 m_tower_id(towerid),
43 m_tower_id_online(-9999999),
44 m_posneg(posneg),
45 m_centre_eta(centre_eta),
46 m_centre_phi(centre_phi),
47 m_fcal_layer(fcal_layer)
48 {
49 m_centre_phi_toPI = centre_phi;
50 if(centre_phi>M_PI) m_centre_phi_toPI = centre_phi-2*M_PI;
51 this->clearET();
52 }
53
54
57 {
58 m_et.clear();
59 m_et.resize(2,0);
60 m_et_float_raw.clear();
61 m_et_float_raw.resize(2,0.0);
62 }
63
66 {
67 m_EM_scID.clear();
68 }
69
72 {
73 m_HAD_scID.clear();
74 }
75
76
77void jTower::setPosNeg(int posneg) {
78
79 m_posneg = posneg;
80
81 return;
82
83}
84
86void jTower::addET(float et, int layer)
87{
88 if (layer < 0 || layer >= s_nLayers) {
89 std::stringstream errMsg;
90 errMsg << "addET: Attempt to set an invalid JTower layer with value: " << layer << ". Must be 0 (EM) or 1 (HAD) ";
91 throw std::runtime_error(errMsg.str().c_str());
92 return; //need to throw an error really...
93 }
94
95 m_et_float_raw[layer] += et;
96
97 return;
98
99}
100
101void jTower::set_Et(int layer, int et){
102 m_et[layer] = et;
103}
104
105
106void jTower::set_TileCal_Et(int layer, int et) {
107
108 if (layer < 0 || layer >= s_nLayers) {
109 std::stringstream errMsg;
110 errMsg << "set_TileCal_Et: Attempt to set an invalid JTower layer with value: " << layer << ". Must be 0 (EM) or 1 (HAD) ";
111 throw std::runtime_error(errMsg.str().c_str());
112 return; //need to throw an error really...
113 }
114
115 addET(et, layer);
116
117 set_Et(layer, et);
118 return;
119
120}
121
123void jTower::set_LAr_Et(Identifier ID, int cell, float et, int layer)
124{
125
126 if((layer < 0) || (layer >= s_nLayers)) {
127 std::stringstream errMsg;
128 errMsg << "Attempt to set jTower SCID in invalid layer (" << layer << ")";
129 throw std::runtime_error(errMsg.str().c_str());
130 return; //need to throw an error really...
131 }
132
134 if (cell < 0 || cell > 2) {
135 std::stringstream errMsg;
136 errMsg << "Attempt to set jTower SCID in invalid cell slot (" << cell << ")";
137 throw std::runtime_error(errMsg.str().c_str());
138 return;
139 }
140
141 addET(et, cell);
142
143 if(layer == 0) {
144 m_EM_scID.push_back(ID);
145 }
146 else if(layer == 1) {
147 m_HAD_scID.push_back(ID);
148 }
149
150 return;
151
152}
153
154//** Used to Compress and Expand the LATOME energies accordingly to the scheme
156
157 //multi linear digitisation encoding
158 for(uint layer=0; layer<m_et_float_raw.size(); layer++){
159 unsigned int ecode = jFEXCompression::Compress( m_et_float_raw[layer] );
160 int outET = jFEXCompression::Expand(ecode);
161 set_Et(layer,outET);
162 }
163}
164
165
167int jTower::iEta() const {
168 return m_iEta;
169}
170
172int jTower::iPhi() const {
173 return m_iPhi;
174}
175
177int jTower::getET(unsigned int layer, int cell) const {
178
180 if (layer >= s_nLayers || cell < 0 || cell >= s_cells[layer]) return 0;
181
182 // Return ET
183 return m_et[s_offsets[layer] + cell];
184
185}
186
188float jTower::getET_float(unsigned int layer, int cell) const {
189
191 if (layer >= s_nLayers || cell < 0 || cell >= s_cells[layer]) return 0;
192
193 // Return ET
194 return m_et_float_raw[s_offsets[layer] + cell];
195
196}
197
200
201 int tmp = 0;
202 for (unsigned int i=0; i<m_et.size(); i++) {
203 tmp += m_et[i];
204 }
205
206 return tmp;
207
208}
209
212
213 float tmp = 0;
214 for (unsigned int i=0; i<m_et_float_raw.size(); i++) {
215 tmp += m_et_float_raw[i];
216 }
217
218 return tmp;
219
220}
221
222
224std::vector<int> jTower::getLayerETvec(unsigned int layer) const {
225
227 std::vector<int> cells;
228
230 if (layer >= s_nLayers) return cells;
231
233 for (int cell = 0; cell < s_cells[layer]; ++cell) cells.push_back(m_et[s_offsets[layer] + cell]);
234
235 return cells;
236}
237
238
240std::vector<float> jTower::getLayerETvec_float(unsigned int layer) const {
241
243 std::vector<float> cells;
244
246 if (layer >= s_nLayers) return cells;
247
249 for (int cell = 0; cell < s_cells[layer]; ++cell) cells.push_back(m_et_float_raw[s_offsets[layer] + cell]);
250
251 return cells;
252}
253
254
256int jTower::getLayerTotalET(unsigned int layer) const {
257
258 if (layer == 0) {
259 return m_et[0];
260 }
261 else if (layer == 1) {
262 return (m_et[1]);
263 }
264
265 return 0;
266
267}
268
270float jTower::getLayerTotalET_float(unsigned int layer) const {
271
272 if (layer == 0) {
273 return m_et_float_raw[0];
274 }
275 else if (layer == 1) {
276 return (m_et_float_raw[1]);
277 }
278
279 return 0;
280
281}
282
283std::vector<Identifier> jTower::getLayerSCIDs(unsigned int layer) const {
284
285 if (layer == 0) {
286 return m_EM_scID;
287 }
288 else if (layer == 1) {
289 return m_HAD_scID;
290 }
291
292 return std::vector<Identifier>();
293
294}
295
298}
299
301 m_iEta = eta;
302}
303
309
311 m_iPhi = phi;
312}
313
314void jTower::setOnlineID(int tower_id_online){
315 m_tower_id_online = tower_id_online;
316}
317
318void jTower::setTTowerArea(int area,int layer){
319 m_TTowerArea.at(layer)=area;
320}
321
322int jTower::getTTowerArea(int layer)const{
323 return m_TTowerArea.at(layer);
324}
325
326void jTower::setTTowerAreaInv(int area,int layer){
327 m_TTowerAreaInv.at(layer)=area;
328}
329
330int jTower::getTTowerAreaInv(int layer)const{
331 return m_TTowerAreaInv.at(layer);
332}
333
334void jTower::setNoiseForMet(int noiseVal,int layer){
335 m_NoiseForMet[layer]=noiseVal;
336}
337
338
339int jTower::getNoiseForMet(int layer) const{
340 return m_NoiseForMet[layer];
341}
342
343void jTower::setNoiseForJet(int noiseVal,int layer){
344 m_NoiseForJet[layer]=noiseVal;
345}
346
347
348int jTower::getNoiseForJet(int layer) const{
349 return m_NoiseForJet[layer];
350}
351
352} // end of namespace bracket
353
#define M_PI
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
std::vector< Identifier > ID
double area(double R)
unsigned int uint
static int Expand(unsigned int code)
Uncompress data.
static unsigned int Compress(float floatEt, bool empty=false)
Compress data.
std::vector< Identifier > m_EM_scID
Definition jTower.h:189
void setPosNeg(int posneg)
Definition jTower.cxx:77
int getTotalET() const
Get ET sum of all cells in the jTower in MeV.
Definition jTower.cxx:199
float getLayerTotalET_float(unsigned int layer) const
Get total ET sum of all cells in a given layer in MeV FLOAT VERSION.
Definition jTower.cxx:270
std::vector< Identifier > getLayerSCIDs(unsigned int layer) const
Definition jTower.cxx:283
void setiEta(int ieta)
Definition jTower.cxx:300
int getET(unsigned int layer, int cell=0) const
Get ET of a specified cell in MeV.
Definition jTower.cxx:177
void set_Et(int layer, int et)
Set ET value in MeV.
Definition jTower.cxx:101
std::vector< int > m_TTowerAreaInv
Definition jTower.h:194
int m_iEta
Internal data.
Definition jTower.h:180
std::vector< int > getLayerETvec(unsigned int layer) const
Get vector of ET values for a given layer in MeV.
Definition jTower.cxx:224
int m_fcal_layer
Definition jTower.h:195
void clear_EM_scIDs()
Clear and resize Identifier value vector.
Definition jTower.cxx:65
void set_TileCal_Et(int layer, int et)
Definition jTower.cxx:106
void setNoiseForJet(int noiseVal, int layer)
Definition jTower.cxx:343
float getET_float(unsigned int layer, int cell=0) const
Get ET of a specified cell in MeV FLOAT VERSION.
Definition jTower.cxx:188
void setTTowerArea(int area, int layer)
Add to Area values of a specified tower.
Definition jTower.cxx:318
int m_tower_id_online
Definition jTower.h:183
void set_LAr_Et(Identifier ID, int cell, float et, int layer)
Set LAr supercell position ID.
Definition jTower.cxx:123
void setiPhi(int iphi)
Definition jTower.cxx:310
float m_centre_phi
Definition jTower.h:186
int m_NoiseForJet[2]
Definition jTower.h:197
void setCentrePhi(float iphi)
Definition jTower.cxx:304
std::vector< float > m_et_float_raw
Definition jTower.h:192
std::vector< int > m_TTowerArea
Definition jTower.h:193
void clearET()
Clear supercell ET values.
Definition jTower.cxx:56
jTower()
Constructors.
Definition jTower.cxx:25
float getTotalET_float() const
Get ET sum of all cells in the jTower in MeV FLOAT VERSION.
Definition jTower.cxx:211
int iEta() const
Get coordinates of tower.
Definition jTower.cxx:167
int getLayerTotalET(unsigned int layer) const
Get total ET sum of all cells in a given layer in MeV.
Definition jTower.cxx:256
int getNoiseForJet(int layer) const
Definition jTower.cxx:348
int m_posneg
Definition jTower.h:184
int m_tower_id
Definition jTower.h:182
void setNoiseForMet(int noiseVal, int layer)
Noise values for each layer and object.
Definition jTower.cxx:334
void setOnlineID(int tower_id_online)
Definition jTower.cxx:314
void setCentreEta(float ieta)
Add to eta/phi values of a specified tower.
Definition jTower.cxx:296
void setTTowerAreaInv(int area, int layer)
Add to Area inverted values of a specified tower.
Definition jTower.cxx:326
void clear_HAD_scIDs()
Clear and resize HAD SC Identifier value vector.
Definition jTower.cxx:71
void Do_LAr_encoding()
Applies LAr digitization scheme.
Definition jTower.cxx:155
int getTTowerArea(int layer) const
Definition jTower.cxx:322
std::vector< int > m_et
Definition jTower.h:191
float m_centre_phi_toPI
Definition jTower.h:187
std::vector< float > getLayerETvec_float(unsigned int layer) const
Get vector of ET values for a given layer in MeV FLOAT VERSION.
Definition jTower.cxx:240
std::vector< Identifier > m_HAD_scID
Definition jTower.h:190
float m_centre_eta
Definition jTower.h:185
int getTTowerAreaInv(int layer) const
Definition jTower.cxx:330
int getNoiseForMet(int layer) const
Definition jTower.cxx:339
int iPhi() const
Return global phi index.
Definition jTower.cxx:172
void addET(float et, int cell)
Add to ET of a specified cell in MeV.
Definition jTower.cxx:86
int m_NoiseForMet[2]
Definition jTower.h:196
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
const size_t s_nLayers
Definition eTower.cxx:19
const int s_offsets[s_nLayers]
Definition eTower.cxx:21
const int s_cells[s_nLayers]
Definition eTower.cxx:20
Extra patterns decribing particle interation process.