CMS 3D CMS Logo

VFATdata.h
Go to the documentation of this file.
1 #ifndef DataFormats_GEMDigi_VFATdata_h
2 #define DataFormats_GEMDigi_VFATdata_h
3 
4 #include <cstdint>
5 
6 namespace gem {
8  union VFATfirst {
10  // v3 dataformat
11  struct {
13  uint64_t bc : 16;
14  uint64_t ec : 8;
16  // is half-full, so it's like a warning
17  uint64_t vc : 1;
19  uint64_t pos : 8;
20  };
21  // v2 dataformat
22  struct {
26  uint64_t flag : 4;
27  uint64_t ecV2 : 8;
29  uint64_t bcV2 : 12;
31  };
32  };
33  union VFATsecond {
35  struct {
38  };
39  };
40  union VFATthird {
42  struct {
43  uint64_t crc : 16;
45  };
46  };
47 
48  class VFATdata {
49  public:
50  VFATdata();
51  // this constructor only used for packing sim digis
52  VFATdata(const int vfatVer,
53  const uint16_t BC,
54  const uint8_t EC,
55  const uint16_t chipID,
56  const uint64_t lsDatas,
57  const uint64_t msDatas);
58  ~VFATdata() {}
59 
61  void read_fw(uint64_t word) { fw_ = word; }
62  uint64_t get_fw() const { return fw_; }
63 
65  void read_sw(uint64_t word) { sw_ = word; }
66  uint64_t get_sw() const { return sw_; }
67 
69  void read_tw(uint64_t word) { tw_ = word; }
70  uint64_t get_tw() const { return tw_; }
71 
72  // local phi in chamber
73  void setPhi(int i) { phiPos_ = i; }
74  int phi() const { return phiPos_; }
75 
76  uint64_t lsData() const { return uint64_t(VFATsecond{sw_}.lsData1) << 48 | VFATthird{tw_}.lsData2; }
77  uint64_t msData() const { return uint64_t(VFATfirst{fw_}.msData1) << 48 | VFATsecond{sw_}.msData2; }
78 
79  uint16_t bc() const {
80  if (ver_ == 2)
81  return VFATfirst{fw_}.bcV2;
82  return VFATfirst{fw_}.bc;
83  }
84  uint8_t ec() const {
85  if (ver_ == 2)
86  return VFATfirst{fw_}.ecV2;
87  return VFATfirst{fw_}.ec;
88  }
89  uint16_t vfatId() const {
90  if (ver_ == 2)
91  return VFATfirst{fw_}.chipID;
92  return VFATfirst{fw_}.pos;
93  }
94 
95  void setVersion(int i) { ver_ = i; }
96  int version() const { return ver_; }
97 
99  uint8_t quality();
100 
102  uint8_t header() const { return VFATfirst{fw_}.header; }
103  uint8_t crcCheck() const { return VFATfirst{fw_}.vc; }
104  uint8_t position() const { return VFATfirst{fw_}.pos; }
105 
107  uint8_t b1010() const { return VFATfirst{fw_}.b1010; }
108  uint8_t b1100() const { return VFATfirst{fw_}.b1100; }
109  uint8_t b1110() const { return VFATfirst{fw_}.b1110; }
110  uint8_t flag() const { return VFATfirst{fw_}.flag; }
111  uint16_t chipID() const { return VFATfirst{fw_}.chipID; }
112  uint16_t crc() const { return VFATthird{tw_}.crc; }
113 
114  uint16_t crc_cal(uint16_t crc_in, uint16_t dato);
115  uint16_t checkCRC();
116 
117  static const int nChannels = 128;
118  static const int sizeChipID = 12;
119 
120  private:
121  int ver_;
122  int phiPos_;
123 
124  uint64_t fw_; // VFAT first word
125  uint64_t sw_; // VFAT second word
126  uint64_t tw_; // VFAT third word
127  };
128 } // namespace gem
129 #endif
gem::VFATdata::read_tw
void read_tw(uint64_t word)
Read third word from the block.
Definition: VFATdata.h:69
gem::VFATdata::read_sw
void read_sw(uint64_t word)
Read second word from the block.
Definition: VFATdata.h:65
gem::VFATfirst::bcV2
uint64_t bcV2
Bunch Crossing number, 12 bits.
Definition: VFATdata.h:29
mps_fire.i
i
Definition: mps_fire.py:428
gem::VFATsecond::msData2
uint64_t msData2
channels from 65to128
Definition: VFATdata.h:37
gem::VFATdata::setVersion
void setVersion(int i)
Definition: VFATdata.h:95
gem::VFATdata::b1110
uint8_t b1110() const
Definition: VFATdata.h:109
gem::VFATdata::get_fw
uint64_t get_fw() const
Definition: VFATdata.h:62
gem::VFATthird::crc
uint64_t crc
Check Sum value, 16 bits.
Definition: VFATdata.h:43
gem::VFATdata::checkCRC
uint16_t checkCRC()
Definition: VFATdata.cc:86
gem::VFATdata::crc
uint16_t crc() const
Definition: VFATdata.h:112
gem::VFATfirst
VFAT data structure - 3 words of 64 bits each.
Definition: VFATdata.h:8
gem::VFATdata::phiPos_
int phiPos_
vfat version
Definition: VFATdata.h:122
gem::VFATdata::version
int version() const
Definition: VFATdata.h:96
gem::VFATfirst::msData1v2
uint64_t msData1v2
channels from 65to128 - placeholder since msData1 reads same info
Definition: VFATdata.h:23
gem::VFATdata::VFATdata
VFATdata()
Definition: VFATdata.cc:5
gem::VFATfirst::unused
uint64_t unused
VFAT CRC Error.
Definition: VFATdata.h:18
gem::VFATdata::get_sw
uint64_t get_sw() const
Definition: VFATdata.h:66
gem::VFATdata::flag
uint8_t flag() const
Definition: VFATdata.h:110
gem::VFATfirst::vc
uint64_t vc
Definition: VFATdata.h:17
gem::VFATdata::msData
uint64_t msData() const
Definition: VFATdata.h:77
gem::VFATdata::header
uint8_t header() const
v3
Definition: VFATdata.h:102
word
uint64_t word
Definition: CTPPSTotemDataFormatter.cc:29
gem::VFATdata::position
uint8_t position() const
Definition: VFATdata.h:104
gem::VFATfirst::word
uint64_t word
Definition: VFATdata.h:9
gem::VFATsecond::word
uint64_t word
Definition: VFATdata.h:34
gem::VFATdata::phi
int phi() const
Definition: VFATdata.h:74
gem::VFATdata::nChannels
static const int nChannels
Definition: VFATdata.h:117
gem::VFATdata::tw_
uint64_t tw_
Definition: VFATdata.h:126
gem::VFATdata::quality
uint8_t quality()
quality flag - bit: 0 good, 1 crc fail, 2 b1010 fail, 3 b1100 fail, 4 b1110
Definition: VFATdata.cc:50
gem::VFATdata::~VFATdata
~VFATdata()
Definition: VFATdata.h:58
gem::VFATfirst::msData1
uint64_t msData1
channels from 65to128
Definition: VFATdata.h:12
gem::VFATdata::read_fw
void read_fw(uint64_t word)
Read first word from the block.
Definition: VFATdata.h:61
gem::VFATdata::bc
uint16_t bc() const
Definition: VFATdata.h:79
gem::VFATdata::ver_
int ver_
Definition: VFATdata.h:121
gem::VFATdata::chipID
uint16_t chipID() const
Definition: VFATdata.h:111
gem::VFATfirst::b1110
uint64_t b1110
1110:4 Control bits, shoud be 1110
Definition: VFATdata.h:25
gem::VFATdata::b1010
uint8_t b1010() const
v2
Definition: VFATdata.h:107
gem::VFATdata::get_tw
uint64_t get_tw() const
Definition: VFATdata.h:70
gem::VFATfirst::b1010
uint64_t b1010
1010:4 Control bits, shoud be 1010
Definition: VFATdata.h:30
gem::VFATfirst::chipID
uint64_t chipID
Chip ID, 12 bits.
Definition: VFATdata.h:24
gem::VFATdata::vfatId
uint16_t vfatId() const
Definition: VFATdata.h:89
gem::VFATfirst::flag
uint64_t flag
Control Flags: 4 bits, Hamming Error/AFULL/SEUlogic/SUEI2C.
Definition: VFATdata.h:26
gem::VFATthird::word
uint64_t word
Definition: VFATdata.h:41
gem::VFATdata
Definition: VFATdata.h:48
gem::VFATdata::setPhi
void setPhi(int i)
Definition: VFATdata.h:73
gem
Definition: AMC13Event.h:6
gem::VFATdata::ec
uint8_t ec() const
Definition: VFATdata.h:84
gem::VFATfirst::pos
uint64_t pos
an 8bit value indicating the VFAT position on this GEB (it can be 0 to 23)
Definition: VFATdata.h:19
gem::VFATdata::crc_cal
uint16_t crc_cal(uint16_t crc_in, uint16_t dato)
Definition: VFATdata.cc:66
gem::VFATfirst::ec
uint64_t ec
Event Counter, 8 bits.
Definition: VFATdata.h:14
gem::VFATdata::lsData
uint64_t lsData() const
Definition: VFATdata.h:76
gem::VFATdata::b1100
uint8_t b1100() const
Definition: VFATdata.h:108
gem::VFATfirst::bc
uint64_t bc
Bunch Crossing number, 16 bits.
Definition: VFATdata.h:13
gem::VFATdata::sizeChipID
static const int sizeChipID
Definition: VFATdata.h:118
gem::VFATsecond
Definition: VFATdata.h:33
gem::VFATsecond::lsData1
uint64_t lsData1
channels from 1to64
Definition: VFATdata.h:36
gem::VFATfirst::b1100
uint64_t b1100
1100:4, Control bits, shoud be 1100
Definition: VFATdata.h:28
gem::VFATfirst::header
uint64_t header
normally 0x1E. 0x5E indicates that the VFAT3 internal buffer
Definition: VFATdata.h:15
gem::VFATfirst::ecV2
uint64_t ecV2
Event Counter, 8 bits.
Definition: VFATdata.h:27
gem::VFATdata::fw_
uint64_t fw_
phi position of vfat in chamber
Definition: VFATdata.h:124
cond::uint64_t
unsigned long long uint64_t
Definition: Time.h:13
gem::VFATthird
Definition: VFATdata.h:40
gem::VFATthird::lsData2
uint64_t lsData2
channels from 1to64
Definition: VFATdata.h:44
gem::VFATdata::crcCheck
uint8_t crcCheck() const
Definition: VFATdata.h:103
gem::VFATdata::sw_
uint64_t sw_
Definition: VFATdata.h:125