| 33 | */ | */ | 
| 34 | std::string CalibCalPulse2Reader::GetVersionInfo(void) const { | std::string CalibCalPulse2Reader::GetVersionInfo(void) const { | 
| 35 | return | return | 
| 36 | "$Header: /repository/PamOffLineSW/techmodel/CalibCalPulse2Reader.cpp,v 1.5 2008-03-04 18:09:31 messineo Exp $\n"; | "$Header: /afs/ba.infn.it/user/pamela/src/CVS/chewbacca/PamOffLineSW/techmodel/CalibCalPulse2Reader.cpp,v 1.3 2009-07-24 13:53:44 mocchiut Exp $\n"; | 
| 37 | } | } | 
| 38 |  |  | 
| 39 | /** | /** | 
| 48 | * Unpack the CalibCalPulse2 event | * Unpack the CalibCalPulse2 event | 
| 49 | */ | */ | 
| 50 | void CalibCalPulse2Reader::PKT_RunEvent(char* packetData, long int dataLength) throw (Exception){ | void CalibCalPulse2Reader::PKT_RunEvent(char* packetData, long int dataLength) throw (Exception){ | 
| 51 | string msg; | string msg; | 
| 52 |  | std::stringstream oss; | 
| 53 |  | int         ERROR; | 
| 54 |  |  | 
| 55 | std::stringstream oss; | // | 
| 56 | int         ERROR; | // FAFEDE0909 is used to store two different data set: when length = 6 we store the calorimeter answer to commands CAL_RESET, WRITE_FPGA_REG_CH, WRITE_FPGA_REG_VCAL | 
| 57 |  | // else when length > 6 we store calpulse2 data | 
| 58 |  | // | 
| 59 |  | if ( dataLength == 6 ){ | 
| 60 |  | if ( calpul_.iev != calpul_.iev || calpul_.iev < 0 || calpul_.iev > 9000000 ) calpul_.iev = 0; | 
| 61 |  | calpul_.iev++; | 
| 62 |  | calibCalPulse2->iev = calpul_.iev; | 
| 63 |  | // | 
| 64 |  | calibCalPulse2->pstwerr[0] = 0; | 
| 65 |  | calibCalPulse2->pstwerr[1] = 0; | 
| 66 |  | calibCalPulse2->pstwerr[2] = 0; | 
| 67 |  | calibCalPulse2->pstwerr[3] = 0; | 
| 68 |  | // | 
| 69 |  | calibCalPulse2->pperror[0] = 129.; | 
| 70 |  | calibCalPulse2->pperror[1] = 129.; | 
| 71 |  | calibCalPulse2->pperror[2] = 129.; | 
| 72 |  | calibCalPulse2->pperror[3] = 129.; | 
| 73 |  | // | 
| 74 |  | float tempCalpuls[96][11][4]; | 
| 75 |  | memset(calpul_.calpuls,0,sizeof(tempCalpuls)); | 
| 76 |  | memcpy(tempCalpuls, calpul_.calpuls, sizeof(tempCalpuls)); | 
| 77 |  | for (int i = 0; i < 4; i++){ | 
| 78 |  | for (int j = 0; j <11; j++){ | 
| 79 |  | for (int z = 0; z < 96; z++){ | 
| 80 |  | calibCalPulse2->calpuls[i][j][z]  = tempCalpuls[z][j][i]; | 
| 81 |  | } | 
| 82 |  | } | 
| 83 |  | } | 
| 84 |  | // | 
| 85 |  | calibCalPulse2->CAL_RESET = (((UINT16)(packetData[0]<<8))&0xFF00) + (((UINT16)(packetData[1]))&0x00FF); | 
| 86 |  | calibCalPulse2->WRITE_FPGA_REG_CH = (((UINT16)(packetData[2]<<8))&0xFF00) + (((UINT16)(packetData[3]))&0x00FF); | 
| 87 |  | calibCalPulse2->WRITE_FPGA_REG_VCAL = (((UINT16)(packetData[4]<<8))&0xFF00) + (((UINT16)(packetData[5]))&0x00FF); | 
| 88 |  | calibCalPulse2->unpackError = 1; | 
| 89 |  | // | 
| 90 |  | } else { | 
| 91 |  | // | 
| 92 | calpulse_(packetData, &dataLength, &ERROR); | calpulse_(packetData, &dataLength, &ERROR); | 
| 93 |  |  | 
| 94 | calibCalPulse2->unpackError = ERROR; | calibCalPulse2->unpackError = ERROR; | 
| 95 |  | oss.str(""); | 
| 96 | if (ERROR != 0) { | if (ERROR != 0) { | 
| 97 | char *errmsg; | const char *errmsg=""; | 
| 98 | switch (ERROR){ | switch (ERROR){ | 
| 99 | case 1: errmsg = "CALORIMETER NOT FOUND"; | case 1: errmsg = "CALORIMETER NOT FOUND"; | 
| 100 | } | } | 
| 101 | oss.str(""); | oss << "CalibCalPulse2: Fortran77 function calpulse error code = " << ERROR | 
| 102 | oss << "CalibCalPulse2: Fortran77 function calpulse error code = " << ERROR | <<  " " << errmsg; | 
| 103 | <<  " " << errmsg; | msg=oss.str(); | 
| 104 | msg=oss.str(); | if ( dataLength > 6 ) PamOffLineSW::mainLogUtil->logWarning(msg); | 
|  | PamOffLineSW::mainLogUtil->logWarning(msg); |  | 
| 105 | } //else { | } //else { | 
| 106 | //Store the unpacked data | //Store the unpacked data | 
| 107 | calibCalPulse2->iev = calpul_.iev; | calibCalPulse2->iev = calpul_.iev; | 
| 108 | memcpy(calibCalPulse2->pstwerr, calpul_.pstwerr, sizeof(calibCalPulse2->pstwerr)); | memcpy(calibCalPulse2->pstwerr, calpul_.pstwerr, sizeof(calibCalPulse2->pstwerr)); | 
| 109 | memcpy(calibCalPulse2->pperror, calpul_.pperror, sizeof(calibCalPulse2->pperror)); | memcpy(calibCalPulse2->pperror, calpul_.pperror, sizeof(calibCalPulse2->pperror)); | 
| 110 | //--------have to invert array because of FORTRAN <-> C different management of the indexes | //--------have to invert array because of FORTRAN <-> C different management of the indexes | 
| 111 | float tempCalpuls[96][11][4]; | float tempCalpuls[96][11][4]; | 
| 112 | memcpy(tempCalpuls, calpul_.calpuls, sizeof(tempCalpuls)); | memcpy(tempCalpuls, calpul_.calpuls, sizeof(tempCalpuls)); | 
| 113 | for (int i = 0; i < 4; i++){ | for (int i = 0; i < 4; i++){ | 
| 114 | for (int j = 0; j <11; j++){ | for (int j = 0; j <11; j++){ | 
| 115 | for (int z = 0; z < 96; z++){ | for (int z = 0; z < 96; z++){ | 
| 116 | calibCalPulse2->calpuls[i][j][z]  = tempCalpuls[z][j][i]; | calibCalPulse2->calpuls[i][j][z]  = tempCalpuls[z][j][i]; | 
| 117 | } | } | 
| 118 | } | } | 
| 119 | } | } | 
| 120 | //----------------------------------------------------------------------------------------- | // | 
| 121 | //} | calibCalPulse2->CAL_RESET = 0; | 
| 122 |  | calibCalPulse2->WRITE_FPGA_REG_CH = 0; | 
| 123 |  | calibCalPulse2->WRITE_FPGA_REG_VCAL = 0; | 
| 124 |  | // | 
| 125 |  | }; | 
| 126 |  |  | 
| 127 |  |  | 
| 128 |  | //     calpulse_(packetData, &dataLength, &ERROR); | 
| 129 |  |  | 
| 130 |  | //     calibCalPulse2->unpackError = ERROR; | 
| 131 |  |  | 
| 132 |  | //     if (ERROR != 0) { | 
| 133 |  | //         char *errmsg; | 
| 134 |  | //         switch (ERROR){ | 
| 135 |  | //             case 1: errmsg = "CALORIMETER NOT FOUND"; | 
| 136 |  | //         } | 
| 137 |  | //         oss.str(""); | 
| 138 |  | //         oss << "CalibCalPulse2: Fortran77 function calpulse error code = " << ERROR | 
| 139 |  | //             <<  " " << errmsg; | 
| 140 |  | //         msg=oss.str(); | 
| 141 |  | //         if ( dataLength > 6 ) PamOffLineSW::mainLogUtil->logWarning(msg); | 
| 142 |  | //     } //else { | 
| 143 |  | //        //Store the unpacked data | 
| 144 |  | //         calibCalPulse2->iev = calpul_.iev; | 
| 145 |  | //         memcpy(calibCalPulse2->pstwerr, calpul_.pstwerr, sizeof(calibCalPulse2->pstwerr)); | 
| 146 |  | //         memcpy(calibCalPulse2->pperror, calpul_.pperror, sizeof(calibCalPulse2->pperror)); | 
| 147 |  | //     //--------have to invert array because of FORTRAN <-> C different management of the indexes | 
| 148 |  | //         float tempCalpuls[96][11][4]; | 
| 149 |  | //         memcpy(tempCalpuls, calpul_.calpuls, sizeof(tempCalpuls)); | 
| 150 |  | //         for (int i = 0; i < 4; i++){ | 
| 151 |  | //             for (int j = 0; j <11; j++){ | 
| 152 |  | //                 for (int z = 0; z < 96; z++){ | 
| 153 |  | //                     calibCalPulse2->calpuls[i][j][z]  = tempCalpuls[z][j][i]; | 
| 154 |  | //                 } | 
| 155 |  | //             } | 
| 156 |  | //         } | 
| 157 |  | //    //----------------------------------------------------------------------------------------- | 
| 158 |  | //     //} | 
| 159 | } | } |