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