CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes
sistrip::FEDBufferBase Class Reference

#include <SiStripFEDBufferComponents.h>

Inheritance diagram for sistrip::FEDBufferBase:
sistrip::FEDBuffer sistrip::FEDSpyBuffer

Public Member Functions

uint8_t apveAddress () const
 
FEDBufferFormat bufferFormat () const
 
size_t bufferSize () const
 
uint16_t calcCRC () const
 
const FEDChannelchannel (const uint8_t internalFEDChannelNum) const
 
const FEDChannelchannel (const uint8_t internalFEUnitNum, const uint8_t internalChannelNum) const
 
virtual bool channelGood (const uint8_t internalFEDChannelNum) const
 
bool channelGood (const uint8_t internalFEUnitNum, const uint8_t internalChannelNum) const
 
bool checkAPVEAddressValid () const
 
bool checkBufferFormat () const
 
bool checkCRC () const
 
bool checkHeaderType () const
 
bool checkLengthFromTrailer () const
 
bool checkMajorityAddresses () const
 
bool checkNoExtraHeadersOrTrailers () const
 
bool checkNoFEOverflows () const
 
bool checkNoSlinkCRCError () const
 
bool checkNoSLinkTransmissionError () const
 
bool checkNoUnexpectedSourceID () const
 
bool checkReadoutMode () const
 
bool checkSourceIDs () const
 
virtual std::string checkSummary () const
 
uint16_t daqBXID () const
 
uint16_t daqCRC () const
 
uint32_t daqEventLengthIn64bitWords () const
 
uint32_t daqEventLengthInBytes () const
 
FEDDAQEventType daqEventType () const
 
FEDDAQHeader daqHeader () const
 
uint32_t daqLvl1ID () const
 
uint16_t daqSourceID () const
 
FEDDAQTrailer daqTrailer () const
 
FEDTTSBits daqTTSState () const
 
FEDDataType dataType () const
 
virtual bool doChecks () const
 
bool doDAQHeaderAndTrailerChecks () const
 
bool doTrackerSpecialHeaderChecks () const
 
void dump (std::ostream &os) const
 
void dumpOriginalBuffer (std::ostream &os) const
 
 FEDBufferBase (const uint8_t *fedBuffer, const size_t fedBufferSize, const bool allowUnrecognizedFormat=false)
 
FEDStatusRegister fedStatusRegister () const
 
bool feEnabled (const uint8_t internalFEUnitNum) const
 
bool feOverflow (const uint8_t internalFEUnitNum) const
 
FEDHeaderType headerType () const
 
bool majorityAddressErrorForFEUnit (const uint8_t internalFEUnitNum) const
 
uint8_t nFEUnitsEnabled () const
 
virtual void print (std::ostream &os) const
 
FEDReadoutMode readoutMode () const
 
uint16_t sourceID () const
 
TrackerSpecialHeader trackerSpecialHeader () const
 
virtual ~FEDBufferBase ()
 

Protected Member Functions

 FEDBufferBase (const uint8_t *fedBuffer, const size_t fedBufferSize, const bool allowUnrecognizedFormat, const bool fillChannelVector)
 
const uint8_t * getPointerToByteAfterEndOfPayload () const
 
const uint8_t * getPointerToDataAfterTrackerSpecialHeader () const
 

Protected Attributes

std::vector< FEDChannelchannels_
 

Private Member Functions

void init (const uint8_t *fedBuffer, const size_t fedBufferSize, const bool allowUnrecognizedFormat)
 

Private Attributes

const size_t bufferSize_
 
FEDDAQHeader daqHeader_
 
FEDDAQTrailer daqTrailer_
 
const uint8_t * orderedBuffer_
 
const uint8_t * originalBuffer_
 
TrackerSpecialHeader specialHeader_
 

Detailed Description

Definition at line 536 of file SiStripFEDBufferComponents.h.

Constructor & Destructor Documentation

sistrip::FEDBufferBase::FEDBufferBase ( const uint8_t *  fedBuffer,
const size_t  fedBufferSize,
const bool  allowUnrecognizedFormat = false 
)

