File indexing completed on 2025-08-03 08:20:46
0001 #include "oEvent.h"
0002 #include "EventTypes.h"
0003
0004 #include "A_Event.h"
0005 #include "Cframe.h"
0006 #include "frameRoutines.h"
0007 #include "packetRoutines.h"
0008 #include "packetConstants.h"
0009
0010 #include <time.h>
0011
0012
0013 oEvent::oEvent (PHDWORD * where, const int length
0014 , const int irun, const int etype, const int evtseq)
0015 {
0016 event_base = where;
0017 evthdr = ( evtdata_ptr ) where;
0018 evthdr->evt_type = etype;
0019 max_length = length;
0020 maxSizeOfThisFrame = 0;
0021 prepare_next (evtseq, irun);
0022 }
0023
0024 void oEvent::set_event_type(const int etype)
0025 {
0026 evthdr->evt_type = etype;
0027 }
0028
0029 int oEvent::prepare_next()
0030 {
0031
0032 evthdr->evt_length = EVTHEADERLENGTH;
0033
0034
0035 evthdr->evt_sequence++;
0036
0037
0038 current = 0;
0039 in_frame = 0;
0040 left=max_length - EVTHEADERLENGTH ;
0041 evthdr->date = time(0);
0042 evthdr->time = -1;
0043
0044 return 0;
0045
0046 }
0047
0048 int oEvent::prepare_next( const int evtseq
0049 , const int irun )
0050 {
0051
0052 evthdr->evt_length = EVTHEADERLENGTH;
0053
0054
0055
0056 evthdr->evt_sequence = evtseq;
0057
0058
0059 evthdr->run_number=irun;
0060
0061
0062 current = 0;
0063 in_frame = 0;
0064 left=max_length - EVTHEADERLENGTH ;
0065 evthdr->date = time(0);
0066 evthdr->time = -1;
0067
0068 return 0;
0069 }
0070
0071
0072 int oEvent::addFrame(PHDWORD *frame)
0073 {
0074 int len,i;
0075 PHDWORD *to = &(evthdr->data[current]);
0076 PHDWORD *from = frame;
0077
0078 len = getFrameLength(frame);
0079 for (i=0; i< len; i++) *to++ = *from++;
0080
0081 evthdr->evt_length += len;
0082 current += len;
0083 left -= len;
0084 in_frame = 0;
0085 return len;
0086 }
0087
0088
0089
0090 int oEvent::addPacket( const Packet *p)
0091 {
0092
0093 int additionalFrameLength = 0;
0094 if (!in_frame)
0095 {
0096 currentFramePtr = &evthdr->data[current];
0097 makeFrameHdr(currentFramePtr , left,
0098 rawData,oncsFrame,101);
0099 in_frame = 1;
0100 left -= currentFrameHdrLength;
0101 maxSizeOfThisFrame = left;
0102 additionalFrameLength = currentFrameHdrLength;
0103 current += currentFrameHdrLength;
0104 evthdr->evt_length += currentFrameHdrLength;
0105 }
0106
0107 PHDWORD* packetstart;
0108 int packetlength = p->getLength();
0109
0110
0111 packetstart = findFrameDataEnd(currentFramePtr ) +1;
0112
0113 p->copyMe( (int *)packetstart, packetlength );
0114
0115 if (packetlength >0)
0116 {
0117 evthdr->evt_length += packetlength;
0118 current += packetlength;
0119 adjustFrameLength ( currentFramePtr, maxSizeOfThisFrame , packetlength, 1);
0120 left -= packetlength;
0121 return packetlength + additionalFrameLength;
0122 }
0123 else return -1;
0124 }
0125
0126
0127
0128 int oEvent::addUnstructPacketData(PHDWORD * data,
0129 const int length,
0130 const int id,
0131 const int wordsize,
0132 const int hitformat)
0133 {
0134
0135 int additionalFrameLength = 0;
0136 if (!in_frame)
0137 {
0138 currentFramePtr = &evthdr->data[current];
0139 makeFrameHdr(currentFramePtr , left,
0140 rawData,oncsFrame,101);
0141 in_frame = 1;
0142 left -= currentFrameHdrLength;
0143 maxSizeOfThisFrame = left;
0144 additionalFrameLength = currentFrameHdrLength;
0145 current += currentFrameHdrLength;
0146 evthdr->evt_length += currentFrameHdrLength;
0147 }
0148
0149 PHDWORD* packetstart;
0150 int packetlength;
0151
0152 packetstart = findFrameDataEnd(currentFramePtr ) +1;
0153
0154 makeUnstructPacket (packetstart, left, id, wordsize, hitformat);
0155
0156 packetlength = storePacketHits (packetstart, left,
0157 0, (BYTE*) data, length, 0);
0158
0159 if (packetlength >0)
0160 {
0161 evthdr->evt_length += packetlength;
0162 current += packetlength;
0163 adjustFrameLength ( currentFramePtr, maxSizeOfThisFrame , packetlength, 1);
0164 left -= packetlength;
0165 return packetlength + additionalFrameLength;
0166 }
0167 else return -1;
0168 }
0169