97 for (
int i = 0; i < raw_trgarray.
getEntries(); i++) {
100 if (raw_trgarray[i]->GetMaxNumOfCh(0) == 48) {
m_pciedata =
true; }
101 else if (raw_trgarray[i]->GetMaxNumOfCh(0) == 4) {
m_pciedata =
false; }
102 else { B2FATAL(
"TRGTOPUnpackerModule: Invalid value of GetMaxNumOfCh from raw data: " <<
LogVar(
"Number of ch: ", raw_trgarray[i]->GetMaxNumOfCh(0))); }
108 node_id = 0x10000001;
112 node_id = 0x12000001;
117 for (
int j = 0; j < raw_trgarray[i]->GetNumEntries(); j++) {
119 m_nodeId = raw_trgarray[i]->GetNodeID(j);
123 int numberOfChannels = raw_trgarray[i]->GetMaxNumOfCh(i);
127 for (
int channel = 0; channel < numberOfChannels; channel++) {
129 if (channel != ch_id_1 && channel != ch_id_2)
continue;
131 m_nWords = raw_trgarray[i]->GetDetectorNwords(j, channel);
181 bool dataFormatKnown =
false;
184 int numberOfWindows = -1;
200 dataFormatKnown =
true;
204 numberOfWindows = 24;
205 dataFormatKnown =
true;
209 numberOfWindows = 48;
210 dataFormatKnown =
true;
214 numberOfWindows = 48;
215 dataFormatKnown =
true;
219 numberOfWindows = 96;
220 dataFormatKnown =
true;
224 if (!dataFormatKnown) {
225 if (!m_reportedAlreadyRun_1) {
226 B2INFO(
"Unknown data format / error / exiting. This condition is reported only once per run.");
227 m_reportedAlreadyRun_1 =
true;
261 bool performBufferAnalysis =
true;
262 bool reportAllErrors =
true;
266 int counterDummyWindows = 0;
267 unsigned int testPatternDummyEvent = 0xbbbb;
268 for (
int iWindow = 0; iWindow < numberOfWindows; iWindow++) {
269 int index = iWindow * windowSize + 3;
271 unsigned int testPattern = (rdat[index] >> 16) & 0xffff;
272 if (testPattern == testPatternDummyEvent) {
273 counterDummyWindows++;
277 if (!m_overrideControlBits) {
280 testPattern = (rdat[index + 2] >> 29) & 0x7;
281 if (testPattern & 0x1) performBufferAnalysis =
false;
282 if (testPattern & 0x2) reportAllErrors =
false;
288 if (counterDummyWindows == numberOfWindows) {
289 performBufferAnalysis =
false;
291 if (counterDummyWindows != 0) {
292 if (reportAllErrors) B2ERROR(
"Corrupted data? numberOfWindows = " << numberOfWindows <<
", counterDummyWindows = " <<
293 counterDummyWindows);
294 performBufferAnalysis =
false;
400 if (performBufferAnalysis) {
402 for (
int iWindow = 0; iWindow < numberOfWindows; iWindow++) {
403 int index = iWindow * windowSize + 3;
404 int dataFormatVersionNow = (rdat[index] >> 11) & 0x1f;
405 if (dataFormatVersionNow < 4)
return;
414 for (
int i = 0; i < 8; i++) {
417 if (channel == 0) slot = slot + 8;
419 auto* timeStampsSlotStore = m_TRGTOPWaveFormTimeStampsSlots.appendNew(slot, 4 * numberOfWindows);
421 int nActualTimeStamps = 0;
423 int firstActualTimeStampValue = -1;
424 int firstActualTimeStampClockCycle = -1;
427 for (
int iWindow = 0; iWindow < numberOfWindows; iWindow++) {
429 int clockCycle = iWindow * 4;
432 int index = iWindow * windowSize + 3;
436 int shift_data = i * 2;
438 int value1 = (rdat[index + 16 + shift_data] >> 16) & 0xffff;
439 int value2 = (rdat[index + 16 + shift_data]) & 0xffff;
440 int value3 = (rdat[index + 17 + shift_data] >> 16) & 0xffff;
441 int value4 = (rdat[index + 17 + shift_data]) & 0xffff;
448 auto* timeStampStore = m_TRGTOPWaveFormTimeStamps.appendNew(timeStamp1);
449 timeStampsSlotStore->addRelationTo(timeStampStore);
450 timeStampStore->addRelationTo(timeStampsSlotStore);
452 timeStampStore = m_TRGTOPWaveFormTimeStamps.appendNew(timeStamp2);
453 timeStampsSlotStore->addRelationTo(timeStampStore);
454 timeStampStore->addRelationTo(timeStampsSlotStore);
456 timeStampStore = m_TRGTOPWaveFormTimeStamps.appendNew(timeStamp3);
457 timeStampsSlotStore->addRelationTo(timeStampStore);
458 timeStampStore->addRelationTo(timeStampsSlotStore);
460 timeStampStore = m_TRGTOPWaveFormTimeStamps.appendNew(timeStamp4);
461 timeStampsSlotStore->addRelationTo(timeStampStore);
462 timeStampStore->addRelationTo(timeStampsSlotStore);
464 if (!timeStamp1.isEmptyClockCycle()) {
466 if (nActualTimeStamps == 1) {
467 firstActualTimeStampValue = value1;
468 firstActualTimeStampClockCycle = clockCycle;
473 if (!timeStamp2.isEmptyClockCycle()) {
475 if (nActualTimeStamps == 1) {
476 firstActualTimeStampValue = value2;
477 firstActualTimeStampClockCycle = clockCycle;
482 if (!timeStamp3.isEmptyClockCycle()) {
484 if (nActualTimeStamps == 1) {
485 firstActualTimeStampValue = value3;
486 firstActualTimeStampClockCycle = clockCycle;
491 if (!timeStamp4.isEmptyClockCycle()) {
493 if (nActualTimeStamps == 1) {
494 firstActualTimeStampValue = value4;
495 firstActualTimeStampClockCycle = clockCycle;
502 timeStampsSlotStore->setNumberOfActualTimeStamps(nActualTimeStamps);
503 timeStampsSlotStore->setFirstActualTimeStampValue(firstActualTimeStampValue);
504 timeStampsSlotStore->setFirstActualTimeStampClockCycle(firstActualTimeStampClockCycle);