CMS 3D CMS Logo

GEMVFATStatus.h
Go to the documentation of this file.
1 #ifndef DataFormats_GEMDigi_GEMVFATStatus_h
2 #define DataFormats_GEMDigi_GEMVFATStatus_h
3 #include "GEMAMC.h"
4 #include "GEMOptoHybrid.h"
5 #include "GEMVFAT.h"
6 #include <bitset>
7 #include <ostream>
8 
9 class GEMVFATStatus {
10 public:
11  union Errors {
12  uint8_t codes;
13  struct {
14  uint8_t vc : 1; // VFAT CRC error
15  uint8_t InValidHeader : 1;
16  uint8_t EC : 1; // does not match AMC EC
17  uint8_t BC : 1; // does not match AMC BC
18  uint8_t vfatMask : 1; // VFAT mask error
19  uint8_t zsMask : 1; // Zero Suppression mask error
20  };
21  };
22  union Warnings {
23  uint8_t wcodes;
24  struct {
25  uint8_t basicOFW : 1; // Basic overflow warning
26  uint8_t zeroSupOFW : 1; // Zero-sup overflow warning
27  };
28  };
29 
31  GEMVFATStatus(const GEMAMC& amc, const GEMOptoHybrid& oh, const GEMVFAT& vfat, bool readMultiBX) {
32  Errors error{0};
33  Warnings warn{0};
34 
35  error.EC = vfat.ec() != amc.lv1Idt();
36  if (!readMultiBX)
37  error.BC = vfat.bc() != amc.bunchCrossing();
38 
39  if (oh.version() != 0) {
40  error.vfatMask = (oh.vfatMask() >> vfat.vfatId()) ^ 0x1;
41  error.zsMask = (oh.zsMask() >> vfat.vfatId()) & 0x1;
42  }
43 
44  if (vfat.version() > 2) {
45  error.vc = vfat.vc();
46  if (vfat.header() == 0x1E)
47  warn.basicOFW = 0;
48  else if (vfat.header() == 0x5E)
49  warn.basicOFW = 1;
50  else if (vfat.header() == 0x1A)
51  warn.zeroSupOFW = 0;
52  else if (vfat.header() == 0x56)
53  warn.zeroSupOFW = 1;
54  else
55  error.InValidHeader = 1;
56  }
57  vfatPosition_ = vfat.vfatId();
58 
59  errors_ = error.codes;
60  warnings_ = warn.wcodes;
61  }
62 
63  uint16_t vfatPosition() const { return vfatPosition_; }
64  bool isBad() const { return errors_ != 0; }
65  uint8_t errors() const { return errors_; }
66  uint8_t warnings() const { return warnings_; }
67 
68 private:
69  uint16_t vfatPosition_;
70  uint8_t errors_;
71  uint8_t warnings_;
72 };
73 
74 inline std::ostream& operator<<(std::ostream& out, const GEMVFATStatus& status) {
75  out << "GEMVFATStatus errors " << std::bitset<8>(status.errors()) << " warnings "
76  << std::bitset<8>(status.warnings());
77  return out;
78 }
79 #endif
std::ostream & operator<<(std::ostream &out, const GEMVFATStatus &status)
Definition: GEMVFATStatus.h:74
uint8_t warnings() const
Definition: GEMVFATStatus.h:66
GEMVFATStatus(const GEMAMC &amc, const GEMOptoHybrid &oh, const GEMVFAT &vfat, bool readMultiBX)
Definition: GEMVFATStatus.h:31
uint8_t header() const
v3
Definition: GEMVFAT.h:100
uint8_t warnings_
Definition: GEMVFATStatus.h:71
uint32_t zsMask() const
def warn(args, kwargs)
Definition: __init__.py:21
bool isBad() const
Definition: GEMVFATStatus.h:64
uint8_t version() const
Definition: GEMOptoHybrid.h:80
Definition: GEMVFAT.h:5
uint16_t bc() const
Definition: GEMVFAT.h:77
uint8_t ec() const
Definition: GEMVFAT.h:82
uint16_t vfatPosition_
Definition: GEMVFATStatus.h:69
uint8_t errors_
Definition: GEMVFATStatus.h:70
uint8_t errors() const
Definition: GEMVFATStatus.h:65
uint16_t vfatId() const
Definition: GEMVFAT.h:87
uint16_t vfatPosition() const
Definition: GEMVFATStatus.h:63
Definition: GEMAMC.h:6
int version() const
Definition: GEMVFAT.h:94
uint32_t vfatMask() const
bool vc() const
Definition: GEMVFAT.h:101
Definition: AMCSpec.h:8