507 std::shared_ptr<TFragment> eventFrag = std::make_shared<TFragment>();
513 bool multipleErrors =
false;
529 eventFrag->SetDaqTimeStamp(midasTime);
530 eventFrag->SetDaqId(midasSerialNumber);
534 if((eventFrag->GetModuleType() == 1 || eventFrag->GetModuleType() == 4) && eventFrag->GetAddress() == 0xffff) {
538 if(eventFrag->GetDetectorType() == 0xf) {
542 if((chan !=
nullptr) && strncmp(
"RF", chan->GetName(), 2) == 0) {
555 multipleErrors =
true;
565 for(; x < size; x++) {
566 if((data[x] >> 28) == 0xe) {
return x; }
595 multipleErrors =
true;
611 multipleErrors =
true;
621 multipleErrors =
true;
625 std::vector<Int_t> tmpCharge;
626 std::vector<Short_t> tmpIntLength;
627 std::vector<Int_t> tmpCfd;
629 for(; x < size; x++) {
630 uint32_t dword = data[x];
631 uint32_t packet = dword >> 28;
632 uint32_t value = dword & 0x0fffffff;
645 multipleErrors =
true;
647 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
661 if((value & 0x3fff) == (eventFrag->GetChannelId() & 0x3fff)) {
662 if(!
Options()->SuppressErrors() && (eventFrag->GetModuleType() == 2) && (bank <
EBank::kGRF3)) {
664 if(((value >> 14) & 0x1) == 0x1) {
665 if(((value >> 16) & 0xff) != 0) {
666 std::cout <<
BLUE <<
hex(eventFrag->GetAddress(), 4) <<
": NIOS code finished with error " <<
hex((value >> 16) & 0xff, 2) <<
RESET_COLOR << std::endl;
671 if((eventFrag->GetModuleType() == 1) || (bank >
EBank::kGRF2)) {
672 eventFrag->SetAcceptedChannelId((value >> 14) & 0x3fff);
674 eventFrag->SetAcceptedChannelId(0);
681 if(
Options()->WordOffset() >= 0 && eventFrag->GetNumberOfWords() > 0 && !eventFrag->HasWave() && eventFrag->GetNumberOfWords() != x +
Options()->WordOffset()) {
686 multipleErrors =
true;
688 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
702 if(eventFrag->GetModuleType() == 1 && bank ==
EBank::kGRF4) {
703 if(tmpCfd.size() != 1) {
711 multipleErrors =
true;
713 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
716 eventFrag->SetCfd(tmpCfd[0]);
723 if(tmpCharge.size() != tmpIntLength.size() || tmpCharge.size() != tmpCfd.size()) {
731 multipleErrors =
true;
733 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
736 for(
size_t h = 0; h < tmpCharge.size(); ++h) {
737 eventFrag->SetCharge(tmpCharge[h]);
738 eventFrag->SetKValue(tmpIntLength[h]);
739 eventFrag->SetCfd(tmpCfd[h]);
744 if(
Options()->ReconstructTimeStamp()) {
754 if((eventFrag->GetTimeStamp() & 0x0fffffff) <
758 eventFrag->AppendTimeStamp(((
LastTimeStampMap()[eventFrag->GetAddress()] >> 28) + 1) << 28);
760 eventFrag->AppendTimeStamp(
LastTimeStampMap()[eventFrag->GetAddress()] & 0x3fff0000000);
767 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
780 multipleErrors =
true;
782 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
794 multipleErrors =
true;
796 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
811 multipleErrors =
true;
813 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
824 multipleErrors =
true;
826 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
830 std::cout <<
"This bank not yet defined." << std::endl;
837 switch(eventFrag->GetModuleType()) {
844 if(((data[x] & 0x80000000) == 0x0) && x + 1 < size && (data[x + 1] & 0x80000000) == 0x0) {
845 Short_t tmp = (data[x] & 0x7c000000) >> 21;
846 tmpCharge.push_back((data[x] & 0x03ffffff) | (((data[x] & 0x02000000) == 0x02000000)
850 tmpIntLength.push_back(tmp | ((data[x] & 0x7c000000) >> 26));
851 tmpCfd.push_back(data[x] & 0x03ffffff);
858 multipleErrors =
true;
860 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
866 (data[x + 1] & 0x80000000) == 0x0) {
867 Short_t tmp = (data[x] & 0x7c000000) >> 17;
868 tmpCharge.push_back((data[x] & 0x03ffffff) | (((data[x] & 0x02000000) == 0x02000000)
872 tmpIntLength.push_back(tmp | ((data[x] & 0x7fc00000) >> 22));
873 tmpCfd.push_back(data[x] & 0x003fffff);
881 multipleErrors =
true;
883 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
890 if((data[x] & 0x80000000) == 0x0 && x + 1 < size &&
891 (data[x + 1] & 0x80000000) == 0x0) {
892 Short_t tmp = ((data[x] & 0x7c000000) >> 17) |
893 (((data[x] & 0x40000000) == 0x40000000) ? 0xc000 : 0x0);
897 tmpCharge.push_back((data[x] & 0x01ffffff) |
898 (((data[x] & 0x01000000) == 0x01000000)
902 tmpIntLength.push_back(tmp | ((data[x] & 0x7fc00000) >> 22));
903 tmpCfd.push_back(data[x] & 0x003fffff);
906 if(x + 2 < size && (data[x + 1] & 0x80000000) == 0x0 && (data[x + 2] & 0x80000000) == 0x0) {
908 tmpIntLength.push_back((data[x] & 0x3fff) | (((data[x] & 0x2000) == 0x2000) ? 0xc000 : 0x0));
911 if((data[x] & 0x02000000) == 0x02000000) {
912 tmpCharge.push_back(std::numeric_limits<int>::max());
914 tmpCharge.push_back((data[x] & 0x01ffffff) |
915 (((data[x] & 0x01000000) == 0x01000000)
921 if(x + 2 < size && (data[x + 1] & 0x80000000) == 0x0 && (data[x + 2] & 0x80000000) == 0x0) {
923 tmpIntLength.push_back((data[x] & 0x3fff) | (((data[x] & 0x2000) == 0x2000) ? 0xc000 : 0x0));
924 tmpIntLength.push_back((data[x] >> 16) |
925 (((data[x] & 0x20000000) == 0x20000000) ? 0xc000 : 0x0));
927 if((data[x] & 0x02000000) == 0x02000000) {
928 tmpCharge.push_back(std::numeric_limits<int>::max());
930 tmpCharge.push_back((data[x] & 0x01ffffff) |
931 (((data[x] & 0x01000000) == 0x01000000)
937 if(x + 1 < size && (data[x + 1] & 0x80000000) == 0x0) {
939 if((data[x] & 0x02000000) == 0x02000000) {
940 tmpCharge.push_back(std::numeric_limits<int>::max());
942 tmpCharge.push_back((data[x] & 0x01ffffff) |
943 (((data[x] & 0x01000000) == 0x01000000)
948 tmpIntLength.pop_back();
950 }
else if((data[x + 1] & 0x80000000) == 0x0) {
953 }
else if((data[x + 1] & 0x80000000) == 0x0) {
960 while(x < size && (data[x] & 0xf0000000) != 0xe0000000) {
968 multipleErrors =
true;
970 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
975 if(!
Options()->SuppressErrors()) {
976 std::cout <<
DRED <<
"Error, bank type " <<
static_cast<std::underlying_type<EBank>::type
>(bank) <<
" not implemented yet" <<
RESET_COLOR << std::endl;
983 multipleErrors =
true;
985 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
992 if(x + 1 < size && (data[x + 1] & 0x80000000) == 0x0) {
993 Short_t tmp = (data[x] & 0x7c000000) >> 21;
994 tmpCharge.push_back((data[x] & 0x03ffffff) | (((data[x] & 0x02000000) == 0x02000000)
998 tmpIntLength.push_back(tmp | ((data[x] & 0x7c000000) >> 26));
999 tmpCfd.push_back(data[x] & 0x03ffffff);
1006 multipleErrors =
true;
1008 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
1013 if(bank >
EBank::kGRF2 && (eventFrag->GetDetectorType() == 6 || eventFrag->GetDetectorType() == 10 ||
1014 eventFrag->GetDetectorType() == 11)) {
1016 if(x + 1 < size && (data[x + 1] & 0x80000000) == 0x0) {
1027 multipleErrors =
true;
1029 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
1035 if(!
Options()->SuppressErrors()) {
1036 std::cout <<
DRED <<
"Error, module type " << eventFrag->GetModuleType() <<
" not implemented yet" <<
RESET_COLOR << std::endl;
1043 multipleErrors =
true;
1045 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
1057 multipleErrors =
true;
1059 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
1246 ULong64_t tshigh = 0;
1247 double rfFreq = -1.0;
1248 std::array<double, 4> rfPar;
1249 bool freqSet =
false;
1251 int failedWord = -1;
1254 for(
int i = 0; i < size; i++) {
1261 uint32_t dword = data[x];
1262 uint32_t packet = dword >> 28;
1263 uint32_t value = dword & 0x0fffffff;
1268 rfFreq =
static_cast<double>(value);
1276 if((data[x] >> 28) == 0xb) {
1278 ts |= ((tshigh & 0x00003fff) << 28);
1284 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*frag, data, size, failedWord,
false));
1294 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*frag, data, size, failedWord,
false));
1301 if(freqSet && tsSet) {
break; }
1309 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*frag, data, size, failedWord,
false));
1313 frag->SetTimeStamp(ts);
1315 if(!(x < size - 3)) {
1320 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*frag, data, size, failedWord,
false));
1323 if((data[x] == data[x + 1]) && (data[x] == data[x + 2]) && (data[x] == data[x + 3])) {
1328 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*frag, data, size, failedWord,
false));
1333 for(
int i = 0; i < 4; i++) {
1335 uint32_t dword = data[x];
1336 uint32_t packet = dword >> 28;
1339 if((packet) == 0xe) {
1344 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*frag, data, size, failedWord,
false));
1347 if((i != 2) && (dword == 0)) {
1352 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*frag, data, size, failedWord,
false));
1356 if((dword & (1 << 29)) != 0x0) {
1359 for(
int j = 0; j < 30; j++) {
1360 if((dword & (1 << j)) != 0x0) {
1365 for(
int j = pos + 1; j < 30; j++) {
1368 rfPar[i] =
static_cast<double>(-1.0 * (dword & 0x03ffffff));
1370 rfPar[i] =
static_cast<double>(dword & 0x03ffffff);
1380 rfPar[0] = rfPar[0] / rfPar[3];
1381 rfPar[1] = rfPar[1] / rfPar[3];
1382 rfPar[2] = rfPar[2] / rfPar[3];
1383 double T = 1.34217728E9 / rfFreq;
1384 double A = sqrt(rfPar[1] * rfPar[1] + rfPar[0] * rfPar[0]);
1385 double s = -rfPar[0] / A;
1386 double c = rfPar[1] / A;
1387 double rfPhaseShift = 0.;
1389 rfPhaseShift = acos(c) * T / (2 * TMath::Pi());
1391 rfPhaseShift = (1 - acos(c) / (2 * TMath::Pi())) * T;
1396 frag->SetCharge(
static_cast<float>(T));
1397 frag->SetCfd(
static_cast<float>(rfPhaseShift) * 1.6f);
1592 std::shared_ptr<TFragment> eventFrag = std::make_shared<TFragment>();
1594 int nofFragments = 0;
1600 for(
int board = 0; w < size; ++board) {
1602 if(data[w] >> 28 != 0xa) {
1603 if(data[w] == 0x0) {
1605 if(data[w++] != 0x0) {
1606 if(!
Options()->SuppressErrors()) {
1607 std::cerr << board <<
". board - failed on first word, found empty word, but not all following words were empty: " << w - 1 <<
" 0x" << std::hex << std::setw(8) << std::setfill(
'0') << data[w - 1] << std::dec << std::setfill(
' ') << std::endl;
1612 return nofFragments;
1614 if(!
Options()->SuppressErrors()) {
1615 std::cerr << board <<
". board - failed on first word 0x" << std::hex << std::setw(8) << std::setfill(
'0') << data[w] << std::dec << std::setfill(
' ') <<
", highest nibble should have been 0xa!" << std::endl;
1619 int32_t numWordsBoard = data[w++] & 0xfffffff;
1620 if(w - 1 + numWordsBoard > size) {
1621 if(!
Options()->SuppressErrors()) {
1622 std::cerr <<
"0 - Missing words, at word " << w - 1 <<
", expecting " << numWordsBoard <<
" more words for board " << board <<
" (bank size " << size <<
")" << std::endl;
1626 uint8_t boardId = data[w] >> 27;
1628 uint8_t channelMask = data[w++] & 0xff;
1630 uint32_t boardTime = data[w++];
1637 for(uint8_t channel = 0; channel < 16; channel += 2) {
1638 if(((channelMask >> (channel / 2)) & 0x1) == 0x0) {
1642 if(data[w] >> 31 != 0x1) {
1643 if(!
Options()->SuppressErrors()) {
1644 std::cerr <<
"Failed on first word 0x" << std::hex << std::setw(8) << std::setfill(
'0') << data[w] << std::dec << std::setfill(
' ') <<
", highest bit should have been set!" << std::endl;
1648 int32_t numWords = data[w++] & 0x3fffff;
1650 if(!
Options()->SuppressErrors()) {
1651 std::cerr <<
"1 - Missing words, got only " << w - 1 <<
" words for channel " << channel <<
" (bank size " << size <<
")" << std::endl;
1655 if(((data[w] >> 29) & 0x3) != 0x3) {
1656 if(!
Options()->SuppressErrors()) {
1657 std::cerr <<
"Failed on second word 0x" << std::hex << std::setw(8) << std::setfill(
'0') << data[w] << std::dec << std::setfill(
' ') <<
", bits 29 and 30 should have been set!" << std::endl;
1661 bool dualTrace = ((data[w] >> 31) == 0x1);
1662 bool extras = (((data[w] >> 28) & 0x1) == 0x1);
1663 bool waveform = (((data[w] >> 27) & 0x1) == 0x1);
1664 uint8_t extraFormat = ((data[w] >> 24) & 0x7);
1670 int numSampleWords = 4 * (data[w++] & 0xffff);
1672 if(!
Options()->SuppressErrors()) {
1673 std::cerr <<
"2 - Missing words, got only " << w - 1 <<
" words for channel " << channel <<
" (bank size " << size <<
")" << std::endl;
1677 int eventSize = numSampleWords + 2;
1678 if(extras) { ++eventSize; }
1679 if(numWords % eventSize != 2 && !(eventSize == 2 && numWords % eventSize == 0)) {
1680 if(!
Options()->SuppressErrors()) {
1681 std::cerr << numWords <<
" words in channel aggregate, event size is " << eventSize <<
" => " <<
static_cast<double>(numWords - 2.) /
static_cast<double>(eventSize) <<
" events?" << std::endl;
1687 for(
int ev = 0; ev < (numWords - 2) / eventSize; ++ev) {
1688 eventFrag->SetDaqTimeStamp(boardTime);
1689 eventFrag->SetAddress(0x8000 + (boardId * 0x100) + channel + (data[w] >> 31));
1690 if(eventFrag->GetAddress() == 0x8000) {
1691 eventFrag->SetDetectorType(9);
1693 eventFrag->SetDetectorType(6);
1696 eventFrag->SetTimeStamp(data[w] & 0x7fffffff);
1699 if(w + numSampleWords >= size) {
1700 if(!
Options()->SuppressErrors()) {
1701 std::cerr <<
"3 - Missing " << numSampleWords <<
" waveform words, got only " << w - 1 <<
" words for channel " << channel <<
" (bank size " << size <<
")" << std::endl;
1705 for(
int s = 0;
s < numSampleWords && w < size; ++
s, ++w) {
1712 eventFrag->AddWaveformSample(data[w] & 0xffff);
1713 eventFrag->AddWaveformSample((data[w] >> 16) & 0xffff);
1718 eventFrag->AddWaveformSample(data[w] & 0xffff);
1719 eventFrag->AddWaveformSample((data[w] >> 16) & 0xffff);
1726 if(!
Options()->SuppressErrors()) {
1727 std::cerr <<
"3 - Missing words, got only " << w - 1 <<
" words for channel " << channel <<
" (bank size " << size <<
")" << std::endl;
1734 switch(extraFormat) {
1737 eventFrag->SetTimeStamp(eventFrag->GetTimeStamp() |
static_cast<uint64_t
>(data[w] & 0xffff0000) << 15);
1740 eventFrag->SetNetworkPacketNumber((data[w] >> 12) & 0xf);
1745 eventFrag->SetTimeStamp(eventFrag->GetTimeStamp() |
static_cast<uint64_t
>(data[w] & 0xffff0000) << 15);
1748 eventFrag->SetTimeStamp(eventFrag->GetTimeStamp() |
static_cast<uint64_t
>(data[w] & 0xffff0000) << 15);
1749 eventFrag->SetCfd(data[w] & 0x3ff);
1750 eventFrag->SetNetworkPacketNumber((data[w] >> 12) & 0xf);
1757 eventFrag->SetAcceptedChannelId(data[w] & 0xffff);
1758 eventFrag->SetChannelId(data[w] >> 16);
1766 if(data[w] != 0x12345678) {
1767 if(!
Options()->SuppressErrors()) {
1768 std::cerr <<
"Failed to get debug data word 0x12345678, got " << std::hex << std::setw(8) << std::setfill(
'0') << data[w] << std::dec << std::setfill(
' ') << std::endl;
1778 eventFrag->SetCcShort(data[w] & 0x7fff);
1779 eventFrag->SetCcLong((data[w] >> 15) & 0x1);
1780 eventFrag->SetCharge(
static_cast<Int_t
>(data[w++] >> 16));
1784 event->IncrementGoodFrags();
1789 return nofFragments;
1795 std::shared_ptr<TFragment> eventFrag = std::make_shared<TFragment>();
1797 int nofFragments = 0;
1803 for(
int board = 0; w < size; ++board) {
1805 if(data[w] >> 28 != 0xa) {
1806 if(data[w] == 0x0) {
1808 if(data[w++] != 0x0) {
1809 if(!
Options()->SuppressErrors()) {
1810 std::cerr << board <<
". board - failed on first word, found empty word, but not all following words were empty: " << w - 1 <<
" 0x" << std::hex << std::setw(8) << std::setfill(
'0') << data[w - 1] << std::dec << std::setfill(
' ') << std::endl;
1815 return nofFragments;
1817 if(!
Options()->SuppressErrors()) {
1818 std::cerr << board <<
". board - failed on first word 0x" << std::hex << std::setw(8) << std::setfill(
'0') << data[w] << std::dec << std::setfill(
' ') <<
", highest nibble should have been 0xa!" << std::endl;
1822 int32_t numWordsBoard = data[w++] & 0xfffffff;
1823 if(w - 1 + numWordsBoard > size) {
1824 if(!
Options()->SuppressErrors()) {
1825 std::cerr <<
"0 - Missing words, at word " << w - 1 <<
", expecting " << numWordsBoard <<
" more words for board " << board <<
" (bank size " << size <<
")" << std::endl;
1829 uint8_t boardId = data[w] >> 27;
1832 uint8_t channelMask = data[w++] & 0xff;
1834 uint32_t boardTime = data[w++];
1841 for(uint8_t channel = 0; channel < 8; ++channel) {
1843 if(((channelMask >> channel) & 0x1) == 0x0) {
1847 if(data[w] >> 31 != 0x1) {
1848 if(!
Options()->SuppressErrors()) {
1849 std::cerr <<
"Failed on first word 0x" << std::hex << std::setw(8) << std::setfill(
'0') << data[w] << std::dec << std::setfill(
' ') <<
", highest bit should have been set (to get format info)!" << std::endl;
1853 int32_t numWords = data[w++] & 0x7fffffff;
1855 if(!
Options()->SuppressErrors()) {
1856 std::cerr <<
"1 - Missing words, got only " << w - 1 <<
" words for channel " << channel <<
" (bank size " << size <<
")" << std::endl;
1863 bool extras = (((data[w] >> 28) & 0x1) == 0x1);
1864 bool waveform = (((data[w] >> 27) & 0x1) == 0x1);
1865 uint8_t extraFormat = ((data[w] >> 24) & 0x7);
1882 int numSampleWords = 4 * (data[w++] & 0xffff);
1884 if(!
Options()->SuppressErrors()) {
1885 std::cerr <<
"2 - Missing words, got only " << w - 1 <<
" words for channel " << channel <<
" (bank size " << size <<
")" << std::endl;
1889 int eventSize = numSampleWords + 2;
1890 if(extras) { ++eventSize; }
1891 if(numWords % eventSize != 2 && !(eventSize == 2 && numWords % eventSize == 0)) {
1892 if(!
Options()->SuppressErrors()) {
1893 std::cerr << numWords <<
" words in channel aggregate, event size is " << eventSize <<
" (" << numWords % eventSize <<
") => " <<
static_cast<double>(numWords - 2.) /
static_cast<double>(eventSize) <<
" events?" << std::endl;
1899 for(
int ev = 0; ev < (numWords - 2) / eventSize; ++ev) {
1900 eventFrag->SetDaqTimeStamp(boardTime);
1901 eventFrag->SetAddress(0x8000 + (boardId * 0x100) + channel + (data[w] >> 31));
1902 eventFrag->SetDetectorType(0);
1904 eventFrag->SetTimeStamp(data[w++] & 0x7fffffff);
1906 if(w + numSampleWords >= size) {
1907 if(!
Options()->SuppressErrors()) {
1908 std::cerr <<
"3 - Missing " << numSampleWords <<
" waveform words, got only " << w - 1 <<
" words for channel " << channel <<
" (bank size " << size <<
")" << std::endl;
1912 for(
int s = 0;
s < numSampleWords && w < size; ++
s, ++w) {
1916 eventFrag->AddWaveformSample(data[w] & 0xffff);
1917 eventFrag->AddWaveformSample((data[w] >> 16) & 0xffff);
1921 if(!
Options()->SuppressErrors()) {
1922 std::cerr <<
"3 - Missing words, got only " << w - 1 <<
" words for channel " << channel <<
" (bank size " << size <<
")" << std::endl;
1929 switch(extraFormat) {
1932 eventFrag->SetTimeStamp(eventFrag->GetTimeStamp() |
static_cast<uint64_t
>(data[w] & 0xffff0000) << 15);
1935 eventFrag->SetTimeStamp(eventFrag->GetTimeStamp() |
static_cast<uint64_t
>(data[w] & 0xffff0000) << 15);
1936 eventFrag->SetCfd(data[w] & 0xffff);
1939 eventFrag->SetAcceptedChannelId(data[w] & 0xffff);
1940 eventFrag->SetChannelId(data[w] >> 16);
1957 eventFrag->SetCharge(
static_cast<Int_t
>(data[w] & 0xffff));
1972 event->IncrementGoodFrags();
1977 return nofFragments;
2089 int numFragsFound = 0;
2090 std::shared_ptr<TFragment> eventFrag = std::make_shared<TFragment>();
2091 eventFrag->SetDaqTimeStamp(event->GetTimeStamp());
2092 eventFrag->SetDaqId(event->GetSerialNumber());
2093 eventFrag->SetDetectorType(13);
2096 int failedWord = -1;
2098 bool multipleErrors =
false;
2099 uint32_t tmpTimestamp = 0;
2100 uint32_t tmpAddress = 0;
2103 std::vector<uint32_t> addresses;
2104 std::vector<uint32_t> charges;
2107 for(x = 0; x < size; ++x) {
2108 switch((data[x] >> 27) & 0x1F) {
2110 eventFrag->SetModuleType(data[x] & 0x1f);
2111 eventFrag->SetAcceptedChannelId((data[x] >> 5) & 0x3fffff);
2114 tmpAddress = (data[x] >> 16) & 0x300;
2115 eventFrag->SetChannelId((data[x] >> 12) & 0xfff);
2116 eventFrag->SetNetworkPacketNumber(data[x] & 0xfff);
2124 addresses.push_back(0x900000 + ((data[x] >> 19) & 0xff));
2125 charges.push_back(data[x] & 0x7ffff);
2128 if((tmpAddress != ((data[x] >> 16) & 0x300)) || (eventFrag->GetChannelId() != ((data[x] >> 12) & 0xfff))) {
2135 multipleErrors =
true;
2137 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
2139 eventFrag->SetNumberOfPileups(data[x] & 0xfff);
2142 eventFrag->SetAddress((data[x] >> 16) & 0x300);
2143 eventFrag->SetCharge(
static_cast<Int_t
>((data[x]) & 0xFFF));
2149 multipleErrors =
true;
2151 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
2154 tmpTimestamp = (data[x] & 0x7FFFFFF) << 5;
2161 tmpTimestamp = tmpTimestamp | ((data[x]) & 0x1f);
2169 ts +=
static_cast<Long64_t
>(0x100000000) *
static_cast<Long64_t
>(
wraparoundcounter);
2170 ts = ts *
static_cast<Long64_t
>(5);
2175 if((event->GetSerialNumber() ==
xfermidsn) && (event->GetTimeStamp() ==
xfermidts)) {
2178 eventFrag->SetTimeStamp(ts);
2181 if(addresses.size() != charges.size()) {
2182 std::cout <<
"Something went horribly wrong, the number of addresses read " << addresses.size() <<
" doesn't match the number of charges read " << charges.size() << std::endl;
2185 for(
size_t i = 0; i < addresses.size(); ++i) {
2188 for(
size_t j = 0; j < i; j++) {
2189 if(addresses[i] == addresses[j]) {
2195 eventFrag->SetAddress(addresses[i]);
2196 eventFrag->SetCharge(
static_cast<Int_t
>(charges[i]));
2214 multipleErrors =
true;
2216 Push(*
BadOutputQueue(), std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
2220 return numFragsFound;