Definition at line 1217 of file SiStripFEDBufferComponents.cc.

References init().

1218  : channels_(FEDCH_PER_FED,FEDChannel(NULL,0,0)),
1219  originalBuffer_(fedBuffer),
1220  bufferSize_(fedBufferSize)
1221  {
1222  init(fedBuffer,fedBufferSize,allowUnrecognizedFormat);
1223  }
#define NULL
Definition: scimark2.h:8
std::vector< FEDChannel > channels_
void init(const uint8_t *fedBuffer, const size_t fedBufferSize, const bool allowUnrecognizedFormat)
static const uint16_t FEDCH_PER_FED
sistrip::FEDBufferBase::~FEDBufferBase ( )
virtual

Definition at line 1294 of file SiStripFEDBufferComponents.cc.

References orderedBuffer_, and originalBuffer_.

1295  {
1296  //if the buffer was coppied and swapped then delete the copy
1298  }
sistrip::FEDBufferBase::FEDBufferBase ( const uint8_t *  fedBuffer,
const size_t  fedBufferSize,
const bool  allowUnrecognizedFormat,
const bool  fillChannelVector 
)
protected

Definition at line 1225 of file SiStripFEDBufferComponents.cc.

References channels_, sistrip::FEDCH_PER_FED, init(), and NULL.

1226  : originalBuffer_(fedBuffer),
1227  bufferSize_(fedBufferSize)
1228  {
1229  init(fedBuffer,fedBufferSize,allowUnrecognizedFormat);
1230  if (fillChannelVector) channels_.assign(FEDCH_PER_FED,FEDChannel(NULL,0,0));
1231  }
#define NULL
Definition: scimark2.h:8
std::vector< FEDChannel > channels_
void init(const uint8_t *fedBuffer, const size_t fedBufferSize, const bool allowUnrecognizedFormat)
static const uint16_t FEDCH_PER_FED

Member Function Documentation

uint8_t sistrip::FEDBufferBase::apveAddress ( ) const
inline
FEDBufferFormat sistrip::FEDBufferBase::bufferFormat ( ) const
inline

Definition at line 1415 of file SiStripFEDBufferComponents.h.

References sistrip::TrackerSpecialHeader::bufferFormat(), and specialHeader_.

Referenced by checkBufferFormat(), init(), and print().

1416  {
1417  return specialHeader_.bufferFormat();
1418  }
TrackerSpecialHeader specialHeader_
size_t sistrip::FEDBufferBase::bufferSize ( ) const
inline

Definition at line 1365 of file SiStripFEDBufferComponents.h.

References bufferSize_.

Referenced by checkLengthFromTrailer(), sistrip::FEDSpyBuffer::findChannels(), and print().

1366  {
1367  return bufferSize_;
1368  }
uint16_t sistrip::FEDBufferBase::calcCRC ( ) const
inline

Definition at line 1350 of file SiStripFEDBufferComponents.h.

References bufferSize_, sistrip::calculateFEDBufferCRC(), and orderedBuffer_.

Referenced by checkCRC().

1351  {
1353  }
uint16_t calculateFEDBufferCRC(const uint8_t *buffer, const size_t lengthInBytes)
const FEDChannel & sistrip::FEDBufferBase::channel ( const uint8_t  internalFEDChannelNum) const
inline

Definition at line 1465 of file SiStripFEDBufferComponents.h.

References channels_, and sistrip::internalFEDChannelNum().

Referenced by channel().

1466  {
1468  }
uint8_t internalFEDChannelNum(const uint8_t internalFEUnitNum, const uint8_t internalFEUnitChannelNum)
std::vector< FEDChannel > channels_
const FEDChannel & sistrip::FEDBufferBase::channel ( const uint8_t  internalFEUnitNum,
const uint8_t  internalChannelNum 
) const
inline

Definition at line 1470 of file SiStripFEDBufferComponents.h.

References channel(), and sistrip::internalFEDChannelNum().

