CMS 3D CMS Logo

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 (const uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
 

Private Attributes

int attenuation_dB
 
int boe
 
int bxId
 
int channelCount
 
std::vector< ChannelDatachannelData
 
const 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 29 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 32 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 159 of file MatacqRawEvent.h.

References setRawData().

159  : vernier(std::vector<int>(4)){
160  setRawData(dataBuffer, bufferSize);
161  }
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 352 of file MatacqRawEvent.h.

References attenuation_dB.

Referenced by MatacqDataFormatter::interpretRawData().

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

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

Returns
BOE

Definition at line 195 of file MatacqRawEvent.h.

References daqHeader, and read32().

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

Gets the bunch crossing id field contents.

Returns
BX id

Definition at line 180 of file MatacqRawEvent.h.

References daqHeader, and read32().

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

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

Gets the matacq channel count field contents.

Returns
number of channels

Definition at line 278 of file MatacqRawEvent.h.

References channelCount.

Referenced by MatacqDataFormatter::printData().

278 { 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 285 of file MatacqRawEvent.h.

References channelData.

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

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

Gets the event length specifies in the DAQ trailer

Returns
event length

Definition at line 240 of file MatacqRawEvent.h.

References fragLen.

240 { 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 246 of file MatacqRawEvent.h.

References daqHeader, and read32().

Referenced by MatacqDataFormatter::printData().

246 { return read32(daqHeader, dccErrors32);}
static int read32(const uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
const uint32le_t * daqHeader
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 200 of file MatacqRawEvent.h.

References daqHeader, and read32().

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

200 { return read32(daqHeader, dccLen32);}
static int read32(const uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
const uint32le_t * daqHeader
static const field32spec_t dccLen32
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 208 of file MatacqRawEvent.h.

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

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

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

Definition at line 339 of file MatacqRawEvent.h.

References delayA.

Referenced by MatacqDataFormatter::interpretRawData().

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

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

Definition at line 343 of file MatacqRawEvent.h.

References emtcDelay.

Referenced by MatacqDataFormatter::interpretRawData().

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

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

Definition at line 347 of file MatacqRawEvent.h.

References emtcPhase.

Referenced by MatacqDataFormatter::interpretRawData().

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

Gets the LV1 field contents.

Returns
LV1 id

Definition at line 185 of file MatacqRawEvent.h.

References daqHeader, and read32().

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

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

Gets the FED ID field contents. Should be 655.

Returns
FED ID

Definition at line 175 of file MatacqRawEvent.h.

References daqHeader, and read32().

Referenced by MatacqDataFormatter::printData().

175 { return read32(daqHeader, fedId32);}
static const field32spec_t fedId32
static int read32(const uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
const uint32le_t * daqHeader
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 170 of file MatacqRawEvent.h.

References daqHeader, and read32().

Referenced by MatacqDataFormatter::printData().

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

Gets the matacq sampling frequency field contents.

Returns
sampling frequency in GHz: 1 or 2

Definition at line 273 of file MatacqRawEvent.h.

References freqGHz.

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

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

Gets the header marker field contents. Must be 1

Returns
H1 header marker

Definition at line 256 of file MatacqRawEvent.h.

References daqHeader, and read32().

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

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

Definition at line 356 of file MatacqRawEvent.h.

References edmScanValgrind::buffer, laserPower, read32(), and setRawData().

Referenced by MatacqDataFormatter::interpretRawData().

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

Gets the matcq data format version

Returns
data version

Definition at line 262 of file MatacqRawEvent.h.

References matacqDataFormatVersion.

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

262 { 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 220 of file MatacqRawEvent.h.

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

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

220  {
221  if(size<(unsigned)(orbitId32.offset+1)*8) return (unsigned)-1;
222  return read32((uint32le_t*) data, orbitId32);
223  }
size
Write out results.
static int read32(const uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
static const field32spec_t orbitId32
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 319 of file MatacqRawEvent.h.

References orbitId.

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

319 { 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 293 of file MatacqRawEvent.h.

References parsedLen.

Referenced by MatacqProducer::addMatacqData().

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

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

Definition at line 330 of file MatacqRawEvent.h.

References postTrig.

Referenced by MatacqDataFormatter::interpretRawData().

330 { 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 231 of file MatacqRawEvent.h.

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

Referenced by MatacqDataFormatter::printData().

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

Gets the run number field contents.

Returns
run number

Definition at line 251 of file MatacqRawEvent.h.

References daqHeader, and read32().

Referenced by MatacqProducer::getMatacqEvent().

251 { return read32(daqHeader, runNum32);}
static int read32(const uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
static const field32spec_t runNum32
const uint32le_t * daqHeader
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 268 of file MatacqRawEvent.h.

References error.

Referenced by MatacqDataFormatter::printData().

268 { 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 300 of file MatacqRawEvent.h.

References timeStamp.

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

300 { 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 307 of file MatacqRawEvent.h.

References timeStamp.

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

Gets the trigger type field contents.

Returns
trigger type

Definition at line 190 of file MatacqRawEvent.h.

References daqHeader, and read32().

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

190 { return read32(daqHeader, triggerType32);}
static int read32(const uint32le_t *pData, field32spec_t spec, bool ovfTrans=false)
const uint32le_t * daqHeader
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 325 of file MatacqRawEvent.h.

References trigRec.

Referenced by MatacqDataFormatter::interpretRawData().

325 { 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 313 of file MatacqRawEvent.h.

References tTrigPs.

Referenced by MatacqDataFormatter::interpretRawData().

313 { 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 335 of file MatacqRawEvent.h.

References vernier.

Referenced by MatacqDataFormatter::interpretRawData().

335 { return vernier; }
std::vector< int > vernier
int MatacqRawEvent::read32 ( const 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 199 of file MatacqRawEvent.cc.

References RecoTauDiscriminantConfiguration::mask, MatacqRawEvent::field32spec_t::mask, MatacqRawEvent::field32spec_t::offset, and mps_fire::result.

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

200  {
201  uint32_t result = pData[spec32.offset] & spec32.mask;
202  uint32_t mask = spec32.mask;
203  while((mask&0x1) == 0){
204  mask >>= 1;
205  result >>= 1;
206  }
207  if(ovfTrans){
208  //overflow bit (MSB) mask:
209  mask = ((mask >>1) + 1);
210  if(result & mask) result = (uint32_t)-1;
211  }
212  return result;
213 }
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 81 of file MatacqRawEvent.cc.

References relativeConstraints::error, hpstanc_transforms::max, hgc_digi::nSamples, and throwExcept().

Referenced by getLaserPower(), and MatacqRawEvent().

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

Referenced by getAttenuation_dB().

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

Definition at line 137 of file MatacqRawEvent.h.

Referenced by throwExcept().

int MatacqRawEvent::boe
private

Begin Of Event marker

Definition at line 388 of file MatacqRawEvent.h.

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

Definition at line 112 of file MatacqRawEvent.h.

Referenced by throwExcept().

int MatacqRawEvent::bxId
private

Bunch crossing Id

Definition at line 392 of file MatacqRawEvent.h.

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

Definition at line 109 of file MatacqRawEvent.h.

Referenced by throwExcept().

int MatacqRawEvent::channelCount
private

Number of matacq channels in the data.

Definition at line 396 of file MatacqRawEvent.h.

Referenced by getChannelCount().

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

Definition at line 124 of file MatacqRawEvent.h.

Referenced by throwExcept().

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

Channel samples

Definition at line 400 of file MatacqRawEvent.h.

Referenced by getChannelData().

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

Definition at line 142 of file MatacqRawEvent.h.

Referenced by throwExcept().

const uint32le_t* MatacqRawEvent::daqHeader
private

Pointer to the standard CMS DAQ header

Definition at line 404 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 408 of file MatacqRawEvent.h.

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

Definition at line 114 of file MatacqRawEvent.h.

Referenced by throwExcept().

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

Definition at line 141 of file MatacqRawEvent.h.

Referenced by throwExcept().

unsigned MatacqRawEvent::dccLen
private

Event length specified in 'DCC' header

Definition at line 412 of file MatacqRawEvent.h.

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

Definition at line 113 of file MatacqRawEvent.h.

Referenced by throwExcept().

int MatacqRawEvent::delayA
private

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

Definition at line 492 of file MatacqRawEvent.h.

Referenced by getDelayA().

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

Definition at line 140 of file MatacqRawEvent.h.

Referenced by throwExcept().

int MatacqRawEvent::emtcDelay
private

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

Definition at line 496 of file MatacqRawEvent.h.

Referenced by getEmtcDelay().

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

Definition at line 139 of file MatacqRawEvent.h.

Referenced by throwExcept().

int MatacqRawEvent::emtcPhase
private

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

Definition at line 500 of file MatacqRawEvent.h.

Referenced by getEmtcPhase().

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

Definition at line 138 of file MatacqRawEvent.h.

Referenced by throwExcept().

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

Event id. Actually LV1 ID.

Definition at line 416 of file MatacqRawEvent.h.

Referenced by ntupleDataFormat.Event::eventIdStr().

int MatacqRawEvent::fedId
private

FED ID

Definition at line 424 of file MatacqRawEvent.h.

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

Definition at line 108 of file MatacqRawEvent.h.

Referenced by throwExcept().

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

Matacq header field specifications.

Definition at line 122 of file MatacqRawEvent.h.

Referenced by throwExcept().

int MatacqRawEvent::fov
private

FED data format version

Definition at line 428 of file MatacqRawEvent.h.

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

DAQ header field specifications.

Definition at line 107 of file MatacqRawEvent.h.

Referenced by throwExcept().

int MatacqRawEvent::fragLen
private

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

Definition at line 432 of file MatacqRawEvent.h.

Referenced by getDaqLen().

int MatacqRawEvent::freqGHz
private

MATACQ sampling frequency in GHz

Definition at line 436 of file MatacqRawEvent.h.

Referenced by getFreqGHz().

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

Definition at line 123 of file MatacqRawEvent.h.

Referenced by throwExcept().

int MatacqRawEvent::h1Marker
private

header marker

Definition at line 440 of file MatacqRawEvent.h.

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

Definition at line 116 of file MatacqRawEvent.h.

Referenced by throwExcept().

int MatacqRawEvent::laserPower
private

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

Definition at line 509 of file MatacqRawEvent.h.

Referenced by getLaserPower().

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

Definition at line 136 of file MatacqRawEvent.h.

Referenced by throwExcept().

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

Definition at line 110 of file MatacqRawEvent.h.

Referenced by throwExcept().

int MatacqRawEvent::matacqDataFormatVersion
private

Matacq header:MATACQ data format internal version

Definition at line 448 of file MatacqRawEvent.h.

Referenced by getMatacqDataFormatVersion().

uint32_t MatacqRawEvent::orbitId
private

Definition at line 476 of file MatacqRawEvent.h.

Referenced by getOrbitId().

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

Definition at line 127 of file MatacqRawEvent.h.

Referenced by throwExcept().

int MatacqRawEvent::parsedLen
private

event lenght computed by the raw data parser

Definition at line 452 of file MatacqRawEvent.h.

Referenced by getParsedLen().

int MatacqRawEvent::postTrig
private

Posttrig value (see Matacq documentation)

Definition at line 484 of file MatacqRawEvent.h.

Referenced by getPostTrig().

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

Definition at line 129 of file MatacqRawEvent.h.

Referenced by throwExcept().

uint16le_t* MatacqRawEvent::pSamples
private

Pointer to MATACQ samples block

Definition at line 456 of file MatacqRawEvent.h.

unsigned MatacqRawEvent::runNum
private

Run number

Definition at line 460 of file MatacqRawEvent.h.

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

Definition at line 115 of file MatacqRawEvent.h.

Referenced by throwExcept().

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

Definition at line 144 of file MatacqRawEvent.h.

Referenced by throwExcept().

struct timeval MatacqRawEvent::timeStamp
private

Matacq acquisition time stamp

Definition at line 464 of file MatacqRawEvent.h.

Referenced by getTimeStamp().

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

Definition at line 125 of file MatacqRawEvent.h.

Referenced by throwExcept().

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

Definition at line 134 of file MatacqRawEvent.h.

Referenced by throwExcept().

int MatacqRawEvent::triggerType
private

Trigger type

Definition at line 472 of file MatacqRawEvent.h.

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

Definition at line 111 of file MatacqRawEvent.h.

Referenced by throwExcept().

int MatacqRawEvent::trigRec
private

Trig Rec value (see Matacq documentation)

Definition at line 480 of file MatacqRawEvent.h.

Referenced by getTrigRec().

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

Definition at line 128 of file MatacqRawEvent.h.

Referenced by throwExcept().

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

Definition at line 143 of file MatacqRawEvent.h.

Referenced by throwExcept().

int MatacqRawEvent::tTrigPs
private

MATACQ trigger time position in ps

Definition at line 468 of file MatacqRawEvent.h.

Referenced by getTTrigPs().

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

Definition at line 126 of file MatacqRawEvent.h.

Referenced by throwExcept().

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

Vernier values (see Matacq documentation)

Definition at line 488 of file MatacqRawEvent.h.

Referenced by getVernier().

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

Definition at line 130 of file MatacqRawEvent.h.

Referenced by throwExcept().

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

Definition at line 131 of file MatacqRawEvent.h.

Referenced by throwExcept().

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

Definition at line 132 of file MatacqRawEvent.h.

Referenced by throwExcept().

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

Definition at line 133 of file MatacqRawEvent.h.

Referenced by throwExcept().