CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes
MatacqRawEvent Class Reference

#include <MatacqRawEvent.h>

Classes

struct  ChannelData
 
struct  field32spec_t
 
struct  int16le_t
 
struct  uint16le_t
 
struct  uint32le_t
 

Public Types

enum  matacqError_t { errorLengthConsistency = 1<<0, errorLength = 1<<1, errorWrongBoe = 1<<2 }
 

Public Member Functions

int getAttenuation_dB () const
 
int getBoe () const
 
int getBxId () const
 
int getChannelCount () const
 
const std::vector< ChannelData > & getChannelData () const
 
unsigned getDaqLen () const
 
int getDccErrors () const
 
unsigned getDccLen () const
 
int getDelayA () const
 
int getEmtcDelay () const
 
int getEmtcPhase () const
 
unsigned getEventId () const
 
int getFedId () const
 
int getFov () const
 
int getFreqGHz () const
 
int getH1Marker () const
 
int getLaserPower () const
 
int getMatacqDataFormatVersion () const
 
uint32_t getOrbitId () const
 
int getParsedLen ()
 
int getPostTrig () const
 
unsigned getRunNum () const
 
int32_t getStatus () const
 
time_t getTimeStamp () const
 
void getTimeStamp (struct timeval &t) const
 
int getTriggerType () const
 
int getTrigRec () const
 
int getTTrigPs () const
 
std::vector< int > getVernier () const
 
 MatacqRawEvent (const unsigned char *dataBuffer, size_t bufferSize)
 

Static Public Member Functions

static unsigned getDccLen (unsigned char *data, size_t size)
 
static unsigned getOrbitId (unsigned char *data, size_t size)
 
static unsigned getRunNum (unsigned char *data, size_t size)
 

Private Member Functions

void setRawData (const unsigned char *buffer, size_t bufferSize)
 

Static Private Member Functions