1471  {
1472  return channel(internalFEDChannelNum(internalFEUnitNum,internalChannelNum));
1473  }
uint8_t internalFEDChannelNum(const uint8_t internalFEUnitNum, const uint8_t internalFEUnitChannelNum)
const FEDChannel & channel(const uint8_t internalFEDChannelNum) const
bool sistrip::FEDBufferBase::channelGood ( const uint8_t  internalFEDChannelNum) const
virtual

Reimplemented in sistrip::FEDSpyBuffer.

Definition at line 1342 of file SiStripFEDBufferComponents.cc.

References sistrip::FEDCH_PER_FEUNIT, feEnabled(), feOverflow(), and majorityAddressErrorForFEUnit().

Referenced by channelGood().

1343  {
1344  const uint8_t feUnit = internalFEDChannelNum/FEDCH_PER_FEUNIT;
1345  return ( !majorityAddressErrorForFEUnit(feUnit) && feEnabled(feUnit) && !feOverflow(feUnit) );
1346  }
uint8_t internalFEDChannelNum(const uint8_t internalFEUnitNum, const uint8_t internalFEUnitChannelNum)
bool majorityAddressErrorForFEUnit(const uint8_t internalFEUnitNum) const
bool feEnabled(const uint8_t internalFEUnitNum) const
static const uint16_t FEDCH_PER_FEUNIT
bool feOverflow(const uint8_t internalFEUnitNum) const
bool sistrip::FEDBufferBase::channelGood ( const uint8_t  internalFEUnitNum,
const uint8_t  internalChannelNum 
) const
inline

Definition at line 1460 of file SiStripFEDBufferComponents.h.

References channelGood(), and sistrip::internalFEDChannelNum().

1461  {
1462  return channelGood(internalFEDChannelNum(internalFEUnitNum,internalChannelNum));
1463  }
uint8_t internalFEDChannelNum(const uint8_t internalFEUnitNum, const uint8_t internalFEUnitChannelNum)
virtual bool channelGood(const uint8_t internalFEDChannelNum) const
bool sistrip::FEDBufferBase::checkAPVEAddressValid ( ) const
inline

Definition at line 1513 of file SiStripFEDBufferComponents.h.

References sistrip::APV_MAX_ADDRESS, and apveAddress().

1514  {
1515  return (apveAddress() <= APV_MAX_ADDRESS);
1516  }
static const uint8_t APV_MAX_ADDRESS
bool sistrip::FEDBufferBase::checkBufferFormat ( ) const
inline
bool sistrip::FEDBufferBase::checkCRC ( ) const
inline
bool sistrip::FEDBufferBase::checkHeaderType ( ) const
inline
bool sistrip::FEDBufferBase::checkLengthFromTrailer ( ) const
inline

Definition at line 1543 of file SiStripFEDBufferComponents.h.

References bufferSize(), and daqEventLengthInBytes().

Referenced by checkSummary(), and doDAQHeaderAndTrailerChecks().

1544  {
1545  return (bufferSize() == daqEventLengthInBytes());
1546  }
bool sistrip::FEDBufferBase::checkMajorityAddresses ( ) const

Definition at line 1333 of file SiStripFEDBufferComponents.cc.

References feEnabled(), sistrip::FEUNITS_PER_FED, and majorityAddressErrorForFEUnit().

Referenced by checkSummary().

1334  {
1335  for (uint8_t iFE = 0; iFE < FEUNITS_PER_FED; iFE++) {
1336  if (!feEnabled(iFE)) continue;
1337  if (majorityAddressErrorForFEUnit(iFE)) return false;
1338  }
1339  return true;
1340  }
bool majorityAddressErrorForFEUnit(const uint8_t internalFEUnitNum) const
static const uint16_t FEUNITS_PER_FED
bool feEnabled(const uint8_t internalFEUnitNum) const
bool sistrip::FEDBufferBase::checkNoExtraHeadersOrTrailers ( ) const
inline
bool sistrip::FEDBufferBase::checkNoFEOverflows ( ) const
inline
bool sistrip::FEDBufferBase::checkNoSlinkCRCError ( ) const
inline

Definition at line 1523 of file SiStripFEDBufferComponents.h.

References daqTrailer_, and sistrip::FEDDAQTrailer::slinkCRCError().

Referenced by checkCRC(), and checkSummary().

