Back to home page

sPhenix code displayed by LXR

 
 

    


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

0001 #include <string.h>
0002 
0003 #include "oncsEvent.h"
0004 #include "oncsStructures.h"
0005 #include "oncsCollection.h"
0006 #include "oncsSubConstants.h"
0007 
0008 // the constructor first ----------------
0009 oncsEvent::oncsEvent (int *data)
0010 {
0011   is_data_type = 0;
0012   hasMap = 0;
0013   errorcode = 0;
0014   EventData = (oncsevtdata_ptr) data;
0015   originBuffer = 0;
0016 }
0017 
0018 oncsEvent::~oncsEvent ()
0019 {
0020   if (is_data_type) delete [] (int *) EventData;
0021 }
0022 
0023 // the info-type calls
0024 unsigned int
0025 oncsEvent::getEvtLength() const
0026 {
0027   return EventData->evt_length;
0028 }
0029 
0030 int
0031 oncsEvent::getEvtType() const
0032 {
0033   return EventData->evt_type;
0034 }
0035 
0036 int
0037 oncsEvent::getEvtSequence() const
0038 {
0039   return EventData->evt_sequence;
0040 }
0041 
0042 time_t
0043 oncsEvent::getTime () const
0044 {
0045   return EventData->time;
0046 }
0047 
0048 int
0049 oncsEvent::getRunNumber() const
0050 {
0051   return EventData->run_number;
0052 }
0053 
0054 // PHTimeStamp *
0055 // oncsEvent::getTimeStamp() const
0056 // {
0057 //   return 0;
0058 // }
0059 
0060 
0061 void oncsEvent::identify (OSTREAM &os) const
0062 {
0063   os << std::dec << " -- Event " << SETW(5)  << EventData->evt_sequence;
0064 
0065   os << " Run: "  << SETW(5)  << EventData->run_number;
0066 
0067   os << " length: "     << SETW(5)  <<EventData->evt_length;
0068 
0069   os << " type: "      << SETW(2)  << EventData->evt_type
0070      << " (" << get_evt_mnemonic(EventData->evt_type) << ")"
0071      << "  " << getTime()
0072      <<  std::endl;
0073 
0074 
0075 };
0076 
0077 int oncsEvent::convert()
0078 {
0079   if (is_data_type) return -1;
0080 
0081   int *tmp;
0082 
0083   tmp = new int[getEvtLength()];
0084   int *from= (int *)  EventData;
0085   int *to=tmp;
0086   for (unsigned int k=0; k< getEvtLength(); k++)
0087     {
0088       *to++ = *from++;
0089     }
0090 
0091   EventData = (oncsevtdata_ptr) tmp;
0092 
0093   is_data_type = 1;
0094   return 0;
0095 
0096 }
0097 
0098 int oncsEvent::is_pointer_type() const
0099 {
0100   if (is_data_type) return 0;
0101   else return 1;
0102 }
0103 
0104 
0105 Packet*
0106 oncsEvent::getPacket (const int id, const int hitFormat)
0107 {
0108   PHDWORD *pp;
0109 
0110   if (!hasMap) createMap();
0111 
0112   if ( errorcode) return 0;
0113 
0114   pp = pmap[id];
0115   if (!pp) return 0;
0116 
0117   return makePacket(pp,hitFormat);
0118 
0119 }
0120 
0121 Packet*
0122 oncsEvent::getPacket (const int id)
0123 {
0124   return getPacket (id, 0);
0125 }
0126 
0127 int oncsEvent::createMap()
0128 {
0129   int i;
0130   subevtdata_ptr sevt_ptr;
0131 
0132   int  datalength = EventData->evt_length - EVTHEADERLENGTH;
0133 
0134   // loop through the subevents and see if we locate the id
0135 
0136   for (i=0; i<datalength; i+=  EventData->data[i])
0137     {
0138       if ( EventData->data[i] <= 0) 
0139     {
0140       std::cout << "found 0-length packet" << std::endl;
0141       errorcode =-1;
0142       break;
0143     }
0144 
0145       // each data[i] is the start of a subevent;
0146       // we map it on a subevent_ptr
0147 
0148       sevt_ptr = (subevtdata_ptr) &EventData->data[i];
0149 
0150       // now we see what type of subevent we are supposed
0151       // to return
0152 
0153       pmap[sevt_ptr->sub_id] = (PHDWORD *) &EventData->data[i];
0154       //      std::cout << __FILE__ << "  " << __LINE__ << " subid, adr " << sevt_ptr->sub_id << "  " << pmap[sevt_ptr->sub_id] << "  " << *(pmap[sevt_ptr->sub_id]) << std::endl;
0155     }
0156   hasMap = 1;
0157 
0158   return 0;
0159 }
0160 
0161 Packet *oncsEvent::makePacket(PHDWORD *pp, const int hitFormat)
0162 {
0163   int wanted_hitformat;
0164 
0165   subevtdata_ptr sevt_ptr = (subevtdata_ptr) pp;
0166 
0167   if (hitFormat)  wanted_hitformat = hitFormat;
0168   else wanted_hitformat  = sevt_ptr->sub_decoding;
0169 
0170   switch (wanted_hitformat)
0171     {
0172 
0173     case (ID4EVT):
0174       return new
0175     oncsSub_id4evt( sevt_ptr);
0176       break;
0177 
0178     case (ID2EVT):
0179       return new
0180     oncsSub_id2evt( sevt_ptr );
0181       break;
0182 
0183     case (IDCSTR):
0184       return new
0185     oncsSub_idcstr( sevt_ptr );
0186       break;
0187 
0188     case (IDSIS3300):
0189       return new
0190     oncsSub_idsis3300( sevt_ptr );
0191       break;
0192 
0193     case (IDSIS3300R):
0194       return new
0195     oncsSub_idsis3300r( sevt_ptr );
0196       break;
0197 
0198     case (IDCAENV792):
0199       return new
0200     oncsSub_idcaenv792( sevt_ptr );
0201       break;
0202 
0203     case (IDCAENV1742):
0204       return new
0205     oncsSub_idcaenv1742( sevt_ptr );
0206       break;
0207 
0208 
0209     case (IDRCPETDATA):
0210       return new
0211     oncsSub_idrcpetdata( sevt_ptr );
0212       break;
0213 
0214 
0215     case (IDBSPETDATA):
0216       return new
0217     oncsSub_idbspetdata( sevt_ptr );
0218       break;
0219 
0220     case (IDUPPETDATA):
0221       return new
0222     oncsSub_iduppetdata( sevt_ptr );
0223       break;
0224 
0225     case (IDUPPETDATA_V104):
0226       return new
0227     oncsSub_iduppetdata_v104( sevt_ptr );
0228       break;
0229 
0230     case (IDUPPETPARAMS):
0231       return new
0232     oncsSub_iduppetparams( sevt_ptr );
0233       break;
0234 
0235     case (IDSRSV01):
0236       return new
0237     oncsSub_idsrs_v01( sevt_ptr );
0238       break;
0239 
0240     case (IDFNALMWPC):
0241       return
0242     new oncsSub_idfnalmwpc( sevt_ptr );
0243       break;
0244 
0245     case (IDFNALMWPCV2):
0246       return
0247     new oncsSub_idfnalmwpcv2( sevt_ptr );
0248       break;
0249 
0250     case (IDDRS4V1):
0251       return new
0252     oncsSub_iddrs4v1( sevt_ptr );
0253       break;
0254 
0255     case (IDMVTXV0):
0256       return new
0257     oncsSub_idmvtxv0( sevt_ptr );
0258       break;
0259 
0260     case (IDDIGITIZERV1):
0261       return new
0262     oncsSub_iddigitizerv1( sevt_ptr );
0263       break;
0264 
0265     case (IDTPCFEEV1):
0266       return new
0267     oncsSub_idtpcfeev1( sevt_ptr );
0268       break;
0269 
0270     case (IDTPCFEEV2):
0271       return new
0272     oncsSub_idtpcfeev2( sevt_ptr );
0273       break;
0274 
0275     case (IDTPCFEEV3):
0276       return new
0277     oncsSub_idtpcfeev3( sevt_ptr );
0278       break;
0279 
0280     case (IDTPCFEEV4):
0281       return new
0282     oncsSub_idtpcfeev4( sevt_ptr );
0283 //  oncsSub_idtpcfeev5( sevt_ptr );
0284       break;
0285 
0286     case (IDTPCFEEV5):
0287       return new
0288     oncsSub_idtpcfeev4( sevt_ptr );
0289 //  oncsSub_idtpcfeev5( sevt_ptr );
0290       break;
0291         
0292     case (IDTPCFEEV6):
0293       return new
0294 //  oncsSub_idtpcfeev4( sevt_ptr );
0295     oncsSub_idtpcfeev5( sevt_ptr );
0296       break;
0297         
0298     case (IDINTTV0):
0299       return new
0300     oncsSub_idinttv0( sevt_ptr );
0301       break;
0302 
0303     case (IDDREAMV0):
0304       return new
0305     oncsSub_iddreamv0( sevt_ptr );
0306       break;
0307 
0308     case (IDMVTXV1):
0309       return new
0310     oncsSub_idmvtxv1( sevt_ptr );
0311       break;
0312 
0313     case (IDMVTXV2):
0314       return new
0315     oncsSub_idmvtxv2( sevt_ptr );
0316       break;
0317 
0318     case (IDMVTXV3):
0319       return new
0320     oncsSub_idmvtxv3( sevt_ptr );
0321       break;
0322 
0323     case (IDGL1V0):
0324       return new
0325     oncsSub_idgl1v0( sevt_ptr );
0326       break;
0327 
0328     case (IDGL1V1):
0329     case (IDGL1V2):    // not a typo - v1 takes care of both
0330       return new
0331     oncsSub_idgl1v1( sevt_ptr );
0332       break;
0333 
0334     default:
0335       switch (sevt_ptr->sub_type)
0336     {
0337     case 1:
0338       return  new oncsSubevent_w1(sevt_ptr);
0339       break;
0340     case 2:
0341       return new oncsSubevent_w2(sevt_ptr);
0342       break;
0343     case 4:
0344       return new oncsSubevent_w4(sevt_ptr);
0345       break;
0346     default:
0347       return new oncsSubevent_w4(sevt_ptr);
0348     }
0349 
0350       return 0;
0351     }
0352 
0353   return 0;
0354 }
0355 
0356 
0357 int oncsEvent::getPacketList( Packet* sl[], const int ne)
0358 {
0359 
0360 
0361   if (!hasMap) createMap();
0362   if ( errorcode) return 0;
0363 
0364   std::map <int, PHDWORD *>::const_iterator it;
0365 
0366 
0367   int entries = 0;
0368 
0369   for ( it = pmap.begin() ; it != pmap.end(); ++it)
0370     {
0371       if ( entries == ne) break;
0372       PHDWORD *p = it->second;
0373       //std::cout << __FILE__ << "  " << __LINE__ << " subid, adr " << it->first << "  " << it->second << "  " << *(it->second) << std::endl;
0374 
0375       sl[entries++] = makePacket(p);
0376     }
0377 
0378   return entries;
0379 }
0380 
0381 std::vector<Packet *>  oncsEvent::getPacketVector()
0382 {
0383 
0384   std::vector<Packet *> v;
0385 
0386   if (!hasMap) createMap();
0387   if ( errorcode) return v;
0388 
0389 
0390   std::map <int, PHDWORD *>::const_iterator it;
0391 
0392 
0393   for ( it = pmap.begin() ; it != pmap.end(); ++it)
0394     {
0395       PHDWORD *p = it->second;
0396       //std::cout << __FILE__ << "  " << __LINE__ << " subid, adr " << it->first << "  " << it->second << "  " << *(it->second) << std::endl;
0397 
0398       v.push_back(makePacket(p));
0399     }
0400 
0401   return v;
0402 }
0403 
0404 
0405 
0406 
0407 // existSubevent (const int)
0408 
0409 int
0410 oncsEvent::existPacket (const int id)
0411 {
0412   int i;
0413   subevtdata_ptr sevt_ptr;
0414 
0415   int  datalength = EventData->evt_length - EVTHEADERLENGTH;
0416 
0417   // loop through the subevents and see if we locate the id
0418 
0419   for (i=0; i<datalength; i+=  EventData->data[i])
0420     {
0421 
0422       // each data[i] is the start of a subevent;
0423       // we map it on a subevent_ptr
0424 
0425       sevt_ptr = (subevtdata_ptr) &EventData->data[i];
0426 
0427       // now we see what type of subevent we are supposed
0428       // to return
0429 
0430       if ( sevt_ptr->sub_id == id) return 1;
0431 
0432     }
0433   return 0;
0434 }
0435 
0436 
0437 // the Copy routine
0438 int
0439 oncsEvent::Copy (int * array, const unsigned int length, int *nw, const char *what)
0440 {
0441 
0442     if (length< getEvtLength() )
0443     {
0444       *nw = 0;
0445       return -1;
0446     }
0447   char *to = (char *) array;
0448   char *from;
0449   unsigned int l;
0450   if ( strcmp (what, "DATA") ==0  )
0451     {
0452       from= (char *)  &EventData->data[0];
0453       l = getEvtLength() - EVTHEADERLENGTH;
0454     }
0455   else
0456     {
0457       from= (char *) EventData;
0458       l = getEvtLength();
0459     }
0460   //  for (i=0; i<l ; i++) *to++ = *from++;
0461   //
0462   *nw = l;
0463   memcpy (to, from, l*4);
0464   return 0;
0465 }