File indexing completed on 2025-08-03 08:20:40
0001 #include "packet_id4scaler.h"
0002
0003 Packet_id4scaler::Packet_id4scaler(PACKET_ptr data)
0004 : Packet_w4 (data){}
0005
0006 int *Packet_id4scaler::decode ( int *nwout)
0007 {
0008 int *p,*k;
0009
0010 int dlength = getDataLength();
0011
0012
0013
0014
0015
0016
0017
0018
0019 int * from = (int *) findPacketDataStart(packet);
0020 if (from == 0)
0021 {
0022 *nwout = 0;
0023 return 0;
0024 }
0025 int i;
0026 p = new int[dlength];
0027 k = p;
0028 for (i =0; i<dlength; i++) *k++ = from[i];
0029 *nwout = dlength;
0030 return p;
0031 }
0032
0033 int Packet_id4scaler::iValue(const int channel,const char *what)
0034 {
0035 int *k = (int *) findPacketDataStart(packet);
0036 if (k == 0)
0037 {
0038 return 0;
0039 }
0040
0041 int triggermasklength = k[2];
0042 int scalerlength = k[3+triggermasklength];
0043
0044 int rawIndex = 3+triggermasklength +1;
0045 int lifeIndex = rawIndex + scalerlength;
0046 int scaledIndex = lifeIndex + scalerlength;
0047 int stringIndex = scaledIndex + scalerlength;
0048
0049 if (strcmp(what,"NUMBERSCALERS") == 0)
0050 {
0051 return scalerlength;
0052 }
0053
0054 else if (strcmp(what,"NUMBERMASKS") == 0)
0055 {
0056 return triggermasklength;
0057 }
0058
0059 else if (strcmp(what,"TRIGGERMASK") == 0)
0060 {
0061 if (channel <0 || channel >=triggermasklength) return 0;
0062 return k[3+channel];
0063 }
0064
0065 else if (strcmp(what,"RAWSCALERS") == 0)
0066 {
0067 if (channel <0 || channel >=scalerlength) return 0;
0068 return k[rawIndex+channel];
0069 }
0070
0071 else if (strcmp(what,"LIFESCALERS") == 0 ||
0072 strcmp(what,"LIVESCALERS") == 0)
0073 {
0074 if (channel <0 || channel >=scalerlength) return 0;
0075 return k[lifeIndex+channel];
0076 }
0077
0078 else if (strcmp(what,"SCALEDSCALERS") == 0)
0079 {
0080 if (channel <0 || channel >=scalerlength) return 0;
0081 return k[scaledIndex+channel];
0082 }
0083
0084 else if ( strcmp(what,"TIMESTRING")==0)
0085 {
0086 if (channel <0 || channel >= k[stringIndex] ) return EOF;
0087 char *c = (char *) &k[stringIndex+1];
0088 return c[channel];
0089 }
0090
0091 std::cout << "packet_id4scaler::iValue error unknown datum: " << what << std::endl;
0092 return 0;
0093 }
0094
0095 long long Packet_id4scaler::lValue(const int channel, const char *what)
0096 {
0097 if (strcmp(what,"BEAMCLOCK") == 0 || strcmp(what,"BCLCK") == 0)
0098 {
0099
0100 unsigned int *k = (unsigned int *) findPacketDataStart(packet);
0101 if (k == 0)
0102 {
0103 return 0;
0104 }
0105
0106
0107
0108 #ifdef WIN32
0109 ULONGLONG beamclock = k[0];
0110 #else
0111 unsigned long long beamclock = k[0];
0112 #endif
0113
0114 beamclock <<=32;
0115 beamclock += k[1];
0116
0117 std::cout << std::hex << k[0] << " " << k[1] << " " << beamclock << std::dec<< std::endl;
0118 return beamclock;
0119 }
0120
0121 return 0;
0122 }
0123
0124
0125 void Packet_id4scaler::dump ( OSTREAM& os)
0126 {
0127 int i;
0128 this->identify(os);
0129 int *k = (int *) findPacketDataStart(packet);
0130 if (k == 0)
0131 {
0132 return;
0133 }
0134
0135 os << "Beamclock " << std::hex << std::setw(16)<< lValue(0,"BEAMCLOCK") << std::dec << std::endl;
0136
0137 int triggermasklength = k[2];
0138
0139 for (i=0; i< triggermasklength ; i++)
0140 {
0141 os << "Tiggermask " << i << " " << std::hex << iValue(0,"TRIGGERMASK") << std::dec << std::endl;
0142 }
0143
0144 os << "Scalers: raw | live | scaled" <<std::endl;
0145
0146 for (i = 0; i< iValue(0,"NUMBERSCALERS"); i++)
0147 {
0148 os << SETW(3) << i << " "
0149 << SETW(9) << iValue(i,"RAWSCALERS") << " "
0150 << SETW(9) << iValue(i,"LIFESCALERS") << " "
0151 << SETW(9) << iValue(i,"SCALEDSCALERS") << " "
0152 << std::endl;
0153 }
0154
0155 os << "time string: ";
0156 i = 0;
0157 char c;
0158 while ( (c = iValue(i++,"TIMESTRING")) ) os << c;
0159
0160
0161 os << std::endl;
0162 }
0163