CMS 3D CMS Logo

RPixErrorChecker.cc
Go to the documentation of this file.
2 
5 
7 
8 using namespace edm;
9 
11 
12 RPixErrorChecker::RPixErrorChecker() { includeErrors_ = false; }
13 
14 void RPixErrorChecker::setErrorStatus(bool errorStatus) { includeErrors_ = errorStatus; }
15 
16 bool RPixErrorChecker::checkCRC(bool& errorsInEvent, int fedId, const Word64* trailer, Errors& errors) const {
17  int CRC_BIT = (*trailer >> CRC_shift) & CRC_mask;
18  if (CRC_BIT == 0)
19  return true;
20  errorsInEvent = true;
21  LogDebug("CRCCheck") << "CRC check failed, errorType = 39";
22  if (includeErrors_) {
23  int errorType = 39;
24  CTPPSPixelDataError error(*trailer, errorType, fedId);
25  errors[dummyDetId].push_back(error);
26  }
27  return false;
28 }
29 
30 bool RPixErrorChecker::checkHeader(bool& errorsInEvent, int fedId, const Word64* header, Errors& errors) const {
31  FEDHeader fedHeader(reinterpret_cast<const unsigned char*>(header));
32  if (!fedHeader.check())
33  return false;
34  if (fedHeader.sourceID() != fedId) {
35  LogDebug("CTPPSPixelDataFormatter::interpretRawData, fedHeader.sourceID() != fedId")
36  << ", sourceID = " << fedHeader.sourceID() << ", fedId = " << fedId << ", errorType = 32";
37  errorsInEvent = true;
38  if (includeErrors_) {
39  int errorType = 32;
40  CTPPSPixelDataError error(*header, errorType, fedId);
41  errors[dummyDetId].push_back(error);
42  }
43  }
44  return fedHeader.moreHeaders();
45 }
46 
48  bool& errorsInEvent, int fedId, unsigned int nWords, const Word64* trailer, Errors& errors) const {
49  FEDTrailer fedTrailer(reinterpret_cast<const unsigned char*>(trailer));
50  if (!fedTrailer.check()) {
51  if (includeErrors_) {
52  int errorType = 33;
53  CTPPSPixelDataError error(*trailer, errorType, fedId);
54  errors[dummyDetId].push_back(error);
55  }
56  errorsInEvent = true;
57  LogDebug("FedTrailerCheck") << "fedTrailer.check failed, Fed: " << fedId << ", errorType = 33";
58  return false;
59  }
60  if (fedTrailer.fragmentLength() != nWords) {
61  LogDebug("FedTrailerLenght") << "fedTrailer.fragmentLength()!= nWords !! Fed: " << fedId << ", errorType = 34";
62  errorsInEvent = true;
63  if (includeErrors_) {
64  int errorType = 34;
65  CTPPSPixelDataError error(*trailer, errorType, fedId);
66  errors[dummyDetId].push_back(error);
67  }
68  }
69  return fedTrailer.moreTrailers();
70 }
71 
73  bool& errorsInEvent, int fedId, uint32_t iD, const Word32& errorWord, Errors& errors) const {
74  int errorType = (errorWord >> ROC_shift) & ERROR_mask;
75  if
76  LIKELY(errorType < 25) return true;
77 
78  switch (errorType) {
79  case (25): {
80  LogDebug("") << " invalid ROC=25 found (errorType=25)";
81  errorsInEvent = true;
82  break;
83  }
84  case (26): {
85  LogDebug("") << " gap word found (errorType=26)";
86  return false;
87  }
88  case (27): {
89  LogDebug("") << " dummy word found (errorType=27)";
90  return false;
91  }
92  case (28): {
93  LogDebug("") << " error fifo nearly full (errorType=28)";
94  errorsInEvent = true;
95  break;
96  }
97  case (29): {
98  LogDebug("") << " timeout on a channel (errorType=29)";
99  errorsInEvent = true;
100  if ((errorWord >> OMIT_ERR_shift) & OMIT_ERR_mask) {
101  LogDebug("") << " ...first errorType=29 error, this gets masked out";
102  return false;
103  }
104  break;
105  }
106  case (30): {
107  LogDebug("") << " TBM error trailer (errorType=30)";
108  errorsInEvent = true;
109  break;
110  }
111  case (31): {
112  LogDebug("") << " event number error (errorType=31)";
113  errorsInEvent = true;
114  break;
115  }
116  default:
117  return true;
118  };
119 
120  if (includeErrors_) {
122  if (errorType == 30) {
123  uint32_t stateMach_bits = 4;
124  uint32_t stateMach_shift = 8;
125  uint32_t stateMach_mask = ~(~uint32_t(0) << stateMach_bits);
126  uint32_t stateMach = (errorWord >> stateMach_shift) & stateMach_mask;
127  if (stateMach == 4 || stateMach == 9)
128  errorType = 40;
129  }
130 
132  CTPPSPixelDataError error(errorWord, errorType, fedId);
133 
134  errors[iD].push_back(error);
135  }
136 
137  return false;
138 }
139 
141  int fedId, uint32_t iD, const State& state, const Word32& errorWord, Errors& errors) const {
142  int errorType = 0;
143 
144  switch (state) {
145  case (InvalidLinkId): {
146  LogDebug("ErrorChecker::conversionError") << " Fed: " << fedId << " invalid channel Id (errorType=35)";
147  errorType = 35;
148  break;
149  }
150  case (InvalidROCId): {
151  LogDebug("ErrorChecker::conversionError") << " Fed: " << fedId << " invalid ROC Id (errorType=36)";
152  errorType = 36;
153  break;
154  }
155  case (InvalidPixelId): {
156  LogDebug("ErrorChecker::conversionError") << " Fed: " << fedId << " invalid dcol/pixel value (errorType=37)";
157  errorType = 37;
158  break;
159  }
160 
161  default:
162  LogDebug("ErrorChecker::conversionError") << " cabling check returned unexpected result, status = " << state;
163  };
164 
165  if (includeErrors_ && errorType > 0) {
166  CTPPSPixelDataError error(errorWord, errorType, fedId);
167  errors[iD].push_back(error);
168  }
169 }
#define LogDebug(id)
void conversionError(int fedId, uint32_t iD, const State &state, const Word32 &errorWord, Errors &errors) const
bool checkCRC(bool &errorsInEvent, int fedId, const Word64 *trailer, Errors &errors) const
bool moreHeaders() const
Definition: FEDHeader.cc:23
bool checkHeader(bool &errorsInEvent, int fedId, const Word64 *header, Errors &errors) const
bool check() const
Check that the header is OK.
Definition: FEDHeader.cc:44
uint16_t sourceID() const
Identifier of the FED.
Definition: FEDHeader.cc:19
#define LIKELY(x)
Definition: Likely.h:20
bool check() const
Check that the trailer is OK.
Definition: FEDTrailer.cc:45
bool moreTrailers() const
Definition: FEDTrailer.cc:21
std::map< uint32_t, DetErrors > Errors
uint32_t fragmentLength() const
The length of the event fragment counted in 64-bit words including header and trailer.
Definition: FEDTrailer.cc:13
static constexpr Word32 dummyDetId
void setErrorStatus(bool errorStatus)
HLT enums.
bool checkTrailer(bool &errorsInEvent, int fedId, unsigned int nWords, const Word64 *trailer, Errors &errors) const
Definition: errors.py:1
bool checkROC(bool &errorsInEvent, int fedId, uint32_t iD, const Word32 &errorWord, Errors &errors) const
#define constexpr
Pixel error – collection of errors.