static int read32 (uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
 

Private Attributes

int attenuation_dB
 
int boe
 
int bxId
 
int channelCount
 
std::vector< ChannelDatachannelData
 
uint32le_tdaqHeader
 
int dccErrors
 
unsigned dccLen
 
int delayA
 
int emtcDelay
 
int emtcPhase
 
int32_t error
 
unsigned eventId
 
int fedId
 
int fov
 
int fragLen
 
int freqGHz
 
int h1Marker
 
int laserPower
 
int matacqDataFormatVersion
 
uint32_t orbitId
 
int parsedLen
 
int postTrig
 
uint16le_tpSamples
 
unsigned runNum
 
struct timeval timeStamp
 
int triggerType
 
int trigRec
 
int tTrigPs
 
std::vector< int > vernier
 

Static Private Attributes

static const field32spec_t fov32 = {0, 0x000000F0}
 
static const field32spec_t fedId32 = {0, 0x000FFF00}
 
static const field32spec_t bxId32 = {0, 0xFFF00000}
 
static const field32spec_t lv132 = {1, 0x00FFFFFF}
 
static const field32spec_t triggerType32 = {1, 0x0F000000}
 
static const field32spec_t boeType32 = {1, 0xF0000000}
 
static const field32spec_t dccLen32 = {2, 0x00FFFFFF}
 
static const field32spec_t dccErrors32 = {2, 0xFF000000}
 
static const field32spec_t runNum32 = {3, 0x00FFFFFF}
 
static const field32spec_t h1Marker32 = {3, 0x3F000000}
 
static const field32spec_t formatVersion32 = {4, 0x0000FFFF}
 
static const field32spec_t freqGHz32 = {4, 0x00FF0000}
 
static const field32spec_t channelCount32 = {4, 0xFF000000}
 
static const field32spec_t timeStamp32 = {5, 0xFFFFFFFF}
 
static const field32spec_t tTrigPs32 = {6, 0xFFFFFFFF}
 
static const field32spec_t orbitId32 = {7, 0xFFFFFFFF}
 
static const field32spec_t trigRec32 = {11,0xFF000000}
 
static const field32spec_t postTrig32 = {11,0x0000FFFF}
 
static const field32spec_t vernier0_32 = {8, 0x0000FFFF}
 
static const field32spec_t vernier1_32 = {8, 0xFFFF0000}
 
static const field32spec_t vernier2_32 = {9, 0x0000FFFF}
 
static const field32spec_t vernier3_32 = {9, 0xFFFF0000}
 
static const field32spec_t timeStampMicroSec32 = {10,0xFFFFFFFF}
 
static const field32spec_t laserPower32 = {12,0x000000FF}
 
static const field32spec_t attenuation_dB32 = {12,0x00000F00}
 
static const field32spec_t emtcPhase32 = {12,0x0000F000}
 
static const field32spec_t emtcDelay32 = {12,0xFFFF0000}
 
static const field32spec_t delayA32 = {13,0x0000FFFF}
 
static const field32spec_t dccId32 = {13,0x003F0000}
 
static const field32spec_t color32 = {13,0x00600000}
 
static const field32spec_t trigType32 = {13,0x07000000}
 
static const field32spec_t side32 = {13,0x08000000}
 

Detailed Description

Wrapper for matacq raw event fragments. This class provides the method to interpret the data.

Definition at line 30 of file MatacqRawEvent.h.

Member Enumeration Documentation

Enumerator
errorLengthConsistency 

Event length is specified both in the data header and the trailer. This flags indicates an inconsitency between the two indications.

errorLength 

Error in data length.

errorWrongBoe 

Wrong Begin of event flag

Definition at line 33 of file MatacqRawEvent.h.

Constructor & Destructor Documentation

MatacqRawEvent::MatacqRawEvent ( const unsigned char *  dataBuffer,
size_t  bufferSize 
)
inline

Constuctor.

Parameters
dataBufferpointer to the raw data. Beware the data are not copied, therefore the data must be kept valid during the lifetime of the constructed object. pData must be aligned at least on 32-bit words.
bufferSizesize of the buffer pointed by dataBuffer and containing the data. The data themselves are allowed to be smaller than the buffer.
Exceptions
std::exceptionif the data cannot be decoded due to data corruption or truncation.

Definition at line 160 of file MatacqRawEvent.h.

References setRawData().

160  : vernier(std::vector<int>(4)){
161  setRawData(dataBuffer, bufferSize);
162  }
std::vector< int > vernier
void setRawData(const unsigned char *buffer, size_t bufferSize)

Member Function Documentation

int MatacqRawEvent::getAttenuation_dB ( ) const
inline

Logarithmic attenuator setting in -10dB unit. Between 0 and 5*(-10dB), 0xF if unknown.

Definition at line 353 of file MatacqRawEvent.h.

References attenuation_dB.

Referenced by MatacqDataFormatter::interpretRawData().

353 { return attenuation_dB; }
int MatacqRawEvent::getBoe ( ) const
inline

Gets the beging of event field contents (BOE). Must be 0x5.

Returns
BOE

Definition at line 196 of file MatacqRawEvent.h.

References boeType32, daqHeader, and read32().

196 { return read32(daqHeader, boeType32);}
static const field32spec_t boeType32
uint32le_t * daqHeader
static int read32(uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
int MatacqRawEvent::getBxId ( ) const
inline

Gets the bunch crossing id field contents.

Returns
BX id

Definition at line 181 of file MatacqRawEvent.h.

References bxId32, daqHeader, and read32().

Referenced by MatacqDataFormatter::interpretRawData(), and MatacqDataFormatter::printData().

181 { return read32(daqHeader, bxId32);}
uint32le_t * daqHeader
static int read32(uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
static const field32spec_t bxId32
int MatacqRawEvent::getChannelCount ( ) const
inline

Gets the matacq channel count field contents.

Returns
number of channels

Definition at line 279 of file MatacqRawEvent.h.

References channelCount.

Referenced by MatacqDataFormatter::printData().

279 { return /*matacqHeader->*/channelCount;}
const std::vector<ChannelData>& MatacqRawEvent::getChannelData ( ) const
inline

Gets the matacq channel data. Beware that no copy is done and that the returned data will be invalidated if the data contains in the buffer is modified (see constructor and setRawData().

Returns
matacq channel data.

Definition at line 286 of file MatacqRawEvent.h.

References channelData.

Referenced by MatacqDataFormatter::interpretRawData(), and MatacqDataFormatter::printData().

286  {
287  return channelData;
288  }
std::vector< ChannelData > channelData
unsigned MatacqRawEvent::getDaqLen ( ) const
inline

Gets the event length specifies in the DAQ trailer

Returns
event length

Definition at line 241 of file MatacqRawEvent.h.

References fragLen.

241 { return fragLen;}
int MatacqRawEvent::getDccErrors ( ) const
inline

Gets the contents of the DCC error field. Currently Not used for Matacq.

Returns
dcc error

Definition at line 247 of file MatacqRawEvent.h.

References daqHeader, dccErrors32, and read32().

Referenced by MatacqDataFormatter::printData().

247 { return read32(daqHeader, dccErrors32);}
uint32le_t * daqHeader
static int read32(uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
static const field32spec_t dccErrors32
unsigned MatacqRawEvent::getDccLen ( ) const
inline

Gets the event length specifies in the "a la DCC" header.

Returns
event length

Definition at line 201 of file MatacqRawEvent.h.

References daqHeader, dccLen32, and read32().

Referenced by MatacqProducer::addMatacqData(), MatacqProducer::getMatacqEvent(), MatacqProducer::PosEstimator::init(), and MatacqDataFormatter::printData().

201 { return read32(daqHeader, dccLen32);}
uint32le_t * daqHeader
static const field32spec_t dccLen32
static int read32(uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
static unsigned MatacqRawEvent::getDccLen ( unsigned char *  data,
size_t  size 
)
inlinestatic

Gets the event length specifies in the DCC-type header of a matacq event.

Parameters
databuffer. Needs to contains at least the 3 first 32-bit words of the event.
buffersize
Returns
event length, 0xFFFFFFFF if failed to retrieve dcc length

Definition at line 209 of file MatacqRawEvent.h.

References dccLen32, MatacqRawEvent::field32spec_t::offset, and read32().

209  {
210  if(size<(unsigned)(dccLen32.offset+1)*4) return (unsigned)-1;
211  return read32((uint32le_t*) data, dccLen32);
212  }
static const field32spec_t dccLen32
static int read32(uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
tuple size
Write out results.
int MatacqRawEvent::getDelayA ( ) const
inline

"Delay A" setting of laser delay box in ns.

Definition at line 340 of file MatacqRawEvent.h.

References delayA.

Referenced by MatacqDataFormatter::interpretRawData().

340 { return delayA; }
int MatacqRawEvent::getEmtcDelay ( ) const
inline

WTE-to-Laser delay of EMTC in LHC clock unit.

Definition at line 344 of file MatacqRawEvent.h.

References emtcDelay.

Referenced by MatacqDataFormatter::interpretRawData().

344 { return emtcDelay; }
int MatacqRawEvent::getEmtcPhase ( ) const
inline

EMTC laser phase in 1/8th LHC clock unit.

Definition at line 348 of file MatacqRawEvent.h.

References emtcPhase.

Referenced by MatacqDataFormatter::interpretRawData().

348 { return emtcPhase; }
unsigned MatacqRawEvent::getEventId ( ) const
inline

Gets the LV1 field contents.

Returns
LV1 id

Definition at line 186 of file MatacqRawEvent.h.

References daqHeader, lv132, and read32().

Referenced by MatacqDataFormatter::interpretRawData(), and MatacqDataFormatter::printData().

186 { return read32(daqHeader, lv132);}
uint32le_t * daqHeader
static const field32spec_t lv132
static int read32(uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
int MatacqRawEvent::getFedId ( ) const
inline

Gets the FED ID field contents. Should be 655.

Returns
FED ID

Definition at line 176 of file MatacqRawEvent.h.

References daqHeader, fedId32, and read32().

Referenced by MatacqDataFormatter::printData().

176 { return read32(daqHeader, fedId32);}
static const field32spec_t fedId32
uint32le_t * daqHeader
static int read32(uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
int MatacqRawEvent::getFov ( ) const
inline

Gets the Fed event fragment data format (FOV) field content. Currently the FOV is not used for MATACQ. Note that matacq data format has its own internal version. See getMatacqDataFormatVersion()

Returns
FOV

Definition at line 171 of file MatacqRawEvent.h.

References daqHeader, fov32, and read32().

Referenced by MatacqDataFormatter::printData().

171 { return read32(daqHeader, fov32);}
uint32le_t * daqHeader
static const field32spec_t fov32
static int read32(uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
int MatacqRawEvent::getFreqGHz ( ) const
inline

Gets the matacq sampling frequency field contents.

Returns
sampling frequency in GHz: 1 or 2

Definition at line 274 of file MatacqRawEvent.h.

References freqGHz.

Referenced by MatacqDataFormatter::interpretRawData(), and MatacqDataFormatter::printData().

274 { return /*matacqHeader->*/freqGHz;}
int MatacqRawEvent::getH1Marker ( ) const
inline

Gets the header marker field contents. Must be 1

Returns
H1 header marker

Definition at line 257 of file MatacqRawEvent.h.

References daqHeader, h1Marker32, and read32().

257 { return read32(daqHeader, h1Marker32);}
uint32le_t * daqHeader
static int read32(uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
static const field32spec_t h1Marker32
int MatacqRawEvent::getLaserPower ( ) const
inline

Laser power in percents (set with the linear attenuator).

Definition at line 357 of file MatacqRawEvent.h.

References laserPower.

Referenced by MatacqDataFormatter::interpretRawData().

357 { return laserPower; }
int MatacqRawEvent::getMatacqDataFormatVersion ( ) const
inline

Gets the matcq data format version

Returns
data version

Definition at line 263 of file MatacqRawEvent.h.

References matacqDataFormatVersion.

Referenced by MatacqDataFormatter::interpretRawData(), and MatacqDataFormatter::printData().

263 { return matacqDataFormatVersion;}
static unsigned MatacqRawEvent::getOrbitId ( unsigned char *  data,
size_t  size 
)
inlinestatic

Gets the orbit id from the header of a matacq event. Data format of the event must be >=3.

Parameters
databuffer. Needs to contains at least the 8 first 32-bit words of the event.
buffersize
Returns
event length, 0xFFFFFFFF if failed to retrieve dcc length

Definition at line 221 of file MatacqRawEvent.h.

References MatacqRawEvent::field32spec_t::offset, orbitId32, and read32().

Referenced by MatacqProducer::addMatacqData(), and MatacqDataFormatter::interpretRawData().

221  {
222  if(size<(unsigned)(orbitId32.offset+1)*8) return (unsigned)-1;
223  return read32((uint32le_t*) data, orbitId32);
224  }
static int read32(uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
static const field32spec_t orbitId32
tuple size
Write out results.
uint32_t MatacqRawEvent::getOrbitId ( ) const
inline

Gets the LHC orbit ID of the event Available only for Matacq data format version >=3 and for P5 data.

Returns
the LHC orbit ID

Definition at line 320 of file MatacqRawEvent.h.

References orbitId.

Referenced by MatacqProducer::getMatacqEvent(), and MatacqProducer::PosEstimator::init().

320 { return orbitId; }
int MatacqRawEvent::getParsedLen ( )
inline

Gets the data length in number of 64-bit words computed by the data parser.

Returns
event length

Definition at line 294 of file MatacqRawEvent.h.

References parsedLen.

Referenced by MatacqProducer::addMatacqData().

294 { return parsedLen; }
int MatacqRawEvent::getPostTrig ( ) const
inline

Posttrig value (see Matacq documentation). Available only for Matacq data format version >=3.

Definition at line 331 of file MatacqRawEvent.h.

References postTrig.

Referenced by MatacqDataFormatter::interpretRawData().

331 { return postTrig; }
static unsigned MatacqRawEvent::getRunNum ( unsigned char *  data,
size_t  size 
)
inlinestatic

Gets the run number from the header of a matacq event.

Parameters
databuffer. Needs to contains at least the 4 first 32-bit words of the event.
buffersize
Returns
event length, 0xFFFFFFFF if failed to retrieve dcc length

Definition at line 232 of file MatacqRawEvent.h.

References MatacqRawEvent::field32spec_t::offset, read32(), and runNum32.

Referenced by MatacqDataFormatter::printData().

232  {
233  if(size<(unsigned)(runNum32.offset+1)*8) return (unsigned)-1;
234  return read32((uint32le_t*) data, runNum32);
235  }
static const field32spec_t runNum32
static int read32(uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
tuple size
Write out results.
unsigned MatacqRawEvent::getRunNum ( ) const
inline

Gets the run number field contents.

Returns
run number

Definition at line 252 of file MatacqRawEvent.h.

References daqHeader, read32(), and runNum32.

Referenced by MatacqProducer::getMatacqEvent().

252 { return read32(daqHeader, runNum32);}
uint32le_t * daqHeader
static const field32spec_t runNum32
static int read32(uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
int32_t MatacqRawEvent::getStatus ( void  ) const
inline

Gets the raw data status. Bitwise OR of the error flags defined by matcqError_t

Returns
status

Definition at line 269 of file MatacqRawEvent.h.

References error.

Referenced by MatacqDataFormatter::printData().

269 { return error;}
time_t MatacqRawEvent::getTimeStamp ( ) const
inline

Gets the matacq data timestamp field contents:

Returns
acquisition date of the data expressed in number of "elapsed" second since the EPOCH as defined in POSIX.1. See time() standard c function.

Definition at line 301 of file MatacqRawEvent.h.

References timeStamp.

Referenced by MatacqDataFormatter::interpretRawData(), and MatacqDataFormatter::printData().

301 { return /*matacqHeader->*/timeStamp.tv_sec; }
struct timeval timeStamp
void MatacqRawEvent::getTimeStamp ( struct timeval &  t) const
inline

Gets the matacq data timestamp with fine granularity (89.1us)

Returns
acquisition date of the data expressed in number of "elapsed" second and microseconds since the EPOCH as defined in POSIX.1. See time() standard c function and gettimeofday UNIX function.

Definition at line 308 of file MatacqRawEvent.h.

References timeStamp.

308 { t = timeStamp; }
struct timeval timeStamp
int MatacqRawEvent::getTriggerType ( void  ) const
inline

Gets the trigger type field contents.

Returns
trigger type

Definition at line 191 of file MatacqRawEvent.h.

References daqHeader, read32(), and triggerType32.

Referenced by MatacqDataFormatter::interpretRawData(), and MatacqDataFormatter::printData().

191 { return read32(daqHeader, triggerType32);}
uint32le_t * daqHeader
static int read32(uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
static const field32spec_t triggerType32
int MatacqRawEvent::getTrigRec ( ) const
inline

Gets the Trig Rec value (see Matacq documentation) Available only for Matacq data format version >=3.

Returns
the Trig Rec value

Definition at line 326 of file MatacqRawEvent.h.

References trigRec.

Referenced by MatacqDataFormatter::interpretRawData().

326 { return trigRec; }
int MatacqRawEvent::getTTrigPs ( ) const
inline

Gets the Matacq trigger time.

Returns
(t_trig-t_0) in ps, with t_0 the time of the first sample and t_trig the trigger time.

Definition at line 314 of file MatacqRawEvent.h.

References tTrigPs.

Referenced by MatacqDataFormatter::interpretRawData().

314 { return tTrigPs; }
std::vector<int> MatacqRawEvent::getVernier ( ) const
inline

Vernier values (see Matacq documentation) Available only for Matacq data format version >=3.

Definition at line 336 of file MatacqRawEvent.h.

References vernier.

Referenced by MatacqDataFormatter::interpretRawData().

336 { return vernier; }
std::vector< int > vernier
int MatacqRawEvent::read32 ( uint32le_t pData,
field32spec_t  spec,
bool  ovfTrans = false 
)
staticprivate

Help function to decode header content.

Parameters
datapointer
specspecification of the data field to read
ovfTransswitch of overflow translation. If true the MSB of the data field is interpreted as an overflow bit. If it is set, then -1 is returned.
Returns
content of data field specified by 'spec'

Definition at line 204 of file MatacqRawEvent.cc.

References MatacqRawEvent::field32spec_t::mask, MatacqRawEvent::field32spec_t::offset, and query::result.

Referenced by getBoe(), getBxId(), getDccErrors(), getDccLen(), getEventId(), getFedId(), getFov(), getH1Marker(), getOrbitId(), getRunNum(), and getTriggerType().

205  {
206  uint32_t result = pData[spec32.offset] & spec32.mask;
207  uint32_t mask = spec32.mask;
208  while((mask&0x1) == 0){
209  mask >>= 1;
210  result >>= 1;
211  }
212  if(ovfTrans){
213  //overflow bit (MSB) mask:
214  mask = ((mask >>1) + 1);
215  if(result & mask) result = (uint32_t)-1;
216  }
217  return result;
218 }
tuple result
Definition: query.py:137
void MatacqRawEvent::setRawData ( const unsigned char *  buffer,
size_t  bufferSize 
)
private

Help function to get the maximum value of a data field

Parameters
spec32data field specification
Returns
maximum value Changes the raw data pointer and updates accordingly this object.
Parameters
buffernew pointer to the data buffer. Must be aligned at least on 32-bit words.
sizeof the data buffer.
Exceptions
std::exceptionif the data cannot be decoded due to data corruption or truncation.

Definition at line 82 of file MatacqRawEvent.cc.

References begin, error, max(), throwExcept(), and stor::utils::timeStamp().

Referenced by MatacqRawEvent().

82  {
83  error = 0;
84  unsigned char* begin = (unsigned char*) pData;
85  int16le_t* begin16 = (int16le_t*) pData;
86  uint32le_t* begin32 = (uint32le_t*) pData;
87  int16le_t* pData16 = begin16;
88  const int daqHeaderLen = 16; //in bytes
89  if(maxSize < 6*4){
91  return;
92  }
93  pData16 += daqHeaderLen/sizeof(pData16[0]);
94  // matacqHeader = (matacqHeader_t*) pData16;
95  daqHeader = begin32;
97  freqGHz = read32(begin32, freqGHz32);
99  timeStamp.tv_sec = read32(begin32, timeStamp32);
100  int headerLen = 24; //in bytes
102  tTrigPs = read32(begin32, tTrigPs32);
103  headerLen += 4;
104  } else{
106  }
107 
109  orbitId = read32(begin32, orbitId32);
110  vernier[0] = read32(begin32, vernier0_32);
111  vernier[1] = read32(begin32, vernier1_32);
112  vernier[2] = read32(begin32, vernier2_32);
113  vernier[3] = read32(begin32, vernier3_32);
114  timeStamp.tv_usec = read32(begin32, timeStampMicroSec32);
115  trigRec = read32(begin32, trigRec32, true);
116  postTrig = read32(begin32, postTrig32);
117  delayA = read32(begin32, delayA32, true);
118  emtcDelay = read32(begin32, emtcDelay32, true);
119  emtcPhase = read32(begin32, emtcPhase32, true);
120  attenuation_dB = read32(begin32, attenuation_dB32, true);
121  laserPower = read32(begin32, laserPower32, true);
122  headerLen = 64;
123  } else{
124  orbitId = 0;
125  vernier[0] = -1;
126  vernier[1] = -1;
127  vernier[2] = -1;
128  vernier[3] = -1;
129  trigRec = -1;
130  postTrig = -1;
131  delayA = -1;
132  emtcDelay = -1;
133  emtcPhase = -1;
134  attenuation_dB = -1;
135  laserPower = -1;
136  }
137 
138  const int nCh = getChannelCount();
139  channelData.resize(nCh);
140 
141  pData16 = (int16le_t*) (begin+headerLen);
142 
143  for(int iCh=0; iCh<nCh; ++iCh){
144  if((size_t)(pData16-begin16)>maxSize){
145  throwExcept(string("Corrupted or truncated data"));
146  }
147  //channel id:
148  channelData[iCh].chId = *(pData16++);
149  //number of time samples for this channel:
150  channelData[iCh].nSamples = *(pData16++);
151  //pointer to time sample data of this channel:
152  channelData[iCh].samples = pData16;
153  //moves to next channel data block:
154  if(channelData[iCh].nSamples<0){
155  throwExcept(string("Corrupted or truncated data"));
156  }
157  pData16 += channelData[iCh].nSamples;
158  }
159 
160  //data trailer chekes:
161  //FED header is aligned on 64-bit=>padding to skip
162  int padding = (4-(pData16-begin16))%4;
163  if(padding<0) padding+=4;
164  pData16 += padding;
165  if((size_t)(pData16-begin16)>maxSize){
166  throwExcept(string("Corrupted or truncated data"));
167  }
168  uint32le_t* trailer32 = (uint32le_t*)(pData16);
169  fragLen = trailer32[1]&0xFFFFFF;
170 
171  //cout << "Event fragment length including headers: " << fragLen
172  // << " 64-bit words\n";
173 
174  //FIXME: I am expecting the event length specifies in the header to
175  //include the header, while it is not the case in current TB 2006 data
176  const int nHeaders = 3;
177  if(fragLen!=read32(begin32,dccLen32)+nHeaders
178  && fragLen != read32(begin32,dccLen32)){
179  //cout << "Error: fragment length is not consistent with DCC "
180  // "length\n";
182  }
183 
184  //skip trailers
185  const int trailerLen = 4;
186  pData16 += trailerLen;
187 
188  parsedLen = (pData16-begin16) / 4;
189 
190  if((pData16-begin16)!=(4*fragLen)){
191  error |= errorLength;
192  }
193 
194  if((size_t)(pData16-begin16)>maxSize){
195  throwExcept(string("Corrupted or truncated data"));
196  }
197 
198  //some checks
199  if(getBoe()!=0x5){
200  error |= errorWrongBoe;
201  }
202 }
static const field32spec_t vernier1_32
uint32le_t * daqHeader
static const field32spec_t timeStamp32
static const field32spec_t tTrigPs32
std::vector< int > vernier
static const field32spec_t channelCount32
static const field32spec_t emtcPhase32
static const field32spec_t dccLen32
static const field32spec_t attenuation_dB32
int getChannelCount() const
const T & max(const T &a, const T &b)
tuple maxSize
&#39;/store/data/Commissioning08/BeamHalo/RECO/StuffAlmostToP5_v1/000/061/642/10A0FE34-A67D-DD11-AD05-000...
static const field32spec_t vernier0_32
static const field32spec_t vernier3_32
static const field32spec_t postTrig32
static int read32(uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
static const field32spec_t timeStampMicroSec32
static const field32spec_t trigRec32
static const field32spec_t vernier2_32
static const field32spec_t emtcDelay32
int getBoe() const
#define begin
Definition: vmac.h:31
static const field32spec_t delayA32
struct timeval timeStamp
static const field32spec_t orbitId32
std::vector< ChannelData > channelData
static const field32spec_t formatVersion32
static const field32spec_t freqGHz32
static const field32spec_t laserPower32
static void throwExcept(const std::string &s)

Member Data Documentation

int MatacqRawEvent::attenuation_dB
private

Logarithmic attenuator setting in -10dB unit. Between 0 and 5*(-10dB), 0xF if unknown.

Definition at line 506 of file MatacqRawEvent.h.

Referenced by getAttenuation_dB().

const MatacqRawEvent::field32spec_t MatacqRawEvent::attenuation_dB32 = {12,0x00000F00}
staticprivate

Definition at line 138 of file MatacqRawEvent.h.

int MatacqRawEvent::boe
private

Begin Of Event marker

Definition at line 389 of file MatacqRawEvent.h.

const MatacqRawEvent::field32spec_t MatacqRawEvent::boeType32 = {1, 0xF0000000}
staticprivate

Definition at line 113 of file MatacqRawEvent.h.

Referenced by getBoe().

int MatacqRawEvent::bxId
private

Bunch crossing Id

Definition at line 393 of file MatacqRawEvent.h.

const MatacqRawEvent::field32spec_t MatacqRawEvent::bxId32 = {0, 0xFFF00000}
staticprivate

Definition at line 110 of file MatacqRawEvent.h.

Referenced by getBxId().

int MatacqRawEvent::channelCount
private

Number of matacq channels in the data.

Definition at line 397 of file MatacqRawEvent.h.

Referenced by getChannelCount().

const MatacqRawEvent::field32spec_t MatacqRawEvent::channelCount32 = {4, 0xFF000000}
staticprivate

Definition at line 125 of file MatacqRawEvent.h.

std::vector<ChannelData> MatacqRawEvent::channelData
private

Channel samples

Definition at line 401 of file MatacqRawEvent.h.

Referenced by getChannelData().

const MatacqRawEvent::field32spec_t MatacqRawEvent::color32 = {13,0x00600000}
staticprivate

Definition at line 143 of file MatacqRawEvent.h.

uint32le_t* MatacqRawEvent::daqHeader
private

Pointer to the standard CMS DAQ header

Definition at line 405 of file MatacqRawEvent.h.

Referenced by getBoe(), getBxId(), getDccErrors(), getDccLen(), getEventId(), getFedId(), getFov(), getH1Marker(), getRunNum(), and getTriggerType().

int MatacqRawEvent::dccErrors
private

DCC error field content.

Definition at line 409 of file MatacqRawEvent.h.

const MatacqRawEvent::field32spec_t MatacqRawEvent::dccErrors32 = {2, 0xFF000000}
staticprivate

Definition at line 115 of file MatacqRawEvent.h.

Referenced by getDccErrors().

const MatacqRawEvent::field32spec_t MatacqRawEvent::dccId32 = {13,0x003F0000}
staticprivate

Definition at line 142 of file MatacqRawEvent.h.

unsigned MatacqRawEvent::dccLen
private

Event length specified in 'DCC' header

Definition at line 413 of file MatacqRawEvent.h.

const MatacqRawEvent::field32spec_t MatacqRawEvent::dccLen32 = {2, 0x00FFFFFF}
staticprivate

Definition at line 114 of file MatacqRawEvent.h.

Referenced by getDccLen().

int MatacqRawEvent::delayA
private

"Delay A" setting of laser delay box in ns.

Definition at line 493 of file MatacqRawEvent.h.

Referenced by getDelayA().

const MatacqRawEvent::field32spec_t MatacqRawEvent::delayA32 = {13,0x0000FFFF}
staticprivate

Definition at line 141 of file MatacqRawEvent.h.

int MatacqRawEvent::emtcDelay
private

WTE-to-Laser delay of EMTC in LHC clock unit.

Definition at line 497 of file MatacqRawEvent.h.

Referenced by getEmtcDelay().

const MatacqRawEvent::field32spec_t MatacqRawEvent::emtcDelay32 = {12,0xFFFF0000}
staticprivate

Definition at line 140 of file MatacqRawEvent.h.

int MatacqRawEvent::emtcPhase
private

EMTC laser phase in 1/8th LHC clock unit.

Definition at line 501 of file MatacqRawEvent.h.

Referenced by getEmtcPhase().

const MatacqRawEvent::field32spec_t MatacqRawEvent::emtcPhase32 = {12,0x0000F000}
staticprivate

Definition at line 139 of file MatacqRawEvent.h.

int32_t MatacqRawEvent::error
private
unsigned MatacqRawEvent::eventId
private

Event id. Actually LV1 ID.

Definition at line 417 of file MatacqRawEvent.h.

int MatacqRawEvent::fedId
private

FED ID

Definition at line 425 of file MatacqRawEvent.h.

const MatacqRawEvent::field32spec_t MatacqRawEvent::fedId32 = {0, 0x000FFF00}
staticprivate

Definition at line 109 of file MatacqRawEvent.h.

Referenced by getFedId().

const MatacqRawEvent::field32spec_t MatacqRawEvent::formatVersion32 = {4, 0x0000FFFF}
staticprivate

Matacq header field specifications.

Definition at line 123 of file MatacqRawEvent.h.

int MatacqRawEvent::fov
private

FED data format version

Definition at line 429 of file MatacqRawEvent.h.

const MatacqRawEvent::field32spec_t MatacqRawEvent::fov32 = {0, 0x000000F0}
staticprivate

DAQ header field specifications.

Definition at line 108 of file MatacqRawEvent.h.

Referenced by getFov().

int MatacqRawEvent::fragLen
private

event fragment length as read in the std DAQ trailer. In 64-bit words

Definition at line 433 of file MatacqRawEvent.h.

Referenced by getDaqLen().

int MatacqRawEvent::freqGHz
private

MATACQ sampling frequency in GHz

Definition at line 437 of file MatacqRawEvent.h.

Referenced by getFreqGHz().

const MatacqRawEvent::field32spec_t MatacqRawEvent::freqGHz32 = {4, 0x00FF0000}
staticprivate

Definition at line 124 of file MatacqRawEvent.h.

int MatacqRawEvent::h1Marker
private

header marker

Definition at line 441 of file MatacqRawEvent.h.

const MatacqRawEvent::field32spec_t MatacqRawEvent::h1Marker32 = {3, 0x3F000000}
staticprivate

Definition at line 117 of file MatacqRawEvent.h.

Referenced by getH1Marker().

int MatacqRawEvent::laserPower
private

Laser power in percents (set with the linear attenuator).

Definition at line 510 of file MatacqRawEvent.h.

Referenced by getLaserPower().

const MatacqRawEvent::field32spec_t MatacqRawEvent::laserPower32 = {12,0x000000FF}
staticprivate

Definition at line 137 of file MatacqRawEvent.h.

const MatacqRawEvent::field32spec_t MatacqRawEvent::lv132 = {1, 0x00FFFFFF}
staticprivate

Definition at line 111 of file MatacqRawEvent.h.

Referenced by getEventId().

int MatacqRawEvent::matacqDataFormatVersion
private

Matacq header:MATACQ data format internal version

Definition at line 449 of file MatacqRawEvent.h.

Referenced by getMatacqDataFormatVersion().

uint32_t MatacqRawEvent::orbitId
private

Definition at line 477 of file MatacqRawEvent.h.

Referenced by getOrbitId().

const MatacqRawEvent::field32spec_t MatacqRawEvent::orbitId32 = {7, 0xFFFFFFFF}
staticprivate

Definition at line 128 of file MatacqRawEvent.h.

Referenced by getOrbitId().

int MatacqRawEvent::parsedLen
private

event lenght computed by the raw data parser

Definition at line 453 of file MatacqRawEvent.h.

Referenced by getParsedLen().

int MatacqRawEvent::postTrig
private

Posttrig value (see Matacq documentation)

Definition at line 485 of file MatacqRawEvent.h.

Referenced by getPostTrig().

const MatacqRawEvent::field32spec_t MatacqRawEvent::postTrig32 = {11,0x0000FFFF}
staticprivate

Definition at line 130 of file MatacqRawEvent.h.

uint16le_t* MatacqRawEvent::pSamples
private

Pointer to MATACQ samples block

Definition at line 457 of file MatacqRawEvent.h.

unsigned MatacqRawEvent::runNum
private

Run number

Definition at line 461 of file MatacqRawEvent.h.

const MatacqRawEvent::field32spec_t MatacqRawEvent::runNum32 = {3, 0x00FFFFFF}
staticprivate

Definition at line 116 of file MatacqRawEvent.h.

Referenced by getRunNum().

const MatacqRawEvent::field32spec_t MatacqRawEvent::side32 = {13,0x08000000}
staticprivate

Definition at line 145 of file MatacqRawEvent.h.

struct timeval MatacqRawEvent::timeStamp
private

Matacq acquisition time stamp

Definition at line 465 of file MatacqRawEvent.h.

Referenced by getTimeStamp().

const MatacqRawEvent::field32spec_t MatacqRawEvent::timeStamp32 = {5, 0xFFFFFFFF}
staticprivate

Definition at line 126 of file MatacqRawEvent.h.

const MatacqRawEvent::field32spec_t MatacqRawEvent::timeStampMicroSec32 = {10,0xFFFFFFFF}
staticprivate

Definition at line 135 of file MatacqRawEvent.h.

int MatacqRawEvent::triggerType
private

Trigger type

Definition at line 473 of file MatacqRawEvent.h.

const MatacqRawEvent::field32spec_t MatacqRawEvent::triggerType32 = {1, 0x0F000000}
staticprivate

Definition at line 112 of file MatacqRawEvent.h.

Referenced by getTriggerType().

int MatacqRawEvent::trigRec
private

Trig Rec value (see Matacq documentation)

Definition at line 481 of file MatacqRawEvent.h.

Referenced by getTrigRec().

const MatacqRawEvent::field32spec_t MatacqRawEvent::trigRec32 = {11,0xFF000000}
staticprivate

Definition at line 129 of file MatacqRawEvent.h.

const MatacqRawEvent::field32spec_t MatacqRawEvent::trigType32 = {13,0x07000000}
staticprivate

Definition at line 144 of file MatacqRawEvent.h.

int MatacqRawEvent::tTrigPs
private

MATACQ trigger time position in ps

Definition at line 469 of file MatacqRawEvent.h.

Referenced by getTTrigPs().

const MatacqRawEvent::field32spec_t MatacqRawEvent::tTrigPs32 = {6, 0xFFFFFFFF}
staticprivate

Definition at line 127 of file MatacqRawEvent.h.

std::vector<int> MatacqRawEvent::vernier
private

Vernier values (see Matacq documentation)

Definition at line 489 of file MatacqRawEvent.h.

Referenced by getVernier().

const MatacqRawEvent::field32spec_t MatacqRawEvent::vernier0_32 = {8, 0x0000FFFF}
staticprivate

Definition at line 131 of file MatacqRawEvent.h.

const MatacqRawEvent::field32spec_t MatacqRawEvent::vernier1_32 = {8, 0xFFFF0000}
staticprivate

Definition at line 132 of file MatacqRawEvent.h.

const MatacqRawEvent::field32spec_t MatacqRawEvent::vernier2_32 = {9, 0x0000FFFF}
staticprivate

Definition at line 133 of file MatacqRawEvent.h.

const MatacqRawEvent::field32spec_t MatacqRawEvent::vernier3_32 = {9, 0xFFFF0000}
staticprivate

Definition at line 134 of file MatacqRawEvent.h.