Back to home page

sPhenix code displayed by LXR

 
 

    


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