Back to home page

sPhenix code displayed by LXR

 
 

    


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

0001 
0002 // --------- all decoding routines -----------
0003 
0004 // decode the ID4EVT data format
0005 
0006 
0007 #include "decoding_routines.h"
0008 
0009 int decode_id4evt( int iarr[]
0010            ,int *SubeventData
0011            ,int dlength
0012            ,int nlen
0013            ,int *olength)
0014 {
0015 
0016   if ( SubeventData == 0) return -1;
0017 
0018   int i;
0019 
0020   // we clear the output vector if NLEN is not 0 
0021   if (nlen > 0) 
0022     {
0023       for (i=0; i<nlen;) iarr[i++]=0;
0024     }
0025  
0026   int *sptr = SubeventData;
0027  
0028   int nrl = 0;
0029   for (i=0; i < dlength ; i++)
0030     {
0031       /*
0032     test if i is greater than NLEN; we exceed the
0033     allowed space in ARR then
0034       */
0035       if (nlen > 0 &&  i >= nlen)
0036     {
0037       *olength = i+1;
0038       return -1;
0039     }
0040       iarr[i] = *sptr++;
0041       nrl = i;
0042     }
0043   *olength = nrl+1;
0044   return 0;
0045 }
0046 
0047 
0048 
0049 // decode the ID2EVT data format
0050 
0051 int decode_id2evt( int iarr[]
0052            ,short *SubeventData
0053            ,int dlength
0054            ,int nlen
0055            ,int *olength)
0056 {
0057   if ( SubeventData == 0) return -1;
0058   int i;
0059   // we clear the output vector if NLEN is not 0 
0060   if (nlen > 0) 
0061     {
0062       for (i=0; i<nlen;) iarr[i++]=0;
0063     }
0064 
0065   short *sptr = SubeventData;
0066  
0067   int nrl=0;
0068   for (i=0; i < dlength ; i++)
0069     {
0070       /*
0071     test if i is greater than NLEN; we exceed the
0072     allowed space in ARR then
0073       */
0074       if (nlen > 0 &&  i >= nlen)
0075     {
0076       *olength = i+1;
0077       return -1;
0078     }
0079       iarr[i] = *sptr++;
0080       nrl = i;
0081     }
0082   *olength = nrl+1;
0083   return 0;
0084 }
0085 
0086 // the hammond device format
0087 int decode_idhammond( int iarr[]
0088               ,int *SubeventData
0089               ,int dlength
0090               ,int nlen
0091               ,int *olength)
0092 {
0093   if ( SubeventData == 0) return -1;
0094   int i;
0095 
0096   //COUT << "in std::decode_idhammond" << std::endl;
0097 
0098   // we clear the output vector if NLEN is not 0 
0099   if (nlen > 0) 
0100     {
0101       for (i=0; i<nlen;) iarr[i++]=0;
0102     }
0103  
0104   int *sptr = SubeventData;
0105  
0106   int out_channel = 0;
0107   int is, k, h1, h2;
0108 
0109   for (i=0; i < dlength ; i+=2)
0110     {
0111       /*
0112     test if i is greater than NLEN; we exceed the
0113     allowed space in ARR then
0114       */
0115 
0116 
0117       h1 = *sptr++;
0118       h2 = *sptr++;
0119 
0120       for ( k = 0; k<30; k+=5)
0121     {
0122       if (nlen > 0 &&  out_channel >= nlen)
0123         {
0124           *olength = out_channel+1;
0125           return -1;
0126         }
0127       iarr[out_channel++] = ((h1>>k) & 0x1f) ;
0128     }
0129       
0130       is = ((h1>>30) & 3) | ( h2 << 2);
0131 
0132       for (k = 0; k<10; k+=5)
0133     {
0134       if (nlen > 0 &&  out_channel >= nlen)
0135         {
0136           *olength = out_channel+1;
0137           return -1;
0138         }
0139       iarr[out_channel++] = ((is>>k) & 0x1f) ;
0140     }
0141 
0142       //----------------------
0143     }
0144   *olength = out_channel;
0145   return 0;
0146 }
0147 
0148 // the hammondsetup device format
0149 int decode_idhammondset( int iarr[]
0150              ,int *SubeventData
0151              ,int dlength
0152              ,int nlen
0153              ,int *olength)
0154 {
0155   if ( SubeventData == 0) return -1;
0156   int i;
0157 
0158   // we clear the output vector if NLEN is not 0 
0159   if (nlen > 0) 
0160     {
0161       for (i=0; i<nlen;) iarr[i++]=0;
0162     }
0163  
0164   int *sptr = SubeventData;
0165  
0166   int nrl = 0;
0167   for (i=0; i < dlength ; i++)
0168     {
0169       /*
0170     test if i is greater than NLEN; we exceed the
0171     allowed space in ARR then
0172       */
0173       if (nlen > 0 &&  i >= nlen)
0174     {
0175       *olength = i+1;
0176       return -1;
0177     }
0178       iarr[i] = *sptr++;
0179       nrl = i;
0180     }
0181   *olength = nrl+1;
0182   return 0;
0183 }
0184 
0185 int decode_idtecfem( int iarr[]
0186              ,int *SubeventData
0187              ,int dlength
0188              ,int nlen
0189              ,int *olength)
0190 {
0191   if ( SubeventData == 0) return -1;
0192   int i, istart;
0193 
0194   // we clear the output vector if NLEN is not 0 
0195   if (nlen > 0) 
0196     {
0197       for (i=0; i<nlen;) iarr[i++]=0;
0198     }
0199  
0200   int *sptr = SubeventData;
0201  
0202   i = 0;
0203 
0204   istart = 8;
0205 
0206   int j;
0207   int b20;
0208   int nrl = 0;
0209   for (i=istart; i < dlength ; i++)
0210     {
0211       /*
0212         test if i is greater than NLEN; we exceed the
0213         allowed space in ARR then
0214       */
0215 
0216       //      COUT << "in loop, i= " << i << "  " << nrl <<" " 
0217       //   << std::hex << sptr[i] << std::dec <<  std::endl;
0218 
0219       if (nlen > 0 &&  nrl >= nlen)
0220         {
0221           *olength = nrl;
0222           return -1;
0223         }
0224 
0225       b20 = sptr[i];  // these are the 20 bits in one 32 bit word.
0226 
0227       // then bits 0-4...
0228       j = 0;
0229       iarr[nrl++] = (b20 >>j ) & 0x1f;
0230 
0231       // and finally bits 5-9.
0232       j=5;      
0233       iarr[nrl++] = (b20 >>j ) & 0x1f;
0234 
0235       // get bits 10-14 first
0236       j =10;
0237       iarr[nrl++] = (b20 >>j ) & 0x1f;
0238 
0239       // then bits 15-19...
0240       j =15;
0241       iarr[nrl++] = (b20 >>j ) & 0x1f;
0242 
0243         
0244     }
0245   *olength = nrl;
0246   return 0;
0247 }
0248 
0249 
0250 #include <mizar.h>
0251 
0252 int decode_idmiznhc( int parr[]
0253                      ,int *SubeventData
0254                      ,int dlength
0255                      ,int nlen
0256                      ,int *olength)
0257 {
0258   if ( SubeventData == 0) return -1;
0259   int i;
0260 
0261 
0262   // we clear the output vector if NLEN is not 0 
0263   if (nlen > 0) 
0264     {
0265       for (i=0; i<nlen;) parr[i++]=0;
0266     }
0267  
0268   miz_irdg iarr = (  miz_irdg ) parr;
0269 
0270   int ipos,isdm,index,adr,len,len_adc;
0271   sdm_c_block sdm;
0272   
0273   ipos = 2;
0274   for(isdm=0;isdm<11;isdm++)
0275     {
0276       sdm = (sdm_c_block) &SubeventData[ipos];
0277       len = (sdm->sdmlength & 0x0000ffff);
0278       //      COUT << "sdm " << isdm << " len " << len << " ipos " << ipos << std::endl;
0279       
0280       if ((sdm->sdmlength & 0x20000000))   /* this indicates the byte error */
0281         {
0282           iarr->out[isdm].byte_err = 1;
0283         }
0284       else
0285         {
0286           iarr->out[isdm].write_cell = (sdm->conv1_info & 0xf0000000)>>28;
0287           iarr->out[isdm].c1_cell    = (sdm->conv1_info & 0x0f000000)>>24;
0288           iarr->out[isdm].c2_cell    = (sdm->conv2_info & 0x0f000000)>>24;
0289           iarr->out[isdm].board_adr  = (sdm->conv1_info & 0x0000ff00)>>8;
0290           iarr->out[isdm].ser_ret    = (sdm->conv1_info & 0x000000ff);
0291  
0292           /*   iarr->out[isdm].socket     = (sdm->dspmap & 0x000000ff);
0293                iarr->out[isdm].port       = (sdm->dspmap & 0x0000ff00)>>8;
0294                iarr->out[isdm].dsp        = (sdm->dspmap & 0x00ff0000)>>16;
0295           */
0296           iarr->out[isdm].words      = len;
0297  
0298           /*     len_adc = len -4;  */
0299           len_adc = len -6;
0300           index = 0;
0301           while (index<len_adc)
0302             {
0303               if (sdm->array[index] & 0x80000000)
0304                 {
0305 
0306                   adr = ( (sdm->array[index]>>20) & 0x7ff ) ;
0307                   iarr->out[isdm].conv1_high[adr] = (sdm->array[index] & 0x3ff);
0308                   iarr->out[isdm].conv1_low[adr]  = ((sdm->array[index]>>10) & 0x3ff);
0309                   iarr->out[isdm].conv2_high[adr] = (sdm->array[index+1] & 0x3ff);
0310                   iarr->out[isdm].conv2_low[adr]  = ((sdm->array[index+1]>>10) & 0x3ff);
0311                   iarr->out[isdm].tac[adr] =        ((sdm->array[index+1]>>20) & 0x3ff);
0312                   index += 2;
0313                 }
0314  
0315             }                   /* end while index < len_adc */
0316         }                   /* end if byte err is set */
0317       ipos += len;
0318     }                     /* end for isdm */
0319 
0320   *olength  =  sizeof(*iarr)/4;
0321   return 0;
0322 }
0323 
0324 // the SAM5305 device format
0325 int decode_idsam( int iarr[]
0326           ,int *SubeventData
0327           ,int dlength
0328           ,int nlen
0329           ,int *olength)
0330 {
0331   if ( SubeventData == 0) return -1;
0332   int i, istat;
0333 
0334   // the format is essentially the ID4EVT format, the only
0335   // difference is that we have to convert the number into
0336   // millivolts (divide by 20).
0337   // we call decode_id4evt to do the work for us
0338   istat = decode_id4evt(iarr, SubeventData, dlength, nlen, olength);
0339 
0340   // and then we scale by 1/20.
0341   for (i=0; i < *olength ; i++)
0342     {
0343       iarr[i] /= 20;
0344     }
0345 
0346   // we return the status of  decode_id4evt. 
0347   return istat;
0348 }
0349 
0350 int decode_iddcfem( int iarr[]
0351             ,int *SubeventData
0352             ,int dlength
0353             ,int nlen
0354             ,int *olength)
0355 {
0356   int i, istart;
0357 
0358   // we clear the output vector if NLEN is not 0 
0359   if (nlen > 0) 
0360     {
0361       for (i=0; i<nlen;) iarr[i++]=0;
0362     }
0363  
0364   int *sptr = SubeventData;
0365  
0366   i = 0;
0367   while (sptr[i] != 0xdc111 &&  i++ < dlength ){} 
0368   //  COUT << "index: " << i << "value " << std::hex << sptr[i] << " " << sptr[i+1] 
0369   //   << std::dec << std::endl;
0370   //  COUT << "dlength = " << dlength << "nlen= " << nlen << std::endl;
0371   istart = i + 5;
0372 
0373   int j;
0374   int b20;
0375   int nrl = 0;
0376   for (i=istart; i < dlength ; i++)
0377     {
0378       /*
0379     test if i is greater than NLEN; we exceed the
0380     allowed space in ARR then
0381       */
0382 
0383       //      COUT << "in loop, i= " << i << "  " << nrl <<" " 
0384       //   << std::hex << sptr[i] << std::dec <<  std::endl;
0385 
0386       if (nlen > 0 &&  nrl >= nlen)
0387     {
0388       *olength = nrl;
0389       return -1;
0390     }
0391 
0392       if (sptr[i] == 0xff444)
0393     {
0394       *olength = nrl;
0395       return 0;
0396     }
0397 
0398       b20 = sptr[i];  // these are the 20 bits in one 32 bit word.
0399 
0400       // get bits 10-14 first
0401       j =10;
0402       iarr[nrl++] = (b20 >>j ) & 0x1f;
0403             
0404       // then bits 15-19...
0405       j =15;
0406       iarr[nrl++] = (b20 >>j ) & 0x1f;
0407 
0408       // then bits 0-4...
0409       j = 0;
0410       iarr[nrl++] = (b20 >>j ) & 0x1f;
0411 
0412       // and finally bits 5-9.
0413       j=5;  
0414       iarr[nrl++] = (b20 >>j ) & 0x1f;
0415     
0416     }
0417 
0418   *olength = nrl;
0419   return 0;
0420 }
0421 
0422 
0423 int decode_bbc_dcm0( int iarr[]
0424              ,int *packetData
0425              ,int dlength
0426              ,int nlen
0427              ,int *olength)
0428 {
0429   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0430 }
0431 
0432 
0433 int decode_mvd_dcm0( int iarr[]
0434              ,int *packetData
0435              ,int dlength
0436              ,int nlen
0437              ,int *olength)
0438 {
0439   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0440 }
0441 
0442 
0443 int decode_dch_dcm0( int iarr[]
0444              ,int *packetData
0445              ,int dlength
0446              ,int nlen
0447              ,int *olength)
0448 {
0449   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0450 }
0451 
0452 
0453 int decode_pc_dcm0( int iarr[]
0454             ,int *packetData
0455             ,int dlength
0456             ,int nlen
0457             ,int *olength)
0458 {
0459   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0460 }
0461 
0462 
0463 int decode_tec_dcm0( int iarr[]
0464              ,int *packetData
0465              ,int dlength
0466              ,int nlen
0467              ,int *olength)
0468 {
0469 
0470   if ( packetData == 0) return -1;
0471   int i;
0472 
0473   // we clear the output vector if NLEN is not 0 
0474   if (nlen > 0) 
0475     {
0476       for (i=0; i<nlen;) iarr[i++]=0;
0477     }
0478  
0479   int *sptr = &packetData[5];
0480  
0481 
0482   //  COUT << "index: " << i << "value " << std::hex << sptr[i] << " " << sptr[i+1] 
0483   //   << std::dec << std::endl;
0484   //  COUT << "dlength = " << dlength << "nlen= " << nlen << std::endl;
0485 
0486   int j;
0487   int b20;
0488   int nrl = 0;
0489 
0490   i = 0;
0491   //COUT << "first word " << std::hex << sptr[i] << std::dec << std::endl;
0492   while ( (sptr[i] & 0x80000000)  == 0) 
0493     {
0494       //  COUT << i << "  " << std::hex << sptr[i] << std::dec << std::endl;
0495       if ( i >  dlength -5) break;
0496     /*
0497       test if i is greater than NLEN; we exceed the
0498       allowed space in ARR then
0499     */
0500     
0501     //      COUT << "in loop, i= " << i << "  " << nrl <<" " 
0502     //   << std::hex << sptr[i] << std::dec <<  std::endl;
0503     
0504     b20 = sptr[i] & 0xfffff;  // these are the 20 bits in one 32 bit word.
0505     
0506     int upperbits =  (sptr[i] >> 20 ) & 0xfff;
0507     int wordnr    = upperbits & 0x01f;
0508     int channel  = (upperbits >> 5 ) & 0x3f;
0509     
0510     //if (channel < 5 ) COUT << "found channel" << channel << " wordnr " << wordnr << std::endl;
0511     nrl = channel * 80 + wordnr *4;
0512     // get bits 0...4 first
0513     j = 0;
0514     iarr[nrl++] = (b20 >>j ) & 0x1f;
0515     //if (channel < 5 ) COUT << "-- " << channel << "  " << nrl-1<< "  " << iarr[nrl-1] << std::endl;
0516     
0517     // then bits 5,,,,9...
0518     j = 5;
0519     iarr[nrl++] = (b20 >>j ) & 0x1f;
0520     //if (channel < 5 ) COUT << "-- " << channel << "  " <<  nrl-1 << "  " << iarr[nrl-1] << std::endl;
0521     
0522     // then bits 10.. 14...
0523     j = 10;
0524     iarr[nrl++] = (b20 >>j ) & 0x1f;
0525     //if (channel < 5 ) COUT << "-- " << channel << "  " <<nrl-1 << "  " << iarr[nrl-1] << std::endl;
0526     
0527     // and finally bits 15-19.
0528     j = 15; 
0529     iarr[nrl++] = (b20 >>j ) & 0x1f;
0530     //if (channel < 5 ) COUT << "-- " << channel << "  " << nrl-1 << "  " << iarr[nrl-1] << std::endl;
0531     
0532     i++;
0533     
0534     
0535     }
0536 
0537   *olength = 64 * 80 ;
0538   return 0;
0539 
0540 }
0541 
0542 
0543 int decode_rich_dcm0( int iarr[]
0544               ,int *packetData
0545               ,int dlength
0546               ,int nlen
0547               ,int *olength)
0548 {
0549   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0550 }
0551 
0552 
0553 int decode_tof_dcm0( int iarr[]
0554              ,int *packetData
0555              ,int dlength
0556              ,int nlen
0557              ,int *olength)
0558 {
0559   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0560 }
0561 
0562 // ------------------------------------------------------------
0563 int decode_pbsc_dcm0( int iarr[]
0564               ,int *packetData
0565               ,int dlength
0566               ,int nlen
0567               ,int *olength)
0568 {
0569 
0570   if ( packetData == 0) return -1;
0571   typedef struct {
0572     int post;
0573     int pre;
0574     int timing;
0575   } *emchannel;
0576 
0577   int i;
0578 
0579   // we clear the output vector if NLEN is not 0 
0580   for (i=0; i<nlen;) iarr[i++]=0;
0581  
0582   emchannel emc = (emchannel) &packetData[8];
0583  
0584   int channel;
0585 
0586   for (i=0; i < 144 ; i++)
0587     {
0588       /*
0589     test if i is greater than NLEN; we exceed the
0590     allowed space in ARR then
0591       */
0592       
0593       channel= ( emc->timing >> 20) & 0xff;
0594 
0595       if (nlen > 0 &&  5*channel >= nlen)
0596     {
0597       COUT << "too short" << ENDL;
0598       *olength = (channel+1)*5;
0599       return -1;
0600     }
0601 
0602 
0603       if ( (emc->timing & 0x90000  && emc->post &0xc0000 && emc->pre & 0xa0000 ) 
0604        &&  channel >= 0 && channel < 144 ) 
0605     {
0606       
0607       if ( emc->post & 0x8000) // high!
0608         {
0609           iarr[channel] = (emc->timing & 0xfff);
0610           iarr[channel+1] = 0;
0611           iarr[channel+2] = (emc->post & 0xfff);
0612           iarr[channel+3] = 0;
0613           iarr[channel+4] = (emc->pre & 0xfff);
0614         }
0615       
0616       else
0617         {
0618           iarr[channel] = (emc->timing & 0xfff);
0619           iarr[channel+1] = (emc->post & 0xfff);
0620           iarr[channel+2] = 0;
0621           iarr[channel+3] = (emc->pre & 0xfff);
0622           iarr[channel+4] = 0;
0623         }
0624     }
0625 
0626       emc++;
0627     }
0628   *olength = 144*5;
0629   return 0;
0630 }
0631 //------------------------------------------------------------
0632 int decode_pbsc_dcm32( int iarr[]
0633                ,int *packetData
0634                ,int dlength
0635                ,int nlen
0636                ,int *olength)
0637 {
0638   if ( packetData == 0) return -1;
0639 
0640   typedef struct {
0641     int timing;
0642     int higain_post;
0643     int logain_post;
0644     int higain_pre;
0645     int logain_pre;
0646   } *emchannel;
0647 
0648   int i;
0649 
0650   // we clear the output vector if NLEN is not 0 
0651   if (nlen > 0) 
0652     {
0653       for (i=0; i<nlen;) iarr[i++]=0;
0654     }
0655  
0656   emchannel emc = (emchannel) &packetData[9];
0657  
0658   int nrl = 0;
0659   int j = 0;
0660 
0661   for (i=0; i < 192 ; i++)
0662     {
0663       /*
0664     test if i is greater than NLEN; we exceed the
0665     allowed space in ARR then
0666       */
0667       if (nlen > 0 &&  j >= nlen)
0668     {
0669       COUT << "too short" << ENDL;
0670       *olength = j+1;
0671       return -1;
0672     }
0673             
0674       iarr[j++] = (emc->timing & 0xfff);
0675       iarr[j++] = (emc->higain_post & 0xfff);
0676       iarr[j++] = (emc->logain_post & 0xfff);
0677       iarr[j++] = (emc->higain_pre & 0xfff);
0678       iarr[j++] = (emc->logain_pre & 0xfff);
0679 
0680       nrl = j;
0681       emc++;
0682     }
0683   *olength = nrl+1;
0684   return 0;
0685 }
0686 
0687 // ------------------------------------------------------------
0688 
0689 int decode_pbgl_dcm0( int iarr[]
0690               ,int *packetData
0691               ,int dlength
0692               ,int nlen
0693               ,int *olength)
0694 {
0695   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0696 }
0697 
0698 
0699 int decode_muta_dcm0( int iarr[]
0700               ,int *packetData
0701               ,int dlength
0702               ,int nlen
0703               ,int *olength)
0704 {
0705   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0706 }
0707 
0708 
0709 // ------------------------------------------------------------
0710 // ------------------------------------------------------------
0711 // modefied for mutr 2023 words format
0712 int decode_mutc_dcm0( int iarr[]
0713               ,int *packetData
0714               ,int dlength
0715               ,int nlen
0716               ,int *olength)
0717 {
0718   if ( packetData == 0) return -1;
0719 
0720   int i;
0721 
0722   // we clear the output vector if NLEN is not 0 
0723   if (nlen > 0) 
0724     {
0725       for (i=0; i<nlen;) iarr[i++]=0;
0726     }
0727  
0728   //  int *ic =  &packetData[10];   
0729   int *ic =  &packetData[5];   // start from k[5], missing 4 cells and one header word   
0730  
0731   int j = 0;
0732 
0733   //  if (nlen > 0 &&  nlen < 4*128)
0734   if (nlen > 0 &&  nlen < 63*32)    // 63 samples , 32 channels
0735     {
0736       COUT << "too short" << ENDL;
0737       *olength = 0;
0738       return -1;
0739     }
0740 
0741   //  for (i=0; i < 4*128 ; i++)
0742   for (i=0; i < 63*32 ; i++)
0743     {
0744             
0745       iarr[j++] = ic[i];
0746 
0747     }
0748   //  *olength = 4*128;
0749     *olength = 63*32;
0750   return 0;
0751 
0752 }
0753 
0754 
0755 
0756 int decode_muid_dcm0( int iarr[]
0757               ,int *packetData
0758               ,int dlength
0759               ,int nlen
0760               ,int *olength)
0761 {
0762   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0763 }
0764 
0765 int decode_zdc_dcm0( int iarr[]
0766              ,int *packetData
0767              ,int dlength
0768              ,int nlen
0769              ,int *olength)
0770 {
0771   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0772 }
0773 
0774 
0775 int decode_rich_ll1( int iarr[]
0776              ,int *packetData
0777              ,int dlength
0778              ,int nlen
0779              ,int *olength)
0780 {
0781   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0782 }
0783 
0784 int decode_mvd_ll1( int iarr[]
0785             ,int *packetData
0786             ,int dlength
0787             ,int nlen
0788             ,int *olength)
0789 {
0790   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0791 }
0792 
0793 int decode_bbc_ll1( int iarr[]
0794             ,int *packetData
0795             ,int dlength
0796             ,int nlen
0797             ,int *olength)
0798 {
0799   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0800 }
0801 
0802 int decode_ntczdc_ll1( int iarr[]
0803             ,int *packetData
0804             ,int dlength
0805             ,int nlen
0806             ,int *olength)
0807 {
0808   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0809 }
0810 
0811 int decode_big_ll1( int iarr[]
0812             ,int *packetData
0813             ,int dlength
0814             ,int nlen
0815             ,int *olength)
0816 {
0817   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0818 }
0819 
0820 int decode_tof_ll1( int iarr[]
0821             ,int *packetData
0822             ,int dlength
0823             ,int nlen
0824             ,int *olength)
0825 {
0826   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0827 }
0828 
0829 int decode_muid_ll1( int iarr[]
0830              ,int *packetData
0831              ,int dlength
0832              ,int nlen
0833              ,int *olength)
0834 {
0835   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0836 }
0837 
0838 int decode_ert_ll1( int iarr[]
0839              ,int *packetData
0840              ,int dlength
0841              ,int nlen
0842              ,int *olength)
0843 {
0844   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0845 }
0846 
0847 int decode_pbgl_ll1( int iarr[]
0848              ,int *packetData
0849              ,int dlength
0850              ,int nlen
0851              ,int *olength)
0852 {
0853   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0854 }
0855 
0856 int decode_pbsc_ll1( int iarr[]
0857              ,int *packetData
0858              ,int dlength
0859              ,int nlen
0860              ,int *olength)
0861 {
0862   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0863 }
0864 
0865 int decode_gl1( int iarr[]
0866         ,int *packetData
0867         ,int dlength
0868         ,int nlen
0869         ,int *olength)
0870 {
0871   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0872 }
0873 
0874 
0875 int decode_gl1p( int iarr[]
0876         ,int *packetData
0877         ,int dlength
0878         ,int nlen
0879         ,int *olength)
0880 {
0881   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0882 }
0883 
0884 
0885 int decode_bbc_dcm1( int iarr[]
0886              ,int *packetData
0887              ,int dlength
0888              ,int nlen
0889              ,int *olength)
0890 {
0891   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0892 }
0893 
0894 
0895 int decode_mvd_dcm1( int iarr[]
0896              ,int *packetData
0897              ,int dlength
0898              ,int nlen
0899              ,int *olength)
0900 {
0901   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0902 }
0903 
0904 
0905 int decode_dch_dcm1( int iarr[]
0906              ,int *packetData
0907              ,int dlength
0908              ,int nlen
0909              ,int *olength)
0910 {
0911   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0912 }
0913 
0914 
0915 int decode_pc_dcm1( int iarr[]
0916             ,int *packetData
0917             ,int dlength
0918             ,int nlen
0919             ,int *olength)
0920 {
0921   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0922 }
0923 
0924 
0925 int decode_tec_dcm1( int iarr[]
0926              ,int *packetData
0927              ,int dlength
0928              ,int nlen
0929              ,int *olength)
0930 {
0931   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0932 }
0933 
0934 
0935 int decode_rich_dcm1( int iarr[]
0936               ,int *packetData
0937               ,int dlength
0938               ,int nlen
0939               ,int *olength)
0940 {
0941   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0942 }
0943 
0944 
0945 int decode_tof_dcm1( int iarr[]
0946              ,int *packetData
0947              ,int dlength
0948              ,int nlen
0949              ,int *olength)
0950 {
0951   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0952 }
0953 
0954 
0955 int decode_pbsc_dcm1( int iarr[]
0956               ,int *packetData
0957               ,int dlength
0958               ,int nlen
0959               ,int *olength)
0960 {
0961   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0962 }
0963 
0964 
0965 int decode_pbgl_dcm1( int iarr[]
0966               ,int *packetData
0967               ,int dlength
0968               ,int nlen
0969               ,int *olength)
0970 {
0971   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0972 }
0973 
0974 
0975 int decode_muta_dcm1( int iarr[]
0976               ,int *packetData
0977               ,int dlength
0978               ,int nlen
0979               ,int *olength)
0980 {
0981   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
0982 }
0983 
0984 
0985 
0986 // ----- modefied for mutr 532 words format, place holder, for MC
0987 int decode_mutc_dcm1( int iarr[]
0988               ,int *packetData
0989               ,int dlength
0990               ,int nlen
0991               ,int *olength)
0992 {
0993   if ( packetData == 0) return -1;
0994   int i;
0995 
0996   // we clear the output vector if NLEN is not 0 
0997   if (nlen > 0){
0998       for (i=0; i<nlen;) iarr[i++]=0;
0999     }
1000  
1001   //  int *ic =  &packetData[10];   
1002   int *ic =  &packetData[10];   // start from k[10]   
1003  
1004   int j = 0;
1005 
1006  
1007   //  if (nlen > 0 &&  nlen < 128)    // 1 sample , 128 channels
1008   if (nlen > 0 &&  nlen < 512){      // 4 samples, 128 channels  
1009   
1010     COUT << "too short" << ENDL;
1011     *olength = 0;
1012     return -1;
1013   }
1014 
1015   // for (i=0; i < 128 ; i++)
1016   for (i=0; i < 512 ; i++) {            
1017     iarr[j++] = ic[i];
1018   }
1019   *olength = 512;
1020   //  *olength = 128;
1021   return 0;
1022 }
1023 
1024 int decode_muid_dcm1( int iarr[]
1025               ,int *packetData
1026               ,int dlength
1027               ,int nlen
1028               ,int *olength)
1029 {
1030   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
1031 }
1032 
1033 int decode_zdc_dcm1( int iarr[]
1034              ,int *packetData
1035              ,int dlength
1036              ,int nlen
1037              ,int *olength)
1038 {
1039   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
1040 }
1041 
1042 int decode_bbc_dcm2( int iarr[]
1043              ,int *packetData
1044              ,int dlength
1045              ,int nlen
1046              ,int *olength)
1047 {
1048   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
1049 }
1050 
1051 
1052 int decode_mvd_dcm2( int iarr[]
1053              ,int *packetData
1054              ,int dlength
1055              ,int nlen
1056              ,int *olength)
1057 {
1058   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
1059 }
1060 
1061 
1062 int decode_dch_dcm2( int iarr[]
1063              ,int *packetData
1064              ,int dlength
1065              ,int nlen
1066              ,int *olength)
1067 {
1068   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
1069 }
1070 
1071 
1072 int decode_pc_dcm2( int iarr[]
1073             ,int *packetData
1074             ,int dlength
1075             ,int nlen
1076             ,int *olength)
1077 {
1078   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
1079 }
1080 
1081 int decode_pc_dcm3( int iarr[]
1082             ,int *packetData
1083             ,int dlength
1084             ,int nlen
1085             ,int *olength)
1086 {
1087   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
1088 }
1089 
1090 
1091 int decode_tec_dcm2( int iarr[]
1092              ,int *packetData
1093              ,int dlength
1094              ,int nlen
1095              ,int *olength)
1096 {
1097   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
1098 }
1099 
1100 
1101 int decode_rich_dcm2( int iarr[]
1102               ,int *packetData
1103               ,int dlength
1104               ,int nlen
1105               ,int *olength)
1106 {
1107   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
1108 }
1109 
1110 
1111 int decode_tof_dcm2( int iarr[]
1112              ,int *packetData
1113              ,int dlength
1114              ,int nlen
1115              ,int *olength)
1116 {
1117   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
1118 }
1119 
1120 
1121 int decode_pbsc_dcm2( int iarr[]
1122               ,int *packetData
1123               ,int dlength
1124               ,int nlen
1125               ,int *olength)
1126 {
1127   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
1128 }
1129 
1130 
1131 int decode_pbgl_dcm2( int iarr[]
1132               ,int *packetData
1133               ,int dlength
1134               ,int nlen
1135               ,int *olength)
1136 {
1137   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
1138 }
1139 
1140 
1141 int decode_muta_dcm2( int iarr[]
1142               ,int *packetData
1143               ,int dlength
1144               ,int nlen
1145               ,int *olength)
1146 {
1147   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
1148 }
1149 
1150 // ----- modefied for mutr 532 words format, pass-through mode
1151 int decode_mutc_dcm2( int iarr[]
1152               ,int *packetData
1153               ,int dlength
1154               ,int nlen
1155               ,int *olength)
1156 {
1157   if ( packetData == 0) return -1;
1158   int i;
1159 
1160   // we clear the output vector if NLEN is not 0 
1161   if (nlen > 0){
1162     for (i=0; i<nlen;) iarr[i++]=0;
1163   }
1164  
1165   //  int *ic =  &packetData[10];   
1166   int *ic =  &packetData[10];   // start from k[10]   
1167  
1168   int j = 0;
1169 
1170   if (nlen > 0 &&  nlen < 512){    // 4 samples , 128 channels
1171     COUT << "too short" << ENDL;
1172     *olength = 0;
1173     return -1;
1174   }
1175 
1176   for (i=0; i < 512 ; i++) {    
1177     iarr[j++] = ic[i];
1178   }
1179 
1180   *olength = 512;
1181   return 0;
1182 
1183 }
1184 
1185 int decode_muid_dcm2( int iarr[]
1186               ,int *packetData
1187               ,int dlength
1188               ,int nlen
1189               ,int *olength)
1190 {
1191   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
1192 }
1193 
1194 int decode_zdc_dcm2( int iarr[]
1195              ,int *packetData
1196              ,int dlength
1197              ,int nlen
1198              ,int *olength)
1199 {
1200   return decode_id4evt( iarr, packetData, dlength, nlen, olength);
1201 }
1202 
1203 
1204 int decode_pbsc_dcms( int iarr[]
1205 
1206               ,int *packetData
1207               ,int dlength
1208               ,int nlen
1209               ,int *olength)
1210 {
1211 
1212   if ( packetData == 0) return -1;
1213   typedef struct 
1214   {
1215     int timing;
1216     int post;
1217     int pre;
1218   } *emchannel;
1219   
1220   int i;
1221 
1222   // we clear the output vector if NLEN is not 0 
1223   if (nlen > 0) 
1224     {
1225       for (i=0; i<nlen;) iarr[i++]=0;
1226     }
1227  
1228   emchannel emc = (emchannel) &packetData[9];
1229  
1230   int nrl = 0;
1231   int j = 0;
1232 
1233   for (i=0; i < 144 ; i++)
1234     {
1235       /*
1236     test if i is greater than NLEN; we exceed the
1237     allowed space in ARR then
1238       */
1239       if (nlen > 0 &&  j >= nlen)
1240     {
1241       COUT << "too short" << ENDL;
1242       *olength = j+1;
1243       return -1;
1244     }
1245             
1246       if ( emc->post & 0x1000) // high!
1247     {
1248       iarr[j++] = (emc->timing & 0xfff);
1249       iarr[j++] = 0;
1250       iarr[j++] = (emc->post & 0xfff);
1251       iarr[j++] = 0;
1252       iarr[j++] = (emc->pre & 0xfff);
1253     }
1254 
1255       else
1256     {
1257       iarr[j++] = (emc->timing & 0xfff);
1258       iarr[j++] = (emc->post & 0xfff);
1259       iarr[j++] = 0;
1260       iarr[j++] = (emc->pre & 0xfff);
1261       iarr[j++] = 0;
1262     }
1263 
1264       nrl = j;
1265       emc++;
1266     }
1267   *olength = nrl+1;
1268   return 0;
1269 }
1270 
1271 // ----- modefied for mutr 532 words format, pass-through mode
1272 int decode_mutc_dcm3( int iarr[]
1273               ,int *packetData
1274               ,int dlength
1275               ,int nlen
1276               ,int *olength)
1277 {
1278   if ( packetData == 0) return -1;
1279   int i;
1280 
1281   // we clear the output vector if NLEN is not 0 
1282   if (nlen > 0){
1283     for (i=0; i<nlen;) iarr[i++]=0;
1284   }
1285  
1286   //  int *ic =  &packetData[10];   
1287   int *ic =  &packetData[10];   // start from k[10]   
1288  
1289   int j = 0;
1290 
1291   if (nlen > 0 &&  nlen < 512){    // 4 samples , 128 channels
1292     COUT << "too short" << ENDL;
1293     *olength = 0;
1294     return -1;
1295   }
1296 
1297   for (i=0; i < 512 ; i++) {    
1298     iarr[j++] = ic[i];
1299   }
1300 
1301   *olength = 512;
1302   return 0;
1303 
1304 }
1305 
1306 
1307 
1308