CMS 3D CMS Logo

CSCSPHeader.h
Go to the documentation of this file.
1 #ifndef CSCSPHeader_h
2 #define CSCSPHeader_h
3 
4 #include <cstring> // memcpy
5 
6 class CSCSPHeader {
7 private:
9  unsigned sp_l1a_low : 12;
10  unsigned header_mark_1 : 4; // constant, should be 1001 = 0x9
11 
12  unsigned sp_l1a_high : 12;
13  unsigned header_mark_2 : 4; // constant, should be 1001 = 0x9
14 
15  unsigned zero_1 : 12; // constant, should be 0
16  unsigned header_mark_3 : 4; // constant, should be 1001 = 0x9
17 
18  unsigned sp_bxn : 12;
19  unsigned header_mark_4 : 4; // constant, should be 1001 = 0x9
20 
22  unsigned zero_2 : 12; // constant, should be 0
23  unsigned header_mark_5 : 4; // constant, should be 1010 = 0xA
24 
25  unsigned sp_slot_number : 5; // SP_PADR, or physical address, or slot number
26  unsigned sp_ersv : 3; // event record structure version
27  unsigned
28  sp_trigger_sector : 4; // SP Trigger Sector 1, 2, 3, 4, 5, 6 for +Z EMU side and 7, 8, 9, 10, 11, 12 for -Z EMU side
29 
30  unsigned header_mark_6 : 4; // constant, should be 1010 = 0xA
31  /*
32  unsigned warning_overflow : 1; // FMM: L1A rate is too high
33  unsigned out_of_sync : 1; // FMM: L1 Reset is required
34  unsigned busy : 1; // FMM: L1A rate higher than SP can handle - start flushing events
35  unsigned ready : 1; // FMM: L1A rate is fine
36  unsigned fa_out_of_sync : 1; // FMM: FA out of sync: one of Front_FPGA's L1A doesn't match DDU_FPGA L1A
37  unsigned sp_out_of_sync : 1; // FMM: SP out of sync: SP_FPGA's L1A doesn't match DDU_FPGA L1A
38  unsigned spare_1 : 1; // not used yet
39  unsigned zero_3 : 5; // constant, should be 0
40  unsigned header_mark_7 : 4; // constant, should be 1010 = 0xA
41 */
42  unsigned fmm_status : 6; // see FMM above
43  unsigned ddm : 1; // readout mode: 0/1 = DDU/VME
44  unsigned zero_3 : 5; // constant, should be 0
45  unsigned header_mark_7 : 4; // constant, should be 1010 = 0xA
46 
47  /*
48  // DD/CSR_DFC: DAQ FIFO Configuration
49  unsigned tbin : 3; // sp record may contain up to 7 consequetive BXs
50  unsigned zero_suppression : 1; // zero suppression: if set - put only valid LCTs, stubs, and track in the record
51  unsigned f1_active : 1; // read(1)/suppress(0) F1 record in the event
52  unsigned f2_active : 1; // read(1)/suppress(0) F2 record in the event
53  unsigned f3_active : 1; // read(1)/suppress(0) F3 record in the event
54  unsigned f4_active : 1; // read(1)/suppress(0) F4 record in the event
55  unsigned f5_active : 1; // read(1)/suppress(0) F5 record in the event
56  unsigned dt_active : 1; // read(1)/suppress(0) DT record in the event
57  unsigned sp_active : 1; // read(1)/suppress(0) SP record in the event
58  unsigned skip : 1; // event is skiped, only this header + trailer exist in the record
59  unsigned header_mark_8 : 4; // constant, should be 1010 = 0xA
60 */
61  // DD/CSR_DFC: DAQ FIFO Configuration
62  unsigned csr_dfc : 11; //
63  unsigned skip : 1; // event is skiped, only this header + trailer exist in the record
64  unsigned header_mark_8 : 4; // constant, should be 1010 = 0xA
65 
66  friend class CSCTFPacker;
67 
68 public:
69  bool check(void) const {
70  return header_mark_1 != 0x9 || header_mark_2 != 0x9 || header_mark_3 != 0x9 || header_mark_4 != 0x9 ||
71  header_mark_5 != 0xA || header_mark_6 != 0xA || header_mark_7 != 0xA || header_mark_8 != 0xA ||
72  zero_1 != 0 || zero_2 != 0 || zero_3 != 0;
73  }
74 
75  unsigned int BXN(void) const throw() { return sp_bxn; }
76  unsigned int L1A(void) const throw() { return (sp_l1a_high << 12) | sp_l1a_low; }
77 
78  unsigned int slot(void) const throw() { return sp_slot_number; }
79  unsigned int trigger_sector(void) const throw() { return sp_trigger_sector; }
80  // following two functions are kept for compatibility with earlier versions of TF data format:
81  unsigned int sector(void) const throw() {
82  if (sp_ersv < 2)
83  return sp_trigger_sector & 0x7;
84  else
86  }
87  unsigned int endcap(void) const throw() {
88  if (sp_ersv < 2)
89  return sp_trigger_sector & 0x8;
90  else
91  return (sp_trigger_sector <= 6 ? 1 : 0);
92  }
93 
94  enum FMM { WOF = 1, OSY = 2, BUZY = 4, READY = 8, FA_OSY = 16, SP_OSY = 32 };
95  unsigned int status(void) const throw() { return fmm_status; }
96 
97  unsigned int nTBINs(void) const throw() { return csr_dfc & 0x7; }
98 
99  bool suppression(void) const throw() { return csr_dfc & 0x8; }
100 
101  enum ACTIVE { F1 = 1, F2 = 2, F3 = 4, F4 = 8, F5 = 16, DT = 32, SP = 64 };
102  unsigned int active(void) const throw() { return csr_dfc >> 4; }
103 
104  bool empty(void) const throw() { return skip; }
105 
106  int format_version(void) const throw() { return sp_ersv; }
107  bool ddu_readout(void) const throw() { return ddm; }
108 
109  bool unpack(const unsigned short *&buf) throw() {
110  memcpy((void *)this, buf, 8 * sizeof(short));
111  buf += 8;
112  return check();
113  }
114 
115  CSCSPHeader(void) {}
116 };
117 
118 #endif
unsigned header_mark_8
Definition: CSCSPHeader.h:64
unsigned int L1A(void) const
Definition: CSCSPHeader.h:76
unsigned sp_trigger_sector
Definition: CSCSPHeader.h:28
unsigned fmm_status
Definition: CSCSPHeader.h:42
unsigned zero_3
Definition: CSCSPHeader.h:44
unsigned skip
Definition: CSCSPHeader.h:63
bool suppression(void) const
Definition: CSCSPHeader.h:99
unsigned zero_1
Definition: CSCSPHeader.h:15
int format_version(void) const
Definition: CSCSPHeader.h:106
bool check(void) const
Definition: CSCSPHeader.h:69
unsigned int trigger_sector(void) const
Definition: CSCSPHeader.h:79
unsigned header_mark_7
Definition: CSCSPHeader.h:45
unsigned sp_l1a_low
Definition: CSCSPHeader.h:9
bool unpack(const unsigned short *&buf)
Definition: CSCSPHeader.h:109
unsigned int nTBINs(void) const
Definition: CSCSPHeader.h:97
unsigned header_mark_6
Definition: CSCSPHeader.h:30
unsigned header_mark_1
Definition: CSCSPHeader.h:10
unsigned header_mark_2
Definition: CSCSPHeader.h:13
unsigned sp_ersv
Definition: CSCSPHeader.h:26
bool ddu_readout(void) const
Definition: CSCSPHeader.h:107
unsigned int sector(void) const
Definition: CSCSPHeader.h:81
unsigned ddm
Definition: CSCSPHeader.h:43
unsigned header_mark_4
Definition: CSCSPHeader.h:19
unsigned header_mark_5
Definition: CSCSPHeader.h:23
unsigned zero_2
Definition: CSCSPHeader.h:22
unsigned int BXN(void) const
Definition: CSCSPHeader.h:75
unsigned sp_slot_number
Definition: CSCSPHeader.h:25
unsigned csr_dfc
Definition: CSCSPHeader.h:62
unsigned header_mark_3
Definition: CSCSPHeader.h:16
unsigned int endcap(void) const
Definition: CSCSPHeader.h:87
CSCSPHeader(void)
Definition: CSCSPHeader.h:115
bool empty(void) const
Definition: CSCSPHeader.h:104
unsigned sp_bxn
Definition: CSCSPHeader.h:18
unsigned int active(void) const
Definition: CSCSPHeader.h:102
unsigned sp_l1a_high
Definition: CSCSPHeader.h:12
unsigned int slot(void) const
Definition: CSCSPHeader.h:78
unsigned int status(void) const
Definition: CSCSPHeader.h:95