CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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  errors[dummyDetId].emplace_back(*trailer, errorType, fedId);
25  }
26  return false;
27 }
28 
29 bool RPixErrorChecker::checkHeader(bool& errorsInEvent, int fedId, const Word64* header, Errors& errors) const {
30  FEDHeader fedHeader(reinterpret_cast<const unsigned char*>(header));
31  if (!fedHeader.check())
32  return false;
33  if (fedHeader.sourceID() != fedId) {
34  LogDebug("CTPPSPixelDataFormatter::interpretRawData, fedHeader.sourceID() != fedId")
35  << ", sourceID = " << fedHeader.sourceID() << ", fedId = " << fedId << ", errorType = 32";
36  errorsInEvent = true;
37  if (includeErrors_) {
38  int errorType = 32;
39  errors[dummyDetId].emplace_back(*header, errorType, fedId);
40  }
41  }
42  return fedHeader.moreHeaders();
43 }
44 
46  bool& errorsInEvent, int fedId, unsigned int nWords, const Word64* trailer, Errors& errors) const {
47  FEDTrailer fedTrailer(reinterpret_cast<const unsigned char*>(trailer));
48  if (!fedTrailer.check()) {
49  if (includeErrors_) {
50  int errorType = 33;
51  errors[dummyDetId].emplace_back(*trailer, errorType, fedId);
52  }
53  errorsInEvent = true;
54  LogDebug("FedTrailerCheck") << "fedTrailer.check failed, Fed: " << fedId << ", errorType = 33";
55  return false;
56  }
57  if (fedTrailer.fragmentLength() != nWords) {
58  LogDebug("FedTrailerLenght") << "fedTrailer.fragmentLength()!= nWords !! Fed: " << fedId << ", errorType = 34";
59  errorsInEvent = true;
60  if (includeErrors_) {
61  int errorType = 34;
62  errors[dummyDetId].emplace_back(*trailer, errorType, fedId);
63  }
64  }
65  return fedTrailer.moreTrailers();
66 }
67 
69  bool& errorsInEvent, int fedId, uint32_t iD, const Word32& errorWord, Errors& errors) const {
70  int errorType = (errorWord >> ROC_shift) & ERROR_mask;
71  if LIKELY (errorType < 25)
72  return true;
73 
74  switch (errorType) {
75  case (25): {
76  LogDebug("") << " invalid ROC=25 found (errorType=25)";
77  errorsInEvent = true;
78  break;
79  }
80  case (26): {
81  LogDebug("") << " gap word found (errorType=26)";
82  return false;
83  }
84  case (27): {
85  LogDebug("") << " dummy word found (errorType=27)";
86  return false;
87  }
88  case (28): {
89  LogDebug("") << " error fifo nearly full (errorType=28)";
90  errorsInEvent = true;
91  break;
92  }
93  case (29): {
94  LogDebug("") << " timeout on a channel (errorType=29)";
95  errorsInEvent = true;
96  if ((errorWord >> OMIT_ERR_shift) & OMIT_ERR_mask) {
97  LogDebug("") << " ...first errorType=29 error, this gets masked out";
98  return false;
99  }
100  break;
101  }
102  case (30): {
103  LogDebug("") << " TBM error trailer (errorType=30)";
104  errorsInEvent = true;
105  break;
106  }
107  case (31): {
108  LogDebug("") << " event number error (errorType=31)";
109  errorsInEvent = true;
110  break;
111  }
112  default:
113  return true;
114  };
115 
116  if (includeErrors_) {
118  if (errorType == 30) {
119  uint32_t stateMach_bits = 4;
120  uint32_t stateMach_shift = 8;
121  uint32_t stateMach_mask = ~(~uint32_t(0) << stateMach_bits);
122  uint32_t stateMach = (errorWord >> stateMach_shift) & stateMach_mask;
123  if (stateMach == 4 || stateMach == 9)
124  errorType = 40;
125  }
126 
128  errors[iD].emplace_back(errorWord, errorType, fedId);
129  }
130 
131  return false;
132 }
133 
135  int fedId, uint32_t iD, const State& state, const Word32& errorWord, Errors& errors) const {
136  int errorType = 0;
137 
138  switch (state) {
139  case (InvalidLinkId): {
140  LogDebug("ErrorChecker::conversionError") << " Fed: " << fedId << " invalid channel Id (errorType=35)";
141  errorType = 35;
142  break;
143  }
144  case (InvalidROCId): {
145  LogDebug("ErrorChecker::conversionError") << " Fed: " << fedId << " invalid ROC Id (errorType=36)";
146  errorType = 36;
147  break;
148  }
149  case (InvalidPixelId): {
150  LogDebug("ErrorChecker::conversionError") << " Fed: " << fedId << " invalid dcol/pixel value (errorType=37)";
151  errorType = 37;
152  break;
153  }
154 
155  default:
156  LogDebug("ErrorChecker::conversionError") << " cabling check returned unexpected result, status = " << state;
157  };
158 
159  if (includeErrors_ && errorType > 0)
160  errors[iD].emplace_back(errorWord, errorType, fedId);
161 }
constexpr cms_uint32_t dummyDetId
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
constexpr uint32_t ROC_shift
#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
constexpr uint32_t ERROR_mask
constexpr uint64_t CRC_mask
constexpr uint32_t OMIT_ERR_shift
void setErrorStatus(bool errorStatus)
constexpr uint32_t CRC_shift
static constexpr Word32 dummyDetId
constexpr uint32_t OMIT_ERR_mask
bool checkTrailer(bool &errorsInEvent, int fedId, unsigned int nWords, const Word64 *trailer, Errors &errors) const
bool checkROC(bool &errorsInEvent, int fedId, uint32_t iD, const Word32 &errorWord, Errors &errors) const
#define LogDebug(id)