Back to home page

sPhenix code displayed by LXR

 
 

    


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   //  int status = decode_id4scaler( temp
0013   //                  ,(int *)  findPacketDataStart(packet) 
0014   //                  ,dlngth
0015   //                  ,MAX_OUTLENGTH, &olength);
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)  // "BCLCK" because it's standard for other packets 
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