ATLAS Offline Software
Loading...
Searching...
No Matches
CrateEnergy.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4/***************************************************************************
5 CrateEnergy.h - description
6 -------------------
7 begin : 06/09/2007
8 email : Alan.Watson@cern.ch
9 ***************************************************************************/
10
11
13
14namespace LVL1 {
15
16CrateEnergy::CrateEnergy(unsigned int crate, const DataVector<ModuleEnergy>* JEMs, uint32_t maskXE, uint32_t maskTE, bool restricted):
18 m_crateEt(0),
19 m_crateEx(0),
20 m_crateEy(0),
21 m_overflowT(0),
22 m_overflowX(0),
23 m_overflowY(0),
25 m_debug(false)
26 {
28 if (m_crate > 1) return;
29
31 if ((maskXE&0xff) != 0xff || (maskTE&0xff) != 0xff) m_restricted = true;
32
38
40 unsigned int eT[2] = {0,0};
41 unsigned int eX[2] = {0,0};
42 unsigned int eY[2] = {0,0};
43 for ( const ModuleEnergy* jem : *JEMs ) {
44 int moduleInQuad = jem->module() % 8;
45 if (jem->crate() == m_crate) {
46 int quad = ( jem->module() < 8 ? 0 : 1 );
47 if ((maskTE>>moduleInQuad)&1) {
48 eT[quad] += jem->et();
49 if ( jem->et() >= m_jemEtSaturation ) m_overflowT = 1;
50 }
51 if ((maskXE>>moduleInQuad)&1) {
52 eX[quad] += jem->ex();
53 eY[quad] += jem->ey();
54 if ( jem->ex() >= m_jemEtSaturation ) m_overflowX = 1;
55 if ( jem->ey() >= m_jemEtSaturation ) m_overflowY = 1;
56 }
57 } // Right crate?
58 } // Loop over JEMs
59
61 unsigned int mask = (1 << m_sumBits) - 1;
62
65 m_crateEt = eT[0] + eT[1];
66 if (m_crateEt >= mask){
67 m_overflowT = 1;
68 m_crateEt = mask;
69 }
70
71
72 if (!m_overflowX){
73 m_crateEx = eX[0] - eX[1];
74 } else{
75 m_crateEx = -(mask + 1);
76 }
77 if (!m_overflowY){
78 m_crateEy = eY[0] - eY[1];
79 }else{
80 m_crateEy = -(mask + 1);
81 }
82
83
84 if (m_debug) {
85 std::cout << "CrateEnergy: crate " << m_crate << " results " << std::endl
86 << " Et " << m_crateEt << " overflow " << m_overflowT << std::endl
87 << " Ex " << m_crateEx << " overflow " << m_overflowX << std::endl
88 << " Ey " << m_crateEy << " overflow " << m_overflowY << std::endl;
89
90 }
91
92}
93
94CrateEnergy::CrateEnergy(unsigned int crate, const DataVector<EnergyCMXData>* JEMs, uint32_t maskXE, uint32_t maskTE, bool restricted):
96 m_crateEt(0),
97 m_crateEx(0),
98 m_crateEy(0),
99 m_overflowT(0),
100 m_overflowX(0),
101 m_overflowY(0),
103 m_debug(false)
104 {
106 if (m_crate > 1) return;
107
109 if ((maskXE&0xff) != 0xff || (maskTE&0xff) != 0xff) m_restricted = true;
110
116
118 unsigned int eT[2] = {0,0};
119 unsigned int eX[2] = {0,0};
120 unsigned int eY[2] = {0,0};
121 for ( const EnergyCMXData* jem : *JEMs ) {
122 int moduleInQuad = jem->module() % 8;
123 if ((unsigned int)jem->crate() == m_crate) {
124 int quad = ( jem->module() < 8 ? 0 : 1 );
125
126 if ((maskTE>>moduleInQuad)&1) {
127 eT[quad] += jem->Et();
128 if ( jem->Et() >= m_jemEtSaturation ) m_overflowT = 1;
129 }
130 if ((maskXE>>moduleInQuad)&1) {
131 eX[quad] += jem->Ex();
132 eY[quad] += jem->Ey();
133 if ( jem->Ex() >= m_jemEtSaturation ) m_overflowX = 1;
134 if ( jem->Ey() >= m_jemEtSaturation ) m_overflowY = 1;
135 }
136 }
137 }
138
140 unsigned int mask = (1<<m_sumBits) - 1;
141
142
145 m_crateEt = eT[0] + eT[1];
146 if (m_crateEt >= mask){
147 m_overflowT = 1;
148 m_crateEt = mask;
149 }
150
151 if (!m_overflowX){
152 m_crateEx = eX[0] - eX[1];
153 } else{
154 m_crateEx = -(mask + 1);
155 }
156 if (!m_overflowY){
157 m_crateEy = eY[0] - eY[1];
158 }else{
159 m_crateEy = -(mask + 1);
160 }
161
162 if (m_debug) {
163 std::cout << "CrateEnergy: crate " << m_crate << " results " << std::endl
164 << " Et " << m_crateEt << " overflow " << m_overflowT << std::endl
165 << " Ex " << m_crateEx << " overflow " << m_overflowX << std::endl
166 << " Ey " << m_crateEy << " overflow " << m_overflowY << std::endl;
167
168 }
169
170}
171
172CrateEnergy::CrateEnergy(unsigned int crate, unsigned int et, unsigned int exTC,
173 unsigned int eyTC, unsigned int overflowT, unsigned int overflowX,
174 unsigned int overflowY, bool restricted) :
175 m_crate(crate),
176 m_crateEt(0),
177 m_crateEx(0),
178 m_crateEy(0),
179 m_overflowT(0),
180 m_overflowX(0),
181 m_overflowY(0),
183 m_debug(false)
184{
186 if (m_crate > 1) return;
187 m_crateEt = et;
190 m_overflowT = overflowT;
191 m_overflowX = overflowX;
192 m_overflowY = overflowY;
193
194 if (m_debug) {
195 std::cout << "CrateEnergy: crate " << m_crate << " results " << std::endl
196 << " Et " << m_crateEt << " overflow " << m_overflowT << std::endl
197 << " Ex " << m_crateEx << " overflow " << m_overflowX << std::endl
198 << " Ey " << m_crateEy << " overflow " << m_overflowY << std::endl;
199
200 }
201}
202
203
206
208unsigned int CrateEnergy::crate() const {
209 return m_crate;
210}
211
213int CrateEnergy::et() const {
214 return m_crateEt;
215}
216
218int CrateEnergy::ex() const {
219 return m_crateEx;
220}
221
223int CrateEnergy::ey() const {
224 return m_crateEy;
225}
226
228unsigned int CrateEnergy::etOverflow() const {
229 return m_overflowT;
230}
231
233unsigned int CrateEnergy::exOverflow() const {
234 return m_overflowX;
235}
236
238unsigned int CrateEnergy::eyOverflow() const {
239 return m_overflowY;
240}
241
244 return m_restricted;
245}
246
248unsigned int CrateEnergy::exTC() const {
249 return encodeTC(m_crateEx);
250}
251
253unsigned int CrateEnergy::eyTC() const {
254 return encodeTC(m_crateEy);
255}
256
258unsigned int CrateEnergy::encodeTC(int input) const {
259 unsigned int value;
260
261 if (input > 0) {
262 value = input;
263 }
264 else {
265 value = (1<<m_sumBitsTC) + input;
266 }
267
268 int mask = (1<<m_sumBitsTC) - 1;
269 return value&mask ;
270}
271
273int CrateEnergy::decodeTC(unsigned int input) const {
274
275 int mask = (1<<m_sumBitsTC) - 1;
276 int value = input&mask;
277
278 if ((value >> (m_sumBitsTC - 1))) {
279 value += (~0U) << m_sumBitsTC;
280 }
281
282 return value;
283}
284} // end of ns
Derived DataVector<T>.
Definition DataVector.h:795
unsigned int crate() const
return crate number
int ex() const
return crate Ex
unsigned int m_overflowT
Definition CrateEnergy.h:59
int ey() const
return crate Ey
int et() const
return et, ex, ey sums
static const unsigned int m_sumBits
Definition CrateEnergy.h:65
unsigned int exOverflow() const
Overflow bits.
unsigned int m_overflowY
Definition CrateEnergy.h:61
bool restricted() const
Full or restricted eta range?
unsigned int eyOverflow() const
return Ey overflow bit
unsigned int m_crate
Definition CrateEnergy.h:55
unsigned int etOverflow() const
return Et overflow bit
CrateEnergy(unsigned int crate, const DataVector< ModuleEnergy > *modules, uint32_t maskXE=0xff, uint32_t maskTE=0xff, bool restricted=false)
unsigned int encodeTC(int input) const
encode int as 15-bit twos-complement format (hardware Ex/Ey format)
int decodeTC(unsigned int input) const
decode 15-bit twos-complement format (hardware Ex/Ey format) as int
static const unsigned int m_sumBitsTC
Definition CrateEnergy.h:64
unsigned int exTC() const
15 bit twos-complement format
unsigned int m_crateEt
Definition CrateEnergy.h:56
unsigned int eyTC() const
return crate Ey in 15-bit twos-complement format (hardware format)
unsigned int m_overflowX
Definition CrateEnergy.h:60
static const unsigned int m_jemEtSaturation
Definition CrateEnergy.h:66
The EnergyCMXData object contains the data transferred from the JEM to the EnergySum CMX in the crate...
This is an internal class, used in the Energy trigger.
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...