CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
CaloLayer1Unpacker.cc
Go to the documentation of this file.
3 
4 #include "CaloLayer1Unpacker.h"
5 
6 using namespace edm;
7 
8 namespace l1t {
9  namespace stage2 {
10 
11  // max_iEta_HcalTP = 41; // barrel <= 16, endcap <= 29, hf <= 41
12  // there are two TT29’s: one in HE readout in TT28 and another in HF readout in TT30
13  // max_iPhi_HcalTP = 72;
14 
16  LogDebug("L1T") << "Block size = " << block.header().getSize();
17  LogDebug("L1T") << "Board ID = " << block.amc().getBoardID();
18 
19  auto res = static_cast<CaloLayer1Collections*>(coll);
20 
21  auto ctp7_phi = block.amc().getBoardID();
22  const uint32_t* ptr = block.payload().data();
23 
24  int N_BX = (block.header().getFlags() >> 16) & 0xf;
25  // std::cout << " N_BX calculated " << N_BX << std::endl;
26 
27  if (N_BX == 1) {
28  UCTCTP7RawData ctp7Data(ptr);
29  makeECalTPGs(ctp7_phi, ctp7Data, res->getEcalDigis());
30  makeHCalTPGs(ctp7_phi, ctp7Data, res->getHcalDigis());
31  makeHFTPGs(ctp7_phi, ctp7Data, res->getHcalDigis());
32  makeRegions(ctp7_phi, ctp7Data, res->getRegions());
33  } else if (N_BX == 5) {
34  UCTCTP7RawData5BX ctp7Data5BX(ptr);
35  // BX_n = 0, 1, 2, 3, 4, where 2 is nominal
36  makeECalTPGs5BX(ctp7_phi, ctp7Data5BX, res->getEcalDigis(), 2);
37  makeHCalTPGs5BX(ctp7_phi, ctp7Data5BX, res->getHcalDigis(), 2);
38  makeHFTPGs5BX(ctp7_phi, ctp7Data5BX, res->getHcalDigis(), 2);
39  makeRegions5BX(ctp7_phi, ctp7Data5BX, res->getRegions(), 2);
40  for (int i = 0; i < 5; i++) {
41  makeECalTPGs5BX(ctp7_phi, ctp7Data5BX, res->getEcalDigisBx(i), i);
42  }
43  } else {
44  LogError("CaloLayer1Unpacker") << "Number of BXs to unpack is not 1 or 5, stop here !!! " << N_BX << std::endl;
45  return false;
46  }
47 
48  return true;
49  }
50 
51  void CaloLayer1Unpacker::makeECalTPGs(uint32_t lPhi,
52  UCTCTP7RawData& ctp7Data,
53  EcalTrigPrimDigiCollection* ecalTPGs) {
55  for (uint32_t iPhi = 0; iPhi < 4; iPhi++) { // Loop over all four phi divisions on card
56  int cPhi = -1 + lPhi * 4 + iPhi; // Calorimeter phi index
57  if (cPhi == 0)
58  cPhi = 72;
59  else if (cPhi == -1)
60  cPhi = 71;
61  else if (cPhi < -1) {
62  LogError("CaloLayer1Unpacker") << "Major error in makeECalTPGs" << std::endl;
63  return;
64  }
65  for (int cEta = -28; cEta <= 28; cEta++) { // Calorimeter Eta indices (HB/HE for now)
66  if (cEta != 0) { // Calorimeter eta = 0 is invalid
67  bool negativeEta = false;
68  if (cEta < 0)
69  negativeEta = true;
70  uint32_t iEta = abs(cEta);
71  // This code is fragile! Note that towerDatum is packed as is done in EcalTriggerPrimitiveSample
72  // Bottom 8-bits are ET
73  // Then finegrain feature bit
74  // Then three bits have ttBits, which I have no clue about (not available on ECAL links so not set)
75  // Then there is a spare FG Veto bit, which is used for L1 spike detection (not available on ECAL links so not set)
76  // Top three bits seem to be unused. So, we steal those to set the tower masking, link masking and link status information
77  // To decode these custom three bits use ((EcalTriggerPrimitiveSample::raw() >> 13) & 0x7)
78  uint32_t towerDatum = ctp7Data.getET(cType, negativeEta, iEta, iPhi);
79  if (ctp7Data.getFB(cType, negativeEta, iEta, iPhi) != 0)
80  towerDatum |= 0x0100;
81  if (ctp7Data.isTowerMasked(cType, negativeEta, iEta, iPhi))
82  towerDatum |= 0x2000;
83  if (ctp7Data.isLinkMasked(cType, negativeEta, iEta, iPhi))
84  towerDatum |= 0x4000;
85  if (ctp7Data.isLinkMisaligned(cType, negativeEta, iEta, iPhi) ||
86  ctp7Data.isLinkInError(cType, negativeEta, iEta, iPhi) ||
87  ctp7Data.isLinkDown(cType, negativeEta, iEta, iPhi))
88  towerDatum |= 0x8000;
90  int zSide = cEta / ((int)iEta);
91  // As far as I can tell, the ECal unpacker only uses barrel and endcap IDs, never EcalTriggerTower
92  const EcalSubdetector ecalTriggerTower =
94  EcalTrigTowerDetId id(zSide, ecalTriggerTower, iEta, cPhi);
96  tpg.setSize(1);
97  tpg.setSample(0, sample);
98  ecalTPGs->push_back(tpg);
99  }
100  }
101  }
102  }
103 
104  void CaloLayer1Unpacker::makeHCalTPGs(uint32_t lPhi,
105  UCTCTP7RawData& ctp7Data,
106  HcalTrigPrimDigiCollection* hcalTPGs) {
108  for (uint32_t iPhi = 0; iPhi < 4; iPhi++) { // Loop over all four phi divisions on card
109  int cPhi = -1 + lPhi * 4 + iPhi; // Calorimeter phi index
110  if (cPhi == 0)
111  cPhi = 72;
112  else if (cPhi == -1)
113  cPhi = 71;
114  else if (cPhi < -1) {
115  LogError("CaloLayer1Unpacker") << "Major error in makeHCalTPGs" << std::endl;
116  return;
117  }
118  for (int cEta = -28; cEta <= 28; cEta++) { // Calorimeter Eta indices (HB/HE for now)
119  if (cEta != 0) { // Calorimeter eta = 0 is invalid
120  bool negativeEta = false;
121  if (cEta < 0)
122  negativeEta = true;
123  uint32_t iEta = abs(cEta);
124  // This code is fragile! Note that towerDatum is packed as is done in HcalTriggerPrimitiveSample
125  // Bottom 8-bits are ET
126  // Then feature bit
127  // The remaining bits are undefined presently
128  // We use next three bits for link details, which we did not have room in EcalTriggerPrimitiveSample case
129  // We use next three bits to set the tower masking, link masking and link status information as done for Ecal
130  // To decode these custom six bits use ((EcalTriggerPrimitiveSample::raw() >> 9) & 0x77)
131  uint32_t towerDatum = ctp7Data.getET(cType, negativeEta, iEta, iPhi);
132  if (ctp7Data.getFB(cType, negativeEta, iEta, iPhi) != 0)
133  towerDatum |= 0x0100;
134  if (ctp7Data.isLinkMisaligned(cType, negativeEta, iEta, iPhi))
135  towerDatum |= 0x0200;
136  if (ctp7Data.isLinkInError(cType, negativeEta, iEta, iPhi))
137  towerDatum |= 0x0400;
138  if (ctp7Data.isLinkDown(cType, negativeEta, iEta, iPhi))
139  towerDatum |= 0x0800;
140  if (ctp7Data.isTowerMasked(cType, negativeEta, iEta, iPhi))
141  towerDatum |= 0x2000;
142  if (ctp7Data.isLinkMasked(cType, negativeEta, iEta, iPhi))
143  towerDatum |= 0x4000;
144  if (ctp7Data.isLinkMisaligned(cType, negativeEta, iEta, iPhi) ||
145  ctp7Data.isLinkInError(cType, negativeEta, iEta, iPhi) ||
146  ctp7Data.isLinkDown(cType, negativeEta, iEta, iPhi))
147  towerDatum |= 0x8000;
149  HcalTrigTowerDetId id(cEta, cPhi);
150  HcalTriggerPrimitiveDigi tpg(id);
151  tpg.setSize(1);
152  tpg.setSample(0, sample);
153  hcalTPGs->push_back(tpg);
154  }
155  }
156  }
157  }
158 
159  void CaloLayer1Unpacker::makeHFTPGs(uint32_t lPhi, UCTCTP7RawData& ctp7Data, HcalTrigPrimDigiCollection* hcalTPGs) {
161  for (uint32_t side = 0; side <= 1; side++) {
162  bool negativeEta = false;
163  if (side == 0)
164  negativeEta = true;
165  for (uint32_t iEta = 30; iEta <= 40; iEta++) {
166  for (uint32_t iPhi = 0; iPhi < 2; iPhi++) {
167  if (iPhi == 1 && iEta == 40)
168  iEta = 41;
169  int cPhi = 1 + lPhi * 4 + iPhi * 2; // Calorimeter phi index: 1, 3, 5, ... 71
170  if (iEta == 41)
171  cPhi -= 2; // Last two HF are 3, 7, 11, ...
172  cPhi = (cPhi + 69) % 72 + 1; // cPhi -= 2 mod 72
173  int cEta = iEta;
174  if (negativeEta)
175  cEta = -iEta;
176  // This code is fragile! Note that towerDatum is packed as is done in HcalTriggerPrimitiveSample
177  // Bottom 8-bits are ET
178  // Then feature bit
179  // Then minBias ADC count bit
180  // The remaining bits are undefined presently
181  // We use next three bits for link details, which we did not have room in EcalTriggerPrimitiveSample case
182  // We use next three bits to set the tower masking, link masking and link status information as done for Ecal
183  // To decode these custom six bits use ((EcalTriggerPrimitiveSample::raw() >> 9) & 0x77)
184  uint32_t towerDatum = ctp7Data.getET(cType, negativeEta, iEta, iPhi);
185  towerDatum |= ctp7Data.getFB(cType, negativeEta, iEta, iPhi) << 8;
186  if (ctp7Data.isLinkMisaligned(cType, negativeEta, iEta, iPhi))
187  towerDatum |= 0x0400;
188  if (ctp7Data.isLinkInError(cType, negativeEta, iEta, iPhi))
189  towerDatum |= 0x0800;
190  if (ctp7Data.isLinkDown(cType, negativeEta, iEta, iPhi))
191  towerDatum |= 0x1000;
192  if (ctp7Data.isTowerMasked(cType, negativeEta, iEta, iPhi))
193  towerDatum |= 0x2000;
194  if (ctp7Data.isLinkMasked(cType, negativeEta, iEta, iPhi))
195  towerDatum |= 0x4000;
196  if (ctp7Data.isLinkMisaligned(cType, negativeEta, iEta, iPhi) ||
197  ctp7Data.isLinkInError(cType, negativeEta, iEta, iPhi) ||
198  ctp7Data.isLinkDown(cType, negativeEta, iEta, iPhi))
199  towerDatum |= 0x8000;
201  HcalTrigTowerDetId id(cEta, cPhi);
202  id.setVersion(1); // To not process these 1x1 HF TPGs with RCT
203  HcalTriggerPrimitiveDigi tpg(id);
204  tpg.setSize(1);
205  tpg.setSample(0, sample);
206  hcalTPGs->push_back(tpg);
207  }
208  }
209  }
210  }
211 
212  void CaloLayer1Unpacker::makeRegions(uint32_t lPhi, UCTCTP7RawData& ctp7Data, L1CaloRegionCollection* regions) {
213  for (uint32_t side = 0; side <= 1; side++) {
214  bool negativeEta = false;
215  if (side == 0)
216  negativeEta = true;
217  for (uint32_t region = 0; region <= 6; region++) {
218  uint32_t regionData = ctp7Data.getRegionSummary(negativeEta, region);
219  uint32_t lEta = 10 - region; // GCT eta goes 0-21, 0-3 -HF, 4-10 -B/E, 11-17 +B/E, 18-21 +HF
220  if (!negativeEta)
221  lEta = region + 11;
222  regions->push_back(L1CaloRegion((uint16_t)regionData, (unsigned)lEta, (unsigned)lPhi, (int16_t)0));
223  }
224  }
225  }
226 
227  // The following four functions are duplicated from above, to be used for 5BX events
228  // They have a new parameter BX_n = 0, 1, 2, 3, 4, where 2 is nominal
229  // And use functions defined in UCTCTP7RawData5BX.h
230  // The idea is not to intervene the normal events unpacking
231 
232  void CaloLayer1Unpacker::makeECalTPGs5BX(uint32_t lPhi,
233  UCTCTP7RawData5BX& ctp7Data5BX,
234  EcalTrigPrimDigiCollection* ecalTPGs,
235  uint32_t BX_n) {
237  for (uint32_t iPhi = 0; iPhi < 4; iPhi++) { // Loop over all four phi divisions on card
238  int cPhi = -1 + lPhi * 4 + iPhi; // Calorimeter phi index
239  if (cPhi == 0)
240  cPhi = 72;
241  else if (cPhi == -1)
242  cPhi = 71;
243  else if (cPhi < -1) {
244  LogError("CaloLayer1Unpacker") << "Major error in makeECalTPGs5BX" << std::endl;
245  return;
246  }
247  for (int cEta = -28; cEta <= 28; cEta++) { // Calorimeter Eta indices (HB/HE for now)
248  if (cEta != 0) { // Calorimeter eta = 0 is invalid
249  bool negativeEta = false;
250  if (cEta < 0)
251  negativeEta = true;
252  uint32_t iEta = abs(cEta);
253  // This code is fragile! Note that towerDatum is packed as is done in EcalTriggerPrimitiveSample
254  // Bottom 8-bits are ET
255  // Then finegrain feature bit
256  // Then three bits have ttBits, which I have no clue about (not available on ECAL links so not set)
257  // Then there is a spare FG Veto bit, which is used for L1 spike detection (not available on ECAL links so not set)
258  // Top three bits seem to be unused. So, we steal those to set the tower masking, link masking and link status information
259  // To decode these custom three bits use ((EcalTriggerPrimitiveSample::raw() >> 13) & 0x7)
260  uint32_t towerDatum = ctp7Data5BX.getET(cType, negativeEta, iEta, iPhi, BX_n);
261  if (ctp7Data5BX.getFB(cType, negativeEta, iEta, iPhi, BX_n) != 0)
262  towerDatum |= 0x0100;
263  if (ctp7Data5BX.isTowerMasked(cType, negativeEta, iEta, iPhi, BX_n))
264  towerDatum |= 0x2000;
265  if (ctp7Data5BX.isLinkMasked(cType, negativeEta, iEta, iPhi, BX_n))
266  towerDatum |= 0x4000;
267  if (ctp7Data5BX.isLinkMisaligned(cType, negativeEta, iEta, iPhi, BX_n) ||
268  ctp7Data5BX.isLinkInError(cType, negativeEta, iEta, iPhi, BX_n) ||
269  ctp7Data5BX.isLinkDown(cType, negativeEta, iEta, iPhi, BX_n))
270  towerDatum |= 0x8000;
272  int zSide = cEta / ((int)iEta);
273  // As far as I can tell, the ECal unpacker only uses barrel and endcap IDs, never EcalTriggerTower
274  const EcalSubdetector ecalTriggerTower =
276  EcalTrigTowerDetId id(zSide, ecalTriggerTower, iEta, cPhi);
277  EcalTriggerPrimitiveDigi tpg(id);
278  tpg.setSize(1);
279  tpg.setSample(0, sample);
280  ecalTPGs->push_back(tpg);
281  }
282  }
283  }
284  }
285 
286  void CaloLayer1Unpacker::makeHCalTPGs5BX(uint32_t lPhi,
287  UCTCTP7RawData5BX& ctp7Data5BX,
288  HcalTrigPrimDigiCollection* hcalTPGs,
289  uint32_t BX_n) {
291  for (uint32_t iPhi = 0; iPhi < 4; iPhi++) { // Loop over all four phi divisions on card
292  int cPhi = -1 + lPhi * 4 + iPhi; // Calorimeter phi index
293  if (cPhi == 0)
294  cPhi = 72;
295  else if (cPhi == -1)
296  cPhi = 71;
297  else if (cPhi < -1) {
298  LogError("CaloLayer1Unpacker") << "Major error in makeHCalTPGs5BX" << std::endl;
299  return;
300  }
301  for (int cEta = -28; cEta <= 28; cEta++) { // Calorimeter Eta indices (HB/HE for now)
302  if (cEta != 0) { // Calorimeter eta = 0 is invalid
303  bool negativeEta = false;
304  if (cEta < 0)
305  negativeEta = true;
306  uint32_t iEta = abs(cEta);
307  // This code is fragile! Note that towerDatum is packed as is done in HcalTriggerPrimitiveSample
308  // Bottom 8-bits are ET
309  // Then feature bit
310  // The remaining bits are undefined presently
311  // We use next three bits for link details, which we did not have room in EcalTriggerPrimitiveSample case
312  // We use next three bits to set the tower masking, link masking and link status information as done for Ecal
313  // To decode these custom six bits use ((EcalTriggerPrimitiveSample::raw() >> 9) & 0x77)
314  uint32_t towerDatum = ctp7Data5BX.getET(cType, negativeEta, iEta, iPhi, BX_n);
315  if (ctp7Data5BX.getFB(cType, negativeEta, iEta, iPhi, BX_n) != 0)
316  towerDatum |= 0x0100;
317  if (ctp7Data5BX.isLinkMisaligned(cType, negativeEta, iEta, iPhi, BX_n))
318  towerDatum |= 0x0200;
319  if (ctp7Data5BX.isLinkInError(cType, negativeEta, iEta, iPhi, BX_n))
320  towerDatum |= 0x0400;
321  if (ctp7Data5BX.isLinkDown(cType, negativeEta, iEta, iPhi, BX_n))
322  towerDatum |= 0x0800;
323  if (ctp7Data5BX.isTowerMasked(cType, negativeEta, iEta, iPhi, BX_n))
324  towerDatum |= 0x2000;
325  if (ctp7Data5BX.isLinkMasked(cType, negativeEta, iEta, iPhi, BX_n))
326  towerDatum |= 0x4000;
327  if (ctp7Data5BX.isLinkMisaligned(cType, negativeEta, iEta, iPhi, BX_n) ||
328  ctp7Data5BX.isLinkInError(cType, negativeEta, iEta, iPhi, BX_n) ||
329  ctp7Data5BX.isLinkDown(cType, negativeEta, iEta, iPhi, BX_n))
330  towerDatum |= 0x8000;
332  HcalTrigTowerDetId id(cEta, cPhi);
333  HcalTriggerPrimitiveDigi tpg(id);
334  tpg.setSize(1);
335  tpg.setSample(0, sample);
336  hcalTPGs->push_back(tpg);
337  }
338  }
339  }
340  }
341 
342  void CaloLayer1Unpacker::makeHFTPGs5BX(uint32_t lPhi,
343  UCTCTP7RawData5BX& ctp7Data5BX,
344  HcalTrigPrimDigiCollection* hcalTPGs,
345  uint32_t BX_n) {
347  for (uint32_t side = 0; side <= 1; side++) {
348  bool negativeEta = false;
349  if (side == 0)
350  negativeEta = true;
351  for (uint32_t iEta = 30; iEta <= 40; iEta++) {
352  for (uint32_t iPhi = 0; iPhi < 2; iPhi++) {
353  if (iPhi == 1 && iEta == 40)
354  iEta = 41;
355  int cPhi = 1 + lPhi * 4 + iPhi * 2; // Calorimeter phi index: 1, 3, 5, ... 71
356  if (iEta == 41)
357  cPhi -= 2; // Last two HF are 3, 7, 11, ...
358  cPhi = (cPhi + 69) % 72 + 1; // cPhi -= 2 mod 72
359  int cEta = iEta;
360  if (negativeEta)
361  cEta = -iEta;
362  // This code is fragile! Note that towerDatum is packed as is done in HcalTriggerPrimitiveSample
363  // Bottom 8-bits are ET
364  // Then feature bit
365  // Then minBias ADC count bit
366  // The remaining bits are undefined presently
367  // We use next three bits for link details, which we did not have room in EcalTriggerPrimitiveSample case
368  // We use next three bits to set the tower masking, link masking and link status information as done for Ecal
369  // To decode these custom six bits use ((EcalTriggerPrimitiveSample::raw() >> 9) & 0x77)
370  uint32_t towerDatum = ctp7Data5BX.getET(cType, negativeEta, iEta, iPhi, BX_n);
371  towerDatum |= ctp7Data5BX.getFB(cType, negativeEta, iEta, iPhi, BX_n) << 8;
372  if (ctp7Data5BX.isLinkMisaligned(cType, negativeEta, iEta, iPhi, BX_n))
373  towerDatum |= 0x0400;
374  if (ctp7Data5BX.isLinkInError(cType, negativeEta, iEta, iPhi, BX_n))
375  towerDatum |= 0x0800;
376  if (ctp7Data5BX.isLinkDown(cType, negativeEta, iEta, iPhi, BX_n))
377  towerDatum |= 0x1000;
378  if (ctp7Data5BX.isTowerMasked(cType, negativeEta, iEta, iPhi, BX_n))
379  towerDatum |= 0x2000;
380  if (ctp7Data5BX.isLinkMasked(cType, negativeEta, iEta, iPhi, BX_n))
381  towerDatum |= 0x4000;
382  if (ctp7Data5BX.isLinkMisaligned(cType, negativeEta, iEta, iPhi, BX_n) ||
383  ctp7Data5BX.isLinkInError(cType, negativeEta, iEta, iPhi, BX_n) ||
384  ctp7Data5BX.isLinkDown(cType, negativeEta, iEta, iPhi, BX_n))
385  towerDatum |= 0x8000;
387  HcalTrigTowerDetId id(cEta, cPhi);
388  id.setVersion(1); // To not process these 1x1 HF TPGs with RCT
389  HcalTriggerPrimitiveDigi tpg(id);
390  tpg.setSize(1);
391  tpg.setSample(0, sample);
392  hcalTPGs->push_back(tpg);
393  }
394  }
395  }
396  }
397 
398  void CaloLayer1Unpacker::makeRegions5BX(uint32_t lPhi,
399  UCTCTP7RawData5BX& ctp7Data5BX,
401  uint32_t BX_n) {
402  for (uint32_t side = 0; side <= 1; side++) {
403  bool negativeEta = false;
404  if (side == 0)
405  negativeEta = true;
406  for (uint32_t region = 0; region <= 6; region++) {
407  uint32_t regionData = ctp7Data5BX.getRegionSummary(negativeEta, region, BX_n);
408  uint32_t lEta = 10 - region; // GCT eta goes 0-21, 0-3 -HF, 4-10 -B/E, 11-17 +B/E, 18-21 +HF
409  if (!negativeEta)
410  lEta = region + 11;
411  regions->push_back(L1CaloRegion((uint16_t)regionData, (unsigned)lEta, (unsigned)lPhi, (int16_t)0));
412  }
413  }
414  }
415 
416  } // namespace stage2
417 } // namespace l1t
418 
uint32_t getFB(CaloType cType, bool negativeEta, uint32_t cEta, uint32_t iPhi, uint32_t BX_n)
void setSample(int i, const HcalTriggerPrimitiveSample &sam)
uint32_t getFB(CaloType cType, bool negativeEta, uint32_t cEta, uint32_t iPhi)
const std::vector< uint32_t > & payload() const
Definition: Block.h:86
std::pair< unsigned int, unsigned int > unpack(cond::Time_t since)
uint16_t *__restrict__ id
bool isLinkMasked(CaloType cType, bool negativeEta, uint32_t cEta, uint32_t iPhi)
BlockHeader header() const
Definition: Block.h:85
void push_back(T const &t)
Log< level::Error, false > LogError
bool isLinkDown(CaloType cType, bool negativeEta, uint32_t cEta, uint32_t iPhi)
bool isLinkInError(CaloType cType, bool negativeEta, uint32_t cEta, uint32_t iPhi, uint32_t BX_n)
uint32_t getRegionSummary(bool negativeEta, uint32_t region, uint32_t BX_n)
void setSample(int i, const EcalTriggerPrimitiveSample &sam)
bool isLinkInError(CaloType cType, bool negativeEta, uint32_t cEta, uint32_t iPhi)
bool isTowerMasked(CaloType cType, bool negativeEta, uint32_t cEta, uint32_t iPhi)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
uint32_t getET(CaloType cType, bool negativeEta, uint32_t cEta, uint32_t iPhi, uint32_t BX_n)
const unsigned int N_BX
Definition: ConstantDef.h:5
bool isLinkDown(CaloType cType, bool negativeEta, uint32_t cEta, uint32_t iPhi, uint32_t BX_n)
uint32_t getET(CaloType cType, bool negativeEta, uint32_t cEta, uint32_t iPhi)
#define DEFINE_L1T_UNPACKER(type)
unsigned int getSize() const
Definition: Block.h:44
A calorimeter trigger region (sum of 4x4 trigger towers)
Definition: L1CaloRegion.h:21
bool isLinkMasked(CaloType cType, bool negativeEta, uint32_t cEta, uint32_t iPhi, uint32_t BX_n)
std::vector< L1CaloRegion > L1CaloRegionCollection
void amc(const amc::Header &h)
Definition: Block.h:88
bool isTowerMasked(CaloType cType, bool negativeEta, uint32_t cEta, uint32_t iPhi, uint32_t BX_n)
uint32_t getRegionSummary(bool negativeEta, uint32_t region)
EcalSubdetector
unsigned int getFlags() const
Definition: Block.h:46
bool isLinkMisaligned(CaloType cType, bool negativeEta, uint32_t cEta, uint32_t iPhi, uint32_t BX_n)
bool isLinkMisaligned(CaloType cType, bool negativeEta, uint32_t cEta, uint32_t iPhi)
#define LogDebug(id)