Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-03 08:20:38

0001 #include "oncsSub_iduppetparams.h"
0002 #include <cstring>
0003 
0004 #include <arpa/inet.h>
0005 
0006 using namespace std;
0007 
0008 oncsSub_iduppetparams::oncsSub_iduppetparams(subevtdata_ptr data)
0009   :oncsSubevent_w4 (data)
0010 {
0011 
0012 }
0013   
0014 oncsSub_iduppetparams::~oncsSub_iduppetparams()
0015 {
0016 
0017 }
0018 
0019 
0020 int *oncsSub_iduppetparams::decode ( int *nwout)
0021 {
0022 
0023   unsigned int *SubeventData = (unsigned int *) &SubeventHdr->data;
0024 
0025   int *p = new int [42];
0026 
0027   for ( int i = 0; i < 41; i++ ) 
0028     {
0029       p[i] = SubeventData[i];
0030 
0031     }
0032   
0033   *nwout = 41;
0034   return p;
0035 }
0036  
0037 
0038 int oncsSub_iduppetparams::iValue(const int ch)
0039 {
0040 
0041   if ( decoded_data1 == 0 ) decoded_data1 = decode(&data1_length);
0042 
0043   if ( ch < 0 || ch >40 ) return 0;
0044 
0045   return decoded_data1[ch];
0046 
0047 }
0048 
0049 
0050  
0051 int oncsSub_iduppetparams::iValue(const int ich,const char *what)
0052 {
0053 
0054   if ( decoded_data1 == 0 ) decoded_data1 = decode(&data1_length);
0055 
0056   // register 1 - asic enable
0057   if ( strcmp(what,"ASICENABLED") == 0 )
0058   {
0059     if ( ich <0 || ich >=24) return 0;
0060     if ( ( decoded_data1[1] >> ich) &1 ) return 0;
0061     return 1;
0062   }
0063 
0064   if ( strcmp(what,"UDPHEADER1") == 0 )
0065   {
0066     return decoded_data1[9];
0067   }
0068 
0069   if ( strcmp(what,"UDPHEADER2") == 0 )
0070   {
0071 
0072     return decoded_data1[10];
0073   }
0074 
0075   if ( strcmp(what,"VTHHIGH") == 0 )
0076   {
0077     if ( ich < 0 || ich >= 6*24) return 0;
0078     return ( decoded_data1[11+ich] & 0xfff);
0079   }
0080 
0081   if ( strcmp(what,"VTHLOW") == 0 )
0082   {
0083     if ( ich < 0 || ich >= 6*24) return 0;
0084     return ( (decoded_data1[11+ich]>>16) & 0xfff);
0085   }
0086 
0087   if ( strcmp(what,"CLOCKPHASE") == 0 )
0088   {
0089     return decoded_data1[35];
0090   }
0091 
0092   if ( strcmp(what,"UDPTIMEOUT") == 0 )
0093   {
0094     return decoded_data1[36];
0095   }
0096 
0097   if ( strcmp(what,"CLOCKCORRECTION") == 0 )
0098   {
0099     return (decoded_data1[38] & 0xffffff);
0100   }
0101 
0102   if ( strcmp(what,"FIRMWAREVERSION") == 0 )
0103   {
0104     return decoded_data1[40];
0105   }
0106 
0107 
0108   return 0;
0109 
0110 }
0111 
0112 
0113 void  oncsSub_iduppetparams::dump ( OSTREAM& os )
0114 {
0115 
0116  
0117 
0118   os << " Firmware version: 0x" << hex << iValue(0,"FIRMWAREVERSION") << dec << std::endl;
0119   os << " Enabled Chips:    0x" << hex << iValue(1) << dec << std::endl;
0120   os << " UDP Header 1:     0x" << hex << iValue(0,"UDPHEADER1") << dec << "  " << setw(6) << iValue(0,"UDPHEADER1") << std::endl;
0121   os << " UDP Header 2:     0x" << hex << iValue(0,"UDPHEADER2") << dec  << "  " << setw(6) << iValue(0,"UDPHEADER2") << std::endl;
0122   os << " UDP Timeout:      " <<  iValue(0,"UDPTIMEOUT") << std::endl;
0123   os << " Clock Phase:      0x" << hex << iValue(0,"CLOCKPHASE") << dec << std::endl;
0124   os << " Clock Correction: 0x" << hex << iValue(0,"CLOCKCORRECTION") << dec << std::endl;
0125   
0126   int i, k;
0127 
0128   os << std::endl;
0129   
0130   os << "                 VTH Low (* = ASIC enabled) " << endl;
0131   os << "   row |     T5      T4      T3      T2      T1      T0" << endl;
0132   os << "   ----+------------------------------------------" << endl;
0133  
0134   int row = 3;
0135 
0136   for ( i = 23; i >= 20 ; i--)
0137     {
0138 
0139       os << std::setw(5) << row-- << "  |  "; 
0140       for ( k = i;  k >= 0 ; k-=4)
0141     {
0142 
0143       os << std::setw(5) << iValue(k,"VTHLOW");
0144       if ( iValue(k,"ASICENABLED") )
0145         {
0146           cout << "*  ";
0147         }
0148       else
0149         {
0150           cout << "   ";
0151         }
0152           
0153     }   
0154       os << std::endl;
0155     }
0156 
0157   os << std::endl;
0158 
0159   os << "                 VTH High (* = ASIC enabled) " << endl;
0160 
0161   row = 3;
0162   for ( i = 23; i >= 20 ; i--)
0163     {
0164 
0165       os << std::setw(5) << row-- << "  |  "; 
0166       for ( k = i;  k >= 0 ; k-=4)
0167     {
0168 
0169       os << std::setw(5) << iValue(k,"VTHHIGH");
0170       if ( iValue(k,"ASICENABLED") )
0171         {
0172           cout << "*  ";
0173         }
0174       else
0175         {
0176           cout << "   ";
0177         }
0178           
0179     }   
0180       os << std::endl;
0181     }
0182 
0183   os << "          ( as seen on the motherboard with towers up )" << std::endl << std::endl;
0184 
0185 }
0186