502 Xgt[irow][icolumn] = 0;
503 XgtF[irow][icolumn] = 0;
504 Xsaturation[irow][icolumn] = 0;
509 FiberTowerSatur.fill(0);
525 *BCIDptr = (Xfiber[0][
gPos::W280-1]&0x007F0000) >>16;
528 std::array<int, gPos::AB_TOWERS> etowerData{};
529 std::array<int, gPos::AB_TOWERS> htowerData{};
530 std::array<int, gPos::ABC_ROWS> xetowerData{};
531 std::array<int, gPos::ABC_ROWS> xhtowerData{};
532 std::array<int, gPos::ABC_ROWS> ohtowerData{};
535 std::array<int, gPos::AB_TOWERS> etowerDataF{};
536 std::array<int, gPos::AB_TOWERS> htowerDataF{};
537 std::array<int, gPos::ABC_ROWS> xetowerDataF{};
538 std::array<int, gPos::ABC_ROWS> xhtowerDataF{};
539 std::array<int, gPos::ABC_ROWS> ohtowerDataF{};
546 gFields fiberFieldsUndecoded{{}};
547 gSatur fiberSaturation{{}};
553 for(
unsigned int i=0;
i<100;
i++){
555 if (XMPD_NFI[
i] < 0)
continue;
557 if( ( Xfiber[
i][
gPos::W280-1] & 0x000000FF ) == 0x000000BC ) {
559 fiberFields[
i][16] = 1;
562 fiberFields[
i][16] = 0;
566 fiberFields[
i][18] = ( Xfiber[
i][
gPos::W280-1] & 0x007F0000) >>16 ;
567 fiberFields[
i][19] = ( Xfiber[
i][
gPos::W280-1] & 0xFF800000) >>23 ;
569 if (XMPD_DTYP_ARR[ XMPD_NFI[
i] ][17] == 8) {
571 fiberFields[
i][17] = ( Xfiber[
i][
gPos::W280-1] & 0x0000FF00) >>8 ;
573 for(
unsigned int k=0;
k<8;
k++){
574 if( fiberFields[
i][17] & (1<<
k) ) {
575 fiberSaturation[
i][
k] = 1;
579 if ( XMPD_DTYP_ARR[XMPD_NFI[
i]][2*
k] == 0) {
581 fiberFieldsSatur[
i][2*
k] = 1;
582 }
else if ( XMPD_DTYP_ARR[XMPD_NFI[
i]][
k] != 1) {
584 fiberFieldsSatur[
i][
k] = 1;
585 fiberFieldsSatur[
i][
k+8] = 1;
591 for (
unsigned int k=0;
k<8; ++
k){
592 int krow = XMPD_GTRN_ARR[
i][
k]/12;
593 int kcolumn = XMPD_GTRN_ARR[
i][
k]%12;
595 int korow = XMPD_GTRN_ARR[
i][
k];
596 int kxrow = XMPD_GTRN_ARR[
i][
k];
605 }
else if (XFPGA == 1){
610 if (fiberSaturation[
i][
k] == 1){
612 if ( ( XMPD_DTYP_ARR[XMPD_NFI[
i]][2*
k] == 0 ) && ( XMPD_GTRN_ARR[
i][2*
k] > -1 ) ){
613 int krow2 = XMPD_GTRN_ARR[
i][2*
k]/12;
614 int kcolumn2 = XMPD_GTRN_ARR[
i][2*
k]%12;
615 Xsaturation[krow2][kcolumn2] = 1;
618 if( (XMPD_DTYP_ARR[ XMPD_NFI[
i] ][
k] == 11 ) && ( XMPD_GTRN_ARR[
i][
k] > -1 ) ){
619 Xsaturation[ krow][kcolumn] = 1;
626 if( (XMPD_DTYP_ARR[ XMPD_NFI[
i] ][
k] == 3 ) && ( XMPD_GTRN_ARR[
i][
k] > -1 ) ){
627 Xsaturation[ kxrow][kxcolumn] = 1;
630 if( (XMPD_DTYP_ARR[ XMPD_NFI[
i] ][
k] == 2 ) && ( XMPD_GTRN_ARR[
i][
k] > -1 ) ){
631 Xsaturation[ kxrow][kxcolumn] = 1;
634 if( (XMPD_DTYP_ARR[ XMPD_NFI[
i] ][
k] == 6 ) && ( XMPD_GTRN_ARR[
i][
k] > -1 ) ){
635 Xsaturation[ korow][kocolumn] = 1;
639 if( (XMPD_DTYP_ARR[ XMPD_NFI[
i] ][
k] == 3 ) && ( XMPD_GTRN_ARR[
i][
k] > -1 ) ){
640 Xsaturation[ krow][kcolumn] = 1;
642 if( (XMPD_DTYP_ARR[ XMPD_NFI[
i] ][
k] == 2 ) && ( XMPD_GTRN_ARR[
i][
k] > -1 ) ){
643 Xsaturation[ krow][kcolumn] = 1;
647 krow = XMPD_GTRN_ARR[
i][
k+8]/12;
648 kcolumn = XMPD_GTRN_ARR[
i][
k+8]%12;
650 korow = XMPD_GTRN_ARR[
i][
k+8];
651 kxrow = XMPD_GTRN_ARR[
i][
k+8];
654 if( (XMPD_DTYP_ARR[ XMPD_NFI[
i] ][
k+8] == 11 ) && ( XMPD_GTRN_ARR[
i][
k+8] > -1 ) ){
655 Xsaturation[ krow][kcolumn] = 1;
660 if( (XMPD_DTYP_ARR[ XMPD_NFI[
i] ][
k+8] == 3 ) && ( XMPD_GTRN_ARR[
i][
k+8] > -1 ) ){
661 Xsaturation[ kxrow][kxcolumn] = 1;
664 if( (XMPD_DTYP_ARR[ XMPD_NFI[
i] ][
k+8] == 2 ) && ( XMPD_GTRN_ARR[
i][
k+8] > -1 ) ){
665 Xsaturation[ kxrow][kxcolumn] = 1;
668 if( (XMPD_DTYP_ARR[ XMPD_NFI[
i] ][
k+8] == 6 ) && ( XMPD_GTRN_ARR[
i][
k+8] > -1 ) ){
669 Xsaturation[ korow][kocolumn] = 1;
673 if( (XMPD_DTYP_ARR[ XMPD_NFI[
i] ][
k+8] == 3 ) && ( XMPD_GTRN_ARR[
i][
k+8] > -1 ) ){
674 Xsaturation[ krow][kcolumn] = 1;
676 if( (XMPD_DTYP_ARR[ XMPD_NFI[
i] ][
k+8] == 2 ) && ( XMPD_GTRN_ARR[
i][
k+8] > -1 ) ){
677 Xsaturation[ krow][kcolumn] = 1;
685 for(
int iFiber = 0; iFiber < Xin; iFiber++) {
687 std::array<uint32_t, 6>
tmp;
688 for(
int i = 0;
i < 6;
i++){
tmp[
i] = Xfiber[iFiber][
i]; };
691 int withoutComma = Xfiber[iFiber][6] & 0xFFFFFF00 ;
692 CRC =
crc9d23(withoutComma, CRC, 1 );
693 uint32_t StoredCRC = ( (Xfiber[iFiber][6]>>23) & 0x000001FF);
694 if( (CRC != StoredCRC) && (StoredCRC != 0 ) ) {
696 std::stringstream sdetail;
697 sdetail <<
"[gFexInputByteStreamTool::gtReconstructABC]: Fiber " << iFiber <<
"of Xin " << Xin <<
": BAD New CRC: " << CRC <<
"Stored CRC "<< StoredCRC ;
698 std::stringstream slocation;
699 slocation <<
"Fiber " << iFiber <<
"of Xin " << Xin;
700 std::stringstream stitle;
701 stitle <<
"Bad CRC" ;
707 int fiber_type = XMPD_NFI[iFiber];
709 for(
int iDatum = 0; iDatum < 16; iDatum++) {
711 int dataType = XMPD_DTYP_ARR[fiber_type][iDatum];
713 int ntower = XMPD_GTRN_ARR[iFiber][iDatum];
715 ATH_MSG_DEBUG(
"[gFexInputByteStreamTool::gtReconstructABC: unused location iFiber "<< iFiber <<
", calo type "<< XCALO_TYPE[iFiber]<<
", data type "<<
dataType <<
", iDatum " << iDatum <<
"tower " << ntower);
717 else if( (ntower < 0) || (ntower >383) ){
719 std::stringstream sdetail;
720 sdetail <<
"[gFexInputByteStreamTool::gtReconstructABC: bad value of ntower: iFiber "<< iFiber<<
", calo type"<< XCALO_TYPE[iFiber]<<
", data type "<<
dataType<<
", iDatum "<< iDatum<<
"tower "<< ntower ;
721 std::stringstream slocation;
722 slocation <<
"iFiber "<< iFiber<<
", calo type"<< XCALO_TYPE[iFiber];
723 std::stringstream stitle;
724 stitle <<
"Bad value of ntower" ;
731 int ihigh = XMPD_DSTRT_ARR[fiber_type][iDatum];
732 int ihword = ihigh/32;
733 int ihbit = ihigh%32;
749 if( XMSK[iFiber] != 1 ) {
754 if( (XCALO_TYPE[iFiber] < 3) && (ntower>-1) && (ntower<384) ) {
760 if(ilword == ihword){
763 etowerData[ntower] = etowerData[ntower] | ( (Xfiber[iFiber][ihword] &
mask) >> ilbit );
766 fiberFieldsUndecoded[iFiber][iDatum] = etowerData[ntower];
768 etowerDataF[ntower] = etowerData[ntower];
769 fiberFields[iFiber][iDatum] = etowerData[ntower];
774 if( etowerData[ntower] & 0x00000800 ){ etowerData[ntower] = (etowerData[ntower] | 0xFFFFF000) ;}
775 etowerData[ntower] = etowerData[ntower]*4;
776 etowerDataF[ntower] = etowerData[ntower];
781 std::stringstream sdetail;
782 sdetail <<
"[gFexInputByteStreamTool::gtReconstructABC]: wrongly packed data "<< fiber_type<<
", "<<
dataType<<
", "<<ilword<<
", " <<ihword ;
783 std::stringstream slocation;
784 slocation <<
"Fiber type "<< fiber_type<<
" and data type"<<
dataType;
785 std::stringstream stitle;
786 stitle <<
"Wrongly packed data" ;
797 hTREXval = Xfiber[iFiber][ihword];
798 lTREXval = Xfiber[iFiber][ilword];
803 if(ilword == ihword){
806 htowerData[ntower] = htowerData[ntower] | ( (hTREXval &
mask) >> (ilbit) );
808 else if ( ihbit == 7 ) {
811 htowerData[ntower] = htowerData[ntower] | ( (hTREXval & hmask) << 4);
813 htowerData[ntower] = htowerData[ntower] | ( ( (lTREXval & lmask) >> 28)&
mask) ;
815 else if ( ihbit == 3) {
818 htowerData[ntower] = htowerData[ntower] | ( ( hTREXval & hmask) << 8);
820 htowerData[ntower] = htowerData[ntower] | ( ( (lTREXval & lmask) >> 24) &
mask) ;
824 std::stringstream sdetail;
825 sdetail <<
"[gFexInputByteStreamTool::gtReconstructABC]: wrongly packed data "<< fiber_type<<
", "<<
dataType<<
", "<<ilword<<
", " <<ihword ;
826 std::stringstream slocation;
827 slocation <<
"Fiber type "<< fiber_type<<
" and data type"<<
dataType;
828 std::stringstream stitle;
829 stitle <<
"Wrongly packed data" ;
837 fiberFieldsUndecoded[iFiber][iDatum] = htowerData[ntower];
838 htowerData[ntower] = 20*htowerData[ntower];
839 htowerDataF[ntower] = htowerData[ntower];
840 fiberFields[iFiber][iDatum] = htowerData[ntower];
844 fiberFieldsUndecoded[iFiber][1] = htowerData[ntower];
846 htowerDataF[ntower] = htowerData[ntower];
847 fiberFields[iFiber][1] = htowerData[ntower];
851 if( htowerData[ntower] & 0x00000800 ){ htowerData[ntower] = (htowerData[ntower] | 0xFFFFF000) ;}
852 htowerData[ntower] = htowerData[ntower]*4;
853 htowerDataF[ntower] = htowerData[ntower];
862 if( (ntower > 32) || (ntower < 0) ){
864 std::stringstream sdetail;
865 sdetail <<
"[gFexInputByteStreamTool::gtReconstructABC]: bad value of nTower for extended region 2.4 - 2.5 in eta" ;
866 std::stringstream slocation;
867 slocation <<
"Fiber type "<< fiber_type<<
" and data type"<<
dataType;
868 std::stringstream stitle;
869 stitle <<
"Bad value of nTower in extended eta" ;
873 if(ilword == ihword){
874 int mask = 0x00000FFF;
876 xetowerData[ntower] = xetowerData[ntower] | ( (Xfiber[iFiber][ihword]&
mask) >> (ilbit) );
878 else if ( ihbit == 7 ) {
881 xetowerData[ntower] = xetowerData[ntower] | ( (Xfiber[iFiber][ihword]&hmask) << 4);
883 xetowerData[ntower] = xetowerData[ntower] | ( ( (Xfiber[iFiber][ilword]&lmask) >> 28)&
mask) ;
885 else if ( ihbit == 3) {
888 xetowerData[ntower] = xetowerData[ntower] | ( (Xfiber[iFiber][ihword]&hmask) << 8);
890 xetowerData[ntower] = xetowerData[ntower] | ( ( (Xfiber[iFiber][ilword]&lmask) >> 24)&
mask) ;
894 std::stringstream sdetail;
895 sdetail <<
"[gFexInputByteStreamTool::gtReconstructABC]: wrongly packed data "<< fiber_type<<
", "<<
dataType<<
", "<<ilword<<
", " <<ihword ;
896 std::stringstream slocation;
897 slocation <<
"Fiber type "<< fiber_type<<
" and data type"<<
dataType;
898 std::stringstream stitle;
899 stitle <<
"Wrongly packed data" ;
905 fiberFieldsUndecoded[iFiber][iDatum] = xetowerData[ntower];
906 undoMLE( xetowerData[ntower] );
907 xetowerDataF[ntower] = xetowerData[ntower];
908 fiberFields[iFiber][iDatum] = xetowerData[ntower];
913 if( xetowerData[ntower] & 0x00000800 ){ xetowerData[ntower] = (xetowerData[ntower] | 0xFFFFF000) ;}
914 xetowerData[ntower] = xetowerData[ntower]*4;
915 xetowerDataF[ntower] = xetowerData[ntower];
923 if(ilword == ihword){
926 xhtowerData[ntower] = xhtowerData[ntower] | ( (Xfiber[iFiber][ihword]&
mask) >> (ilbit) );
928 else if ( ihbit == 7 ) {
931 xhtowerData[ntower] = xhtowerData[ntower] | ( (Xfiber[iFiber][ihword]&hmask) << 4);
933 xhtowerData[ntower] = xhtowerData[ntower] | ( ( (Xfiber[iFiber][ilword]&lmask) >> 28)&
mask) ;
935 else if ( ihbit == 3) {
938 xhtowerData[ntower] = xhtowerData[ntower] | ( (Xfiber[iFiber][ihword]&hmask) << 8);
940 xhtowerData[ntower] = xhtowerData[ntower] | ( ( (Xfiber[iFiber][ilword]&lmask) >> 24)&
mask) ;
944 std::stringstream sdetail;
945 sdetail <<
"[gFexInputByteStreamTool::gtReconstructABC]: wrongly packed data "<< fiber_type<<
", "<<
dataType<<
", "<<ilword<<
", " <<ihword ;
946 std::stringstream slocation;
947 slocation <<
"Fiber type "<< fiber_type<<
" and data type"<<
dataType;
948 std::stringstream stitle;
949 stitle <<
"Wrongly packed data" ;
955 std::stringstream sdetail;
956 sdetail <<
"[gFexInputByteStreamTool::gtReconstructABC]: bad value of nTower for extended region 2.4 - 2.5 in eta" ;
957 std::stringstream slocation;
958 slocation <<
"Fiber type "<< fiber_type<<
" and data type"<<
dataType;
959 std::stringstream stitle;
960 stitle <<
"Bad value of nTower in extended eta" ;
966 fiberFieldsUndecoded[iFiber][iDatum] = xhtowerData[ntower];
967 undoMLE( xhtowerData[ntower] );
968 xhtowerDataF[ntower] = xhtowerData[ntower];
969 fiberFields[iFiber][iDatum] = xhtowerData[ntower];
973 if( xhtowerData[ntower] & 0x00000800 ){ xhtowerData[ntower] = (xhtowerData[ntower] | 0xFFFFF000) ;}
974 xhtowerData[ntower] = xhtowerData[ntower]*4;
975 xhtowerDataF[ntower] = xhtowerData[ntower];
983 if(ilword == ihword){
986 ohtowerData[ntower] = ohtowerData[ntower] | ( (Xfiber[iFiber][ihword]&
mask) >> (ilbit) );
988 else if ( ihbit == 7 ) {
991 ohtowerData[ntower] = ohtowerData[ntower] | ( (Xfiber[iFiber][ihword]&hmask) << 4);
993 ohtowerData[ntower] = ohtowerData[ntower] | ( ( (Xfiber[iFiber][ilword]&lmask) >> 28)&
mask) ;
995 else if ( ihbit == 3) {
998 ohtowerData[ntower] = ohtowerData[ntower] | ( (Xfiber[iFiber][ihword]&hmask) << 8);
1000 ohtowerData[ntower] = ohtowerData[ntower] | ( ( (Xfiber[iFiber][ilword]&lmask) >> 24)&
mask) ;
1004 std::stringstream sdetail;
1005 sdetail <<
"[gFexInputByteStreamTool::gtReconstructABC]: wrongly packed data "<< fiber_type<<
", "<<
dataType<<
", "<<ilword<<
", " <<ihword ;
1006 std::stringstream slocation;
1007 slocation <<
"Fiber type "<< fiber_type<<
" and data type"<<
dataType;
1008 std::stringstream stitle;
1009 stitle <<
"Wrongly packed data" ;
1015 std::stringstream sdetail;
1016 sdetail <<
"[gFexInputByteStreamTool::gtReconstructABC]: bad value of nTower for extended region 2.4 - 2.5 in eta" ;
1017 std::stringstream slocation;
1018 slocation <<
"Fiber type "<< fiber_type<<
" and data type"<<
dataType;
1019 std::stringstream stitle;
1020 stitle <<
"Bad value of nTower in extended eta" ;
1025 fiberFieldsUndecoded[iFiber][iDatum] = ohtowerData[ntower];
1026 undoMLE( ohtowerData[ntower] );
1027 ohtowerDataF[ntower] = ohtowerData[ntower];
1028 fiberFields[iFiber][iDatum] = ohtowerData[ntower];
1032 if( ohtowerData[ntower] & 0x00000800 ){ ohtowerData[ntower] = (ohtowerData[ntower] | 0xFFFFF000) ;}
1033 ohtowerData[ntower] = ohtowerData[ntower]*4;
1034 ohtowerDataF[ntower] = ohtowerData[ntower];
1043 hHECval = Xfiber[iFiber][ihword];
1044 lHECval = Xfiber[iFiber][ilword];
1045 if(ilword == ihword){
1048 htowerData[ntower] = htowerData[ntower] | ( (hHECval &
mask) >> (ilbit) );
1050 else if ( ihbit == 7 ) {
1053 htowerData[ntower] = htowerData[ntower] | ( (hHECval & hmask) << 4);
1055 htowerData[ntower] = htowerData[ntower] | ( ( (lHECval & lmask) >> 28)&
mask) ;
1057 else if ( ihbit == 3) {
1060 htowerData[ntower] = htowerData[ntower] | ( ( hHECval & hmask) << 8);
1062 htowerData[ntower] = htowerData[ntower] | ( ( (lHECval & lmask) >> 24) &
mask) ;
1066 std::stringstream sdetail;
1067 sdetail <<
"[gFexInputByteStreamTool::gtReconstructABC]: wrongly packed data "<< fiber_type<<
", "<<
dataType<<
", "<<ilword<<
", " <<ihword ;
1068 std::stringstream slocation;
1069 slocation <<
"Fiber type "<< fiber_type<<
" and data type"<<
dataType;
1070 std::stringstream stitle;
1071 stitle <<
"Wrongly packed data" ;
1076 fiberFieldsUndecoded[iFiber][iDatum] = htowerData[ntower];
1077 undoMLE( htowerData[ntower] );
1078 htowerDataF[ntower] = htowerData[ntower];
1079 fiberFields[iFiber][iDatum] = htowerData[ntower];
1083 if( htowerData[ntower] & 0x00000800 ){ htowerData[ntower] = (htowerData[ntower] | 0xFFFFF000) ;}
1084 htowerData[ntower] = htowerData[ntower]*4;
1085 htowerDataF[ntower] = htowerData[ntower];
1092 else if ( (ntower>-1) && (ntower<384) ){
1102 if( etowerData[ntower] != 0 ) {
1104 std::stringstream sdetail;
1105 sdetail <<
"[gFexInputByteStreamTool::gtReconstructABC]: etowerData[nTower] is not zero, inconsistent constants! "<< etowerData[ntower] ;
1106 std::stringstream slocation;
1107 slocation <<
"Fiber type "<< fiber_type<<
" and data type"<<
dataType;
1108 std::stringstream stitle;
1109 stitle <<
"etowerData not zero" ;
1114 if(ilword == ihword){
1115 int mask = 0x00000FFF;
1117 etowerData[ntower] = etowerData[ntower] | ( (Xfiber[iFiber][ihword]&
mask) >> (ilbit) );
1119 else if ( ihbit == 7 ) {
1122 etowerData[ntower] = etowerData[ntower] | ( (Xfiber[iFiber][ihword]&hmask) << 4);
1124 etowerData[ntower] = etowerData[ntower] | ( ( (Xfiber[iFiber][ilword]&lmask) >> 28)&
mask) ;
1126 else if ( ihbit == 3) {
1129 etowerData[ntower] = etowerData[ntower] | ( (Xfiber[iFiber][ihword]&hmask) << 8);
1131 etowerData[ntower] = etowerData[ntower] | ( ( (Xfiber[iFiber][ilword]&lmask) >> 24)&
mask) ;
1135 std::stringstream sdetail;
1136 sdetail <<
"[gFexInputByteStreamTool::gtReconstructABC]: wrongly packed data "<< fiber_type<<
", "<<
dataType<<
", "<<ilword<<
", " <<ihword ;
1137 std::stringstream slocation;
1138 slocation <<
"Fiber type "<< fiber_type<<
" and data type"<<
dataType;
1139 std::stringstream stitle;
1140 stitle <<
"Wrongly packed data" ;
1146 fiberFieldsUndecoded[iFiber][iDatum] = etowerData[ntower];
1147 undoMLE( etowerData[ntower] );
1148 etowerDataF[ntower] = etowerData[ntower];
1149 fiberFields[iFiber][iDatum] = etowerData[ntower];
1153 if( etowerData[ntower] & 0x00000800 ){ etowerData[ntower] = (etowerData[ntower] | 0xFFFFF000) ;}
1154 etowerData[ntower] = etowerData[ntower]*4;
1155 etowerDataF[ntower] = etowerData[ntower];
1165 if( htowerData[ntower] != 0 ) {
1166 std::stringstream sdetail;
1167 sdetail <<
"[gFexInputByteStreamTool::gtReconstructABC]: etowerData[nTower] is not zero, inconsistent constants! "<< etowerData[ntower] ;
1168 std::stringstream slocation;
1169 slocation <<
"Fiber type "<< fiber_type<<
" and data type"<<
dataType;
1170 std::stringstream stitle;
1171 stitle <<
"etowerData not zero" ;
1176 if(ilword == ihword){
1179 htowerData[ntower] = htowerData[ntower] | ( (Xfiber[iFiber][ihword]&
mask) >> (ilbit) );
1181 else if ( ihbit == 7 ) {
1184 htowerData[ntower] = htowerData[ntower] | ( (Xfiber[iFiber][ihword]&hmask) << 4);
1186 htowerData[ntower] = htowerData[ntower] | ( ( (Xfiber[iFiber][ilword]&lmask) >> 28)&
mask) ;
1188 else if ( ihbit == 3) {
1191 htowerData[ntower] = htowerData[ntower] | ( (Xfiber[iFiber][ihword]&hmask) << 8);
1193 htowerData[ntower] = htowerData[ntower] | ( ( (Xfiber[iFiber][ilword]&lmask) >> 24)&
mask) ;
1197 std::stringstream sdetail;
1198 sdetail <<
"[gFexInputByteStreamTool::gtReconstructABC]: wrongly packed data "<< fiber_type<<
", "<<
dataType<<
", "<<ilword<<
", " <<ihword ;
1199 std::stringstream slocation;
1200 slocation <<
"Fiber type "<< fiber_type<<
" and data type"<<
dataType;
1201 std::stringstream stitle;
1202 stitle <<
"Wrongly packed data" ;
1208 fiberFieldsUndecoded[iFiber][iDatum] = htowerData[ntower];
1209 undoMLE( htowerData[ntower] );
1210 htowerDataF[ntower] = htowerData[ntower];
1211 fiberFields[iFiber][iDatum] = htowerData[ntower];
1215 if( htowerData[ntower] & 0x00000800 ){ htowerData[ntower] = (htowerData[ntower] | 0xFFFFF000) ;}
1216 htowerData[ntower] = htowerData[ntower]*4;
1217 htowerDataF[ntower] = htowerData[ntower];
1230 std::stringstream sdetail;
1231 sdetail <<
"[gFexInputByteStreamTool::gtReconstructABC]: wrong detector type "<<
dataType ;
1232 std::stringstream slocation;
1233 slocation <<
"Fiber type "<< fiber_type<<
" and data type"<<
dataType;
1234 std::stringstream stitle;
1235 stitle <<
"Wrong detector type" ;
1246 for(
int itower=0;itower<384;itower++){
1247 int icolumn = itower%12;
1248 int irow = itower/12;
1251 int xF = etowerDataF[itower] + htowerDataF[itower];
1253 int x = ( (etowerData[itower]>>2) + (htowerData[itower]>>2) );
1258 Xgt[irow][icolumn] =
x;
1259 XgtF[irow][icolumn] = xF;
1262 if ( icolumn == 0) {
1263 int xx = ( (xetowerData[irow]>>2) + (xhtowerData[irow]>>2) );
1265 Xgt[irow][icolumn] = Xgt[irow][icolumn] +
xx;
1267 if ( icolumn == 4) {
1269 int ox = (ohtowerData[irow] >> 2 ) ;
1271 Xgt[irow][icolumn] = Xgt[irow][icolumn] + ox ;
1275 else if ( XFPGA == 1 ) {
1276 for(
int itower=0;itower<384;itower++){
1277 int icolumn = itower%12;
1278 int irow = itower/12;
1281 int xF = etowerDataF[itower] + htowerDataF[itower] ;
1283 int x = ( (etowerData[itower]>>2) + (htowerData[itower] >> 2) );
1288 Xgt[irow][icolumn] =
x;
1289 XgtF[irow][icolumn] = xF;
1292 if ( icolumn == 11) {
1296 int xx = ( (xetowerData[irow]>>2) + (xhtowerData[irow]>>2) );
1299 Xgt[irow][icolumn] = Xgt[irow][icolumn] +
xx;
1301 if ( icolumn == 7 ) {
1304 int xo = ohtowerData[irow]>>2;
1307 Xgt[irow][icolumn] = Xgt[irow][icolumn] + xo;
1311 else if ( XFPGA == 2 ) {
1312 for(
int itower=0;itower<384;itower++){
1313 int icolumn = itower%12;
1314 int irow = itower/12;
1317 int xF = etowerDataF[itower] + htowerDataF[itower] ;
1319 int x = ( (etowerData[itower]>>2 ) + (htowerData[itower]>>2));
1323 Xgt[irow][icolumn] =
x;
1324 XgtF[irow][icolumn] = xF;
1328 ATH_MSG_DEBUG(
"[gFexInputByteStreamTool::gtReconstructABC]: Bad FPGA # "<< XFPGA);
1333 for(
int iFiber = 0; iFiber < Xin; ++iFiber) {
1334 for(
int iDatum = 0; iDatum < 16; ++iDatum) {
1335 int codedData = fiberFieldsUndecoded[iFiber][iDatum];
1336 int saturData = fiberFieldsSatur[iFiber][iDatum];
1337 unsigned int index = (16*iFiber) + iDatum;
1338 FiberTower[
index] = codedData;
1339 FiberTowerSatur[
index] = saturData;