CMS 3D CMS Logo

RPCTwinMuxRecord.h
Go to the documentation of this file.
1 #ifndef EventFilter_RPCRawToDigi_RPCTwinMuxRecord_h
2 #define EventFilter_RPCRawToDigi_RPCTwinMuxRecord_h
3 
4 #include <cstdint>
5 
6 namespace rpctwinmux {
7 
9 {
10 public:
12  static unsigned int const rpc_first_type_ = 0;
13  static unsigned int const rpc_second_type_ = 1;
14  static unsigned int const error_type_ = 2;
15  static unsigned int const unknown_type_ = 3;
16 
17  static std::uint64_t const rpc_first_identifier_mask_ = 0xf000000000000000;
18  static std::uint64_t const rpc_first_identifier_ = 0x9000000000000000;
19  static std::uint64_t const rpc_second_identifier_mask_ = 0xf000000000000000;
20  static std::uint64_t const rpc_second_identifier_ = 0xe000000000000000;
21  static std::uint64_t const error_identifier_mask_ = 0xf000000000000000;
22  static std::uint64_t const error_identifier_ = 0xf000000000000000;
23 
24 public:
25  TwinMuxRecord(std::uint64_t const record = 0x0);
26 
27  static unsigned int getType(std::uint64_t const record);
28  unsigned int getType() const;
29 
30  void set(std::uint64_t const record);
31  void reset();
32 
33  std::uint64_t const & getRecord() const;
34 
35 protected:
37 };
38 
40 {
41 public:
42  static std::uint64_t const ufov_mask_ = 0xf000000000000000;
43  static std::uint64_t const n_amc_mask_ = 0x00f0000000000000;
44  static std::uint64_t const orbit_counter_mask_ = 0x0000000ffffffff0;
45 
46  static unsigned int const ufov_offset_ = 60;
47  static unsigned int const n_amc_offset_ = 52;
48  static unsigned int const orbit_counter_offset_ = 4;
49 
50 public:
51  BlockHeader(std::uint64_t const record = 0x0);
52  BlockHeader(unsigned int ufov, unsigned int n_amc, unsigned int orbit_counter);
53 
54  void set(std::uint64_t const record);
55  void reset();
56 
57  std::uint64_t const & getRecord() const;
58 
59  unsigned int getFirmwareVersion() const;
60  unsigned int getNAMC() const;
61  unsigned int getOrbitCounter() const;
62 
63  void setFirmwareVersion(unsigned int ufov);
64  void setNAMC(unsigned int n_amc);
65  void setOrbitCounter(unsigned int orbit_counter);
66 
67 protected:
69 };
70 
72 {
73 public:
74  static std::uint64_t const crc_mask_ = 0xffffffff00000000;
75  static std::uint64_t const block_number_mask_ = 0x000000000ff00000;
76  static std::uint64_t const event_counter_mask_ = 0x00000000000ff000;
77  static std::uint64_t const bx_counter_mask_ = 0x0000000000000fff;
78 
79  static unsigned int const crc_offset_ = 32;
80  static unsigned int const block_number_offset_ = 20;
81  static unsigned int const event_counter_offset_ = 12;
82  static unsigned int const bx_counter_offset_ = 0;
83 
84 public:
85  BlockTrailer(std::uint64_t const record = 0x0);
86  BlockTrailer(std::uint32_t crc
87  , unsigned int block_number
88  , unsigned int event_counter
89  , unsigned int bx_counter);
90 
91  void set(std::uint64_t const record);
92  void reset();
93 
94  std::uint64_t const & getRecord() const;
95 
96  std::uint32_t getCRC() const;
97  unsigned int getBlockNumber() const;
98  unsigned int getEventCounter() const;
99  unsigned int getBXCounter() const;
100 
101  void setCRC(std::uint32_t crc);
102  void setBlockNumber(unsigned int block_number);
103  void setEventCounter(unsigned int event_counter);
104  void setBXCounter(unsigned int bx_counter);
105 
106 protected:
108 };
109 
111 {
112 public:
113  static std::uint64_t const length_correct_mask_ = 0x4000000000000000;
114  static std::uint64_t const more_blocks_mask_ = 0x2000000000000000; // is not last block
115  static std::uint64_t const segmented_mask_ = 0x1000000000000000; // is not first block
116  static std::uint64_t const enabled_mask_ = 0x0800000000000000;
117  static std::uint64_t const present_mask_ = 0x0400000000000000;
118  static std::uint64_t const valid_mask_ = 0x0200000000000000; // evn, bcn match
119  static std::uint64_t const crc_ok_mask_ = 0x0100000000000000;
120  static std::uint64_t const size_mask_ = 0x00ffffff00000000;
121  static std::uint64_t const block_number_mask_ = 0x000000000ff00000;
122  static std::uint64_t const amc_number_mask_ = 0x00000000000f0000;
123  static std::uint64_t const board_id_mask_ = 0x000000000000ffff;
124 
125  static unsigned int const size_offset_ = 32;
126  static unsigned int const block_number_offset_ = 20;
127  static unsigned int const amc_number_offset_ = 16;
128  static unsigned int const board_id_offset_ = 0;
129 
130 public:
131  BlockAMCContent(std::uint64_t const record = 0x0);
132  BlockAMCContent(bool length_correct
133  , bool last_block
134  , bool first_block
135  , bool enabled
136  , bool present
137  , bool valid
138  , bool crc_ok
139  , unsigned int size
140  , unsigned int block_number
141  , unsigned int amc_number
142  , unsigned int board_id);
143 
144  void set(std::uint64_t const record);
145  void reset();
146 
147  std::uint64_t const & getRecord() const;
148 
149  bool isLengthCorrect() const;
150  bool isLastBlock() const;
151  bool isFirstBlock() const;
152  bool isEnabled() const;
153  bool isPresent() const;
154  bool isValid() const;
155  bool isCRCOk() const;
156  unsigned int getSize() const;
157  unsigned int getBlockNumber() const;
158  unsigned int getAMCNumber() const;
159  unsigned int getBoardId() const;
160 
161  void setLengthCorrect(bool length_correct);
162  void setLastBlock(bool last_block);
163  void setFirstBlock(bool first_block);
164  void setEnabled(bool enabled);
165  void setPresent(bool present);
166  void setValid(bool valid);
167  void setCRCOk(bool crc_ok);
168  void setSize(unsigned int size);
169  void setBlockNumber(unsigned int block_number);
170  void setAMCNumber(unsigned int amc_number);
171  void setBoardId(unsigned int board_id);
172 
173 protected:
175 };
176 
178 {
179 public:
180  // First Word
181  static std::uint64_t const amc_number_mask_ = 0x0f00000000000000;
182  static std::uint64_t const event_counter_mask_ = 0x00ffffff00000000;
183  static std::uint64_t const bx_counter_mask_ = 0x00000000fff00000;
184  static std::uint64_t const data_length_mask_ = 0x00000000000fffff;
185 
186  static unsigned int const amc_number_offset_ = 56;
187  static unsigned int const event_counter_offset_ = 32;
188  static unsigned int const bx_counter_offset_ = 20;
189  static unsigned int const data_length_offset_ = 0;
190 
191  // Second word
192  static std::uint64_t const orbit_counter_mask_ = 0x00000000ffff0000;
193  static std::uint64_t const board_id_mask_ = 0x000000000000ffff;
194 
195  static unsigned int const orbit_counter_offset_ = 16;
196  static unsigned int const board_id_offset_ = 0;
197 
198  static std::uint64_t const dt_bx_window_mask_ = 0x0000001f00000000;
199  static std::uint64_t const rpc_bx_window_mask_ = 0x000003e000000000;
200  static std::uint64_t const ho_bx_window_mask_ = 0x00001c0000000000;
201 
202  static unsigned int const dt_bx_window_offset_ = 32;
203  static unsigned int const rpc_bx_window_offset_ = 37;
204  static unsigned int const ho_bx_window_offset_ = 42;
205 
206 public:
207  TwinMuxHeader();
209  TwinMuxHeader(unsigned int amc_number
210  , unsigned int event_counter
211  , unsigned int bx_counter
212  , unsigned int data_length
213  , unsigned int orbit_counter
214  , unsigned int board_id
215  , unsigned int dt_bx_window = 0x1f
216  , int rpc_bx_min = 10, int rpc_bx_max = 5 // values for !hasRPCBXWindows
217  , unsigned int ho_bx_window = 0x7);
218 
219  void set(unsigned int nword, std::uint64_t const word);
220  void reset();
221 
222  std::uint64_t const * getRecord() const;
223 
224  unsigned int getAMCNumber() const;
225  unsigned int getEventCounter() const;
226  unsigned int getBXCounter() const;
227  unsigned int getDataLength() const;
228 
229  unsigned int getOrbitCounter() const;
230  unsigned int getBoardId() const;
231 
232  bool hasDTBXWindow() const;
233  unsigned int getDTBXWindow() const;
234  bool hasRPCBXWindow() const;
235  int getRPCBXMin() const;
236  int getRPCBXMax() const;
237  bool hasHOBXWindow() const;
238  unsigned int getHOBXWindow() const;
239 
240  void setAMCNumber(unsigned int amc_number);
241  void setEventCounter(unsigned int event_counter);
242  void setBXCounter(unsigned int bx_counter);
243  void setDataLength(unsigned int data_length);
244 
245  void setOrbitCounter(unsigned int orbit_counter);
246  void setBoardId(unsigned int board_id);
247 
248  void setDTBXWindow(unsigned int bx_window = 0x1f);
249  void setRPCBXWindow(int bx_min = 10, int bx_max = 5); // values for !hasRPCBXWindows
250  void setHOBXWindow(unsigned int bx_window = 0x7);
251 
252 protected:
254 };
255 
257 {
258 public:
259  static std::uint64_t const crc_mask_ = 0xffffffff00000000;
260  static std::uint64_t const event_counter_mask_ = 0x00000000ff000000;
261  static std::uint64_t const data_length_mask_ = 0x00000000000fffff;
262 
263  static unsigned int const crc_offset_ = 32;
264  static unsigned int const event_counter_offset_ = 24;
265  static unsigned int const data_length_offset_ = 0;
266 
267 public:
268  TwinMuxTrailer(std::uint64_t const record = 0x0);
269  TwinMuxTrailer(std::uint32_t crc
270  , unsigned int event_counter
271  , unsigned int data_length);
272 
273  void set(std::uint64_t const record);
274  void reset();
275 
276  std::uint64_t const & getRecord() const;
277 
278  std::uint32_t getCRC() const;
279  unsigned int getEventCounter() const;
280  unsigned int getDataLength() const;
281 
282  void setCRC(std::uint32_t crc);
283  void setEventCounter(unsigned int event_counter);
284  void setDataLength(unsigned int data_length);
285 
286 protected:
288 };
289 
291 {
292 public:
293  static std::uint32_t const da_mask_ = 0x080000;
294  static std::uint32_t const de_mask_ = 0x040000;
295  static std::uint32_t const eod_mask_ = 0x020000;
296  static std::uint32_t const delay_mask_ = 0x01c000;
297  static std::uint32_t const link_board_mask_ = 0x003000;
298  static std::uint32_t const connector_mask_ = 0x000e00;
299  static std::uint32_t const partition_mask_ = 0x000100;
300  static std::uint32_t const partition_data_mask_ = 0x0000ff;
301 
302  static unsigned int const delay_offset_ = 14;
303  static unsigned int const link_board_offset_ = 12;
304  static unsigned int const connector_offset_ = 9;
305  static unsigned int const partition_offset_ = 8;
306  static unsigned int const partition_data_offset_ = 0;
307 
308 public:
309  RPCLinkRecord(std::uint32_t const record = da_mask_);
310 
311  void set(std::uint32_t const record = da_mask_);
312  void reset();
313 
314  std::uint32_t const & getRecord() const;
315 
316  bool isAcknowledge() const;
317  bool isError() const;
318  bool isEOD() const;
319  unsigned int getDelay() const;
320  unsigned int getLinkBoard() const;
321  unsigned int getConnector() const;
322  unsigned int getPartition() const;
323  std::uint8_t getPartitionData() const;
324 
325  void setAcknowledge(bool da);
326  void setError(bool de);
327  void setEOD(bool eod);
328  void setDelay(unsigned int delay);
329  void setLinkBoard(unsigned int link_board);
330  void setConnector(unsigned int connector);
331  void setPartition(unsigned int partition);
332  void setPartitionData(std::uint8_t data);
333 
334 protected:
335  std::uint32_t record_;
336 };
337 
339 {
340 public:
341  static std::uint8_t const bc0_mask_ = 0x04;
342  static std::uint8_t const bcn_mask_ = 0x03;
343  static unsigned int const bcn_offset_ = 0;
344 
345 public:
346  RPCBXRecord(std::uint8_t const record = 0x0);
347 
348  void set(std::uint8_t const record = 0x0);
349  void reset();
350 
351  std::uint8_t const & getRecord() const;
352 
353  bool isBC0() const;
354  unsigned int getBXCounter() const;
355 
356  void setBC0(bool bc0);
357  void setBXCounter(unsigned int bcn);
358 
359 protected:
360  std::uint8_t record_;
361 };
362 
364 {
365 public:
366  static std::uint64_t const bx_offset_mask_ = 0x0f00000000000000;
367  static std::uint64_t const overflow_mask_ = 0x0080000000000000;
368 
369  static unsigned int const bx_offset_offset_ = 56;
370 
371  static std::uint64_t const link_record_mask_ = 0x0fffff;
372  static unsigned int const link_record_word_[5];
373  static unsigned int const link_record_offset_[5];
374 
375  static std::uint64_t const bx_record_mask_ = 0x07;
376  static unsigned int const bx_record_offset_[5];
377 
378 public:
379  RPCRecord();
380  RPCRecord(std::uint64_t const record[2]);
381 
382  void set(unsigned int word, std::uint64_t const record);
383  void reset();
384 
385  std::uint64_t const * getRecord() const;
386 
387  int getBXOffset() const;
388  bool hasOverflow() const;
389  RPCBXRecord getRPCBXRecord(unsigned int link) const;
390  RPCLinkRecord getRPCLinkRecord(unsigned int link) const;
391 
392  void setBXOffset(int bx_offset);
393  void setOverflow (bool overflow);
394  void setRPCBXRecord(unsigned int link, RPCBXRecord const & bx_record);
395  void setRPCLinkRecord(unsigned int link, RPCLinkRecord const & link_record);
396 
397 protected:
399 };
400 
401 } // namespace rpctwinmux
402 
403 #include "EventFilter/RPCRawToDigi/interface/RPCTwinMuxRecord.icc"
404 
405 #endif // EventFilter_RPCRawToDigi_RPCTwinMuxRecord_h
size
Write out results.
JetCorrectorParameters::Record record
Definition: classes.h:7
static std::uint64_t const rpc_second_identifier_mask_
std::uint64_t const & getRecord() const
static std::uint64_t const rpc_second_identifier_
static unsigned int const unknown_type_
static std::uint64_t const rpc_first_identifier_mask_
unsigned int getType() const
static std::uint64_t const error_identifier_mask_
static unsigned int const rpc_first_type_
static unsigned int const rpc_second_type_
unsigned long long uint64_t
Definition: Time.h:15
static std::uint64_t const rpc_first_identifier_
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
static std::uint64_t const error_identifier_
TwinMuxRecord(std::uint64_t const record=0x0)
static unsigned int const error_type_