File indexing completed on 2025-08-03 08:20:41
0001 #include "packet_starscaler.h"
0002
0003 Packet_starscaler::Packet_starscaler(PACKET_ptr data)
0004 : Packet_w4 (data)
0005 {
0006 s_vectorlength= 0;
0007 s_vector= 0;
0008 }
0009
0010 Packet_starscaler::~Packet_starscaler()
0011 {
0012 #if !defined(SunOS) && !defined(OSF1)
0013 smap.clear();
0014 if ( s_vector) delete [] s_vector;
0015 #endif
0016 }
0017
0018 int *Packet_starscaler::decode ( int *nwout)
0019 {
0020
0021 #if !defined(SunOS) && !defined(OSF1)
0022 int dlength = getDataLength();
0023 s_vectorlength= dlength/2;
0024
0025
0026
0027 int *p = new int [s_vectorlength];
0028 s_vector = new long long [s_vectorlength];
0029 s_vector[0] = 0;
0030 int *m = (int *) findPacketDataStart(packet);
0031
0032 int i;
0033 for ( i = 0; i < s_vectorlength; i++)
0034 {
0035 int l = i*2;
0036 p[i] = (( m[l+1]>>8) & 0xffffff);
0037 long long lsb = (unsigned int) m[l];
0038 long long msb = (unsigned int) m[l+1];
0039 s_vector[i] = lsb | (( msb &0xff) <<32);
0040 smap[p[i]] = i;
0041
0042 }
0043
0044
0045 *nwout = s_vectorlength;
0046 return p;
0047 #else
0048 return 0;
0049 #endif
0050
0051 }
0052
0053
0054
0055 long long Packet_starscaler::lValue (const int chan)
0056 {
0057 #if !defined(SunOS) && !defined(OSF1)
0058 if (decoded_data1 == NULL )
0059 {
0060 if ( (decoded_data1 = decode(&data1_length))==NULL)
0061 return 0;
0062 }
0063
0064
0065
0066 if (chan < 0 || chan >= (1<<24) ) return 0;
0067
0068 std::map <int, int>::iterator it;
0069 if ( ( it = smap.find(chan) ) == smap.end() )
0070 {
0071 return 0;
0072 }
0073
0074 int index = it->second;
0075
0076 if ( index < 0 || index >= s_vectorlength )
0077 {
0078
0079 return 0;
0080 }
0081 return s_vector[index];
0082
0083 #else
0084 return 0;
0085 #endif
0086
0087 }
0088
0089 int Packet_starscaler::iValue (const int index)
0090 {
0091 #if !defined(SunOS) && !defined(OSF1)
0092 if (decoded_data1 == NULL )
0093 {
0094 if ( (decoded_data1 = decode(&data1_length))==NULL)
0095 return 0;
0096 }
0097
0098
0099
0100 if (index < 0 || index >= s_vectorlength ) return 0;
0101
0102 return decoded_data1[index];
0103
0104 #else
0105 return 0;
0106 #endif
0107
0108 }
0109
0110 int Packet_starscaler::iValue(const int ich, const char *what)
0111 {
0112
0113 if (decoded_data1 == NULL )
0114 {
0115 if ( (decoded_data1 = decode(&data1_length))==NULL)
0116 return 0;
0117 }
0118
0119 if ( strcmp(what,"CHANNELCOUNT")==0)
0120 {
0121 return s_vectorlength -1;
0122 }
0123 return 0;
0124
0125 }
0126
0127 void Packet_starscaler::dump ( OSTREAM &os)
0128 {
0129
0130
0131 this->identify(os);
0132
0133 int i;
0134
0135 for ( i= 0; i < iValue(0,"CHANNELCOUNT"); i++)
0136 {
0137 os << i << " " << std::setw(10) << iValue(i) << " | " << std::setw(12) << lValue(iValue(i)) << std::endl;
0138 }
0139 }
0140