Go to the documentation of this file.00001
00002
00003
00004 #ifndef MATACQTBRAWEVENT_H
00005 #define MATACQTBRAWEVENT_H
00006
00007 #include <inttypes.h>
00008
00009 #if 0 //replace 1 by 0 to remove XDAQ dependency. In this case it is assumed
00010
00011 #include "i2o/utils/endian.h"
00012 #define UINT32_FROM_LE i2odecodel
00013 #define UINT16_FROM_LE i2odecodes
00014 #define INT16_FROM_LE i2odecodes
00015
00016 #else //assuming little endianness of the machine
00017
00018 #define UINT32_FROM_LE
00019 #define UINT16_FROM_LE
00020 #define INT16_FROM_LE
00021
00022 #endif
00023
00027 class MatacqTBRawEvent{
00028
00029 public:
00030 enum matacqError_t {
00034 errorLengthConsistency = 1<<0,
00037 errorLength = 1<<1,
00040 errorWrongBoe = 1<<2
00041 };
00042
00043
00044
00045
00047 struct uint32le_t{
00048 uint32_t littleEndianInt;
00049 operator uint32_t() const{
00050 return UINT32_FROM_LE(littleEndianInt);
00051 }
00052 };
00053
00054 struct uint16le_t{
00055 uint16_t littleEndianInt;
00056 operator uint16_t() const{
00057 return UINT16_FROM_LE(littleEndianInt);
00058 }
00059 };
00060
00061 struct int16le_t{
00062 int16_t littleEndianInt;
00063 operator int16_t() const{
00064 return INT16_FROM_LE(littleEndianInt);
00065 }
00066 };
00068
00069 struct ChannelData{
00072 int chId;
00075 int nSamples;
00078 const int16le_t* samples;
00079 };
00080
00081 private:
00084 struct matacqHeader_t{
00085 uint16le_t version;
00086 unsigned char freqGHz;
00087 unsigned char channelCount;
00088 uint32_t timeStamp;
00089 };
00090
00093 struct field32spec_t{
00094 int offset;
00095 unsigned int mask;
00096 };
00097
00100 static const field32spec_t fov32;
00101 static const field32spec_t fedId32;
00102 static const field32spec_t bxId32;
00103 static const field32spec_t lv132;
00104 static const field32spec_t triggerType32;
00105 static const field32spec_t boeType32;
00106 static const field32spec_t dccLen32;
00107 static const field32spec_t dccErrors32;
00108 static const field32spec_t runNum32;
00109 static const field32spec_t h1Marker32;
00110
00111
00112
00113 public:
00123 MatacqTBRawEvent(const unsigned char* dataBuffer, size_t bufferSize){
00124 setRawData(dataBuffer, bufferSize);
00125 }
00126
00127 public:
00134 int getFov() const { return read32(daqHeader, fov32);}
00135
00139 int getFedId() const { return read32(daqHeader, fedId32);}
00140
00144 int getBxId() const { return read32(daqHeader, bxId32);}
00145
00149 unsigned getEventId() const { return read32(daqHeader, lv132);}
00150
00154 int getTriggerType() const { return read32(daqHeader, triggerType32);}
00155
00159 int getBoe() const { return read32(daqHeader, boeType32);}
00160
00164 unsigned getDccLen() const { return read32(daqHeader, dccLen32);}
00165
00169 unsigned getDaqLen() const { return fragLen;}
00170
00171
00175 int getDccErrors() const { return read32(daqHeader, dccErrors32);}
00176
00180 unsigned getRunNum() const { return read32(daqHeader, runNum32);}
00181
00185 int getH1Marker() const { return read32(daqHeader, h1Marker32);}
00186
00187
00191 int getMatacqDataFormatVersion() const { return matacqHeader->version;}
00192
00197 int32_t getStatus() const { return error;}
00198
00202 int getFreqGHz() const { return matacqHeader->freqGHz;}
00203
00207 int getChannelCount() const { return matacqHeader->channelCount;}
00208
00214 const std::vector<ChannelData>& getChannelData() const{
00215 return channelData;
00216 }
00217
00222 int getParsedLen() { return parsedLen; }
00223
00229 time_t getTimeStamp() const { return matacqHeader->timeStamp;}
00230
00231
00236 int getTTrigPs() const { return tTrigPs;}
00237
00238 private:
00244 int read32(uint32le_t* pData, field32spec_t spec) const;
00245
00253 void setRawData(const unsigned char* buffer, size_t bufferSize);
00254
00255
00256 private:
00259 int boe;
00260
00263 int bxId;
00264
00267 int channelCount;
00268
00271 std::vector<ChannelData> channelData;
00272
00275 uint32le_t* daqHeader;
00276
00279 int dccErrors;
00280
00283 unsigned dccLen;
00284
00287 unsigned eventId;
00288
00291 int32_t error;
00292
00295 int fedId;
00296
00299 int fov;
00300
00303 int fragLen;
00304
00307 int freqGHz;
00308
00311 int h1Marker;
00312
00315 matacqHeader_t* matacqHeader;
00316
00319 int matacqDataFormatVersion;
00320
00323 int parsedLen;
00324
00327 uint16le_t* pSamples;
00328
00331 unsigned runNum;
00332
00335 time_t timeStamp;
00336
00339 int tTrigPs;
00340
00343 int triggerType;
00344 };
00345
00346 #endif //MATACQRAWEVENT_H not defined