1524  {
1525  return !daqTrailer_.slinkCRCError();
1526  }
bool sistrip::FEDBufferBase::checkNoSLinkTransmissionError ( ) const
inline
bool sistrip::FEDBufferBase::checkNoUnexpectedSourceID ( ) const
inline

Definition at line 1533 of file SiStripFEDBufferComponents.h.

References sistrip::FEDDAQTrailer::badSourceID(), and daqTrailer_.

Referenced by checkSummary(), and doDAQHeaderAndTrailerChecks().

1534  {
1535  return !daqTrailer_.badSourceID();
1536  }
bool sistrip::FEDBufferBase::checkReadoutMode ( ) const
inline
bool sistrip::FEDBufferBase::checkSourceIDs ( ) const

Definition at line 1327 of file SiStripFEDBufferComponents.cc.

References daqSourceID(), sistrip::FED_ID_MAX, and sistrip::FED_ID_MIN.

Referenced by checkSummary(), and doDAQHeaderAndTrailerChecks().

1328  {
1329  return ( (daqSourceID() >= FED_ID_MIN) &&
1330  (daqSourceID() <= FED_ID_MAX) );
1331  }
static const uint16_t FED_ID_MIN
static const uint16_t FED_ID_MAX
std::string sistrip::FEDBufferBase::checkSummary ( ) const
virtual

Reimplemented in sistrip::FEDBuffer.

Definition at line 1353 of file SiStripFEDBufferComponents.cc.

References checkBufferFormat(), checkCRC(), checkHeaderType(), checkLengthFromTrailer(), checkMajorityAddresses(), checkNoExtraHeadersOrTrailers(), checkNoFEOverflows(), checkNoSlinkCRCError(), checkNoSLinkTransmissionError(), checkNoUnexpectedSourceID(), checkReadoutMode(), checkSourceIDs(), feEnabled(), feOverflow(), sistrip::FEUNITS_PER_FED, majorityAddressErrorForFEUnit(), and edmLumisInFiles::summary.

Referenced by sistrip::FEDBuffer::checkSummary(), and sistrip::operator<<().

1354  {
1355  std::ostringstream summary;
1356  summary << "Check buffer type valid: " << ( checkBufferFormat() ? "passed" : "FAILED" ) << std::endl;
1357  summary << "Check header format valid: " << ( checkHeaderType() ? "passed" : "FAILED" ) << std::endl;
1358  summary << "Check readout mode valid: " << ( checkReadoutMode() ? "passed" : "FAILED" ) << std::endl;
1359  //summary << "Check APVe address valid: " << ( checkAPVEAddressValid() ? "passed" : "FAILED" ) << std::endl;
1360  summary << "Check FE unit majority addresses: " << ( checkMajorityAddresses() ? "passed" : "FAILED" ) << std::endl;
1361  if (!checkMajorityAddresses()) {
1362  summary << "FEs with majority address error: ";
1363  unsigned int badFEs = 0;
1364  for (uint8_t iFE = 0; iFE < FEUNITS_PER_FED; iFE++) {
1365  if (!feEnabled(iFE)) continue;
1366  if (majorityAddressErrorForFEUnit(iFE)) {
1367  summary << uint16_t(iFE) << " ";
1368  badFEs++;
1369  }
1370  }
1371  summary << std::endl;
1372  summary << "Number of FE Units with bad addresses: " << badFEs << std::endl;
1373  }
1374  summary << "Check for FE unit buffer overflows: " << ( checkNoFEOverflows() ? "passed" : "FAILED" ) << std::endl;
1375  if (!checkNoFEOverflows()) {
1376  summary << "FEs which overflowed: ";
1377  unsigned int badFEs = 0;
1378  for (uint8_t iFE = 0; iFE < FEUNITS_PER_FED; iFE++) {
1379  if (feOverflow(iFE)) {
1380  summary << uint16_t(iFE) << " ";
1381  badFEs++;
1382  }
1383  }
1384  summary << std::endl;
1385  summary << "Number of FE Units which overflowed: " << badFEs << std::endl;
1386  }
1387  summary << "Check for S-Link CRC errors: " << ( checkNoSlinkCRCError() ? "passed" : "FAILED" ) << std::endl;
1388  summary << "Check for S-Link transmission error: " << ( checkNoSLinkTransmissionError() ? "passed" : "FAILED" ) << std::endl;
1389  summary << "Check CRC: " << ( checkCRC() ? "passed" : "FAILED" ) << std::endl;
1390  summary << "Check source ID is FED ID: " << ( checkSourceIDs() ? "passed" : "FAILED" ) << std::endl;
1391  summary << "Check for unexpected source ID at FRL: " << ( checkNoUnexpectedSourceID() ? "passed" : "FAILED" ) << std::endl;
1392  summary << "Check there are no extra headers or trailers: " << ( checkNoExtraHeadersOrTrailers() ? "passed" : "FAILED" ) << std::endl;
1393  summary << "Check length from trailer: " << ( checkLengthFromTrailer() ? "passed" : "FAILED" ) << std::endl;
1394  return summary.str();
1395  }
bool majorityAddressErrorForFEUnit(const uint8_t internalFEUnitNum) const
static const uint16_t FEUNITS_PER_FED
bool feEnabled(const uint8_t internalFEUnitNum) const
bool feOverflow(const uint8_t internalFEUnitNum) const
uint16_t sistrip::FEDBufferBase::daqBXID ( ) const
inline

