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
|
#ifndef UCTAMCRawData_hh
#define UCTAMCRawData_hh
class UCTAMCRawData {
public:
UCTAMCRawData(const uint32_t *d) : myDataPtr(d) {}
// No copy constructor and equality operator are needed
UCTAMCRawData(const UCTAMCRawData &) = delete;
const UCTAMCRawData &operator=(const UCTAMCRawData &i) = delete;
virtual ~UCTAMCRawData() { ; }
// Access functions for convenience
const uint32_t *dataPtr() const { return myDataPtr; }
const uint32_t *header() const { return &myDataPtr[0]; }
const uint32_t *payload() const { return &myDataPtr[4]; }
const uint32_t *trailer() const { return &myDataPtr[trailerOffset()]; }
uint32_t dataLength() const { return (myDataPtr[0] & 0x000FFFFF); }
uint32_t BXID() { return ((myDataPtr[0] & 0xFFF00000) >> 20); }
uint32_t L1ID() { return (myDataPtr[1] & 0x00FFFFFF); }
uint32_t amcNo() { return ((myDataPtr[1] & 0x0F000000) >> 24); }
uint32_t layer1Phi() { return (myDataPtr[2] & 0x0000FFFF); }
uint32_t orbitNo() { return ((myDataPtr[2] & 0xFFFF0000) >> 16); }
uint32_t trailerOffset() const { return (dataLength() - 1) * 2; }
uint32_t dataLengthTrailer() { return (myDataPtr[trailerOffset()] & 0x000FFFFF); }
uint32_t L1IDTrailer() { return ((myDataPtr[trailerOffset()] & 0xFF000000) >> 24); }
uint32_t crc32() { return (myDataPtr[trailerOffset() + 1]); }
void print() {
using namespace std;
cout << "AMC Payload Header:" << endl;
cout << "Data Length.. = " << dec << dataLength() << endl;
cout << "BXID......... = " << dec << BXID() << endl;
cout << "L1ID......... = " << internal << setfill('0') << setw(8) << hex << L1ID() << endl;
cout << "AMC No ...... = " << dec << amcNo() << endl;
cout << "Layer-1 Phi.. = " << dec << layer1Phi() << endl;
cout << "Orbit No..... = " << dec << orbitNo() << endl;
cout << "AMC Payload Trailer:" << endl;
cout << "Data Length.. = " << dec << dataLengthTrailer() << endl;
cout << "L1ID......... = " << internal << setfill('0') << setw(8) << hex << L1IDTrailer() << endl;
cout << "CRC32........ = " << internal << setfill('0') << setw(10) << hex << crc32() << endl;
}
private:
// RawData data
const uint32_t *myDataPtr;
};
#endif
|