EventFilter
CSCRawToDigi
src
CSCCFEBTimeSlice.cc
Go to the documentation of this file.
1
#include "
DataFormats/MuonDetId/interface/CSCDetId.h
"
2
#include "
EventFilter/CSCRawToDigi/interface/CSCCFEBTimeSlice.h
"
3
#include <cassert>
4
#include <iomanip>
5
#include <cstdint>
6
7
// a Gray code is An ordering of 2n binary numbers such that
8
// only one bit changes from one entry to the next
9
// const unsigned layerGrayCode[] = {3,1,5,6,4,2};
10
const
unsigned
layerInverseGrayCode
[] = {1, 5, 0, 4, 2, 3};
11
// const unsigned channelGrayCode[] = {0,1,3,2, 6,7,5,4, 12,13,15,14, 10,11,9,8};
12
const
unsigned
channelInverseGrayCode
[] = {0, 1, 3, 2, 7, 6, 4, 5, 15, 14, 12, 13, 8, 9, 11, 10};
13
14
CSCCFEBTimeSlice::CSCCFEBTimeSlice
() {
15
bzero(
this
, 99 * 2);
16
dummy
= 0x7FFF;
17
blank_space_1
= 0x7;
18
blank_space_3
= 0x7;
19
}
20
21
CSCCFEBSCAControllerWord::CSCCFEBSCAControllerWord
(
unsigned
short
frame
)
22
// trig_time( frame & 0xFF ),
23
// sca_blk( (frame>>8) & 0xF ),
24
// l1a_phase((frame>>12( & 0x1),
25
// lct_phase((frame>>13( & 0x1),
26
// sca_full((frame>>14) & 0x1),
27
// ts_flag(((frame>>15) & 0x1)
28
{
29
memcpy(
this
, &
frame
, 2);
30
}
31
32
CSCCFEBDataWord
*
CSCCFEBTimeSlice::timeSample
(
int
layer
,
int
channel,
bool
isDCFEB)
const
{
33
assert
(
layer
>=
CSCDetId::minLayerId
());
34
assert
(
layer
<=
CSCDetId::maxLayerId
());
35
assert
(channel >= 1 && channel <= 16);
36
int
layerIndex =
layerInverseGrayCode
[
layer
- 1];
37
38
unsigned
channelIndex =
channelInverseGrayCode
[channel - 1];
39
if
(isDCFEB)
40
channelIndex = channel - 1;
41
unsigned
scaBin = channelIndex * 6 + layerIndex;
42
assert
(scaBin < 96
U
);
// scaBin >= 0, since scaBin is unsigned
43
return
timeSample
(scaBin);
44
}
45
46
CSCCFEBSCAControllerWord
CSCCFEBTimeSlice::scaControllerWord
(
int
layer
)
const
{
47
unsigned
int
result
= 0;
48
for
(
unsigned
i
= 0;
i
< 16; ++
i
) {
49
result
|=
timeSample
(
i
* 6 +
layer
- 1)->
controllerData
<<
i
;
50
}
51
return
CSCCFEBSCAControllerWord
(
result
);
52
}
53
54
void
CSCCFEBTimeSlice::setControllerWord
(
const
CSCCFEBSCAControllerWord
&controllerWord) {
55
for
(
int
layer
=
CSCDetId::minLayerId
();
layer
<=
CSCDetId::maxLayerId
(); ++
layer
) {
56
for
(
int
channel = 1; channel <= 16; ++channel) {
57
const
unsigned
short
*shortWord = reinterpret_cast<const unsigned short *>(&controllerWord);
58
timeSample
(
layer
, channel)->
controllerData
= (*shortWord >> (channel - 1)) & 1;
59
}
60
}
61
}
62
63
unsigned
CSCCFEBTimeSlice::calcCRC
()
const
{
64
unsigned
CRC
= 0;
65
for
(uint16_t
pos
= 0;
pos
< 96; ++
pos
)
66
CRC
= (
theSamples
[
pos
] & 0x1fff) ^ ((
theSamples
[
pos
] & 0x1fff) << 1) ^
67
(((
CRC
& 0x7ffc) >> 2) | ((0x0003 &
CRC
) << 13)) ^ ((
CRC
& 0x7ffc) >> 1);
68
return
CRC
;
69
}
70
71
std::ostream &
operator<<
(std::ostream &os,
const
CSCCFEBTimeSlice
&
slice
) {
72
for
(
int
ichannel = 1; ichannel <= 16; ++ichannel) {
73
for
(
int
ilayer =
CSCDetId::minLayerId
(); ilayer <=
CSCDetId::maxLayerId
(); ++ilayer) {
74
//unsigned index = (ilayer-1) + (ichannel-1)*6;
75
//int value = (slice.timeSample(index))->adcCounts - 560;
76
int
value
= (
slice
.timeSample(ilayer, ichannel))->adcCounts - 560;
77
os <<
" "
<< std::setw(5) <<
std::dec
<<
value
;
78
}
79
os << std::endl;
80
}
81
return
os;
82
}
mps_fire.i
i
Definition:
mps_fire.py:428
pos
Definition:
PixelAliasList.h:18
CSCCFEBTimeSlice
Definition:
CSCCFEBTimeSlice.h:52
cms::cuda::assert
assert(be >=bs)
CSCCFEBTimeSlice::theSamples
unsigned short theSamples[96]
Definition:
CSCCFEBTimeSlice.h:108
operator<<
std::ostream & operator<<(std::ostream &os, const CSCCFEBTimeSlice &slice)
Definition:
CSCCFEBTimeSlice.cc:71
CSCCFEBTimeSlice::blank_space_3
unsigned blank_space_3
Definition:
CSCCFEBTimeSlice.h:126
CSCDetId.h
CSCCFEBTimeSlice.h
CSCCFEBTimeSlice::CSCCFEBTimeSlice
CSCCFEBTimeSlice()
Definition:
CSCCFEBTimeSlice.cc:14
CSCCFEBDataWord::controllerData
unsigned short controllerData
combined from all 16 strips to make a word
Definition:
CSCCFEBTimeSlice.h:24
CSCCFEBDataWord
Definition:
CSCCFEBTimeSlice.h:20
mitigatedMETSequence_cff.U
U
Definition:
mitigatedMETSequence_cff.py:36
phase1PixelTopology::layer
constexpr std::array< uint8_t, layerIndexSize > layer
Definition:
phase1PixelTopology.h:99
CSCDetId::minLayerId
static int minLayerId()
Definition:
CSCDetId.h:242
CSCCFEBTimeSlice::blank_space_1
unsigned blank_space_1
Definition:
CSCCFEBTimeSlice.h:120
channelInverseGrayCode
const unsigned channelInverseGrayCode[]
Definition:
CSCCFEBTimeSlice.cc:12
CSCCFEBTimeSlice::setControllerWord
void setControllerWord(const CSCCFEBSCAControllerWord &controllerWord)
Definition:
CSCCFEBTimeSlice.cc:54
CSCCFEBTimeSlice::timeSample
CSCCFEBDataWord * timeSample(int index) const
input from 0 to 95
Definition:
CSCCFEBTimeSlice.h:57
value
Definition:
value.py:1
RawDataTask_cfi.CRC
CRC
Definition:
RawDataTask_cfi.py:59
CSCCFEBTimeSlice::calcCRC
unsigned calcCRC() const
Definition:
CSCCFEBTimeSlice.cc:63
relativeConstraints.value
value
Definition:
relativeConstraints.py:53
amptDefault_cfi.frame
frame
Definition:
amptDefault_cfi.py:12
CSCDetId::maxLayerId
static int maxLayerId()
Definition:
CSCDetId.h:243
mps_fire.result
result
Definition:
mps_fire.py:311
dummy
Definition:
DummySelector.h:38
CSCCFEBSCAControllerWord
Definition:
CSCCFEBTimeSlice.h:36
layerInverseGrayCode
const unsigned layerInverseGrayCode[]
Definition:
CSCCFEBTimeSlice.cc:10
CSCCFEBTimeSlice::scaControllerWord
CSCCFEBSCAControllerWord scaControllerWord(int layer) const
unpacked from the controller words for each channel in the layer
Definition:
CSCCFEBTimeSlice.cc:46
TauDecayModes.dec
dec
Definition:
TauDecayModes.py:142
CSCCFEBSCAControllerWord::CSCCFEBSCAControllerWord
CSCCFEBSCAControllerWord()
Definition:
CSCCFEBTimeSlice.h:42
mergeAndRegister.slice
slice
Definition:
mergeAndRegister.py:120
Generated for CMSSW Reference Manual by
1.8.16