CMS 3D CMS Logo

CSCDCCExaminer.h
Go to the documentation of this file.
1 #ifndef CSCDCCExaminer_h
2 #define CSCDCCExaminer_h
3 #include <set>
4 #include <map>
5 #include <vector>
6 #include <string>
7 #ifdef LOCAL_UNPACK
8 #include <iostream>
9 #else
10 #include <ostream>
11 #endif
12 
14 
16 public:
17  const uint16_t nERRORS, nWARNINGS, nPAYLOADS, nSTATUSES;
18 
19 private:
22  ExaminerStatusType bSUM_ERROR, bSUM_WARNING; // Summary flags for errors and warnings
23  bool fERROR[29]; //[nERRORS];
24  bool fWARNING[5]; //[nWARNINGS];
25  bool fSUM_ERROR[29]; //[nERRORS];
26  bool fSUM_WARNING[5]; //[nWARNINGS];
27 
28  std::set<CSCIdType> fCHAMB_ERR[29]; // Set of chambers which contain particular error
29  std::set<CSCIdType> fCHAMB_WRN[5]; // Set of chambers which contain particular warning
30  std::map<CSCIdType, ExaminerStatusType> bCHAMB_ERR; // chamber <=> errors in bits
31  std::map<CSCIdType, ExaminerStatusType> bCHAMB_WRN; // chamber <=> errors in bits
32  std::map<CSCIdType, ExaminerStatusType> bCHAMB_PAYLOAD; //
33  std::map<CSCIdType, ExaminerStatusType> bCHAMB_STATUS; //
34  std::map<DDUIdType, ExaminerStatusType> bDDU_ERR; // ddu <-> errors in bits
35  std::map<DDUIdType, ExaminerStatusType> bDDU_WRN; // ddu <-> errors in bits
36 
37 #ifdef LOCAL_UNPACK
38  class OStream : public std::ostream {
39  private:
40  class buffer : public std::streambuf {};
41  buffer buff;
42  std::streambuf* stream;
43  std::streambuf* null;
45 
46  public:
47  void show(void) { rdbuf(stream); }
48  void hide(void) { rdbuf(null); }
49  void sign(std::string nm) { name = nm; }
50  void sign(const char* nm) { name = nm; }
51 
52  void redirect(std::ostream& str) {
53  stream = str.rdbuf();
54  tie(&str);
55  if (rdbuf() != null)
56  rdbuf(stream);
57  }
58 
59  template <class T>
60  std::ostream& operator<<(const T& val) {
61  return (*(std::ostream*)this) << name << val;
62  }
63 
64  OStream(void) : std::ostream(std::cout.rdbuf()), buff(), stream(std::cout.rdbuf()), null(&buff), name("") {}
65  OStream(std::ostream& str) : std::ostream(str.rdbuf()), buff(), stream(str.rdbuf()), null(&buff), name("") {}
66  };
67 
68  OStream COUT, CERR;
69 #endif
70 
71  CSCIdType currentChamber; // ( (CrateNumber<<4) + DMBslot ) specifies chamber
72 
73  const uint16_t *buf_2, *buf_1, *buf0, *buf1, *buf2;
74  uint16_t tmpbuf[16];
75 
87 
88  bool uniqueALCT, uniqueTMB; // Do not merge two DMBs if Trailer of the first and Header of the second are lost
89 
90  bool DAV_ALCT; // ...
91  bool DAV_TMB; // Check if DAV bits lie
92  int DAV_CFEB; // ...
93  int DAV_DMB; // ...
94  int DMB_Active, nDMBs; // ...
95 
96 public:
97  uint32_t cntDDU_Headers;
98  uint32_t cntDDU_Trailers;
99  std::map<CSCIdType, uint32_t> cntCHAMB_Headers;
100  std::map<CSCIdType, uint32_t> cntCHAMB_Trailers;
101 
102 private:
103  void clear();
104  void zeroCounts();
105  void sync_stats();
107  void checkDAVs();
109 
110  inline int scanbuf(const uint16_t*& buf, int32_t length, uint16_t sig, uint16_t mask = 0xFFFF);
111 
113  uint32_t DDU_WordCount;
116 
119  uint32_t ALCT_WordCount;
121  uint32_t ALCT_ZSE;
122  uint32_t nWG_round_up;
123 
125  uint32_t TMB_WordCount;
127  uint32_t TMB_Tbins;
128  uint32_t TMB_WordsRPC;
131 
135 
137  uint32_t ALCT_CRC;
139  uint32_t TMB_CRC;
141  uint32_t CFEB_CRC;
142 
146 
147  //int headerDAV_Active; // Obsolete since 16.09.05
148 
149  // data blocks:
150  std::map<DDUIdType, const uint16_t*> dduBuffers; // < DDUsourceID, pointer >
151  std::map<DDUIdType, std::map<CSCIdType, const uint16_t*> > dmbBuffers; // < DDUsourceID, < DMBid, pointer > >
152  std::map<DDUIdType, uint32_t> dduOffsets; // < DDUsourceID, pointer_offset >
153  std::map<DDUIdType, std::map<CSCIdType, uint32_t> > dmbOffsets; // < DDUsourceID, < DMBid, pointer_offset > >
154  std::map<DDUIdType, uint32_t> dduSize; // < DDUsourceID, block_size >
155  std::map<DDUIdType, std::map<CSCIdType, uint32_t> > dmbSize; // < DDUsourceID, < DMBid, block_size > >
156  const uint16_t* buffer_start;
157 
158 public:
159 #ifdef LOCAL_UNPACK
160  OStream& output1(void) { return COUT; }
161  OStream& output2(void) { return CERR; }
162 #endif
163 
164  int32_t check(const uint16_t*& buffer, int32_t length);
165 
166  void setMask(ExaminerMaskType mask) { examinerMask = mask; }
168 
169  ExaminerStatusType errors(void) const { return bSUM_ERROR; }
170  ExaminerStatusType warnings(void) const { return bSUM_WARNING; }
171 
172  const char* errName(int num) const {
173  if (num >= 0 && num < nERRORS)
174  return sERROR[num];
175  else
176  return "";
177  }
178  const char* wrnName(int num) const {
179  if (num >= 0 && num < nWARNINGS)
180  return sWARNING[num];
181  else
182  return "";
183  }
184 
185  const char* errorName(int num) const {
186  if (num >= 0 && num < nERRORS)
187  return sERROR_[num];
188  else
189  return "";
190  }
191  const char* warningName(int num) const {
192  if (num >= 0 && num < nWARNINGS)
193  return sWARNING_[num];
194  else
195  return "";
196  }
197 
198  const char* payloadName(int num) const {
199  if (num >= 0 && num < nPAYLOADS)
200  return sDMBExpectedPayload[num];
201  else
202  return "";
203  }
204  const char* statusName(int num) const {
205  if (num >= 0 && num < nSTATUSES)
206  return sDMBEventStaus[num];
207  else
208  return "";
209  }
210 
211  bool error(int num) const {
212  if (num >= 0 && num < nERRORS)
213  return fSUM_ERROR[num];
214  else
215  return false;
216  }
217  bool warning(int num) const {
218  if (num >= 0 && num < nWARNINGS)
219  return fSUM_WARNING[num];
220  else
221  return false;
222  }
223 
224  std::set<CSCIdType> chambersWithError(int num) const {
225  if (num >= 0 && num < nERRORS)
226  return fCHAMB_ERR[num];
227  else
228  return std::set<int>();
229  }
230  std::set<CSCIdType> chambersWithWarning(int num) const {
231  if (num >= 0 && num < nWARNINGS)
232  return fCHAMB_WRN[num];
233  else
234  return std::set<int>();
235  }
236 
238  std::map<CSCIdType, ExaminerStatusType>::const_iterator item = bCHAMB_PAYLOAD.find(chamber);
239  if (item != bCHAMB_PAYLOAD.end())
240  return item->second;
241  else
242  return 0;
243  }
244 
246  std::map<CSCIdType, ExaminerStatusType>::const_iterator item = bCHAMB_STATUS.find(chamber);
247  if (item != bCHAMB_STATUS.end())
248  return item->second;
249  else
250  return 0;
251  }
252 
254  std::map<CSCIdType, ExaminerStatusType>::const_iterator item = bCHAMB_ERR.find(chamber);
256 
257  // for(item =bCHAMB_ERR.begin() ; item !=bCHAMB_ERR.end() ; item++)
258  //std::cout << " Ex-errors: " << std::hex << (*item).second << std::dec << std::endl;
259 
260  item = bCHAMB_ERR.find(chamber);
261  if (item != bCHAMB_ERR.end())
262  return item->second;
263  else
264  return 0;
265  }
266 
268  std::map<CSCIdType, ExaminerStatusType>::const_iterator item = bCHAMB_WRN.find(chamber);
269  if (item != bCHAMB_WRN.end())
270  return item->second;
271  else
272  return 0;
273  }
274 
276  std::map<DDUIdType, ExaminerStatusType>::const_iterator item = bDDU_ERR.find(dduSourceID);
277  if (item != bDDU_ERR.end())
278  return item->second;
279  else
280  return 0;
281  }
283  std::map<DDUIdType, ExaminerStatusType>::const_iterator item = bDDU_WRN.find(dduSourceID);
284  if (item != bDDU_WRN.end())
285  return item->second;
286  else
287  return 0;
288  }
289  std::vector<DDUIdType> listOfDDUs(void) const {
290  std::vector<DDUIdType> DDUs;
291  std::map<DDUIdType, ExaminerStatusType>::const_iterator item = bDDU_ERR.begin();
292  while (item != bDDU_ERR.end()) {
293  DDUs.push_back(item->first);
294  item++;
295  }
296  return DDUs;
297  }
298 
299  std::map<DDUIdType, ExaminerStatusType> errorsDetailedDDU(void) const { return bDDU_ERR; }
300 
301  std::map<CSCIdType, ExaminerStatusType> errorsDetailed(void) const { return bCHAMB_ERR; }
302  std::map<CSCIdType, ExaminerStatusType> warningsDetailed(void) const { return bCHAMB_WRN; }
303  std::map<CSCIdType, ExaminerStatusType> payloadDetailed(void) const { return bCHAMB_PAYLOAD; }
304  std::map<CSCIdType, ExaminerStatusType> statusDetailed(void) const { return bCHAMB_STATUS; }
305 
306  void crcALCT(bool enable);
307  void crcTMB(bool enable);
308  void crcCFEB(bool enable);
309 
310  void modeDDU(bool enable);
311 
312  bool isDDUmode() { return modeDDUonly; };
313 
314  DDUIdType dduSourceID(void) { return sourceID; }
315 
316  std::map<DDUIdType, const uint16_t*> DDU_block(void) const { return dduBuffers; }
317  std::map<DDUIdType, std::map<CSCIdType, const uint16_t*> > DMB_block(void) const { return dmbBuffers; }
318 
319  std::map<DDUIdType, uint32_t> DDU_ptrOffsets(void) const { return dduOffsets; }
320  std::map<DDUIdType, std::map<CSCIdType, uint32_t> > DMB_ptrOffsets(void) const { return dmbOffsets; }
321 
322  std::map<DDUIdType, uint32_t> DDU_size(void) const { return dduSize; }
323  std::map<DDUIdType, std::map<CSCIdType, uint32_t> > DMB_size(void) const { return dmbSize; }
324 
327 };
328 
329 #endif
uint32_t DDU_WordsSinceLastHeader
uint32_t TMB_WordCount
const uint16_t nSTATUSES
const uint16_t * buf0
const uint16_t * buffer_start
std::map< CSCIdType, ExaminerStatusType > bCHAMB_ERR
void crcCFEB(bool enable)
std::map< DDUIdType, ExaminerStatusType > bDDU_ERR
const char * errorName(int num) const
uint32_t CFEB_SampleWordCount
bool warning(int num) const
std::map< DDUIdType, ExaminerStatusType > bDDU_WRN
std::set< CSCIdType > fCHAMB_ERR[29]
std::map< DDUIdType, uint32_t > dduOffsets
std::map< DDUIdType, uint32_t > dduSize
const uint16_t * buf2
std::vector< DDUIdType > listOfDDUs(void) const
std::map< DDUIdType, uint32_t > DDU_ptrOffsets(void) const
int scanbuf(const uint16_t *&buf, int32_t length, uint16_t sig, uint16_t mask=0xFFFF)
int32_t CSCIdType
void modeDDU(bool enable)
uint32_t ALCT_WordsSinceLastHeader
const uint16_t * buf1
ExaminerStatusType bSUM_WARNING
uint32_t ALCT_WordCount
ExaminerStatusType errorsForChamber(CSCIdType chamber) const
const uint16_t nERRORS
ExaminerStatusType statusForChamber(CSCIdType chamber) const
std::map< DDUIdType, std::map< CSCIdType, uint32_t > > DMB_ptrOffsets(void) const
uint32_t DDU_WordsSinceLastTrailer
DDUIdType dduSourceID(void)
std::map< CSCIdType, ExaminerStatusType > bCHAMB_PAYLOAD
uint32_t cntDDU_Headers
std::ostream & operator<<(std::ostream &out, const ALILine &li)
Definition: ALILine.cc:167
ExaminerStatusType errors(void) const
void crcALCT(bool enable)
const char * errName(int num) const
uint32_t ALCT_WordsExpected
std::map< DDUIdType, uint32_t > DDU_size(void) const
std::vector< const char * > sERROR
std::set< CSCIdType > chambersWithError(int num) const
std::map< DDUIdType, const uint16_t * > dduBuffers
ExaminerStatusType warnings(void) const
uint32_t TMB_Firmware_Revision
CSCIdType currentChamber
std::set< CSCIdType > chambersWithWarning(int num) const
uint32_t nWG_round_up
check zero suppression mode
std::map< CSCIdType, uint32_t > cntCHAMB_Trailers
const uint16_t nWARNINGS
std::map< DDUIdType, std::map< CSCIdType, uint32_t > > dmbSize
std::vector< const char * > sDMBExpectedPayload
std::vector< const char * > sWARNING_
ExaminerStatusType payloadForChamber(CSCIdType chamber) const
std::set< CSCIdType > fCHAMB_WRN[5]
bool fSUM_ERROR[29]
uint32_t DDU_WordMismatch_Occurrences
uint32_t CFEB_SampleCount
void crcTMB(bool enable)
std::map< DDUIdType, ExaminerStatusType > errorsDetailedDDU(void) const
ExaminerStatusType bSUM_ERROR
std::map< CSCIdType, ExaminerStatusType > bCHAMB_WRN
const char * statusName(int num) const
uint32_t TMB_WordsRPC
uint32_t TMB_Tbins
ExaminerStatusType errorsForDDU(DDUIdType dduSourceID) const
uint32_t TMB_WordsExpected
#define COUT
const uint16_t * buf_2
const uint16_t * buf_1
const uint16_t nPAYLOADS
uint32_t CFEB_BSampleCount
ExaminerMaskType getMask() const
std::map< DDUIdType, std::map< CSCIdType, const uint16_t * > > DMB_block(void) const
std::map< DDUIdType, std::map< CSCIdType, uint32_t > > dmbOffsets
uint32_t TMB_WordsSinceLastHeader
to decode if zero suppression enabled
ExaminerStatusType bERROR
CSCDCCExaminer(ExaminerMaskType mask=0x1)
uint16_t tmpbuf[16]
uint32_t DDU_Firmware_Revision
bool fSUM_WARNING[5]
ExaminerStatusType warningsForDDU(DDUIdType dduSourceID) const
void checkTriggerHeadersAndTrailers()
const char * warningName(int num) const
std::map< DDUIdType, const uint16_t * > DDU_block(void) const
uint32_t ExaminerStatusType
std::vector< const char * > sWARNING
const char * payloadName(int num) const
DDUIdType sourceID
ExaminerStatusType warningsForChamber(CSCIdType chamber) const
uint32_t ALCT_WordsSinceLastHeaderZeroSuppressed
int32_t check(const uint16_t *&buffer, int32_t length)
const char * wrnName(int num) const
int16_t DDUIdType
std::map< CSCIdType, ExaminerStatusType > warningsDetailed(void) const
uint32_t DDU_WordCount
std::map< CSCIdType, ExaminerStatusType > bCHAMB_STATUS
ExaminerMaskType examinerMask
std::map< DDUIdType, std::map< CSCIdType, uint32_t > > DMB_size(void) const
void checkDAVs()
checks DAV_ALCT, DAV_TMB, and DAV_CFEB
ExaminerStatusType bWARNING
std::map< CSCIdType, ExaminerStatusType > statusDetailed(void) const
std::map< CSCIdType, ExaminerStatusType > errorsDetailed(void) const
std::vector< const char * > sDMBEventStaus
#define str(s)
bool error(int num) const
uint32_t ExaminerMaskType
long double T
std::map< DDUIdType, std::map< CSCIdType, const uint16_t * > > dmbBuffers
void setMask(ExaminerMaskType mask)
std::vector< const char * > sERROR_
std::map< CSCIdType, ExaminerStatusType > payloadDetailed(void) const
std::map< CSCIdType, uint32_t > cntCHAMB_Headers
uint32_t cntDDU_Trailers