14 #include <trg/cdc/modules/trgcdct3dUnpacker/TRGCDCT3DUnpackerModule.h>
18 using namespace TRGCDCT3DUNPACKERSPACE;
23 string TRGCDCT3DUnpackerModule::version()
const
25 return string(
"1.10");
28 TRGCDCT3DUnpackerModule::TRGCDCT3DUnpackerModule()
32 string desc =
"TRGCDCT3DUnpackerModule(" +
version() +
")";
38 B2DEBUG(20,
"TRGCDCT3DUnpacker: Constructor done.");
52 sprintf(c_name,
"TRGCDCT3DUnpackerStore%d",
m_T3DMOD);
53 m_store.registerInDataStore(c_name);
74 B2ERROR(
"trgcdct3dunpacker:cooper address is not set");
93 for (
int i = 0; i < raw_trgarray.
getEntries(); i++) {
94 for (
int j = 0; j < raw_trgarray[i]->GetNumEntries(); j++) {
98 int firm_id = (raw_trgarray[i]->GetDetectorBuffer(j,
m_copper_ab))[0];
99 if (firm_id == 0x32444620) {
117 const unsigned nword_header = 3;
119 long dataHeader = buf[nword_header] & 0xffff0000;
120 if (dataHeader != 0xdddd0000) {
126 for (
int clk = 0; clk < nClks; clk++) {
129 int ntups =
m_store.getEntries() - 1;
130 int* bitArray[nLeafs + nLeafsExtra];
131 setLeafPointersArray(
m_store[ntups], bitArray);
132 for (
int l = 0; l < nLeafs + nLeafsExtra; l++) *bitArray[l] = 0;
136 m_store[ntups]->m_firmid = buf[0];
137 m_store[ntups]->m_firmver = buf[1];
160 for (
unsigned _wd = 0; _wd < nBits_2k / 32; _wd++) {
161 int wd = buf[clk * (nBits_2k / 32) + _wd + nword_header];
162 for (
int bb = 0; bb < 32; bb++) {
163 if ((wd >> (31 - bb)) & 1) {
164 int bitPosition = (nBits_2k - 1) - _wd * 32 - bb;
166 leaf < nLeafs; leaf++) {
167 int bitMaxOfTheLeaf = BitMap[leaf][0];
168 int bitWidOfTheLeaf = BitMap[leaf][1];
169 int bitMinOfTheLeaf = bitMaxOfTheLeaf - bitWidOfTheLeaf;
170 if (bitMinOfTheLeaf <= bitPosition && bitPosition <= bitMaxOfTheLeaf) {
171 *bitArray[leaf] |= (1 << (bitPosition - bitMinOfTheLeaf));
183 const unsigned nword_header = 3;
185 long dataHeader = buf[nword_header] & 0xffff0000;
186 if (dataHeader != 0xdddd0000) {
192 for (
int clk = 0; clk < nClks; clk++) {
195 int ntups =
m_store.getEntries() - 1;
196 int* bitArray[nLeafs_2dfitter + nLeafsExtra];
197 setLeafPointersArray_2dfitter(
m_store[ntups], bitArray);
198 for (
int l = 0; l < nLeafs_2dfitter + nLeafsExtra; l++) *bitArray[l] = 0;
202 m_store[ntups]->m_firmid = buf[0];
203 m_store[ntups]->m_firmver = buf[1];
226 for (
unsigned _wd = 0; _wd < nBits_2k / 32; _wd++) {
227 int wd = buf[clk * (nBits_2k / 32) + _wd + nword_header];
228 for (
int bb = 0; bb < 32; bb++) {
229 if ((wd >> (31 - bb)) & 1) {
230 int bitPosition = (nBits_2k - 1) - _wd * 32 - bb;
232 leaf < nLeafs_2dfitter; leaf++) {
233 int bitMaxOfTheLeaf = BitMap_2dfitter[leaf][0];
234 int bitWidOfTheLeaf = BitMap_2dfitter[leaf][1];
235 int bitMinOfTheLeaf = bitMaxOfTheLeaf - bitWidOfTheLeaf;
236 if (bitMinOfTheLeaf <= bitPosition && bitPosition <= bitMaxOfTheLeaf) {
237 *bitArray[leaf] |= (1 << (bitPosition - bitMinOfTheLeaf));
250 const unsigned nword_header = 3;
252 long dataHeader = buf[nword_header] & 0xffff0000;
253 if (dataHeader != 0xdddd0000) {
259 for (
int clk = 0; clk < nClks; clk++) {
262 int ntups =
m_store.getEntries() - 1;
263 int* bitArray[nLeafs_2624 + nLeafsExtra];
264 setLeafPointersArray_2624(
m_store[ntups], bitArray);
265 for (
int l = 0; l < nLeafs_2624 + nLeafsExtra; l++) *bitArray[l] = 0;
269 m_store[ntups]->m_firmid = buf[0];
270 m_store[ntups]->m_firmver = buf[1];
293 for (
unsigned _wd = 0; _wd < nBits_2624 / 32; _wd++) {
294 int wd = buf[clk * (nBits_2624 / 32) + _wd + nword_header];
295 for (
int bb = 0; bb < 32; bb++) {
296 if ((wd >> (31 - bb)) & 1) {
297 int bitPosition = (nBits_2624 - 1) - _wd * 32 - bb;
299 leaf < nLeafs_2624; leaf++) {
300 int bitMaxOfTheLeaf = BitMap_2624[leaf][0];
301 int bitWidOfTheLeaf = BitMap_2624[leaf][1];
302 int bitMinOfTheLeaf = bitMaxOfTheLeaf - bitWidOfTheLeaf;
303 if (bitMinOfTheLeaf <= bitPosition && bitPosition <= bitMaxOfTheLeaf) {
304 *bitArray[leaf] |= (1 << (bitPosition - bitMinOfTheLeaf));