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
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.