Definition at line 1385 of file SiStripFEDBufferComponents.h.

References sistrip::FEDDAQHeader::bxID(), and daqHeader_.

Referenced by print().

1386  {
1387  return daqHeader_.bxID();
1388  }
uint16_t sistrip::FEDBufferBase::daqCRC ( ) const
inline

Definition at line 1405 of file SiStripFEDBufferComponents.h.

References sistrip::FEDDAQTrailer::crc(), and daqTrailer_.

Referenced by checkCRC().

1406  {
1407  return daqTrailer_.crc();
1408  }
uint32_t sistrip::FEDBufferBase::daqEventLengthIn64bitWords ( ) const
inline
uint32_t sistrip::FEDBufferBase::daqEventLengthInBytes ( ) const
inline

Definition at line 1400 of file SiStripFEDBufferComponents.h.

References daqTrailer_, and sistrip::FEDDAQTrailer::eventLengthInBytes().

Referenced by checkLengthFromTrailer(), and print().

1401  {
1403  }
FEDDAQEventType sistrip::FEDBufferBase::daqEventType ( ) const
inline

Definition at line 1375 of file SiStripFEDBufferComponents.h.

References daqHeader_, and sistrip::FEDDAQHeader::eventType().

Referenced by print(), and sistrip::RawToDigiUnpacker::updateEventSummary().

1376  {
1377  return daqHeader_.eventType();
1378  }
FEDDAQEventType eventType() const
FEDDAQHeader sistrip::FEDBufferBase::daqHeader ( ) const
inline

Definition at line 1355 of file SiStripFEDBufferComponents.h.

References daqHeader_.

1356  {
1357  return daqHeader_;
1358  }
uint32_t sistrip::FEDBufferBase::daqLvl1ID ( ) const
inline

Definition at line 1380 of file SiStripFEDBufferComponents.h.

References daqHeader_, and sistrip::FEDDAQHeader::l1ID().

Referenced by print().

1381  {
1382  return daqHeader_.l1ID();
1383  }
uint16_t sistrip::FEDBufferBase::daqSourceID ( ) const
inline

Definition at line 1390 of file SiStripFEDBufferComponents.h.

References daqHeader_, and sistrip::FEDDAQHeader::sourceID().

Referenced by checkSourceIDs(), and print().

1391  {
1392  return daqHeader_.sourceID();
1393  }
FEDDAQTrailer sistrip::FEDBufferBase::daqTrailer ( ) const
inline

Definition at line 1360 of file SiStripFEDBufferComponents.h.

References daqTrailer_.

1361  {
1362  return daqTrailer_;
1363  }
FEDTTSBits sistrip::FEDBufferBase::daqTTSState ( ) const
inline

Definition at line 1410 of file SiStripFEDBufferComponents.h.

