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
|
/** documented in flags
http://www.phys.ufl.edu/~madorsky/alctv/alct2000_spec.PDF
*/
#include "EventFilter/CSCRawToDigi/interface/CSCALCTTrailer.h"
#ifdef LOCAL_UNPACK
bool CSCALCTTrailer::debug = false;
short unsigned int CSCALCTTrailer::firmwareVersion = 2006;
#else
std::atomic<bool> CSCALCTTrailer::debug{false};
std::atomic<short unsigned int> CSCALCTTrailer::firmwareVersion{2006};
#endif
CSCALCTTrailer2006::CSCALCTTrailer2006() {
bzero(this, sizeInWords() * 2); ///size of the trailer
e0dLine = 0xDE0D;
d_0 = 0xD;
d_1 = 0xD;
zero_0 = 0;
zero_1 = 0;
d_3 = 0xD;
reserved_3 = 1;
}
CSCALCTTrailer2007::CSCALCTTrailer2007() {
bzero(this, sizeInWords() * 2); ///size of the trailer
e0dLine = 0xDE0D;
reserved_0 = 0xD;
reserved_1 = 0xD;
reserved_3 = 1;
reserved_4 = 0xD;
}
CSCALCTTrailer::CSCALCTTrailer(int size, int firmVersion) { ///needed for packing
if (firmVersion == 2006) {
trailer2006.setSize(size);
firmwareVersion = 2006;
} else if (firmVersion == 2007) {
trailer2007.setSize(size);
firmwareVersion = 2007;
} else {
edm::LogError("CSCALCTTrailer|CSCRawToDigi")
<< "failed to construct: undetermined ALCT firmware version!!" << firmVersion;
}
}
CSCALCTTrailer::CSCALCTTrailer(const unsigned short* buf) {
///determine the version first
if ((buf[0] == 0xDE0D) && ((buf[1] & 0xF000) == 0xD000)) {
firmwareVersion = 2007;
} else if ((buf[2] & 0xFFF) == 0xE0D) {
firmwareVersion = 2006;
} else {
edm::LogError("CSCALCTTrailer|CSCRawToDigi")
<< "failed to construct: undetermined ALCT firmware version!!" << firmwareVersion;
}
///Now fill data
#ifdef LOCAL_UNPACK
switch (firmwareVersion) {
#else
switch (firmwareVersion.load()) {
#endif
case 2006:
trailer2006.setFromBuffer(buf);
break;
case 2007:
trailer2007.setFromBuffer(buf);
break;
default:
edm::LogError("CSCALCTTrailer|CSCRawToDigi") << "couldn't construct: ALCT firmware version is bad/not defined!";
break;
}
}
|