ATLAS Offline Software
CpmSubBlock.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
6 #include "CpmSubBlock.h"
7 
8 namespace LVL1BS {
9 
10 // Constant definitions
11 
12 const int CpmSubBlock::s_wordIdVal;
13 
15 
22 const int CpmSubBlock::s_pairBit;
23 const int CpmSubBlock::s_fpgaBit;
24 const int CpmSubBlock::s_dataIdBit;
25 const int CpmSubBlock::s_ttWordId;
29 
33 
36 const int CpmSubBlock::s_ttBits;
37 const int CpmSubBlock::s_errBits;
38 const int CpmSubBlock::s_hitBits;
39 const int CpmSubBlock::s_hitWords;
40 const int CpmSubBlock::s_glinkPins;
42 
43 
44 CpmSubBlock::CpmSubBlock() : m_channels(80)
45 {
46  m_chanPresent.assign(m_channels, 0);
47 }
48 
50 {
51 }
52 
53 // Clear all data
54 
56 {
58  m_ttData.clear();
59  m_hitData.clear();
60  m_chanPresent.assign(m_channels, 0);
61 }
62 
63 // Store CPM header
64 
65 void CpmSubBlock::setCpmHeader(const int version, const int format,
66  const int slice, const int crate,
67  const int module, const int timeslices)
68 {
70 }
71 
72 // Store trigger tower data
73 
74 void CpmSubBlock::fillTowerData(const int slice, const int channel,
75  const int em, const int had,
76  const int emErr, const int hadErr)
77 {
78  if (channel < m_channels && (em || emErr || had || hadErr)) {
80  int dat = em;
81  int err = emErr;
82  for (int pinOffset = 0; pinOffset < 2; ++pinOffset) {
83  if (dat || err) {
84  const int pin = 2 * (channel/s_wordsPerPin) + pinOffset;
85  const int pair = (channel % s_wordsPerPin) / 2;
86  const int pos = pin * s_pairsPerPin + pair;
87  const int ix = index(slice) * m_channels + pos;
88  uint32_t word = m_ttData[ix];
89  if (channel % 2 == 0) {
90  word |= (dat & s_ttDataMask) << s_ttDataABit;
91  word |= (err & 0x1) << s_parityABit;
92  word |= ((err >> 1) & 0x1) << s_linkDownABit;
93  } else {
94  word |= (dat & s_ttDataMask) << s_ttDataBBit;
95  word |= (err & 0x1) << s_parityBBit;
96  word |= ((err >> 1) & 0x1) << s_linkDownBBit;
97  }
98  word |= pair << s_pairBit;
99  word |= pin << s_fpgaBit;
100  word |= s_ttWordId << s_dataIdBit;
101  m_ttData[ix] = word;
102  }
103  dat = had;
104  err = hadErr;
105  }
106  m_chanPresent[channel] = 1;
107  }
108 }
109 
110 // Store hit counts
111 
112 void CpmSubBlock::setHits(const int slice, const unsigned int hit0,
113  const unsigned int hit1)
114 {
115  if (hit0 || hit1) {
116  resize(m_hitData, 2);
117  const int ix = index(slice)*2;
118  unsigned int hits = hit0;
119  for (int indicator = 0; indicator < 2; ++indicator) {
120  if (hits) {
121  uint32_t word = (hits & s_threshMask);
122  word |= indicator << s_indicatorBit;
123  word |= s_threshWordId << s_dataIdBit;
124  m_hitData[ix + indicator] = word;
125  }
126  hits = hit1;
127  }
128  }
129 }
130 
131 // Return Em data for given channel
132 
133 int CpmSubBlock::emData(const int slice, const int channel) const
134 {
135  return data(slice, channel, 0);
136 }
137 
138 // Return Had data for given channel
139 
140 int CpmSubBlock::hadData(const int slice, const int channel) const
141 {
142  return data(slice, channel, 1);
143 }
144 
145 // Return Em error for given channel
146 
147 int CpmSubBlock::emError(const int slice, const int channel) const
148 {
149  return error(slice, channel, 0);
150 }
151 
152 // Return Had error for given channel
153 
154 int CpmSubBlock::hadError(const int slice, const int channel) const
155 {
156  return error(slice, channel, 1);
157 }
158 
159 // Return first hit counts word
160 
161 unsigned int CpmSubBlock::hits0(const int slice) const
162 {
163  return hits(slice, 0);
164 }
165 
166 // Return second hit counts word
167 
168 unsigned int CpmSubBlock::hits1(const int slice) const
169 {
170  return hits(slice, 1);
171 }
172 
173 // Return number of timeslices
174 
176 {
177  int slices = slices1();
178  if (slices == 0 && format() == NEUTRAL) {
180  }
181  if (slices == 0) slices = 1;
182  return slices;
183 }
184 
185 // Packing/Unpacking routines
186 
188 {
189  bool rc = false;
190  switch (version()) {
191  case 1:
192  switch (format()) {
193  case NEUTRAL:
194  rc = packNeutral();
195  break;
196  case UNCOMPRESSED:
197  rc = packUncompressed();
198  break;
199  default:
200  break;
201  }
202  break;
203  default:
204  break;
205  }
206  return rc;
207 }
208 
210 {
211  bool rc = false;
212  switch (version()) {
213  case 1:
214  switch (format()) {
215  case NEUTRAL:
216  rc = unpackNeutral();
217  break;
218  case UNCOMPRESSED:
219  rc = unpackUncompressed();
220  break;
221  default:
223  break;
224  }
225  break;
226  default:
228  break;
229  }
230  return rc;
231 }
232 
233 // Return data for given channel and pin offset
234 
235 int CpmSubBlock::data(const int slice, const int channel,
236  const int offset) const
237 {
238  int dat = 0;
239  if (slice >= 0 && slice < timeslices() &&
240  channel >= 0 && channel < m_channels && !m_ttData.empty()) {
241  const int pin = 2 * (channel/s_wordsPerPin) + offset;
242  const int pair = (channel % s_wordsPerPin) / 2;
243  const int pos = pin * s_pairsPerPin + pair;
244  const int ix = index(slice) * m_channels + pos;
245  const uint32_t word = m_ttData[ix];
246  if (channel % 2 == 0) {
247  dat = (word >> s_ttDataABit) & s_ttDataMask;
248  } else dat = (word >> s_ttDataBBit) & s_ttDataMask;
249  }
250  return dat;
251 }
252 
253 // Return error for given channel and pin offset
254 
255 int CpmSubBlock::error(const int slice, const int channel,
256  const int offset) const
257 {
258  int err = 0;
259  if (slice >= 0 && slice < timeslices() &&
260  channel >= 0 && channel < m_channels && !m_ttData.empty()) {
261  const int pin = 2 * (channel/s_wordsPerPin) + offset;
262  const int pair = (channel % s_wordsPerPin) / 2;
263  const int pos = pin * s_pairsPerPin + pair;
264  const int ix = index(slice) * m_channels + pos;
265  const uint32_t word = m_ttData[ix];
266  if (channel % 2 == 0) {
267  err = (word >> s_parityABit) & 0x1;
268  err |= ((word >> s_linkDownABit) & 0x1) << 1;
269  } else {
270  err = (word >> s_parityBBit) & 0x1;
271  err |= ((word >> s_linkDownBBit) & 0x1) << 1;
272  }
273  }
274  return err;
275 }
276 
277 // Return hit counts with given offset
278 
279 unsigned int CpmSubBlock::hits(const int slice, const int offset) const
280 {
281  unsigned int hit = 0;
282  if (slice >= 0 && slice < timeslices() && !m_hitData.empty()) {
283  hit = m_hitData[index(slice)*2 + offset] & s_threshMask;
284  }
285  return hit;
286 }
287 
288 // Return data index appropriate to format
289 
290 int CpmSubBlock::index(const int slice) const
291 {
292  return (format() == NEUTRAL) ? slice : 0;
293 }
294 
295 // Resize a data vector according to format
296 
297 void CpmSubBlock::resize(std::vector<uint32_t>& vec, int channels)
298 {
299  if (vec.empty()) {
300  int size = channels;
301  if (format() == NEUTRAL) size *= timeslices();
302  vec.resize(size);
303  }
304 }
305 
306 // Pack neutral data
307 
309 {
311  resize(m_hitData, 2);
312  const int slices = timeslices();
313  for (int slice = 0; slice < slices; ++slice) {
314  const unsigned int hit0 = hits0(slice);
315  const unsigned int hit1 = hits1(slice);
316  for (int pin = 0; pin < s_glinkPins; ++pin) {
317  // Trigger tower data
318  for (int pair = 0; pair < s_pairsPerPin; ++pair) {
319  for (int i = 0; i < 2; ++i) {
320  const int channel = s_wordsPerPin*(pin/2) + 2*pair + i;
321  if ((pin & 0x1)) { // Odd pins Had, even Em
324  } else {
327  }
328  }
329  }
330  // Hits and Bunch Crossing number
331  if (pin < s_hitWords) {
332  packerNeutral(pin, hit0 >> pin*s_hitBits, s_hitBits);
333  } else if (pin < 2*s_hitWords) {
334  packerNeutral(pin, hit1 >> (pin - s_hitWords)*s_hitBits, s_hitBits);
335  } else {
336  packerNeutral(pin, bunchCrossing() >> (pin - 2*s_hitWords)*s_hitBits,
337  s_hitBits);
338  }
339  // G-Link parity
340  packerNeutralParity(pin);
341  }
342  }
343  return true;
344 }
345 
346 // Pack uncompressed data
347 
349 {
350  // Trigger tower data
351  std::vector<uint32_t>::const_iterator pos;
352  for (pos = m_ttData.begin(); pos != m_ttData.end(); ++pos) {
353  if (*pos) packer(*pos, s_wordLength);
354  }
355 
356  // Hits data
357  for (pos = m_hitData.begin(); pos != m_hitData.end(); ++pos) {
358  if (*pos) packer(*pos, s_wordLength);
359  }
360  packerFlush();
361  return true;
362 }
363 
364 // Unpack neutral data
365 
367 {
369  resize(m_hitData, 2);
370  const int slices = timeslices();
371  for (int slice = 0; slice < slices; ++slice) {
372  unsigned int hit0 = 0;
373  unsigned int hit1 = 0;
374  int bunchCrossing = 0;
375  for (int pin = 0; pin < s_glinkPins; ++pin) {
376  // Trigger tower data
377  for (int pair = 0; pair < s_pairsPerPin; ++pair) {
378  for (int i = 0; i < 2; ++i) {
379  const int channel = s_wordsPerPin*(pin/2) + 2*pair + i;
380  int em = 0;
381  int had = 0;
382  int emErr = 0;
383  int hadErr = 0;
384  if ((pin & 0x1)) { // Odd pins Had, even Em
385  em = emData(slice, channel);
386  had = unpackerNeutral(pin, s_ttBits);
387  emErr = emError(slice, channel);
388  hadErr = unpackerNeutral(pin, s_errBits);
389  } else {
390  em = unpackerNeutral(pin, s_ttBits);
391  had = hadData(slice, channel);
392  emErr = unpackerNeutral(pin, s_errBits);
393  hadErr = hadError(slice, channel);
394  }
395  fillTowerData(slice, channel, em, had, emErr, hadErr);
396  }
397  }
398  // Hits and Bunch Crossing number
399  if (pin < s_hitWords) {
400  hit0 |= unpackerNeutral(pin, s_hitBits) << pin*s_hitBits;
401  } else if (pin < 2*s_hitWords) {
402  hit1 |= unpackerNeutral(pin, s_hitBits) << (pin - s_hitWords)*s_hitBits;
403  } else {
405  << (pin - 2*s_hitWords)*s_hitBits;
406  }
407  // G-Link parity error
409  }
410  setHits(slice, hit0, hit1);
412  }
413  const bool rc = unpackerSuccess();
415  return rc;
416 }
417 
418 // Unpack uncompressed data
419 
421 {
423  resize(m_hitData, 2);
424  unpackerInit();
426  while (unpackerSuccess()) {
427  const int id = dataId(word);
428  bool err = false;
429  // Trigger tower data
430  if (id == s_ttWordId) {
431  const int ix = (word >> s_pairBit) & s_pairPinMask;
432  if (ix < m_channels && m_ttData[ix] == 0) {
433  m_ttData[ix] = word;
434  const int pin = ix/4;
435  const int pair = ix%4;
436  const int channel = s_wordsPerPin*(pin/2) + 2*pair;
437  m_chanPresent[channel] = 1;
438  m_chanPresent[channel+1] = 1;
439  } else err = true;
440  // Hits
441  } else {
442  const int indicator = (word >> s_indicatorBit) & 0x1;
443  if (m_hitData[indicator] == 0) m_hitData[indicator] = word;
444  else err = true;
445  }
446  if (err) {
448  return false;
449  }
450  word = unpacker(s_wordLength);
451  }
452  return true;
453 }
454 
455 } // end namespace
LVL1BS::L1CaloSubBlock::setBunchCrossing
void setBunchCrossing(int bc)
Set the Bunch Crossing number (neutral format only)
Definition: L1CaloSubBlock.h:328
LVL1BS::CpmSubBlock::m_hitData
std::vector< uint32_t > m_hitData
Hit counts.
Definition: CpmSubBlock.h:121
LVL1BS::CpmSubBlock::hadData
int hadData(int slice, int channel) const
Return Had data for given channel.
Definition: CpmSubBlock.cxx:140
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
LVL1BS::CpmSubBlock::s_pairPinMask
static const uint32_t s_pairPinMask
Definition: CpmSubBlock.h:80
LVL1BS::CpmSubBlock::unpackUncompressed
bool unpackUncompressed()
Unpack uncompressed data.
Definition: CpmSubBlock.cxx:420
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:28
LVL1BS::L1CaloSubBlock::clear
void clear()
Clear all data.
Definition: L1CaloSubBlock.cxx:82
vtune_athena.format
format
Definition: vtune_athena.py:14
LVL1BS::L1CaloSubBlock::packerNeutral
void packerNeutral(int pin, uint32_t datum, int nbits)
Pack given neutral data from given pin.
Definition: L1CaloSubBlock.cxx:413
LVL1BS::CpmSubBlock::s_dataIdBit
static const int s_dataIdBit
Definition: CpmSubBlock.h:77
LVL1BS::CpmSubBlock::s_parityBBit
static const int s_parityBBit
Definition: CpmSubBlock.h:72
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
LVL1BS::CpmSubBlock::hits
unsigned int hits(int slice, int offset) const
Return hit counts with given offset.
Definition: CpmSubBlock.cxx:279
LVL1BS::CpmSubBlock::~CpmSubBlock
~CpmSubBlock()
Definition: CpmSubBlock.cxx:49
LVL1BS::CpmSubBlock::s_dataIdMask
static const uint32_t s_dataIdMask
Definition: CpmSubBlock.h:81
LVL1BS::CpmSubBlock::emData
int emData(int slice, int channel) const
Return Em data for given channel.
Definition: CpmSubBlock.cxx:133
LVL1BS::L1CaloSubBlock::unpackerInit
void unpackerInit()
Initialise unpacker.
Definition: L1CaloSubBlock.cxx:393
LVL1BS::CpmSubBlock::s_ttWordId
static const int s_ttWordId
Definition: CpmSubBlock.h:78
LVL1BS::CpmSubBlock::s_wordLength
static const int s_wordLength
Data word length.
Definition: CpmSubBlock.h:67
vec
std::vector< size_t > vec
Definition: CombinationsGeneratorTest.cxx:12
LVL1BS::L1CaloSubBlock::NEUTRAL
@ NEUTRAL
Definition: L1CaloSubBlock.h:28
LVL1BS::L1CaloSubBlock::setHeader
void setHeader(int wordId, int version, int format, int seqno, int crate, int module, int slices2, int slices1)
Store header data.
Definition: L1CaloSubBlock.cxx:99
LVL1BS::L1CaloSubBlock::UNPACK_SOURCE_ID
@ UNPACK_SOURCE_ID
Definition: L1CaloSubBlock.h:41
CpmSubBlock.h
LVL1BS::CpmSubBlock::s_parityABit
static const int s_parityABit
Definition: CpmSubBlock.h:71
LVL1BS::L1CaloSubBlock::slice
int slice() const
Definition: L1CaloSubBlock.h:258
LVL1BS::CpmSubBlock::s_threshWordId
static const uint32_t s_threshWordId
Definition: CpmSubBlock.h:84
LVL1BS::CpmSubBlock::index
int index(int slice) const
Return data index appropriate to format.
Definition: CpmSubBlock.cxx:290
LVL1BS::CpmSubBlock::m_ttData
std::vector< uint32_t > m_ttData
Trigger tower data.
Definition: CpmSubBlock.h:119
LVL1BS::L1CaloSubBlock::packerFlush
void packerFlush()
Flush the current data word padded with zeros.
Definition: L1CaloSubBlock.cxx:331
LVL1BS::L1CaloSubBlock::bunchCrossing
int bunchCrossing() const
Return the Bunch Crossing number (neutral format only)
Definition: L1CaloSubBlock.h:333
LVL1BS::CpmSubBlock::hits0
unsigned int hits0(int slice) const
Return e/gamma hit counts.
Definition: CpmSubBlock.cxx:161
LVL1BS::CpmSubBlock::hadError
int hadError(int slice, int channel) const
Return Had error for given channel.
Definition: CpmSubBlock.cxx:154
dq_defect_copy_defect_database.channels
def channels
Definition: dq_defect_copy_defect_database.py:56
LVL1BS::CpmSubBlock::setHits
void setHits(int slice, unsigned int hit0, unsigned int hit1)
Store hit counts.
Definition: CpmSubBlock.cxx:112
LVL1BS::L1CaloSubBlock::crate
int crate() const
Definition: L1CaloSubBlock.h:263
LVL1BS::CpmSubBlock::CpmSubBlock
CpmSubBlock()
Definition: CpmSubBlock.cxx:44
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
python.PyAthena.module
module
Definition: PyAthena.py:134
LVL1BS::CpmSubBlock::unpackNeutral
bool unpackNeutral()
Unpack neutral data.
Definition: CpmSubBlock.cxx:366
LVL1BS::CpmSubBlock::s_hitWords
static const int s_hitWords
Definition: CpmSubBlock.h:92
LVL1BS::CpmSubBlock::timeslices
int timeslices() const
Return number of timeslices.
Definition: CpmSubBlock.cxx:175
LVL1BS::CpmSubBlock::s_pairBit
static const int s_pairBit
Definition: CpmSubBlock.h:75
LVL1BS::L1CaloSubBlock::packer
void packer(uint32_t datum, int nbits)
Pack given data into given number of bits.
Definition: L1CaloSubBlock.cxx:302
dqt_zlumi_pandas.err
err
Definition: dqt_zlumi_pandas.py:193
perfmonmt-refit.slice
slice
Definition: perfmonmt-refit.py:52
LVL1BS::CpmSubBlock::error
int error(int slice, int channel, int offset) const
Return error for given channel and pin offset.
Definition: CpmSubBlock.cxx:255
LVL1BS::L1CaloSubBlock::UNPACK_DATA_TRUNCATED
@ UNPACK_DATA_TRUNCATED
Definition: L1CaloSubBlock.h:40
lumiFormat.i
int i
Definition: lumiFormat.py:92
LVL1BS::CpmSubBlock::pack
bool pack()
Pack data.
Definition: CpmSubBlock.cxx:187
LVL1BS::CpmSubBlock::packUncompressed
bool packUncompressed()
Pack uncompressed data.
Definition: CpmSubBlock.cxx:348
LVL1BS::CpmSubBlock::dataId
int dataId(uint32_t word) const
Return data WordID.
Definition: CpmSubBlock.h:129
LVL1BS::CpmSubBlock::packNeutral
bool packNeutral()
Pack neutral data.
Definition: CpmSubBlock.cxx:308
LVL1BS::CpmSubBlock::clear
void clear()
Clear all data.
Definition: CpmSubBlock.cxx:55
LVL1BS::L1CaloSubBlock::unpackerNeutralParityError
bool unpackerNeutralParityError(int pin)
Unpack and test G-Link parity bit for given pin.
Definition: L1CaloSubBlock.cxx:464
LVL1BS::CpmSubBlock::s_wordIdVal
static const int s_wordIdVal
CPM header word ID.
Definition: CpmSubBlock.h:65
LVL1BS::L1CaloSubBlock::format
int format() const
Definition: L1CaloSubBlock.h:248
LVL1BS::CpmSubBlock::m_channels
int m_channels
Number of Trigger tower channels per module.
Definition: CpmSubBlock.h:125
LVL1BS::CpmSubBlock::s_errBits
static const int s_errBits
Definition: CpmSubBlock.h:90
LVL1BS::CpmSubBlock::resize
void resize(std::vector< uint32_t > &vec, int channels)
Resize a data vector according to format.
Definition: CpmSubBlock.cxx:297
LVL1BS::L1CaloSubBlock::unpacker
uint32_t unpacker(int nbits)
Unpack given number of bits of data.
Definition: L1CaloSubBlock.cxx:345
LVL1BS::CpmSubBlock::s_pairsPerPin
static const int s_pairsPerPin
Definition: CpmSubBlock.h:87
LVL1BS::L1CaloSubBlock::UNPACK_VERSION
@ UNPACK_VERSION
Definition: L1CaloSubBlock.h:38
LVL1BS::CpmSubBlock::s_fpgaBit
static const int s_fpgaBit
Definition: CpmSubBlock.h:76
LVL1BS::CpmSubBlock::s_indicatorBit
static const int s_indicatorBit
Definition: CpmSubBlock.h:83
LVL1BS::CpmSubBlock::hits1
unsigned int hits1(int slice) const
Return tau hit counts.
Definition: CpmSubBlock.cxx:168
LVL1BS::L1CaloSubBlock::version
int version() const
Definition: L1CaloSubBlock.h:243
LVL1BS::CpmSubBlock::s_wordsPerPin
static const int s_wordsPerPin
Definition: CpmSubBlock.h:88
LVL1BS::L1CaloSubBlock::unpackerSuccess
bool unpackerSuccess() const
Return unpacker success flag.
Definition: L1CaloSubBlock.h:354
LVL1BS::CpmSubBlock::s_ttBits
static const int s_ttBits
Definition: CpmSubBlock.h:89
LVL1BS::L1CaloSubBlock::slices1
int slices1() const
Definition: L1CaloSubBlock.h:278
LVL1BS::L1CaloSubBlock::dataWords
int dataWords() const
Return number of data words.
Definition: L1CaloSubBlock.h:233
LVL1BS::CpmSubBlock::s_glinkBitsPerSlice
static const int s_glinkBitsPerSlice
Definition: CpmSubBlock.h:94
LVL1BS::CpmSubBlock::s_ttDataMask
static const uint32_t s_ttDataMask
Definition: CpmSubBlock.h:79
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
LVL1BS::L1CaloSubBlock::module
int module() const
Definition: L1CaloSubBlock.h:268
get_generator_info.version
version
Definition: get_generator_info.py:33
LVL1BS::CpmSubBlock::s_glinkPins
static const int s_glinkPins
Definition: CpmSubBlock.h:93
LVL1BS::CpmSubBlock::s_hitBits
static const int s_hitBits
Definition: CpmSubBlock.h:91
LVL1BS
Definition: ZdcByteStreamReadV1V2Tool.h:47
LVL1BS::CpmSubBlock::fillTowerData
void fillTowerData(int slice, int channel, int em, int had, int emErr, int hadErr)
Store trigger tower data.
Definition: CpmSubBlock.cxx:74
convertTimingResiduals.offset
offset
Definition: convertTimingResiduals.py:71
LVL1BS::L1CaloSubBlock::setUnpackErrorCode
void setUnpackErrorCode(int code)
Set the unpacking error code.
Definition: L1CaloSubBlock.h:338
LVL1BS::CpmSubBlock::emError
int emError(int slice, int channel) const
Return Em error for given channel.
Definition: CpmSubBlock.cxx:147
LVL1BS::CpmSubBlock::s_ttDataABit
static const int s_ttDataABit
Definition: CpmSubBlock.h:69
LVL1BS::CpmSubBlock::s_linkDownBBit
static const int s_linkDownBBit
Definition: CpmSubBlock.h:74
LVL1BS::L1CaloSubBlock::unpackerNeutral
uint32_t unpackerNeutral(int pin, int nbits)
Unpack given number of bits of neutral data for given pin.
Definition: L1CaloSubBlock.cxx:445
LVL1BS::CpmSubBlock::m_chanPresent
std::vector< int > m_chanPresent
Channel present flags vector.
Definition: CpmSubBlock.h:123
LVL1BS::CpmSubBlock::s_ttDataBBit
static const int s_ttDataBBit
Definition: CpmSubBlock.h:70
LVL1BS::CpmSubBlock::s_threshMask
static const uint32_t s_threshMask
Definition: CpmSubBlock.h:85
LVL1BS::CpmSubBlock::setCpmHeader
void setCpmHeader(int version, int format, int slice, int crate, int module, int timeslices)
Store CPM header.
Definition: CpmSubBlock.cxx:65
LVL1BS::CpmSubBlock::data
int data(int slice, int channel, int offset) const
Return data for given channel and pin offset.
Definition: CpmSubBlock.cxx:235
LVL1BS::CpmSubBlock::unpack
bool unpack()
Unpack data.
Definition: CpmSubBlock.cxx:209
keylayer_zslicemap.slices
slices
Definition: keylayer_zslicemap.py:112
LVL1BS::CpmSubBlock::s_linkDownABit
static const int s_linkDownABit
Definition: CpmSubBlock.h:73
LVL1BS::L1CaloSubBlock::UNCOMPRESSED
@ UNCOMPRESSED
Definition: L1CaloSubBlock.h:28
LVL1BS::L1CaloSubBlock::UNPACK_FORMAT
@ UNPACK_FORMAT
Definition: L1CaloSubBlock.h:39
LVL1BS::L1CaloSubBlock::packerNeutralParity
void packerNeutralParity(int pin)
Pack current G-Link parity bit for given pin.
Definition: L1CaloSubBlock.cxx:434