References daqTrailer_, and sistrip::FEDDAQTrailer::ttsBits().

Referenced by print().

1411  {
1412  return daqTrailer_.ttsBits();
1413  }
FEDDataType sistrip::FEDBufferBase::dataType ( ) const
inline

Definition at line 1430 of file SiStripFEDBufferComponents.h.

References sistrip::TrackerSpecialHeader::dataType(), and specialHeader_.

Referenced by print().

1431  {
1432  return specialHeader_.dataType();
1433  }
TrackerSpecialHeader specialHeader_
bool sistrip::FEDBufferBase::doChecks ( ) const
virtual
bool sistrip::FEDBufferBase::doDAQHeaderAndTrailerChecks ( ) const
inline
bool sistrip::FEDBufferBase::doTrackerSpecialHeaderChecks ( ) const
inline

Definition at line 1475 of file SiStripFEDBufferComponents.h.

References checkBufferFormat(), checkHeaderType(), checkNoFEOverflows(), and checkReadoutMode().

Referenced by doChecks().

1476  {
1477  return ( checkBufferFormat() &&
1478  checkHeaderType() &&
1479  checkReadoutMode() &&
1480  //checkAPVEAddressValid() &&
1481  checkNoFEOverflows() );
1482  }
void sistrip::FEDBufferBase::dump ( std::ostream &  os) const
inline

Definition at line 1340 of file SiStripFEDBufferComponents.h.

References bufferSize_, orderedBuffer_, and sistrip::printHex().

Referenced by SiStripFEDDumpPlugin::analyze(), and sistrip::FEDSpyBuffer::delayChipGood().

1341  {
1343  }
void printHex(const void *pointer, const size_t length, std::ostream &os)
void sistrip::FEDBufferBase::dumpOriginalBuffer ( std::ostream &  os) const
inline

Definition at line 1345 of file SiStripFEDBufferComponents.h.

References bufferSize_, originalBuffer_, and sistrip::printHex().

1346  {
1348  }
void printHex(const void *pointer, const size_t length, std::ostream &os)
FEDStatusRegister sistrip::FEDBufferBase::fedStatusRegister ( ) const
inline

Definition at line 1455 of file SiStripFEDBufferComponents.h.

References sistrip::TrackerSpecialHeader::fedStatusRegister(), and specialHeader_.

Referenced by sistrip::FEDBuffer::FEDBuffer(), and print().

1456  {
1458  }
FEDStatusRegister fedStatusRegister() const
TrackerSpecialHeader specialHeader_
bool sistrip::FEDBufferBase::feEnabled ( const uint8_t  internalFEUnitNum) const
inline
bool sistrip::FEDBufferBase::feOverflow ( const uint8_t  internalFEUnitNum) const
inline

Definition at line 1450 of file SiStripFEDBufferComponents.h.

References sistrip::TrackerSpecialHeader::feOverflow(), and specialHeader_.

Referenced by channelGood(), checkSummary(), sistrip::FEDBuffer::feGood(), and sistrip::FEDBuffer::feGoodWithoutAPVEmulatorCheck().

1451  {
1452  return specialHeader_.feOverflow(internalFEUnitNum);
1453  }
bool feOverflow(const uint8_t internalFEUnitNum) const
TrackerSpecialHeader specialHeader_
const uint8_t * sistrip::FEDBufferBase::getPointerToByteAfterEndOfPayload ( ) const
inlineprotected

Definition at line 1553 of file SiStripFEDBufferComponents.h.

References bufferSize_, and orderedBuffer_.

Referenced by sistrip::FEDBuffer::FEDBuffer().

1554  {
1555  return orderedBuffer_+bufferSize_-8;
1556  }
const uint8_t * sistrip::FEDBufferBase::getPointerToDataAfterTrackerSpecialHeader ( ) const
inlineprotected

Definition at line 1548 of file SiStripFEDBufferComponents.h.

References orderedBuffer_.

Referenced by sistrip::FEDBuffer::FEDBuffer(), and sistrip::FEDSpyBuffer::globalRunNumber().

