Project
Loading...
Searching...
No Matches
GBTFrame.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
14
16#include <iostream>
17
18using namespace o2::tpc;
19
20GBTFrame::GBTFrame(short s0hw0l, short s0hw1l, short s0hw2l, short s0hw3l,
21 short s0hw0h, short s0hw1h, short s0hw2h, short s0hw3h,
22 short s1hw0l, short s1hw1l, short s1hw2l, short s1hw3l,
23 short s1hw0h, short s1hw1h, short s1hw2h, short s1hw3h,
24 short s2hw0, short s2hw1, short s2hw2, short s2hw3,
25 short s0adc, short s1adc, short s2adc, unsigned marker)
26{
27
28 mWords[0] =
29 (BIT02(s0hw0h) << 31) | (BIT02(s0hw1h) << 30) | (BIT02(s0hw2h) << 29) | (BIT02(s0hw3h) << 28) |
30 (BIT01(s0hw0h) << 27) | (BIT01(s0hw1h) << 26) | (BIT01(s0hw2h) << 25) | (BIT01(s0hw3h) << 24) |
31 (BIT00(s0hw0h) << 23) | (BIT00(s0hw1h) << 22) | (BIT00(s0hw2h) << 21) | (BIT00(s0hw3h) << 20) |
32 (BIT04(s0hw0l) << 19) | (BIT04(s0hw1l) << 18) | (BIT04(s0hw2l) << 17) | (BIT04(s0hw3l) << 16) |
33 (BIT03(s0hw0l) << 15) | (BIT03(s0hw1l) << 14) | (BIT03(s0hw2l) << 13) | (BIT03(s0hw3l) << 12) |
34 (BIT02(s0hw0l) << 11) | (BIT02(s0hw1l) << 10) | (BIT02(s0hw2l) << 9) | (BIT02(s0hw3l) << 8) |
35 (BIT01(s0hw0l) << 7) | (BIT01(s0hw1l) << 6) | (BIT01(s0hw2l) << 5) | (BIT01(s0hw3l) << 4) |
36 (BIT00(s0hw0l) << 3) | (BIT00(s0hw1l) << 2) | (BIT00(s0hw2l) << 1) | (BIT00(s0hw3l));
37
38 mWords[1] =
39 (BIT04(s1hw0l) << 31) | (BIT04(s1hw1l) << 30) | (BIT04(s1hw2l) << 29) | (BIT04(s1hw3l) << 28) |
40 (BIT03(s1hw0l) << 27) | (BIT03(s1hw1l) << 26) | (BIT03(s1hw2l) << 25) | (BIT03(s1hw3l) << 24) |
41 (BIT02(s1hw0l) << 23) | (BIT02(s1hw1l) << 22) | (BIT02(s1hw2l) << 21) | (BIT02(s1hw3l) << 20) |
42 (BIT01(s1hw0l) << 19) | (BIT01(s1hw1l) << 18) | (BIT01(s1hw2l) << 17) | (BIT01(s1hw3l) << 16) |
43 (BIT00(s1hw0l) << 15) | (BIT00(s1hw1l) << 14) | (BIT00(s1hw2l) << 13) | (BIT00(s1hw3l) << 12) |
44 (BIT03(s0adc) << 11) | (BIT02(s0adc) << 10) | (BIT01(s0adc) << 9) | (BIT00(s0adc) << 8) |
45 (BIT04(s0hw0h) << 7) | (BIT04(s0hw1h) << 6) | (BIT04(s0hw2h) << 5) | (BIT04(s0hw3h) << 4) |
46 (BIT03(s0hw0h) << 3) | (BIT03(s0hw1h) << 2) | (BIT03(s0hw2h) << 1) | (BIT03(s0hw3h));
47
48 mWords[2] =
49 (BIT01(s2hw0) << 31) | (BIT01(s2hw1) << 30) | (BIT01(s2hw2) << 29) | (BIT01(s2hw3) << 28) |
50 (BIT00(s2hw0) << 27) | (BIT00(s2hw1) << 26) | (BIT00(s2hw2) << 25) | (BIT00(s2hw3) << 24) |
51 (BIT03(s1adc) << 23) | (BIT02(s1adc) << 22) | (BIT01(s1adc) << 21) | (BIT00(s1adc) << 20) |
52 (BIT04(s1hw0h) << 19) | (BIT04(s1hw1h) << 18) | (BIT04(s1hw2h) << 17) | (BIT04(s1hw3h) << 16) |
53 (BIT03(s1hw0h) << 15) | (BIT03(s1hw1h) << 14) | (BIT03(s1hw2h) << 13) | (BIT03(s1hw3h) << 12) |
54 (BIT02(s1hw0h) << 11) | (BIT02(s1hw1h) << 10) | (BIT02(s1hw2h) << 9) | (BIT02(s1hw3h) << 8) |
55 (BIT01(s1hw0h) << 7) | (BIT01(s1hw1h) << 6) | (BIT01(s1hw2h) << 5) | (BIT01(s1hw3h) << 4) |
56 (BIT00(s1hw0h) << 3) | (BIT00(s1hw1h) << 2) | (BIT00(s1hw2h) << 1) | (BIT00(s1hw3h));
57
58 mWords[3] =
59 (BIT15(marker) << 31) | (BIT14(marker) << 30) | (BIT13(marker) << 29) | (BIT12(marker) << 28) |
60 (BIT11(marker) << 27) | (BIT10(marker) << 26) | (BIT09(marker) << 25) | (BIT08(marker) << 24) |
61 (BIT07(marker) << 23) | (BIT06(marker) << 22) | (BIT05(marker) << 21) | (BIT04(marker) << 20) |
62 (BIT03(marker) << 19) | (BIT02(marker) << 18) | (BIT01(marker) << 17) | (BIT00(marker) << 16) |
63 (BIT03(s2adc) << 15) | (BIT02(s2adc) << 14) | (BIT01(s2adc) << 13) | (BIT00(s2adc) << 12) |
64 (BIT04(s2hw0) << 11) | (BIT04(s2hw1) << 10) | (BIT04(s2hw2) << 9) | (BIT04(s2hw3) << 8) |
65 (BIT03(s2hw0) << 7) | (BIT03(s2hw1) << 6) | (BIT03(s2hw2) << 5) | (BIT03(s2hw3) << 4) |
66 (BIT02(s2hw0) << 3) | (BIT02(s2hw1) << 2) | (BIT02(s2hw2) << 1) | (BIT02(s2hw3));
67
68 mHalfWords[0][0][0] = s0hw0l;
69 mHalfWords[0][0][1] = s0hw1l;
70 mHalfWords[0][0][2] = s0hw2l;
71 mHalfWords[0][0][3] = s0hw3l;
72
73 mHalfWords[0][1][0] = s0hw0h;
74 mHalfWords[0][1][1] = s0hw1h;
75 mHalfWords[0][1][2] = s0hw2h;
76 mHalfWords[0][1][3] = s0hw3h;
77
78 mHalfWords[1][0][0] = s1hw0l;
79 mHalfWords[1][0][1] = s1hw1l;
80 mHalfWords[1][0][2] = s1hw2l;
81 mHalfWords[1][0][3] = s1hw3l;
82
83 mHalfWords[1][1][0] = s1hw0h;
84 mHalfWords[1][1][1] = s1hw1h;
85 mHalfWords[1][1][2] = s1hw2h;
86 mHalfWords[1][1][3] = s1hw3h;
87
88 mHalfWords[2][0][0] = s2hw0;
89 mHalfWords[2][0][1] = s2hw1;
90 mHalfWords[2][0][2] = s2hw2;
91 mHalfWords[2][0][3] = s2hw3;
92
93 mHalfWords[2][1][0] = mHalfWords[2][0][0];
94 mHalfWords[2][1][1] = mHalfWords[2][0][1];
95 mHalfWords[2][1][2] = mHalfWords[2][0][2];
96 mHalfWords[2][1][3] = mHalfWords[2][0][3];
97
98 mAdcClock[0] = s0adc;
99 mAdcClock[1] = s0adc;
100 mAdcClock[2] = s0adc;
101}
102
103void GBTFrame::setData(short s0hw0l, short s0hw1l, short s0hw2l, short s0hw3l,
104 short s0hw0h, short s0hw1h, short s0hw2h, short s0hw3h,
105 short s1hw0l, short s1hw1l, short s1hw2l, short s1hw3l,
106 short s1hw0h, short s1hw1h, short s1hw2h, short s1hw3h,
107 short s2hw0, short s2hw1, short s2hw2, short s2hw3,
108 short s0adc, short s1adc, short s2adc, unsigned marker)
109{
110 mWords[0] =
111 (BIT02(s0hw0h) << 31) | (BIT02(s0hw1h) << 30) | (BIT02(s0hw2h) << 29) | (BIT02(s0hw3h) << 28) |
112 (BIT01(s0hw0h) << 27) | (BIT01(s0hw1h) << 26) | (BIT01(s0hw2h) << 25) | (BIT01(s0hw3h) << 24) |
113 (BIT00(s0hw0h) << 23) | (BIT00(s0hw1h) << 22) | (BIT00(s0hw2h) << 21) | (BIT00(s0hw3h) << 20) |
114 (BIT04(s0hw0l) << 19) | (BIT04(s0hw1l) << 18) | (BIT04(s0hw2l) << 17) | (BIT04(s0hw3l) << 16) |
115 (BIT03(s0hw0l) << 15) | (BIT03(s0hw1l) << 14) | (BIT03(s0hw2l) << 13) | (BIT03(s0hw3l) << 12) |
116 (BIT02(s0hw0l) << 11) | (BIT02(s0hw1l) << 10) | (BIT02(s0hw2l) << 9) | (BIT02(s0hw3l) << 8) |
117 (BIT01(s0hw0l) << 7) | (BIT01(s0hw1l) << 6) | (BIT01(s0hw2l) << 5) | (BIT01(s0hw3l) << 4) |
118 (BIT00(s0hw0l) << 3) | (BIT00(s0hw1l) << 2) | (BIT00(s0hw2l) << 1) | (BIT00(s0hw3l));
119
120 mWords[1] =
121 (BIT04(s1hw0l) << 31) | (BIT04(s1hw1l) << 30) | (BIT04(s1hw2l) << 29) | (BIT04(s1hw3l) << 28) |
122 (BIT03(s1hw0l) << 27) | (BIT03(s1hw1l) << 26) | (BIT03(s1hw2l) << 25) | (BIT03(s1hw3l) << 24) |
123 (BIT02(s1hw0l) << 23) | (BIT02(s1hw1l) << 22) | (BIT02(s1hw2l) << 21) | (BIT02(s1hw3l) << 20) |
124 (BIT01(s1hw0l) << 19) | (BIT01(s1hw1l) << 18) | (BIT01(s1hw2l) << 17) | (BIT01(s1hw3l) << 16) |
125 (BIT00(s1hw0l) << 15) | (BIT00(s1hw1l) << 14) | (BIT00(s1hw2l) << 13) | (BIT00(s1hw3l) << 12) |
126 (BIT03(s0adc) << 11) | (BIT02(s0adc) << 10) | (BIT01(s0adc) << 9) | (BIT00(s0adc) << 8) |
127 (BIT04(s0hw0h) << 7) | (BIT04(s0hw1h) << 6) | (BIT04(s0hw2h) << 5) | (BIT04(s0hw3h) << 4) |
128 (BIT03(s0hw0h) << 3) | (BIT03(s0hw1h) << 2) | (BIT03(s0hw2h) << 1) | (BIT03(s0hw3h));
129
130 mWords[2] =
131 (BIT01(s2hw0) << 31) | (BIT01(s2hw1) << 30) | (BIT01(s2hw2) << 29) | (BIT01(s2hw3) << 28) |
132 (BIT00(s2hw0) << 27) | (BIT00(s2hw1) << 26) | (BIT00(s2hw2) << 25) | (BIT00(s2hw3) << 24) |
133 (BIT03(s1adc) << 23) | (BIT02(s1adc) << 22) | (BIT01(s1adc) << 21) | (BIT00(s1adc) << 20) |
134 (BIT04(s1hw0h) << 19) | (BIT04(s1hw1h) << 18) | (BIT04(s1hw2h) << 17) | (BIT04(s1hw3h) << 16) |
135 (BIT03(s1hw0h) << 15) | (BIT03(s1hw1h) << 14) | (BIT03(s1hw2h) << 13) | (BIT03(s1hw3h) << 12) |
136 (BIT02(s1hw0h) << 11) | (BIT02(s1hw1h) << 10) | (BIT02(s1hw2h) << 9) | (BIT02(s1hw3h) << 8) |
137 (BIT01(s1hw0h) << 7) | (BIT01(s1hw1h) << 6) | (BIT01(s1hw2h) << 5) | (BIT01(s1hw3h) << 4) |
138 (BIT00(s1hw0h) << 3) | (BIT00(s1hw1h) << 2) | (BIT00(s1hw2h) << 1) | (BIT00(s1hw3h));
139
140 mWords[3] =
141 (BIT15(marker) << 31) | (BIT14(marker) << 30) | (BIT13(marker) << 29) | (BIT12(marker) << 28) |
142 (BIT11(marker) << 27) | (BIT10(marker) << 26) | (BIT09(marker) << 25) | (BIT08(marker) << 24) |
143 (BIT07(marker) << 23) | (BIT06(marker) << 22) | (BIT05(marker) << 21) | (BIT04(marker) << 20) |
144 (BIT03(marker) << 19) | (BIT02(marker) << 18) | (BIT01(marker) << 17) | (BIT00(marker) << 16) |
145 (BIT03(s2adc) << 15) | (BIT02(s2adc) << 14) | (BIT01(s2adc) << 13) | (BIT00(s2adc) << 12) |
146 (BIT04(s2hw0) << 11) | (BIT04(s2hw1) << 10) | (BIT04(s2hw2) << 9) | (BIT04(s2hw3) << 8) |
147 (BIT03(s2hw0) << 7) | (BIT03(s2hw1) << 6) | (BIT03(s2hw2) << 5) | (BIT03(s2hw3) << 4) |
148 (BIT02(s2hw0) << 3) | (BIT02(s2hw1) << 2) | (BIT02(s2hw2) << 1) | (BIT02(s2hw3));
149
150 mHalfWords[0][0][0] = s0hw0l;
151 mHalfWords[0][0][1] = s0hw1l;
152 mHalfWords[0][0][2] = s0hw2l;
153 mHalfWords[0][0][3] = s0hw3l;
154
155 mHalfWords[0][1][0] = s0hw0h;
156 mHalfWords[0][1][1] = s0hw1h;
157 mHalfWords[0][1][2] = s0hw2h;
158 mHalfWords[0][1][3] = s0hw3h;
159
160 mHalfWords[1][0][0] = s1hw0l;
161 mHalfWords[1][0][1] = s1hw1l;
162 mHalfWords[1][0][2] = s1hw2l;
163 mHalfWords[1][0][3] = s1hw3l;
164
165 mHalfWords[1][1][0] = s1hw0h;
166 mHalfWords[1][1][1] = s1hw1h;
167 mHalfWords[1][1][2] = s1hw2h;
168 mHalfWords[1][1][3] = s1hw3h;
169
170 mHalfWords[2][0][0] = s2hw0;
171 mHalfWords[2][0][1] = s2hw1;
172 mHalfWords[2][0][2] = s2hw2;
173 mHalfWords[2][0][3] = s2hw3;
174
175 mHalfWords[2][1][0] = mHalfWords[2][0][0];
176 mHalfWords[2][1][1] = mHalfWords[2][0][1];
177 mHalfWords[2][1][2] = mHalfWords[2][0][2];
178 mHalfWords[2][1][3] = mHalfWords[2][0][3];
179
180 mAdcClock[0] = s0adc;
181 mAdcClock[1] = s0adc;
182 mAdcClock[2] = s0adc;
183}
184
185void GBTFrame::setAdcClock(int sampa, int clock)
186{
187 switch (sampa) {
188 case 0:
189 mWords[1] = (mWords[1] & 0xFFFFF0FF) | ((clock & 0xF) << 8);
190 break;
191 case 1:
192 mWords[2] = (mWords[2] & 0xFF0FFFFF) | ((clock & 0xF) << 20);
193 break;
194 case 2:
195 mWords[3] = (mWords[3] & 0xFFFF0FFF) | ((clock & 0xF) << 12);
196 break;
197 case -1:
198 mWords[1] = (mWords[1] & 0xFFFFF0FF) | ((clock & 0xF) << 8);
199 mWords[2] = (mWords[2] & 0xFF0FFFFF) | ((clock & 0xF) << 20);
200 mWords[3] = (mWords[3] & 0xFFFF0FFF) | ((clock & 0xF) << 12);
201 break;
202 default:
203 std::cout << "don't know SAMPA " << sampa << std::endl;
204 break;
205 }
206 calculateAdcClock();
207}
208
209std::ostream& GBTFrame::Print(std::ostream& output) const
210{
211 output << "0x" << std::hex
212 << std::setfill('0') << std::right << std::setw(8) << mWords[3]
213 << std::setfill('0') << std::right << std::setw(8) << mWords[2]
214 << std::setfill('0') << std::right << std::setw(8) << mWords[1]
215 << std::setfill('0') << std::right << std::setw(8) << mWords[0]
216 << std::dec;
217 return output;
218}
GBT Frame object.
#define BIT10(x)
Definition GBTFrame.h:38
#define BIT05(x)
Definition GBTFrame.h:33
#define BIT12(x)
Definition GBTFrame.h:40
#define BIT11(x)
Definition GBTFrame.h:39
#define BIT06(x)
Definition GBTFrame.h:34
#define BIT13(x)
Definition GBTFrame.h:41
#define BIT15(x)
Definition GBTFrame.h:43
#define BIT00(x)
Definition GBTFrame.h:28
#define BIT07(x)
Definition GBTFrame.h:35
#define BIT02(x)
Definition GBTFrame.h:30
#define BIT04(x)
Definition GBTFrame.h:32
#define BIT09(x)
Definition GBTFrame.h:37
#define BIT01(x)
Definition GBTFrame.h:29
#define BIT03(x)
Definition GBTFrame.h:31
#define BIT14(x)
Definition GBTFrame.h:42
#define BIT08(x)
Definition GBTFrame.h:36
void output(const std::map< std::string, ChannelStat > &channels)
Definition rawdump.cxx:197
void setAdcClock(int sampa, int clock)
Definition GBTFrame.cxx:185
void setData(unsigned word3, unsigned word2, unsigned word1, unsigned word0)
Definition GBTFrame.h:254
std::ostream & Print(std::ostream &output) const
Definition GBTFrame.cxx:209
GBTFrame()
Default Constructor.
Definition GBTFrame.h:264
Global TPC definitions and constants.
Definition SimTraits.h:167