Back to home page

sPhenix code displayed by LXR

 
 

    


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

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 // the constructor first ----------------
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   // re-initialize the event header length
0032   evthdr->evt_length =  EVTHEADERLENGTH;
0033 
0034   // if < 0, just increment the current seq. number
0035   evthdr->evt_sequence++;
0036 
0037   // reset the current data index, and the leftover counter
0038   current = 0;
0039   in_frame = 0; // indicate that we are just now assembling a frame
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   // re-initialize the event header length
0052   evthdr->evt_length =  EVTHEADERLENGTH;
0053 
0054   // if < 0, just increment the current seq. number
0055 
0056   evthdr->evt_sequence = evtseq;
0057 
0058   // if > 0, adjust the run number, else just keep it.
0059   evthdr->run_number=irun;
0060   
0061   // reset the current data index, and the leftover counter
0062   current = 0;
0063   in_frame = 0; // indicate that we are just now assembling a frame
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