CMS 3D CMS Logo

RPCAMC13Record.h
Go to the documentation of this file.
1 #ifndef EventFilter_RPCRawToDigi_RPCAMC13Record_h
2 #define EventFilter_RPCRawToDigi_RPCAMC13Record_h
3 
4 #include <cstdint>
5 #include <vector>
6 
7 namespace rpcamc13 {
8 
9 class Header
10 { // http://joule.bu.edu/~hazen/CMS/AMC13/UpdatedDAQPath.pdf
11 protected:
12  static std::uint64_t const ufov_mask_ = 0xf000000000000000;
13  static std::uint64_t const n_amc_mask_ = 0x00f0000000000000;
14  static std::uint64_t const orbit_counter_mask_ = 0x0000000ffffffff0;
15 
16  static unsigned int const ufov_offset_ = 60;
17  static unsigned int const n_amc_offset_ = 52;
18  static unsigned int const orbit_counter_offset_ = 4;
19 
20 public:
21  Header(std::uint64_t const record = 0x0);
22  Header(unsigned int ufov, unsigned int n_amc, unsigned int orbit_counter);
23 
24  void set(std::uint64_t const record);
25  void reset();
26 
27  std::uint64_t const & getRecord() const;
28 
29  unsigned int getFirmwareVersion() const;
30  unsigned int getNAMC() const;
31  unsigned int getOrbitCounter() const;
32 
33  void setFirmwareVersion(unsigned int ufov);
34  void setNAMC(unsigned int n_amc);
35  void setOrbitCounter(unsigned int orbit_counter);
36 
37 protected:
39 };
40 
41 class Trailer
42 { // http://joule.bu.edu/~hazen/CMS/AMC13/UpdatedDAQPath.pdf
43 protected:
44  static std::uint64_t const crc_mask_ = 0xffffffff00000000;
45  static std::uint64_t const block_number_mask_ = 0x000000000ff00000;
46  static std::uint64_t const event_counter_mask_ = 0x00000000000ff000;
47  static std::uint64_t const bx_counter_mask_ = 0x0000000000000fff;
48 
49  static unsigned int const crc_offset_ = 32;
50  static unsigned int const block_number_offset_ = 20;
51  static unsigned int const event_counter_offset_ = 12;
52  static unsigned int const bx_counter_offset_ = 0;
53 
54 public:
55  Trailer(std::uint64_t const record = 0x0);
56  Trailer(std::uint32_t crc
57  , unsigned int block_number
58  , unsigned int event_counter
59  , unsigned int bx_counter);
60 
61  void set(std::uint64_t const record);
62  void reset();
63 
64  std::uint64_t const & getRecord() const;
65 
66  std::uint32_t getCRC() const;
67  unsigned int getBlockNumber() const;
68  unsigned int getEventCounter() const;
69  unsigned int getBXCounter() const;
70 
71  void setCRC(std::uint32_t crc);
72  void setBlockNumber(unsigned int block_number);
73  void setEventCounter(unsigned int event_counter);
74  void setBXCounter(unsigned int bx_counter);
75 
76 protected:
78 };
79 
80 class AMCHeader
81 { // http://joule.bu.edu/~hazen/CMS/AMC13/UpdatedDAQPath.pdf
82 protected:
83  static std::uint64_t const length_incorrect_mask_ = 0x4000000000000000;
84  static std::uint64_t const more_blocks_mask_ = 0x2000000000000000; // is not last block
85  static std::uint64_t const segmented_mask_ = 0x1000000000000000; // is not first block
86  static std::uint64_t const enabled_mask_ = 0x0800000000000000;
87  static std::uint64_t const present_mask_ = 0x0400000000000000;
88  static std::uint64_t const valid_mask_ = 0x0200000000000000; // evn, bcn match
89  static std::uint64_t const crc_ok_mask_ = 0x0100000000000000;
90  static std::uint64_t const size_mask_ = 0x00ffffff00000000;
91  static std::uint64_t const block_number_mask_ = 0x000000000ff00000;
92  static std::uint64_t const amc_number_mask_ = 0x00000000000f0000;
93  static std::uint64_t const board_id_mask_ = 0x000000000000ffff;
94 
95  static unsigned int const size_offset_ = 32;
96  static unsigned int const block_number_offset_ = 20;
97  static unsigned int const amc_number_offset_ = 16;
98  static unsigned int const board_id_offset_ = 0;
99 
100  static unsigned int const size_limit_ = 0x1400;
101  static unsigned int const size_max_ = 0x1000;
102 
103 public:
104  AMCHeader(std::uint64_t const record = enabled_mask_ | present_mask_ | valid_mask_ | crc_ok_mask_);
105  AMCHeader(bool length_correct
106  , bool last_block
107  , bool first_block
108  , bool enabled
109  , bool present
110  , bool valid
111  , bool crc_ok
112  , unsigned int size
113  , unsigned int block_number
114  , unsigned int amc_number
115  , unsigned int board_id);
116 
117  void set(std::uint64_t const record);
118  void reset();
119 
120  std::uint64_t const & getRecord() const;
121 
122  bool isLengthCorrect() const;
123  bool isLastBlock() const;
124  bool isFirstBlock() const;
125  bool isEnabled() const;
126  bool isPresent() const;
127  bool isValid() const;
128  bool isCRCOk() const;
129  unsigned int getSize() const;
130  unsigned int getSizeInBlock() const; // derived
131  bool hasTotalSize() const; // derived
132  unsigned int getBlockNumber() const;
133  unsigned int getAMCNumber() const;
134  unsigned int getBoardId() const;
135 
136  void setLengthCorrect(bool length_correct);
137  void setLastBlock(bool last_block);
138  void setFirstBlock(bool first_block);
139  void setEnabled(bool enabled);
140  void setPresent(bool present);
141  void setValid(bool valid);
142  void setCRCOk(bool crc_ok);
143  void setSize(unsigned int size);
144  void setBlockNumber(unsigned int block_number);
145  void setAMCNumber(unsigned int amc_number);
146  void setBoardId(unsigned int board_id);
147 
148 protected:
150 };
151 
153 {
154 public:
155  AMCPayload();
156 
157  bool isValid() const;
158  AMCHeader const & getAMCHeader() const;
159  AMCHeader & getAMCHeader();
160  std::vector<std::uint64_t> const & getData() const;
161  std::vector<std::uint64_t> & getData();
162 
163  void setValid(bool valid);
164  void setAMCHeader(AMCHeader const & header);
165  void insert(std::uint64_t const * word_begin, unsigned int size);
166  void clear();
167 
168 protected:
169  bool valid_;
171  std::vector<std::uint64_t> data_;
172 };
173 
174 } // namespace rpcamc13
175 
176 #include "EventFilter/RPCRawToDigi/interface/RPCAMC13Record.icc"
177 
178 #endif // EventFilter_RPCRawToDigi_RPCAMC13Record_h
size
Write out results.
static unsigned int const ufov_offset_
std::uint64_t const & getRecord() const
JetCorrectorParameters::Record record
Definition: classes.h:7
unsigned int getOrbitCounter() const
static std::uint64_t const n_amc_mask_
void setNAMC(unsigned int n_amc)
def getData(doc, options, dataset, site)
unsigned int getNAMC() const
void clear(CLHEP::HepGenMatrix &m)
Helper function: Reset all elements of a matrix to 0.
Definition: matutil.cc:167
unsigned int getFirmwareVersion() const
static std::uint64_t const orbit_counter_mask_
Header(std::uint64_t const record=0x0)
std::vector< std::uint64_t > data_
bool insert(Storage &iStorage, ItemType *iItem, const IdTag &iIdTag)
Definition: HCMethods.h:50
std::uint64_t record_
void setOrbitCounter(unsigned int orbit_counter)
unsigned long long uint64_t
Definition: Time.h:15
std::uint64_t record_
void setFirmwareVersion(unsigned int ufov)
static std::uint64_t const ufov_mask_
static unsigned int const orbit_counter_offset_
static unsigned int const n_amc_offset_
std::uint64_t record_