1549  {
1550  return orderedBuffer_+16;
1551  }
FEDHeaderType sistrip::FEDBufferBase::headerType ( ) const
inline
void sistrip::FEDBufferBase::init ( const uint8_t *  fedBuffer,
const size_t  fedBufferSize,
const bool  allowUnrecognizedFormat 
)
private

Definition at line 1233 of file SiStripFEDBufferComponents.cc.

References sistrip::BUFFER_FORMAT_INVALID, sistrip::BUFFER_FORMAT_NEW, sistrip::BUFFER_FORMAT_OLD_VME, sistrip::TrackerSpecialHeader::bufferFormat(), bufferFormat(), bufferSize_, daqHeader_, daqTrailer_, Exception, i, orderedBuffer_, originalBuffer_, specialHeader_, and contentValuesCheck::ss.

Referenced by FEDBufferBase().

1234  {
1235  //min buffer length. DAQ header, DAQ trailer, tracker special header.
1236  static const size_t MIN_BUFFER_SIZE = 8+8+8;
1237  //check size is non zero and data pointer is not NULL
1238  if (!originalBuffer_) throw cms::Exception("FEDBuffer") << "Buffer pointer is NULL.";
1239  if (bufferSize_ < MIN_BUFFER_SIZE) {
1240  std::ostringstream ss;
1241  ss << "Buffer is too small. "
1242  << "Min size is " << MIN_BUFFER_SIZE << ". "
1243  << "Buffer size is " << bufferSize_ << ". ";
1244  throw cms::Exception("FEDBuffer") << ss.str();
1245  }
1246 
1247  //construct tracker special header using second 64 bit word
1248  specialHeader_ = TrackerSpecialHeader(originalBuffer_+8);
1249 
1250  //check the buffer format
1252  if (bufferFormat == BUFFER_FORMAT_INVALID && !allowUnrecognizedFormat) {
1253  std::ostringstream ss;
1254  ss << "Buffer format not recognized. "
1255  << "Tracker special header: " << specialHeader_;
1256  throw cms::Exception("FEDBuffer") << ss.str();
1257  }
1258  //swap the buffer words so that the whole buffer is in slink ordering
1259  if ( (bufferFormat == BUFFER_FORMAT_OLD_VME) || (bufferFormat == BUFFER_FORMAT_NEW) ) {
1260  uint8_t* newBuffer = new uint8_t[bufferSize_];
1261  const uint32_t* originalU32 = reinterpret_cast<const uint32_t*>(originalBuffer_);
1262  const size_t sizeU32 = bufferSize_/4;
1263  uint32_t* newU32 = reinterpret_cast<uint32_t*>(newBuffer);
1264  if (bufferFormat == BUFFER_FORMAT_OLD_VME) {
1265  //swap whole buffer
1266  for (size_t i = 0; i < sizeU32; i+=2) {
1267  newU32[i] = originalU32[i+1];
1268  newU32[i+1] = originalU32[i];
1269  }
1270  }
1271  if (bufferFormat == BUFFER_FORMAT_NEW) {
1272  //copy DAQ header
1273  memcpy(newU32,originalU32,8);
1274  //copy DAQ trailer
1275  memcpy(newU32+sizeU32-2,originalU32+sizeU32-2,8);
1276  //swap the payload
1277  for (size_t i = 2; i < sizeU32-2; i+=2) {
1278  newU32[i] = originalU32[i+1];
1279  newU32[i+1] = originalU32[i];
1280  }
1281  }
1282  orderedBuffer_ = newBuffer;
1283  } //if ( (bufferFormat == BUFFER_FORMAT_OLD_VME) || (bufferFormat == BUFFER_FORMAT_NEW) )
1284  else {
1286  }
1287 
1288  //construct header object at begining of buffer
1289  daqHeader_ = FEDDAQHeader(orderedBuffer_);
1290  //construct trailer object using last 64 bit word of buffer
1291  daqTrailer_ = FEDDAQTrailer(orderedBuffer_+bufferSize_-8);
1292  }
int i
Definition: DBlmapReader.cc:9
TrackerSpecialHeader specialHeader_
FEDBufferFormat bufferFormat() const
bool sistrip::FEDBufferBase::majorityAddressErrorForFEUnit ( const uint8_t  internalFEUnitNum) const
inline
uint8_t sistrip::FEDBufferBase::nFEUnitsEnabled ( ) const

