1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
#include "EventFilter/Utilities/interface/GlobalEventNumber.icc"
namespace evf {
namespace evtn {
bool daq_board_sense(const unsigned char *p) {
return (*(unsigned int *)(p + FEDHeader::length + DAQ_BOARDID_OFFSET * SLINK_WORD_SIZE / 2) >>
DAQ_BOARDID_SHIFT) == DAQ_BOARDID_VALUE;
}
bool gtpe_board_sense(const unsigned char *p) {
return (*(unsigned int *)(p + GTPE_BOARDID_OFFSET * SLINK_WORD_SIZE / 2) >> GTPE_BOARDID_SHIFT) != 0;
}
bool evm_board_sense(const unsigned char *p, size_t size) {
switch (size) {
case BST32_3BX:
EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0000;
EVM_FDL_NOBX = 3;
break;
case BST32_5BX:
EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0000;
EVM_FDL_NOBX = 5;
break;
case BST52_3BX:
EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0011;
EVM_FDL_NOBX = 3;
break;
case BST52_5BX:
EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0011;
EVM_FDL_NOBX = 5;
break;
default:
EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0000;
EVM_FDL_NOBX = 3;
}
return (*(const unsigned int *)(p + FEDHeader::length + EVM_BOARDID_OFFSET * SLINK_WORD_SIZE / 2) >>
EVM_BOARDID_SHIFT) == EVM_BOARDID_VALUE;
}
bool evm_tcs_board_sense(const unsigned char *p) {
return (*(const unsigned int *)(p + FEDHeader::length +
(EVM_GTFE_BLOCK * 2 + EVM_TCS_BOARDID_OFFSET) * SLINK_WORD_SIZE / 2) >>
EVM_TCS_BOARDID_SHIFT) == EVM_TCS_BOARDID_VALUE;
}
void evm_board_setformat(size_t size) {
switch (size) {
case BST32_3BX:
EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0000;
EVM_FDL_NOBX = 3;
break;
case BST32_5BX:
EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0000;
EVM_FDL_NOBX = 5;
break;
case BST52_3BX:
EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0011;
EVM_FDL_NOBX = 3;
break;
case BST52_5BX:
EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0011;
EVM_FDL_NOBX = 5;
break;
default:
EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0000;
EVM_FDL_NOBX = 3;
}
}
unsigned int offset(bool evm) {
if (evm)
return FEDHeader::length + (EVM_GTFE_BLOCK * 2 + EVM_TCS_TRIGNR_OFFSET) * SLINK_WORD_SIZE / 2;
else
return FEDHeader::length + DAQ_TOTTRG_OFFSET * SLINK_WORD_SIZE / 2;
}
unsigned int get(const unsigned char *p, bool evm) {
if (evm && evm_tcs_board_sense(p))
return *(const unsigned int *)(p + offset(true));
else
return *(const unsigned int *)(p + offset(false)); // cover case of evm but invalid tcs info
}
unsigned int gtpe_get(const unsigned char *p) {
return *(const unsigned int *)(p + GTPE_TRIGNR_OFFSET * SLINK_HALFWORD_SIZE);
}
unsigned int getlbn(const unsigned char *p) {
return (*(const unsigned int *)(p + FEDHeader::length +
(EVM_GTFE_BLOCK * 2 + EVM_TCS_LSBLNR_OFFSET) * SLINK_WORD_SIZE / 2)) &
EVM_TCS_LSBLNR_MASK;
}
unsigned int gtpe_getlbn(const unsigned char *p) { return gtpe_getorbit(p) / 0x00100000; }
unsigned int getgpslow(const unsigned char *p) {
return (*(const unsigned int *)(p + FEDHeader::length + EVM_GTFE_BSTGPS_OFFSET * SLINK_WORD_SIZE / 2));
}
unsigned int getgpshigh(const unsigned char *p) {
return (*(const unsigned int *)(p + FEDHeader::length + EVM_GTFE_BSTGPS_OFFSET * SLINK_WORD_SIZE / 2 +
SLINK_HALFWORD_SIZE));
}
unsigned int getorbit(const unsigned char *p) {
return (*(const unsigned int *)(p + FEDHeader::length +
(EVM_GTFE_BLOCK * 2 + EVM_TCS_ORBTNR_OFFSET) * SLINK_WORD_SIZE / 2));
}
unsigned int getevtyp(const unsigned char *p) {
return (((*(const unsigned int *)(p + FEDHeader::length +
(EVM_GTFE_BLOCK * 2 + EVM_TCS_LSBLNR_OFFSET) * SLINK_WORD_SIZE / 2)) &
EVM_TCS_EVNTYP_MASK) >>
EVM_TCS_EVNTYP_SHIFT);
}
unsigned int gtpe_getorbit(const unsigned char *p) {
return (*(const unsigned int *)(p + GTPE_ORBTNR_OFFSET * SLINK_HALFWORD_SIZE));
}
unsigned int getfdlbx(const unsigned char *p) {
return (*(const unsigned int *)(p + FEDHeader::length +
(EVM_GTFE_BLOCK + EVM_TCS_BLOCK + EVM_FDL_BLOCK * (EVM_FDL_NOBX / 2)) *
SLINK_WORD_SIZE +
EVM_FDL_BCNRIN_OFFSET * SLINK_HALFWORD_SIZE)) &
EVM_TCS_BCNRIN_MASK;
}
unsigned int gtpe_getbx(const unsigned char *p) {
return (*(const unsigned int *)(p + GTPE_BCNRIN_OFFSET * SLINK_HALFWORD_SIZE)) & GTPE_BCNRIN_MASK;
}
unsigned int getfdlpsc(const unsigned char *p) {
return (*(const unsigned int *)(p + FEDHeader::length +
(EVM_GTFE_BLOCK + EVM_TCS_BLOCK + EVM_FDL_BLOCK * (EVM_FDL_NOBX / 2)) *
SLINK_WORD_SIZE +
EVM_FDL_PSCVSN_OFFSET * SLINK_HALFWORD_SIZE));
}
unsigned long long getfdlttr(const unsigned char *p) {
return (*(const unsigned long long *)(p + FEDHeader::length +
(EVM_GTFE_BLOCK + EVM_TCS_BLOCK + EVM_FDL_BLOCK * (EVM_FDL_NOBX / 2)) *
SLINK_WORD_SIZE +
EVM_FDL_TECTRG_OFFSET * SLINK_HALFWORD_SIZE));
}
unsigned long long getfdlta1(const unsigned char *p) {
return (*(const unsigned long long *)(p + FEDHeader::length +
(EVM_GTFE_BLOCK + EVM_TCS_BLOCK + EVM_FDL_BLOCK * (EVM_FDL_NOBX / 2)) *
SLINK_WORD_SIZE +
EVM_FDL_ALGOB1_OFFSET * SLINK_HALFWORD_SIZE));
}
unsigned long long getfdlta2(const unsigned char *p) {
return (*(const unsigned long long *)(p + FEDHeader::length +
(EVM_GTFE_BLOCK + EVM_TCS_BLOCK + EVM_FDL_BLOCK * (EVM_FDL_NOBX / 2)) *
SLINK_WORD_SIZE +
EVM_FDL_ALGOB2_OFFSET * SLINK_HALFWORD_SIZE));
}
} // namespace evtn
} // namespace evf
|