518 ,
unsigned int version,
int verbosity,
unsigned int robsourceid
519 ,
const EventContext& ctx) {
521 int s, c, f, nfrag, ngain, nchan, nsamp,
size, ch, extra = 0, pmt, fragType, nhits = 0;
522 int id,
type, rflag,
unit, pulse, nsmpl, algor, niter;
523 const unsigned int* data;
524 unsigned short time, flag, prev, edge, chan,
bad;
525 char fr[2] = {
'F',
'R' };
526 char gb[2] = {
'G',
'B' };
527 std::string unitName[4] = {
"ADC count",
"pCb",
"Cs pCb",
"MeV" };
528 std::string shapeName[4] = {
"Phys",
"Laser",
"CIS",
"Simul" };
529 std::string algName[8] = {
"Unknown",
"OF1",
"OF2",
"Fit",
"ManyAmps",
"Flat",
"Alg6",
"Alg7" };
538 bool isFrag5 =
false;
540 std::vector<unsigned int> OFC;
544 bool beamROD = (subdet_id == 0x50 || subdet_id >= 0x60);
545 if (subdet_id >= 0x60) {
552 find_frag(roddata, rodsize, version, verbosity, frag.data(), nfrag);
554 if (verbosity > 9)
return;
556 for (f = 0; f < nfrag; ++f) {
558 id = frag[f]->id & 0xFFFF;
559 type = (frag[f]->id >> 16) & 0xFF;
560 rflag = (frag[f]->id) >> 24;
561 unit = (rflag & 0xC0) >> 6;
562 pulse = (rflag & 0x30) >> 4;
563 nsmpl = (rflag & 0x08) >> 3;
564 algor = (rflag & 0x04) >> 2;
565 niter = (rflag & 0x03);
567 data = frag[f]->data;
571 const unsigned char * adc;
572 const unsigned short * result;
573 int tmdb_ch1 = std::min(5U,((robsourceid)>>16)&0xF);
574 bool EB = (tmdb_ch1>2);
576 int tmdb_ch2 = (((robsourceid))&0xF)*nmod;
577 const char * dr56EB[10] = {
"D5-L",
"D5-R",
"D6-L",
"D6-R",
"D4-L",
"D4-R",
"XX-X",
"XX-X",
"XX-X",
"XX-X" };
578 const char * dr56LB[10] = {
"D0-x",
"D1-L",
"D1-R",
"D2-L",
"D2-R",
"D3-L",
"D3-R",
"B8-L",
"B8-R",
"XX-X" };
579 const char ** dr56rl = (EB) ? dr56EB : dr56LB;
580 const char * ch11[6] = {
"AUX",
"LBA",
"LBC",
"EBA",
"EBC",
"UNK" };
581 const char * ch12[6] = {
"aux",
"lba",
"lbc",
"eba",
"ebc",
"unk" };
582 const char * dr56hlEB[4] = {
" D6L ",
" D6H ",
" D56L",
" D56H"};
583 const char * dr56hlLB[4] = {
" DxL ",
" DxH ",
" DxxL",
" DxxH"};
585 const char * dr56thEB[4] = {
" D5 ",
" D6 ",
" D56 ",
"BCID "};
586 const char * dr56thLB[4] = {
" Dx ",
" Dy ",
" Dxy ",
"BCID "};
587 const char ** dr56th = (
m_runPeriod < 3) ? (EB ? dr56hlEB : dr56hlLB)
588 : (EB ? dr56thEB : dr56thLB);
590 const char * tit[4] = {
"TMDB digits",
"TMDB energy",
"TMDB decision",
"Unknown"};
592 std::cout << std::hex << std::endl << tit[
type&3] <<
" fragment 0x" <<
type <<
" vers 0x"<<
id <<
", "
593 << std::dec <<
size <<
" words found"<< std::endl << std::endl;
598 int ntd = (EB) ? 3 : 1;
599 int ntdl = (EB) ? 9 : 5;
607 std::cout <<
"ch cell ";
608 for (
int ind=nsamp; ind>0; --ind) {
609 std::cout <<
" S"<<ind;
611 std::cout << std::endl;
612 adc =
reinterpret_cast<const unsigned char *
>(data);
613 for (
int pword=0;pword<nch;++pword) {
614 int pword1=pword%nchmod;
615 if (!EB && nchmod==8) {
617 if (pword1==0) pword1=9;
620 if (pword1>6) pword1=9;
623 if (pword1>9) pword1=9;
625 std::cout << std::setw(2) << pword <<
" | " << ch11[tmdb_ch1] <<std::setfill(
'0')<<std::setw(2) <<tmdb_ch2+
count
626 <<
"-" <<std::setfill(
' ')<<std::setw(4)<<dr56rl[pword1];
627 for (
int ind=nsamp-1; ind>-1; --ind) {
628 std::cout <<
" | " << std::setw(3) << (
static_cast<unsigned>(adc[pword+nch*ind]) );
630 std::cout << std::endl;
631 if ((pword+1)%nchmod==0)
count+=1;
638 std::cout <<
"ch cell energy" << std::endl;
639 for (
int pword=0;pword<
size;++pword) {
640 int pword1=pword%nchmod;
641 if (!EB && nchmod==8) {
643 if (pword1==0) pword1=9;
646 if (pword1>6) pword1=9;
649 if (pword1>9) pword1=9;
651 std::cout << std::setw(2) << pword<<
" | " << ch11[tmdb_ch1] <<std::setfill(
'0')<<std::setw(2) <<tmdb_ch2+
count
652 <<
"-" <<std::setfill(
' ')<<std::setw(4)<<dr56rl[pword1]
653 <<
" | "<< std::setw(6) <<
static_cast<int>(data[pword])
655 if ((pword+1)%nchmod==0)
count+=1;
661 std::cout <<
"nn name TMDB SL_Board SL_Trigger_Sector "
662 << dr56th[3] << dr56th[2] << dr56th[1] << dr56th[0] << std::endl;
663 result =
reinterpret_cast<const unsigned short *
>(data);
666 int tmdb = (tmdb_ch2) / 8 + 1;
667 int slb = tmdb * 3 - 1;
668 std::string tmdb_name =
"TM0" + (EB ? std::to_string(tmdb) :
"X");
669 for (
int pword = 0; pword < ntd; ++pword) {
670 count = (EB) ? pword * 3 : pword * 4 + 1;
671 unsigned short r = result[pword];
673 int slts1 = slb * 2 - 2;
674 int slts2 = slts1 + 1;
675 std::string slt_sectors =
" - ";
677 std::stringstream slts12;
678 slts12 << std::setfill(
' ') << std::setw(2) << slts1 <<
"-"
679 << std::setfill(
' ') << std::setw(2) << std::left << slts2;
680 slt_sectors = slts12.str();
682 std::stringstream slb_name;
683 slb_name <<
"SL_E" << std::setfill(
'0') << std::setw(2) << (EB ? std::to_string(slb) :
"XX");
684 for(
int pqword = 0; pqword < 4; ++pqword){
685 std::cout << std::setw(2) << pqword + pword * 4 <<
" | "
686 << ((
count > 0 &&
count < ntdl) ? ch11[tmdb_ch1] : ch12[tmdb_ch1])
687 << std::setfill(
'0') << std::setw(2) << tmdb_ch2 +
count
688 << std::setfill(
' ') << std::setw(6) << tmdb_name
689 << std::setfill(
' ') << std::setw(10) << slb_name.str()
690 << std::setfill(
' ') << std::setw(15) << slt_sectors
691 << std::setfill(
' ') << std::setw(11) << ((
m_runPeriod < 3) ? ((
r >> 3) & 1) : bcid)
692 << std::setw(5) << ((
r >> 2) & 1) << std::setw(5) << ((
r >> 1) & 1) << std::setw(5) << (
r & 1) << std::endl;
697 if (slb > 24) slb = 1;
705 }
else if (
id < 0x100 || beamROD) {
713 if ((
type == 0x1) || (
type == 0x2)) {
714 bool isLastChannelEOB = ((data[
size - 1] >> 24) & 0x7) == 0x4;
716 std::cout <<
"\nBeam ToF TDC, ";
718 std::cout <<
"\nBeam TDC 0x" << std::setfill(
'0') << std::hex << std::setw(2) <<
id <<
setupDec <<
", ";
720 std::cout << (isLastChannelEOB ?
size - 1 :
size) <<
" hits found";
722 for (c = 0; c <
size; ++c) {
723 time = data[c] & 0x1FFF;
724 unsigned short res1 = (data[c] >> 13) & 0x1;
726 chan = (
type == 0x1) ? (data[c] >> 17) & 0x3FF
727 : (data[c] >> 16) & 0x7FF;
730 int wordType = (data[c] >> 24) & 0x7;
731 if (wordType == 0x2) {
732 std::cout <<
"\n header, " << ((data[c] >> 8) & 0x3F) <<
" channels";
733 }
else if (wordType == 0x4) {
734 std::cout <<
"\n end of block, event counter: " << (data[c] & 0xFFFFFF) << std::endl;
736 std::cout <<
"\n unknown word: 0x" << std::hex << data[c] << std::dec << std::endl;
741 std::cout <<
"\n ch" << std::setw(3) << chan <<
":";
744 }
else if (nhits % 8 == 0) {
749 std::cout <<
" U" << std::setw(4) << time;
751 std::cout <<
" " << std::setw(4) << time;
754 std::cout << std::endl;
764 std::cout <<
"\nBeam TDC 0x" << std::setfill(
'0') << std::hex << std::setw(2) <<
id <<
setupDec <<
", " <<
size <<
" hits found";
766 for (c = 0; c <
size; ++c) {
767 time = data[c] & 0xFFFF;
768 flag = data[c] >> 16;
770 chan = (flag >> 1) & 0x0F;
771 bad = (flag >> 5) & 0x01;
776 std::cout <<
"\n ch" << std::setw(3) << chan <<
":";
779 }
else if (nhits % 8 == 0) {
784 std::cout <<
" " << gb[
bad] << fr[edge] << std::setw(6) << time;
786 std::cout <<
" " << fr[edge] << std::setw(6) << time;
789 std::cout << std::endl;
794 if ((
type == 0x1) || (
type == 0x2)) {
795 bool isLastChannelEOB = ((data[
size - 1] >> 24) & 0x7) == 0x4;
796 std::cout <<
"\nBeam ADC, " << (isLastChannelEOB ?
size - 1 :
size) <<
" hits found";
798 for (c = 0; c <
size; ++c) {
799 time = data[c] & 0x1FFF;
800 unsigned short res1 = (data[c] >> 13) & 0x1;
801 chan = (
type == 0x1) ? (data[c] >> 17) & 0x3FF
802 : (data[c] >> 16) & 0x7FF;
805 int wordType = (data[c] >> 24) & 0x7;
806 if (wordType == 0x2) {
807 std::cout <<
"\n header, " << ((data[c] >> 8) & 0x3F) <<
" channels";
808 }
else if (wordType == 0x4) {
809 std::cout <<
"\n end of block, event counter: " << (data[c] & 0xFFFFFF) << std::endl;
811 std::cout <<
"\n unknown word: 0x" << std::hex << data[c] << std::dec << std::endl;
816 std::cout <<
"\n ch" << std::setw(3) << chan <<
":";
819 }
else if (nhits % 8 == 0) {
824 std::cout <<
" U" << std::setw(4) << time;
826 std::cout <<
" " << std::setw(4) << time;
829 std::cout << std::endl;
839 std::cout <<
"\nTile Beam ADC, " <<
size <<
" channels found";
841 std::cout <<
"\nBeam ADC 0x" << std::hex << std::setfill(
'0') << std::setw(2) <<
id <<
setupDec <<
", " <<
size <<
" channels found";
843 for (c = 0; c <
size; ++c) {
844 if (c % 8 == 0) std::cout <<
setupMod << c / 8 <<
":";
845 std::cout << std::setw(9) << data[c];
847 std::cout << std::endl;
851 std::cout <<
"\nMuon ADC, " <<
size <<
" channels found";
852 for (c = 0; c <
size; ++c) {
853 if (c % 8 == 0) std::cout <<
setupMod << c / 8 <<
":";
854 std::cout << std::setw(9) << data[c];
856 std::cout << std::endl;
860 std::cout <<
"\nMuon2 ADC, " <<
size <<
" channels found";
861 for (c = 0; c <
size; ++c) {
862 if (c % 8 == 0) std::cout <<
setupMod << c / 8 <<
":";
863 std::cout << std::setw(9) << data[c];
865 std::cout << std::endl;
871 std::cout<<
"\nLaser Pattern Unit, " <<
size <<
" words found (hex)";
873 std::cout<<
"\nCommon Pattern Unit, " <<
size <<
" words found (hex)";
875 for (c = 0; c <
size; ++c) {
876 if (c % 8 == 0) std::cout <<
setupMod << c/8 <<
":";
879 std::cout << std::endl;
885 std::cout<<
"\nLASTROD Laser Object, " <<
size <<
" words found (hex)";
886 for (c = 0; c <
size; ++c) {
887 if (c % 8 == 0) std::cout <<
setupMod << c/8 <<
":";
890 std::cout<<std::endl<<std::endl;
893 std::cout<<
"CRITICAL ERROR! Unknown format!"<<std::endl;
895 const unsigned int * p;
897 int Filter = 0, ReqAmp = 0, MeasAmp = 0, Delay = 0, TDC1 = 0, TDC2 = 0;
901 std::cout <<
" Laser Counter: " << std::setw(5) << Counter << std::endl;
903 if ((*p & 0xFF000000) == 0x20000000) {
904 ReqAmp = *p & 0xFFFF;
906 Filter = (((*p >> 16) & 7) ^ 7) + 2;
907 if (Filter > 8) Filter -= 8;
908 std::cout <<
" Filter Wheel: " << std::setw(5) << Filter << std::endl;
910 std::cout <<
" Required Amp: " << std::setw(5) << ReqAmp << std::endl;
912 std::cout <<
"ERROR in Laser Fragment: decoding word 14." << std::endl;
916 if ((*p & 0xFF000000) == 0x21000000) {
917 Delay = (*p >> 12) & 0xFFF;
918 MeasAmp = *p & 0xFFF;
919 std::cout <<
" Measured Amp: " << std::setw(5) << MeasAmp << std::endl;
920 std::cout <<
" Delay: " << std::setw(5) << Delay << std::endl;
922 std::cout <<
"ERROR in Laser Fragment: decoding word 15." << std::endl;
926 bool TDCPrint =
true;
928 if ((*p & 0xFF000000) == 0x22000000) {
930 TDC1 = (*p >> 16) & 0xF;
931 TDC2 = (*p >> 20) & 0xF;
936 std::cout <<
"ERROR in Laser Fragment: decoding word 16." << std::endl;
940 if ((*p & 0xFF000000) == 0x23000000) {
942 TDC1 = (TDC1 << 12) + (*p & 0xFFF);
943 TDC2 = (TDC2 << 12) + ((*p >> 12) & 0xFFF);
948 std::cout <<
"ERROR in Laser Fragment: decoding word 17." << std::endl;
953 std::cout <<
" TDC1 data: " << std::setw(5) << TDC1 << std::endl;
954 std::cout <<
" TDC2 data: " << std::setw(5) << TDC2 << std::endl;
957 int chan0 = 0, chan1 = 0, chan2 = 0, chan3 = 0, chan4 = 0, chan5 = 0, chan6 = 0, chan7 = 0;
959 if ((*p & 0xFF000000) == 0x44000000) {
960 chan0 = (*p & 0xFFF) ^ 0xFFF;
961 chan1 = ((*p >> 12) & 0xFFF) ^ 0xFFF;
963 std::cout <<
"ERROR in Laser Fragment: decoding word 18." << std::endl;
967 if ((*p & 0xFF000000) == 0x45000000) {
968 chan2 = (*p & 0xFFF) ^ 0xFFF;
969 chan3 = ((*p >> 12) & 0xFFF) ^ 0xFFF;
971 std::cout <<
"ERROR in Laser Fragment: decoding word 19." << std::endl;
975 if ((*p & 0xFF000000) == 0x46000000) {
976 chan4 = (*p & 0xFFF) ^ 0xFFF;
977 chan5 = ((*p >> 12) & 0xFFF) ^ 0xFFF;
979 std::cout <<
"ERROR in Laser Fragment: decoding word 20." << std::endl;
983 if ((*p & 0xFF000000) == 0x47000000) {
984 chan6 = (*p & 0xFFF) ^ 0xFFF;
985 chan7 = ((*p >> 12) & 0xFFF) ^ 0xFFF;
987 std::cout <<
"ERROR in Laser Fragment: decoding word 21." << std::endl;
991 int diode1_Ped = 0, diode1_PedRMS = 0
992 , diode2_Ped = 0, diode2_PedRMS = 0
993 , diode3_Ped = 0, diode3_PedRMS = 0
994 , diode4_Ped = 0, diode4_PedRMS = 0
995 , PMT1_Ped = 0, PMT1_PedRMS = 0
996 , PMT2_Ped = 0, PMT2_PedRMS = 0;
998 diode1_Ped = (*p >> 16) & 0xFFFF;
999 diode1_PedRMS = *p & 0xFFFF;
1002 diode2_Ped = (*p >> 16) & 0xFFFF;
1003 diode2_PedRMS = *p & 0xFFFF;
1006 diode3_Ped = (*p >> 16) & 0xFFFF;
1007 diode3_PedRMS = *p & 0xFFFF;
1010 diode4_Ped = (*p >> 16) & 0xFFFF;
1011 diode4_PedRMS = *p & 0xFFFF;
1014 PMT1_Ped = (*p >> 16) & 0xFFFF;
1015 PMT1_PedRMS = *p & 0xFFFF;
1018 PMT2_Ped = (*p >> 16) & 0xFFFF;
1019 PMT2_PedRMS = *p & 0xFFFF;
1022 time_t Ped_Last_Run = *p;
1025 int diode1_alpha = 0, diode1_alphaRMS = 0
1026 , diode2_alpha = 0, diode2_alphaRMS = 0
1027 , diode3_alpha = 0, diode3_alphaRMS = 0
1028 , diode4_alpha = 0, diode4_alphaRMS = 0;
1030 diode1_alpha = (*p >> 16) & 0xFFFF;
1031 diode1_alphaRMS = *p & 0xFFFF;
1034 diode2_alpha = (*p >> 16) & 0xFFFF;
1035 diode2_alphaRMS = *p & 0xFFFF;
1038 diode3_alpha = (*p >> 16) & 0xFFFF;
1039 diode3_alphaRMS = *p & 0xFFFF;
1042 diode4_alpha = (*p >> 16) & 0xFFFF;
1043 diode4_alphaRMS = *p & 0xFFFF;
1046 time_t Alpha_Last_Run = *p;
1049 time_t PedAlpha_Last_Run(0);
1051 int diode1_PedAlpha = 0, diode1_PedAlphaRMS = 0
1052 , diode2_PedAlpha = 0, diode2_PedAlphaRMS = 0
1053 , diode3_PedAlpha = 0, diode3_PedAlphaRMS = 0
1054 , diode4_PedAlpha = 0, diode4_PedAlphaRMS = 0;
1057 diode1_PedAlpha = (*p >> 16) & 0xFFFF;
1058 diode1_PedAlphaRMS = *p & 0xFFFF;
1061 diode2_PedAlpha = (*p >> 16) & 0xFFFF;
1062 diode2_PedAlphaRMS = *p & 0xFFFF;
1065 diode3_PedAlpha = (*p >> 16) & 0xFFFF;
1066 diode3_PedAlphaRMS = *p & 0xFFFF;
1069 diode4_PedAlpha = (*p >> 16) & 0xFFFF;
1070 diode4_PedAlphaRMS = *p & 0xFFFF;
1073 PedAlpha_Last_Run = *p;
1077 std::cout << std::endl <<
" | ADC | Pedestal(RMS) | Alpha (RMS) | PedAlpha(RMS) |" << std::endl;
1079 std::cout <<
" Diode 1 | " << std::setw(5) << chan0 <<
" | " <<
setupPr1 << diode1_Ped / 10.0 <<
" (" <<
setupPr2 << diode1_PedRMS / 100.0 <<
") | " <<
setupPr1 << diode1_alpha / 10.0 <<
" (" <<
setupPr2 << diode1_alphaRMS / 100.0 <<
") |" << std::endl;
1080 std::cout <<
" Diode 2 | " << std::setw(5) << chan1 <<
" | " <<
setupPr1 << diode2_Ped / 10.0 <<
" (" <<
setupPr2 << diode2_PedRMS / 100.0 <<
") | " <<
setupPr1 << diode2_alpha / 10.0 <<
" (" <<
setupPr2 << diode2_alphaRMS / 100.0 <<
") |" << std::endl;
1081 std::cout <<
" Diode 3 | " << std::setw(5) << chan2 <<
" | " <<
setupPr1 << diode3_Ped / 10.0 <<
" (" <<
setupPr2 << diode3_PedRMS / 100.0 <<
") | " <<
setupPr1 << diode3_alpha / 10.0 <<
" (" <<
setupPr2 << diode3_alphaRMS / 100.0 <<
") |" << std::endl;
1082 std::cout <<
" Diode 4 | " << std::setw(5) << chan3 <<
" | " <<
setupPr1 << diode4_Ped / 10.0 <<
" (" <<
setupPr2 << diode4_PedRMS / 100.0 <<
") | " <<
setupPr1 << diode4_alpha / 10.0 <<
" (" <<
setupPr2 << diode4_alphaRMS / 100.0 <<
") |" << std::endl;
1084 std::cout <<
" Diode 1 | " << std::setw(5) << chan0 <<
" | " <<
setupPr1 << diode1_Ped / 10.0 <<
" (" <<
setupPr2 << diode1_PedRMS / 100.0 <<
") | " <<
setupPr1 << diode1_alpha / 10.0 <<
" (" <<
setupPr2 << diode1_alphaRMS / 100.0 <<
") | " <<
setupPr1 << diode1_PedAlpha / 10.0 <<
" (" <<
setupPr2 << diode1_PedAlphaRMS / 100.0 <<
") |" << std::endl;
1085 std::cout <<
" Diode 2 | " << std::setw(5) << chan1 <<
" | " <<
setupPr1 << diode2_Ped / 10.0 <<
" (" <<
setupPr2 << diode2_PedRMS / 100.0 <<
") | " <<
setupPr1 << diode2_alpha / 10.0 <<
" (" <<
setupPr2 << diode2_alphaRMS / 100.0 <<
") | " <<
setupPr1 << diode2_PedAlpha / 10.0 <<
" (" <<
setupPr2 << diode2_PedAlphaRMS / 100.0 <<
") |" << std::endl;
1086 std::cout <<
" Diode 3 | " << std::setw(5) << chan2 <<
" | " <<
setupPr1 << diode3_Ped / 10.0 <<
" (" <<
setupPr2 << diode3_PedRMS / 100.0 <<
") | " <<
setupPr1 << diode3_alpha / 10.0 <<
" (" <<
setupPr2 << diode3_alphaRMS / 100.0 <<
") | " <<
setupPr1 << diode3_PedAlpha / 10.0 <<
" (" <<
setupPr2 << diode3_PedAlphaRMS / 100.0 <<
") |" << std::endl;
1087 std::cout <<
" Diode 4 | " << std::setw(5) << chan3 <<
" | " <<
setupPr1 << diode4_Ped / 10.0 <<
" (" <<
setupPr2 << diode4_PedRMS / 100.0 <<
") | " <<
setupPr1 << diode4_alpha / 10.0 <<
" (" <<
setupPr2 << diode4_alphaRMS / 100.0 <<
") | " <<
setupPr1 << diode4_PedAlpha / 10.0 <<
" (" <<
setupPr2 << diode4_PedAlphaRMS / 100.0 <<
") |" << std::endl;
1090 std::cout <<
" PMT 1 | " << std::setw(5) << chan4 <<
" | " <<
setupPr1 << PMT1_Ped / 10.0 <<
" (" <<
setupPr2 << PMT1_PedRMS / 100.0 <<
") | x | x |" << std::endl;
1091 std::cout <<
" PMT 2 | " << std::setw(5) << chan5 <<
" | " <<
setupPr1 << PMT2_Ped / 10.0 <<
" (" <<
setupPr2 << PMT2_PedRMS / 100.0 <<
") | x | x |" << std::endl;
1092 std::cout <<
" InjChrg | " << std::setw(5) << chan6 <<
" | x | x | x |" << std::endl;
1093 std::cout <<
" Spare | " << std::setw(5) << chan7 <<
" | x | x | x |" << std::endl;
1095 std::cout << std::endl <<
" | Date & Time (GMT) | Date & Time (CERN)" << std::endl;
1099 gmtime_r(&Ped_Last_Run, &TimeInfo);
1100 strftime(buf, 80,
"%d.%m.%Y %H:%M:%S", &TimeInfo);
1102 std::cout <<
" Pedestal | " << buf <<
" | " <<
cern_local_time(Ped_Last_Run) << std::endl;
1104 gmtime_r(&Alpha_Last_Run, &TimeInfo);
1105 strftime(buf, 80,
"%d.%m.%Y %H:%M:%S", &TimeInfo);
1107 std::cout <<
" Alpha | " << buf <<
" | " <<
cern_local_time(Alpha_Last_Run) << std::endl;
1109 gmtime_r(&PedAlpha_Last_Run, &TimeInfo);
1110 strftime(buf, 80,
"%d.%m.%Y %H:%M:%S", &TimeInfo);
1112 std::cout <<
" PedAlpha | " << buf <<
" | " <<
cern_local_time(PedAlpha_Last_Run) << std::endl;
1114 int diodeTemp = 0, secsDiodeT = 0
1115 , boxTemp = 0, secsBoxT = 0
1116 , boxHum = 0, secsBoxH = 0
1117 , gasFlow = 0, secsGasF = 0;
1119 diodeTemp = *p & 0xFFF;
1120 secsDiodeT = (*p >> 12) & 0xFFFFF;
1122 boxTemp = *p & 0xFFF;
1123 secsBoxT = (*p >> 12) & 0xFFFFF;
1125 boxHum = *p & 0xFFF;
1126 secsBoxH = (*p >> 12) & 0xFFFFF;
1128 gasFlow = *p & 0xFFF;
1129 secsGasF = (*p >> 12) & 0xFFFFF;
1132 std::cout << std::endl <<
" | Time | Value |" << std::endl;
1133 std::cout <<
" Laser diode temp | " << std::setw(7) << secsDiodeT <<
" | " <<
setupPr3 << diodeTemp / 10.0 <<
" |" << std::endl;
1134 std::cout <<
" Laser box temp | " << std::setw(7) << secsBoxT <<
" | " <<
setupPr3 << boxTemp / 10.0 <<
" |" << std::endl;
1135 std::cout <<
" Laser box humidity | " << std::setw(7) << secsBoxH <<
" | " <<
setupPr3 << boxHum / 10.0 <<
" |" << std::endl;
1136 std::cout <<
" Laser box gas flow | " << std::setw(7) << secsGasF <<
" | " <<
setupPr3 << gasFlow / 10.0 <<
" |" << std::endl;
1138 std::bitset<32> PLCstatus = *p;
1139 int PLCtime = (*p >> 12) & 0xFFFFF;
1142 int Alpha0 = PLCstatus[0];
1143 int Alpha1 = PLCstatus[1];
1144 int Alpha2 = PLCstatus[2];
1145 int LV = PLCstatus[3];
1146 int HV1 = PLCstatus[4];
1147 int HV2 = PLCstatus[5];
1148 int ShOpen = PLCstatus[6];
1149 int ShClose = PLCstatus[7];
1150 int Ilock = PLCstatus[8];
1151 int Alarm = PLCstatus[9];
1152 int Err = PLCstatus[11];
1154 const char *YesNo[2] = {
" No",
"Yes"};
1155 const char *OnOff[2] = {
"Off",
" On"};
1157 std::cout << std::endl <<
" Time | Err | Alarm | Ilock | ShClose | ShOpen | HV2 | HV1 | LV | Alpha2 | Alpha1 | Alpha0 |"
1158 << std::endl <<
" " << std::setw(7) << PLCtime
1159 <<
" | " << YesNo[Err] <<
" | " << OnOff[Alarm] <<
" | " << OnOff[Ilock] <<
" | " << YesNo[ShClose]
1160 <<
" | " << YesNo[ShOpen] <<
" | " << OnOff[HV2] <<
" | " << OnOff[HV1] <<
" | " << OnOff[LV]
1161 <<
" | " << OnOff[Alpha2] <<
" | " << OnOff[Alpha1] <<
" | " << OnOff[Alpha0] <<
" |" << std::endl;
1163 if (p != &data[
size]) {
1164 std::cout <<
"CRITICAL ERROR! Wrong size" << std::endl;
1174 std::cout<<
"\nLASTROD New Laser Object, " <<
size <<
" words found" << std::endl;
1176 bool first_half_present = (
size == 25 ||
size == 26 ||
size == 128 ||
size == 129);
1177 bool second_half_present = (
size == 99 ||
size == 100 ||
size == 128 ||
size == 129);
1179 if ( ! (first_half_present || second_half_present) ) {
1180 std::cout <<
"CRITICAL ERROR! Unknown format!" << std::endl;
1183 const char *name[17] = {
" PhotoDiode 0",
1206 const unsigned int * p = data;
1208 if (first_half_present) {
1216 std::cout << std::endl <<
" DAQ type: " << std::setw(5) << (data[0]%0xFF) << std::endl;
1217 std::cout <<
" Laser Counter: " << std::setw(5) << data[1] << std::endl;
1218 std::cout <<
" Required Amp: " << std::setw(5) << (data[2]>>16) << std::endl;
1219 std::cout <<
" Measured Amp: " << std::setw(5) << (data[2]&0xFFFF) << std::endl;
1220 std::cout <<
" Filter Wheel: " << std::setw(5) << (data[3]>>16 & 0x000F) << std::endl;
1221 std::cout <<
" Delay: " << std::setw(5) << (data[3]&0xFFFF) << std::endl;
1222 std::cout <<
" Linearity DAC: " << std::setw(5) << (data[4]&0xFFFF) << std::endl;
1223 std::cout << std::endl;
1227 std::cout <<
" HG LG" << std::endl;
1228 for (
int n=0; n<17; ++n) {
1230 std::cout << name[n] <<
": " << std::setw(5) << ((*p)&0xFFFF) << std::setw(6) << ((*p)>>16) <<
" => " << std::setw(5) << (8500-((*p)&0xFFFF)) << std::setw(6) << (8500-((*p)>>16))<< std::endl;
1251 std::bitset<32> status = *(p++);
1252 const char *YesNo[2] = {
" No",
"Yes"};
1253 std::cout << std::endl;
1254 std::cout <<
"| Link| Link| Bad | Bad | TTC | TTC | PLL | PLL |Laser|Laser|Inter| Comb| Busy| Long|" << std::endl;
1255 std::cout <<
"| not | not | VME | TTC |doubl|singl| lock| lock| temp| diod| lock| run | | busy|" << std::endl;
1256 std::cout <<
"| full| down|clock|clock|error|error| VME | TTC |fault| off |close| fini| |>5sec|" << std::endl;
1257 std::cout <<
"|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|" << std::endl;
1258 std::cout <<
"| " << YesNo[status[27]] <<
" | " << YesNo[status[26]] <<
" | " << YesNo[status[24]] <<
" | " << YesNo[status[22]] <<
" | " << YesNo[status[20]] <<
" | " << YesNo[status[19]] <<
" | " << YesNo[status[16]] <<
" | " << YesNo[status[15]] <<
" | " << YesNo[status[10]] <<
" | " << YesNo[status[9]] <<
" | " << YesNo[status[8]] <<
" | " << YesNo[status[6]] <<
" | " << YesNo[status[1]] <<
" | " << YesNo[status[0]] <<
" |" << std::endl;
1260 std::cout << std::endl <<
" FPGA Global Status: 0x" << std::hex
1261 << status.to_ulong() <<
" => " << status.to_string() << std::dec << std::endl;
1263 gmtime_r(&tim, &TimeInfo);
1264 strftime(buf, 80,
"%d.%m.%Y %H:%M:%S", &TimeInfo);
1265 std::cout <<
"DCS Time Stamp (GMT): " << buf <<
" => " <<
cern_local_time(tim) << std::endl;
1266 std::cout <<
" PhotoDiode Polarity: " << std::setw(5) << (*p++) << std::endl;
1270 if (second_half_present) {
1271 std::cout <<
" Calibration Type: " << std::setw(5) << (*p++) << std::endl;
1273 gmtime_r(&tim, &TimeInfo);
1274 strftime(buf, 80,
"%d.%m.%Y %H:%M:%S", &TimeInfo);
1275 std::cout <<
" Time Stamp (GMT): " << buf <<
" => " <<
cern_local_time(tim) << std::endl;
1277 double nevt = double(p[96]);
1278 if (p[96]==0 || (p[96]==3072 && (*p)<21504000)) {
1279 std::cout <<
" Number of events: " << p[96] <<
" => assuming 1024" << std::endl << std::endl;
1282 std::cout <<
" Number of events: " << std::setw(5) << p[96] << std::endl << std::endl;
1284 std::cout <<
" pedHG rmsHG pedLG rmsLG" << std::endl;
1285 for (
int n=0; n<16; ++n) {
1287 uint32_t sum0 = *(p++);
1288 uint32_t sum1 = *(p++);
1290 uint32_t lsb0 = *(p++);
1291 uint32_t msb0 = *(p++);
1292 uint32_t lsb1 = *(p++);
1293 uint32_t msb1 = *(p++);
1294 uint64_t ssq0 = ((uint64_t) msb0 << 32) | ((uint64_t) lsb0);
1295 uint64_t ssq1 = ((uint64_t) msb1 << 32) | ((uint64_t) lsb1);
1298 double ped0 = double(sum0)/nevt;
1299 double ped1 = double(sum1)/nevt;
1301 double rms0 = double(ssq0)/nevt - ped0*ped0;
1302 double rms1 = double(ssq1)/nevt - ped1*ped1;
1303 if (rms0>0.0) rms0 = sqrt(rms0);
1304 if (rms1>0.0) rms1 = sqrt(rms1);
1306 std::cout << name[n] <<
":" << std::setw(11) << sum0 << std::setw(11) << sum1 << std::setw(11) << msb0 << std::setw(11) << lsb0 << std::setw(11) << msb1 << std::setw(11) << lsb1 <<
" => " << std::setw(7) << std::setprecision(1) << 8500.-ped0 <<
" +/- " << std::setw(7) << std::setprecision(1) << rms0 <<
" " << std::setw(7) << std::setprecision(1) << 8500.-ped1 <<
" +/- " << std::setw(7) << std::setprecision(1) << rms1 << std::endl;
1314 std::cout <<
"\nLaser ADC, " <<
size <<
" channels found";
1315 for (c = 0; c <
size; ++c) {
1316 if (c % 8 == 0) std::cout <<
setupMod << c/8<<
":";
1317 std::cout << std::setw(9) << data[c];
1319 std::cout << std::endl;
1323 std::cout <<
"\nECAL ADC, " <<
size <<
" channels found";
1324 for (c = 0; c <
size; ++c) {
1325 if (c % 8 == 0) std::cout <<
setupMod << c/8<<
":";
1326 std::cout << std::setw(9) << data[c];
1328 std::cout << std::endl;
1332 std::cout <<
"\nDigi parameters, " <<
size <<
" words found";
1333 for (c = 0; c <
size; ++c) {
1334 if (c % 8 == 0) std::cout <<
setupMod << c/8<<
":";
1335 std::cout << std::setw(11) << data[c];
1337 std::cout << std::endl;
1340 const unsigned int *p = data;
1341 int Counter = 0, Mode = 0, Samples = 0, Pipeline = 0, I3Delay = 0,
Event = 0, Phase = 0,
1342 DAC = 0, Capacity = 0, Card = 0, RunType = 0, microsec = 0;
1344 bool DefFormat =
true;
1345 if (
size == 4) DefFormat =
false;
1369 const char *RunTypeText;
1371 case 1: RunTypeText =
"Physics";
break;
1372 case 2: RunTypeText =
"Laser";
break;
1373 case 4: RunTypeText =
"Pedestals";
break;
1374 case 8: RunTypeText =
"CIS mono";
break;
1375 case 16: RunTypeText =
"CIS scan";
break;
1376 default: RunTypeText =
"Unknown";
break;
1379 std::cout <<
"\n CIS Counter: " << std::setw(3) << Counter<< std::endl;
1380 std::cout <<
"\n Run Type: " << std::setw(3) << RunType <<
" (" << RunTypeText <<
")";
1382 std::cout <<
"\n Samples: " << std::setw(3) << Samples;
1383 std::cout <<
"\n Pipeline: " << std::setw(3) << Pipeline << std::endl;
1385 const char* ModeText;
1388 ModeText =
"Normal";
1390 case 1: ModeText =
"Calibration";
break;
1391 default: ModeText =
"Unknown";
break;
1396 gmtime_r(&Time, &TimeInfo);
1397 strftime(buf, 80,
"%d.%m.%Y %H:%M:%S", &TimeInfo);
1398 std::cout << std::endl;
1399 std::cout <<
" Time (GMT): " << buf <<
" => " <<
cern_local_time(Time) << std::endl;
1400 std::cout <<
" Microsec.: " << microsec << std::endl << std::endl;
1401 std::cout <<
" Mode: " << std::setw(3) << Mode <<
" (" << ModeText <<
")" << std::endl;
1402 std::cout <<
" Samples: " << std::setw(3) << Samples << std::endl;
1403 std::cout <<
" Pipeline: " << std::setw(3) << Pipeline << std::endl;
1404 std::cout <<
" I3Delay: " << std::setw(3) << I3Delay << std::endl;
1405 std::cout <<
" Event: " << std::setw(3) <<
Event << std::endl;
1406 std::cout <<
" Phase: " << std::setw(3) << Phase << std::endl;
1407 std::cout <<
" DAC: " << std::setw(3) << DAC << std::endl;
1408 std::cout <<
" Capacity: " << std::setw(3) << Capacity <<
" pF" << std::endl;
1409 std::cout <<
" Card: " << std::setw(3) << Card << std::endl;
1412 int last =
size - 1;
1413 for (; last > 15; --last) {
1414 if (data[last] != 0)
break;
1417 std::cout <<
"\n Remaing " << last - 15 <<
" non-zero words (hex):";
1418 for (c = 16; c <= last; ++c) {
1419 if (c % 8 == 0) std::cout <<
setupMod << c/8<<
":";
1420 std::cout << std::hex << std::setw(11) << data[c] << std::dec;
1422 std::cout << std:: endl;
1427 std::cout <<
"CRITICAL ERROR! Unknown format!" << std::endl;
1432 std::cout <<
"\nAdder FADC, " <<
size <<
" words found (hex)" ;
1433 for (c = 0; c <
size; ++c) {
1434 if (c % 8 == 0) std::cout <<
setupMod << c/8<<
":";
1435 std::cout << std::hex << std::setw(9) << data[c] << std::dec;
1437 std::cout << std::endl;
1448 std::cout <<
"\nCoincidence trigger frag " <<
id -
COIN_TRIG1_FRAG + 1 <<
", " <<
size <<
" words found (hex)";
1449 for (c = 0; c <
size; ++c) {
1450 if (c % 8 == 0) std::cout <<
setupMod << c/8<<
":";
1451 std::cout << std::hex << std::setw(11) << data[c] << std::dec;
1453 std::cout << std::endl;
1457 std::cout <<
"\nUnknown fragment [0x" << std::hex <<
id << std::dec <<
"], " <<
size <<
" words found" << std::endl;
1464 fragType = (*itr).second;
1466 fragType = (
id >> 8);
1467 if (fragType > 4 || fragType < 1) fragType = 2;
1478 std::cout <<
"\nDigitizer fragment 0x" << std::hex <<
id << std::dec <<
", " <<
size <<
" words found:"
1479 <<
"\t" << nchan / 3 <<
" chips, " << nsamp <<
"+2 samples" << std::endl;
1482 extra =
size - nchan * (nsamp + 2) / 3;
1483 }
else if (ngain == 2) {
1484 extra =
size - nchan / 2 * (2 * nsamp + 3) / 3;
1489 if (version == 0x1 || version == 0x2) {
1490 std::cout <<
"\nfirst data word:" << std::setw(12) << data[0] <<
" (0x"<<
setup0 << data[0] <<
setupDec <<
")";
1495 std::cout <<
"\n" << std::setw(3) << extra <<
" extra words:";
1496 for (c =
size - extra; c <
size; ++c) {
1497 std::cout << std::setw(12) << data[c] <<
" (0x"<<
setup0 << data[c] <<
setupDec <<
")";
1498 if ((c -
size + extra) % 2 == 1 && c!=
size-1) std::cout <<
"\n ";
1500 std::cout << std::endl;
1503 std::cout <<
"\nPMT Ch | BCID M G";
1504 for (s = 0; s < nsamp; ++s) {
1505 std::cout << std::setw(4) << s <<
" ";
1508 std::cout <<
" Head/Data/CRC\n---|---|-------------------------";
1509 for (s = 0; s < nsamp; ++s) {
1510 std::cout <<
"-----";
1515 for (ch = 0; ch < nchan; ++ch) {
1516 pmt =
m_cabling->channel2hole(fragType, ch % 48);
1517 if (extra == 0 && pmt < 0) pmt = -pmt;
1520 std::cout <<
"\n" << std::setw(3) << pmt << std::setw(3) << ch <<
" |";
1522 std::cout <<
"\n -- " << std::setw(2) << ch <<
" |";
1526 std::cout << std::setw(5) << (channel[ch].bcid) << std::setw(2) << ((channel[ch].flag >> 3) & 3);
1531 std::cout << std::setw(2) << (channel[ch].gain);
1533 for (s = 0; s < nsamp; ++s) {
1534 std::cout << std::setw(5) << (channel[ch].sample[s]);
1538 if (channel[ch].
head != 0) {
1539 std::cout <<
" 0x" <<
setup0 << channel[ch].head <<
setupDec <<
" Head";
1541 std::cout <<
" " <<
setup0 << channel[ch].head <<
setupDec <<
" Head";
1546 if (channel[ch].first != 0) {
1547 std::cout <<
" 0x" <<
setup0 << channel[ch].first <<
setupDec <<
" Data";
1549 std::cout <<
" " <<
setup0 << channel[ch].first <<
setupDec <<
" Data";
1554 if (channel[ch].crc != 0) {
1555 std::cout <<
" 0x" <<
setup0 << channel[ch].crc <<
setupDec <<
" CRC ";
1557 std::cout <<
" " <<
setup0 << channel[ch].crc <<
setupDec <<
" CRC ";
1577 for (
int i = 0; i < 7; i++) {
1578 if (Frag5Data[ch].s[i] != channel[ch].sample[i]) chOK =
false;
1581 std::cout <<
" RawERR ";
1584 for (
int i = 0; i < 7; i++) {
1585 std::cout << std::setw(5) << Frag5Data[ch].
s[i] ;
1590 if (!OK) std::cout <<
"\nOF weights: ERROR";
1594 std::cout << std::endl;
1596 for (
int ch = 0; ch < 48; ch++) {
1598 for (
int i = 0; i < 7; i++) {
1599 if (Frag5Data[ch].s[i] != channel[ch].sample[i]) chOK =
false;
1612 if (Frag5Data[ch].gain != (
int) channel[ch].gain) chOK =
false;
1615 std::cout <<
" " << ch <<
",";
1618 std::cout <<
"\nCompare Raw <=> Frag5: ";
1620 std::cout <<
"OK" << std::endl;
1622 std::cout <<
"ERROR" << std::endl;
1630 std::cout <<
"\nRaw data compressed fragment 0x" << std::hex <<
id << std::dec <<
", " <<
size <<
" words found" << std::endl;
1635 std::cout <<
"\nRaw data compressed fragment 0x" << std::hex <<
id << std::dec <<
", " <<
size <<
" words found:"
1636 <<
"\t" << ngain <<
" gain, " << nchan <<
" channels in total" << std::endl;
1638 std::cout <<
"\nPMT Ch |";
1639 for (
int j = 1; j <= ((nsamp / 2) + 1); j++) {
1640 std::cout <<
" HexWord" << j <<
" ";
1644 for (
int l = 1; l <= nsamp; l++) {
1645 std::cout <<
" Smp" << l;
1649 int ch = rawcomp[i].chan;
1650 pmt =
m_cabling->channel2hole(fragType, ch % 48);
1652 std::cout <<
"\n" << std::setw(3) << pmt << std::setw(3) << ch <<
" |";
1654 std::cout <<
"\n -- " << std::setw(2) << ch <<
" |";
1656 std::cout << std::hex << std::setfill(
'0');
1657 for (
int j = 0; j < ((nsamp / 2) + 1); j++) {
1658 std::cout <<
" " << std::setw(8) << rawcomp[i].words[j] <<
" ";
1660 std::cout <<
setupDec <<
"| " << rawcomp[i].gain;
1661 for (
int l = 0; l < nsamp; l++) {
1662 std::cout << std::setw(6) << rawcomp[i].samples[l];
1664 if (!rawcomp[i].verif) std::cout <<
" Wrong Data";
1671 std::cout <<
"\nReco non calibrated energy fragment 0x" << std::hex <<
id << std::dec <<
", " <<
size <<
" words found:"
1672 <<
"\t" << ngain <<
" gain, " << nchan <<
" channels in total" << std::endl
1673 <<
"\tATTENTION: HIGH gain amplitude is divided by 64" << std::endl;
1675 std::cout <<
"\nPMT Ch | full word | G amp time q amp time qual";
1676 for (ch = 0; ch < nchan; ++ch) {
1677 pmt =
m_cabling->channel2hole(fragType, ch % 48);
1679 std::cout <<
"\n" << std::setw(3) << pmt << std::setw(3) << ch <<
" |";
1681 std::cout <<
"\n -- " << std::setw(2) << ch <<
" |";
1683 std::cout <<
" 0x" <<
setup0 << recochan[ch].word <<
setupDec <<
" | "
1684 << std::setw(1) << recochan[ch].gain << std::setw(6) << recochan[ch].amp << std::setw(5) << recochan[ch].time
1685 << std::setw(3) << recochan[ch].quality << std::setw(10) << std::setprecision(1) << float (recochan[ch].gain ? recochan[ch].d_amp / 64. : recochan[ch].d_amp)
1686 << std::setw(11) << std::setprecision(4) << (float) recochan[ch].d_time << std::setw(8) << std::setprecision(1) << (float) recochan[ch].d_quality;
1696 std::cout <<
"\nReco calibrated energy fragment 0x" << std::hex <<
id << std::dec <<
", " <<
size <<
" words found:"
1697 <<
"\t" << ((nchan > 48 && nchan < 96) ? 1 : ngain) <<
" gain, " << unitName[
unit] <<
" units, " << nchan <<
" channels in total" << std::endl;
1700 std::cout <<
"Reco flags: 0x" << std::hex << std::setfill(
'0') << rflag <<
setupDec <<
" units: " << unitName[
unit] <<
" pulse_shape: " << shapeName[pulse] <<
" nsamples: " << 7 + 2 * nsmpl <<
" algorithm: " << algName[algor + 1] <<
" niterations: " << niter << std::endl;
1702 std::cout <<
"Reco flags: 0x" << std::hex << std::setfill(
'0') << rflag <<
setupDec <<
" units: " << unitName[
unit] <<
" pulse_shape: " << shapeName[pulse] <<
" nsamples: " << 7 + 2 * nsmpl <<
" algorithm: " << algName[algor * 4 + niter] << std::endl;
1705 std::cout <<
"\nPMT Ch | full word | G amp time b q amp time qual";
1706 for (ch = 0; ch < nchan; ++ch) {
1707 pmt =
m_cabling->channel2hole(fragType, ch % 48);
1709 std::cout <<
"\n" << std::setw(3) << pmt << std::setw(3) << ch <<
" |";
1711 std::cout <<
"\n -- " << std::setw(2) << ch <<
" |";
1714 if (ch >= 48 && nchan < 96) {
1717 std::cout <<
" 0x" <<
setup0 << recocalib[ch].word <<
setupDec <<
" | " << std::setw(1) << recocalib[ch].gain << std::setw(6) << recocalib[ch].amp << std::setw(5) << recocalib[ch].time << std::setw(2) << recocalib[ch].bad << std::setw(3) << recocalib[ch].quality << std::setw(10) << std::setprecision(1) << recocalib[ch].d_amp << std::setw(11) << std::setprecision(4) << recocalib[ch].d_time << std::setw(8) << std::setprecision(1) << recocalib[ch].d_quality;
1719 if (recocalib[ch].
bad != 0) {
1720 std::cout <<
" Bad channel";
1735 std::cout <<
"\nFrag5 Compressed fragment 0x" << std::hex <<
id << std::dec <<
", " <<
size <<
" words found:"
1736 <<
"\t" << 1 <<
" gain, " << unitName[
unit] <<
" units, " << nchan <<
" channels in total" << std::endl;
1745 std::vector<double>
a(7), b(7), c(7), g(7), dg(7);
1747 for (ch = 0; ch < nchan; ++ch) {
1748 for (
int gain = 0; gain < 2; ++gain) {
1757 double calib =
m_tileToolEmscale->channelCalibOnl(drawerIdx, ch, gain, 1.0, chan_unit);
1759 if (
unit != 0 && gain) calib = calib * 64.0;
1761 for (
int i = 0; i < 7; ++i) {
1780 int size_L2 = (*((
const uint32_t*) data - 3 + 2) >> (32 - 2 - 3)) & 0x7;
1781 std::cout <<
"size_L2: " << size_L2 <<
" |";
1783 double SumEt =
m_rc2bytes5.getSumEt((
const uint32_t*) data - 3);
1784 double SumEz =
m_rc2bytes5.getSumEz((
const uint32_t*) data - 3);
1785 double SumE =
m_rc2bytes5.getSumE((
const uint32_t*) data - 3);
1786 std::cout <<
" SumEt: " << SumEt <<
", SumEz: " << SumEz <<
", SumE: " << SumE << std::endl;
1788 std::cout << std::endl;
1790 m_rc2bytes5.unpack(ofw, (uint32_t*) data - 3, Frag5Data);
1792#define code_ped4 TileRawChannel2Bytes5::code_ped4
1793#define code_ped5 TileRawChannel2Bytes5::code_ped5
1794#define code_amp5 TileRawChannel2Bytes5::code_amp5
1795#define code_amp6 TileRawChannel2Bytes5::code_amp6
1796#define code_raws TileRawChannel2Bytes5::code_raws
1797#define code_rawf TileRawChannel2Bytes5::code_rawf
1798#define code_full TileRawChannel2Bytes5::code_full
1799#define code_dump TileRawChannel2Bytes5::code_dump
1800#define code_null TileRawChannel2Bytes5::code_null
1802 int cnt_ped4, cnt_ped5, cnt_amp5, cnt_amp6, cnt_raws, cnt_rawf, cnt_full, cnt_dump, cnt_null;
1803 cnt_ped4 = cnt_ped5 = cnt_amp5 = cnt_amp6 = cnt_raws = cnt_rawf = cnt_full = cnt_dump = cnt_null = 0;
1804 std::cout <<
"PMT Ch | full word | Type G B ectrl ereco ebin ene time | s1 s2 s3 s4 s5 s6 s7";
1806 const char *strcode_empty =
"----";
1807 const char *strcode_ped4 =
"ped4";
1808 const char *strcode_ped5 =
"ped5";
1809 const char *strcode_amp5 =
"amp5";
1810 const char *strcode_amp6 =
"amp6";
1811 const char *strcode_raws =
"raws";
1812 const char *strcode_rawf =
"rawf";
1813 const char *strcode_full =
"full";
1814 const char *strcode_dump =
"dump";
1815 const char *strcode_null =
"null";
1816 const char *strcode_error =
"ERR ";
1819 for (ch = 0; ch < nchan; ++ch) {
1820 pmt =
m_cabling->channel2hole(fragType, ch % 48);
1822 std::cout <<
"\n" << std::setw(3) << pmt << std::setw(3) << ch <<
" |";
1824 std::cout <<
"\n -- " << std::setw(2) << ch <<
" |";
1827 uint32_t reco = data[ch];
1828 const char *scode = strcode_empty;
1829 int code = Frag5Data[ch].
code;
1830 int gain = Frag5Data[ch].
gain;
1831 int bad = Frag5Data[ch].
bad;
1832 int ene_bin = Frag5Data[ch].
ene_bin;
1833 float ene = Frag5Data[ch].
ene;
1834 float time = Frag5Data[ch].
time;
1836 for (
int i = 0; i < 7; i++) {
1837 s[i] = Frag5Data[ch].
s[i];
1841 case code_ped4: scode = strcode_ped4; cnt_ped4++;
break;
1842 case code_ped5: scode = strcode_ped5; cnt_ped5++;
break;
1843 case code_amp5: scode = strcode_amp5; cnt_amp5++;
break;
1844 case code_amp6: scode = strcode_amp6; cnt_amp6++;
break;
1845 case code_raws: scode = strcode_raws; cnt_raws++;
break;
1846 case code_rawf: scode = strcode_rawf; cnt_rawf++;
break;
1847 case code_full: scode = strcode_full; cnt_full++;
break;
1848 case code_dump: scode = strcode_dump; cnt_dump++;
break;
1849 case code_null: scode = strcode_null; cnt_null++;
break;
1850 default: scode = strcode_error;
break;
1853 int ene_recobin = ene_bin + (gain == 0 ? 512 : 2048);
1863 ene_bin += (gain == 0 ? 512 : 2048);
1870 }
else if (ene_ctrl > 0x7FFF) {
1874 std::cout <<
" 0x" <<
setup0 << reco <<
setupDec <<
" | " << std::setw(4) << scode <<
" " << gain <<
" " <<
bad;
1882 std::cout << std::setw(7) << ene_ctrl << std::setw(7) << ene_recobin << std::setw(6) << ene_bin << std::setw(10) << std::setprecision(4) << ene <<
" -- ";
1886 std::cout << std::setw(7) << ene_ctrl << std::setw(7) << ene_recobin << std::setw(6) << ene_bin << std::setw(10) << std::setprecision(4) << ene << std::setw(6) << std::setprecision(1) << time <<
" ";
1890 std::cout <<
" ----- ----- ---- --- -- ";
1895 std::cout <<
"| " << std::setw(4) << s[0] << std::setw(5) << s[1] << std::setw(5) << s[2] << std::setw(5) << s[3] << std::setw(5) << s[4] << std::setw(5) << s[5] << std::setw(5) << s[6] <<
" " ;
1896 if (ene_ctrl != ene_recobin) {
1898 std::cout <<
" ERR";
1902 std::cout <<
"\n\nFrag5 Self-Consistency: ";
1904 std::cout <<
"OK" << std::endl;
1906 std::cout <<
"ERROR" << std::endl;
1909 std::cout <<
"\nped4" << cnt_ped4 <<
", ped5 " << cnt_ped5 <<
", amp5 " << cnt_amp5 <<
", amp6 " << cnt_amp6 <<
", raws " << cnt_raws <<
", rawf " << cnt_rawf <<
", full " << cnt_full <<
", dump " << cnt_dump <<
", null " << cnt_null << std::endl;
1916 std::cout <<
"\nFELIX fragment 0x" << std::hex <<
id << std::dec <<
", " <<
size <<
" words found" << std::endl;
1920 std::cout << std::hex << std::endl;
1921 bool phase2format = (
size>
head && correct_data[2] == 0x12345678 && correct_data[
size-1] == 0x87654321);
1923 int thisVersion = (((correct_data[3] >> 16) & 0xFFFF) == 0) ? 1 : 0;
1924 const char * namesV0[] = {
"size_packet",
"elink",
"SOP",
"runParam1",
"runParam2",
"runParam3",
"runParam4",
"BC_MD_ID",
"L1ID" };
1925 const char * namesV1[] = {
"size_packet",
"elink",
"SOP",
"version",
"MODULE_BC_MD",
"L1ID",
"BCR" ,
"runParam1",
"runParam2",
"runParam3"};
1926 const char ** names = (thisVersion) ? namesV1 : namesV0;
1927 if (thisVersion)
head = 10;
1928 for (
int i=0; i<
head; ++i) {
1929 std::cout << std::setw(13) << names[i] << std::setw(10) << correct_data[i] << std::endl;
1933 for (
int i=0; i<
head; ++i) {
1934 std::cout <<
" Word" << std::setw(3) << i << std::setw(10) << correct_data[i] << std::endl;
1937 std::cout << std::dec << std::endl;
1938 FelixData_t digitsHighGain, digitsLowGain, digitsMetaData;
1939 unpack_frag6(correct_data.data(),
size, digitsHighGain, digitsLowGain, digitsMetaData);
1941 std::cout <<
" MD1 MD2 MD3 MD4" << std::endl;
1942 std::cout <<
"-----------------------------------------------------";
1943 const char * metaNamesV0[] = {
"BCID",
"L1ID",
"ModuleID",
"RunType",
"RunNumber",
"PedHi",
"PedLo",
"ChargeInj",
"TimeInj",
"Capacitor",
"ECR" };
1944 const char * metaNamesV1[] = {
"BCID",
"L1ID",
"ModuleID",
"RunType",
"RunNumber",
"PedHi",
"PedLo",
"ChargeInj",
"TimeInj",
"Capacitor",
"ECR",
"BCR",
"Version",
"FragID" };
1945 const char ** metaNames = (version) ? metaNamesV1 : metaNamesV0;
1946 for (
size_t i = 0; i < digitsMetaData.size(); ++i) {
1947 std::cout << std::endl << std::setw(13) << metaNames[i];
1948 for (
size_t j = 0; j<digitsMetaData[i].size(); ++j) {
1949 std::cout << std::setw(10) << digitsMetaData[i][j];
1952 std::cout << std::endl << std::endl;
1955 if (digitsLowGain[0].
size()>0)
1956 nsamp = std::max(nsamp,digitsLowGain[0].
size());
1957 if (digitsHighGain[0].
size()>0)
1958 nsamp =std::max(nsamp,digitsHighGain[0].
size());
1960 std::cout <<
" ch G ";
1961 for (
size_t s = 0; s < nsamp; ++s) {
1962 std::cout << std::setw(5) << s;
1964 std::string
a(8+nsamp*5,
'-');
1965 std::cout << std::endl <<
a;
1967 for (
size_t ch = 0; ch < digitsHighGain.size() ; ++ch) {
1968 std::cout << std::endl << std::setw(3) << ch <<
" HG ";
1969 for (
size_t s = 0; s < digitsHighGain[ch].size(); ++s) {
1970 std::cout << std::setw(5) << (digitsHighGain[ch][s]);
1974 for (
size_t ch = 0; ch < digitsLowGain.size() ; ++ch) {
1975 std::cout << std::endl << std::setw(3) << ch <<
" LG ";
1976 for (
size_t s = 0; s < digitsLowGain[ch].size(); ++s) {
1977 std::cout << std::setw(5) << (digitsLowGain[ch][s]);
1980 std::cout << std::endl << std::endl;
1988 std::cout <<
"\nQuality fragment 0x" << std::hex <<
id <<
", " << std::dec <<
size <<
" words found:" << std::endl;
1991 std::cout <<
" ATTENTION: Error bits found in the Data Quality fragment 0xA" << std::endl;
1994 std::cout <<
" --------------------------------------" << std::endl;
1995 std::cout <<
" | Quality Block | Word (16bit)" << std::endl;
1997 std::cout <<
" | DSP BCID | " << std::dec << (DQword.
dspbcid & 0x7FFF) << std::endl;
1999 std::cout <<
" | DSP BCID | not filled (" << std::dec << DQword.
dspbcid <<
")" << std::endl;
2001 std::cout <<
" | Global CRC | " << std::hex <<
"0x" << std::setw(1) << DQword.
global_crc << std::setfill(
'0') << std::endl;
2002 std::cout <<
" | BCID checks | " <<
setup0x4 << DQword.
bcid << std::endl;
2003 std::cout <<
" | Mem parity err | " <<
setup0x4 << DQword.
memory << std::endl;
2004 std::cout <<
" | Single strobe err | " <<
setup0x4 << DQword.
Sstrobe << std::endl;
2005 std::cout <<
" | Double strobe err | " <<
setup0x4 << DQword.
Dstrobe << std::endl;
2012 std::cout <<
" --------------------------------------" << std::setfill(
' ') << std::dec << std::endl;
2016 std::cout <<
"\nUnknown (type " <<
type <<
") fragment 0x" << std::hex <<
id <<
", " << std::dec <<
size <<
" words found" << std::endl;
2019 std::cout << std::endl;
2021 std::cout <<
"\nType " <<
type <<
" fragment 0x" << std::hex <<
id <<
", " << std::dec <<
size <<
" words found" << std::endl;
2022 std::cout <<
"\nEmpty Event" << std::endl;