File indexing completed on 2025-08-03 08:20:46
0001 #include <string.h>
0002
0003 #include "oncsEvent.h"
0004 #include "oncsStructures.h"
0005 #include "oncsCollection.h"
0006 #include "oncsSubConstants.h"
0007
0008
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
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
0055
0056
0057
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
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
0146
0147
0148 sevt_ptr = (subevtdata_ptr) &EventData->data[i];
0149
0150
0151
0152
0153 pmap[sevt_ptr->sub_id] = (PHDWORD *) &EventData->data[i];
0154
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
0284 break;
0285
0286 case (IDTPCFEEV5):
0287 return new
0288 oncsSub_idtpcfeev4( sevt_ptr );
0289
0290 break;
0291
0292 case (IDTPCFEEV6):
0293 return new
0294
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):
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
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
0397
0398 v.push_back(makePacket(p));
0399 }
0400
0401 return v;
0402 }
0403
0404
0405
0406
0407
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
0418
0419 for (i=0; i<datalength; i+= EventData->data[i])
0420 {
0421
0422
0423
0424
0425 sevt_ptr = (subevtdata_ptr) &EventData->data[i];
0426
0427
0428
0429
0430 if ( sevt_ptr->sub_id == id) return 1;
0431
0432 }
0433 return 0;
0434 }
0435
0436
0437
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
0461
0462 *nw = l;
0463 memcpy (to, from, l*4);
0464 return 0;
0465 }