Definition at line 1318 of file SiStripFEDBufferComponents.cc.

References feEnabled(), sistrip::FEUNITS_PER_FED, and query::result.

Referenced by print().

1319  {
1320  uint8_t result = 0;
1321  for (uint8_t iFE = 0; iFE < FEUNITS_PER_FED; iFE++) {
1322  if (feEnabled(iFE)) result++;
1323  }
1324  return result;
1325  }
static const uint16_t FEUNITS_PER_FED
tuple result
Definition: query.py:137
bool feEnabled(const uint8_t internalFEUnitNum) const
void sistrip::FEDBufferBase::print ( std::ostream &  os) const
virtual

Reimplemented in sistrip::FEDSpyBuffer, and sistrip::FEDBuffer.

Definition at line 1300 of file SiStripFEDBufferComponents.cc.

References apveAddress(), bufferFormat(), bufferSize(), daqBXID(), daqEventLengthInBytes(), daqEventType(), daqLvl1ID(), daqSourceID(), daqTTSState(), dataType(), fedStatusRegister(), headerType(), nFEUnitsEnabled(), sistrip::FEDStatusRegister::printFlags(), and readoutMode().

Referenced by sistrip::operator<<(), sistrip::FEDBuffer::print(), and sistrip::FEDSpyBuffer::print().

1301  {
1302  os << "buffer format: " << bufferFormat() << std::endl;
1303  os << "Buffer size: " << bufferSize() << " bytes" << std::endl;
1304  os << "Event length from DAQ trailer: " << daqEventLengthInBytes() << " bytes" << std::endl;
1305  os << "Source ID: " << daqSourceID() << std::endl;
1306  os << "Header type: " << headerType() << std::endl;
1307  os << "Readout mode: " << readoutMode() << std::endl;
1308  os << "Data type: " << dataType() << std::endl;
1309  os << "DAQ event type: " << daqEventType() << std::endl;
1310  os << "TTS state: " << daqTTSState() << std::endl;
1311  os << "L1 ID: " << daqLvl1ID() << std::endl;
1312  os << "BX ID: " << daqBXID() << std::endl;
1313  os << "FED status register flags: "; fedStatusRegister().printFlags(os); os << std::endl;
1314  os << "APVe Address: " << uint16_t(apveAddress()) << std::endl;
1315  os << "Enabled FE units: " << uint16_t(nFEUnitsEnabled()) << std::endl;
1316  }
FEDReadoutMode readoutMode() const
void printFlags(std::ostream &os) const
FEDDAQEventType daqEventType() const
FEDHeaderType headerType() const
FEDStatusRegister fedStatusRegister() const
FEDBufferFormat bufferFormat() const
FEDReadoutMode sistrip::FEDBufferBase::readoutMode ( ) const
inline
uint16_t sistrip::FEDBufferBase::sourceID ( ) const
TrackerSpecialHeader sistrip::FEDBufferBase::trackerSpecialHeader ( ) const
inline

Definition at line 1370 of file SiStripFEDBufferComponents.h.

References specialHeader_.

Referenced by sistrip::FEDBuffer::FEDBuffer().

1371  {
1372  return specialHeader_;
1373  }
TrackerSpecialHeader specialHeader_

Member Data Documentation

const size_t sistrip::FEDBufferBase::bufferSize_
private
std::vector<FEDChannel> sistrip::FEDBufferBase::channels_
protected
FEDDAQHeader sistrip::FEDBufferBase::daqHeader_
private
FEDDAQTrailer sistrip::FEDBufferBase::daqTrailer_
private
const uint8_t* sistrip::FEDBufferBase::orderedBuffer_
private
const uint8_t* sistrip::FEDBufferBase::originalBuffer_
private

Definition at line 617 of file SiStripFEDBufferComponents.h.

Referenced by dumpOriginalBuffer(), init(), and ~FEDBufferBase().

TrackerSpecialHeader sistrip::FEDBufferBase::specialHeader_
private