1 #ifndef EventFilter_SiStripRawToDigi_SiStripFEDBufferComponents_H
2 #define EventFilter_SiStripRawToDigi_SiStripFEDBufferComponents_H
4 #include "boost/cstdint.hpp"
137 uint8_t
internalFEDChannelNum(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum);
138 void printHex(
const void* pointer,
const size_t length, std::ostream& os);
182 uint32_t
l1ID()
const;
183 uint16_t
bxID()
const;
189 void print(std::ostream& os)
const;
191 const uint8_t*
data()
const;
212 uint16_t
crc()
const;
228 void print(std::ostream& os)
const;
230 const uint8_t*
data()
const;
260 void print(std::ostream& os)
const;
262 operator uint16_t ()
const;
270 const bool trackerHeaderMonitorDataReadyFlagSet =
false,
271 const bool slinkFullFlagSet =
false);
274 void setBit(
const uint8_t num,
const bool bitSet);
301 bool feEnabled(
const uint8_t internalFEUnitNum)
const;
303 bool feOverflow(
const uint8_t internalFEUnitNum)
const;
306 void print(std::ostream& os)
const;
309 const uint8_t*
data()
const;
323 const uint8_t address = 0x00,
const uint8_t addressErrorRegister = 0x00,
324 const uint8_t feEnableRegister = 0xFF,
const uint8_t feOverflowRegister = 0x00,
354 void print(std::ostream& os)
const;
356 operator uint32_t ()
const;
378 const bool backpressure =
false,
const bool slinkFull =
false,
379 const bool slinkDown =
false,
const bool internalFreeze =
false,
380 const bool trackerHeaderMonitorDataReady =
false,
const bool ttcReady =
true);
383 void setBit(
const uint8_t num,
const bool bitSet);
420 bool checkChannelStatusBits(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum)
const;
423 bool checkStatusBits(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum,
const uint8_t apvNum)
const;
424 virtual bool checkStatusBits(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum)
const = 0;
425 virtual void print(std::ostream& os)
const = 0;
428 virtual const uint8_t*
data()
const = 0;
435 virtual void setFEUnitLength(
const uint8_t internalFEUnitNum,
const uint16_t length) = 0;
446 virtual bool checkStatusBits(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum)
const;
447 virtual void print(std::ostream& os)
const;
450 virtual const uint8_t*
data()
const;
462 virtual void setFEUnitLength(
const uint8_t internalFEUnitNum,
const uint16_t length);
476 virtual bool checkStatusBits(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum)
const;
477 virtual void print(std::ostream& os)
const;
484 uint16_t
feUnitLength(
const uint8_t internalFEUnitNum)
const;
485 bool fePresent(
const uint8_t internalFEUnitNum)
const;
493 bool unlocked(
const uint8_t internalFEDChannelNum)
const;
494 bool unlocked(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum)
const;
496 bool outOfSync(
const uint8_t internalFEDChannelNum)
const;
497 bool outOfSync(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum)
const;
499 bool apvError(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum)
const;
500 bool apvError(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum,
const uint8_t apvNum)
const;
502 bool apvAddressError(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum)
const;
503 bool apvAddressError(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum,
const uint8_t apvNum)
const;
506 virtual const uint8_t*
data()
const;
513 virtual void setFEUnitLength(
const uint8_t internalFEUnitNum,
const uint16_t length);
515 const uint8_t*
feWord(
const uint8_t internalFEUnitNum)
const;
516 uint8_t*
feWord(
const uint8_t internalFEUnitNum);
518 const std::vector<uint8_t>& feMajorityAddresses = std::vector<uint8_t>(
FEUNITS_PER_FED,0),
521 const uint32_t daqRegister = 0,
const uint32_t daqRegister2 = 0);
523 bool getBit(
const uint8_t internalFEDChannelNum,
const uint8_t bit)
const;
525 void setBit(
const uint8_t internalFEDChannelNum,
const uint8_t bit,
const bool value);
532 bool apvErrorFromBit(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum)
const;
536 void setUnlocked(
const uint8_t internalFEDChannelNum,
const bool value);
537 void setOutOfSync(
const uint8_t internalFEDChannelNum,
const bool value);
538 void setAPVAddressError(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum,
const bool value);
539 void setAPVError(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum,
const bool value);
551 FEDChannel(
const uint8_t*
const data,
const size_t offset);
553 const uint8_t*
data()
const;
555 uint16_t
cmMedian(
const uint8_t apvIndex)
const;
569 FEDBufferBase(
const uint8_t* fedBuffer,
const size_t fedBufferSize,
const bool allowUnrecognizedFormat =
false);
572 void dump(std::ostream& os)
const;
575 virtual void print(std::ostream& os)
const;
603 bool feEnabled(
const uint8_t internalFEUnitNum)
const;
605 bool feOverflow(
const uint8_t internalFEUnitNum)
const;
610 bool channelGood(
const uint8_t internalFEUnitNum,
const uint8_t internalChannelNum)
const;
613 const FEDChannel&
channel(
const uint8_t internalFEUnitNum,
const uint8_t internalChannelNum)
const;
644 FEDBufferBase(
const uint8_t* fedBuffer,
const size_t fedBufferSize,
const bool allowUnrecognizedFormat,
const bool fillChannelVector);
647 void init(
const uint8_t* fedBuffer,
const size_t fedBufferSize,
const bool allowUnrecognizedFormat);
687 return ( (32 * (readout_order%4)) +
688 (8 * static_cast<uint16_t>(static_cast<float>(readout_order)/4.0)) -
689 (31 * static_cast<uint16_t>(static_cast<float>(readout_order)/16.0))
695 return ( 4*((static_cast<uint16_t>((static_cast<float>(physical_order)/8.0)))%4) +
696 static_cast<uint16_t>(static_cast<float>(physical_order)/32.0) +
697 16*(physical_order%8)
704 : wordSwapped_(
false)
748 return statusRegister;
811 : data_(fedStatusRegister) { }
817 {
return ( (0x1<<num) & (
data_) ); }
845 return getBit(8+internalFEUnitNum);
852 {
setBit(0,bitSet);
return *
this; }
855 {
setBit(1,bitSet);
return *
this; }
876 const bool trackerHeaderMonitorDataReadyFlagSet,
const bool slinkFullFlagSet)
888 : data_(backendStatusRegister) { }
897 {
return ( (0x1<<num) & (
data_) ); }
918 {
setBit(1,bitSet);
return *
this; }
921 {
setBit(2,bitSet);
return *
this; }
924 {
setBit(3,bitSet);
return *
this; }
927 {
setBit(4,bitSet);
return *
this; }
930 {
setBit(6,bitSet);
return *
this; }
933 {
setBit(7,bitSet);
return *
this; }
1016 switch (headerType) {
1022 return std::auto_ptr<FEDFEHeader>();
1028 switch (headerType) {
1034 return std::auto_ptr<FEDFEHeader>();
1040 switch (headerType) {
1046 return std::auto_ptr<FEDFEHeader>();
1071 const uint8_t apvNum,
const bool apvGood)
1083 return feWord(internalFEUnitNum)[9];
1103 return ( (
feWord(internalFEUnitNum)[15]<<8) | (
feWord(internalFEUnitNum)[14]) );
1162 return !
getBit(internalFEDChannelNum,5);
1167 return !
getBit(internalFEDChannelNum,4);
1178 return !
getBit(internalFEDChannelNum,0+2*(1-apvNum));
1183 return !
getBit(internalFEDChannelNum,1+2*apvNum);
1190 return ( pFEWord[bitInFeWord/8] & (0x1 << (bitInFeWord%8)) );
1195 return ( startOfWord[0] | (startOfWord[1]<<8) | (startOfWord[2]<<16) | (startOfWord[3]<<24) );
1200 memcpy(startOfWord,&value,4);
1205 return header_+internalFEUnitNum*2*8;
1216 setBit(internalFEDChannelNum,5,!value);
1221 setBit(internalFEDChannelNum,4,!value);
1226 setBit(internalFEDChannelNum,1+2*apvNum,!value);
1237 setBit(internalFEDChannelNum,0+2*(1-apvNum),!value);
1249 return ( (
header_[7] & 0xF0) >> 4 );
1274 return ( (
header_[0] & 0xF0) >> 4 );
1306 return ( (
trailer_[7] & 0xF0) >> 4 );
1341 return ( (
trailer_[0] & 0xF0) >> 4);
1677 #endif //ndef EventFilter_SiStripRawToDigi_FEDBufferComponents_H
static uint8_t physicalOrderForStripInChannel(const uint8_t readoutOrderStripIndexInChannel)
bool checkNoUnexpectedSourceID() const
FEDBackendStatusRegister & setFEFPGABufferState(const FEDBufferState state)
FEDBackendStatusRegister & setQDRMemoryState(const FEDBufferState state)
FEDBackendStatusRegister & setL1ABXFIFOState(const FEDBufferState state)
uint16_t sourceID() const
bool checkNoExtraHeadersOrTrailers() const
virtual bool doChecks() const
bool feDataMissingFlag(const uint8_t internalFEUnitNum) const
static const uint8_t PACKET_CODE_ZERO_SUPPRESSED_LITE8_BOTBOT
bool qdrMemoryPartialFullFlag() const
bool checkSourceIDs() const
void printFlags(std::ostream &os) const
void setBit(const uint8_t num, const bool bitSet)
uint8_t nFEUnitsEnabled() const
bool ttcReadyFlag() const
bool checkReadoutMode() const
bool getBit(const uint8_t num) const
void setQDRMemoryEmptyFlag(const bool bitSet)
uint32_t daqEventLengthIn64bitWords() const
virtual std::string checkSummary() const
uint8_t apveAddress() const
FEDStatusRegister & setTrackerHeaderMonitorDataReadyFlag(const bool bitSet)
FEDBackendStatusRegister & setFrameAddressFIFOState(const FEDBufferState state)
uint32_t daqEventLengthInBytes() const
const uint8_t * getPointerToByteAfterEndOfPayload() const
FEDDAQTrailer daqTrailer() const
static const uint8_t PACKET_CODE_SCOPE
FEDBackendStatusRegister & setTrackerHeaderFIFOState(const FEDBufferState state)
bool slinkDownFlag() const
bool l1aBxFIFOPartialFullFlag() const
void print(std::ostream &os) const
static const uint8_t PACKET_CODE_PROC_RAW10
bool checkHeaderType() const
bool doDAQHeaderAndTrailerChecks() const
uint8_t eoeNibble() const
FEDDAQTrailer & setSLinkCRCErrorBit(const bool bitSet)
FEDDAQTrailer & setTTSBits(const FEDTTSBits ttsBits)
bool trackerHeaderMonitorDataReadyFlag() const
FEDReadoutMode readoutMode() const
bool getBit(const uint8_t num) const
FEDStatusRegister(const uint16_t fedStatusRegister)
FEDStatusRegister & setSLinkFullFlag(const bool bitSet)
uint8_t internalFEDChannelNum(const uint8_t internalFEUnitNum, const uint8_t internalFEUnitChannelNum)
void print(std::ostream &os) const
bool checkNoFEOverflows() const
const uint8_t * getPointerToDataAfterTrackerSpecialHeader() const
FEDDAQTrailer & setSLinkTransmissionErrorBit(const bool bitSet)
FEDHeaderType fedHeaderTypeFromString(const std::string &headerTypeString)
void printFlags(std::ostream &os) const
uint32_t eventLengthIn64BitWords() const
uint16_t calculateFEDBufferCRC(const uint8_t *buffer, const size_t lengthInBytes)
bool backpressureFlag() const
FEDChannel(const uint8_t *const data, const size_t offset, const uint16_t length)
static const uint8_t PACKET_CODE_ZERO_SUPPRESSED_LITE10
std::ostream & operator<<(std::ostream &os, const FEDBufferFormat &value)
bool slinkCRCError() const
FEDBufferFormat fedBufferFormatFromString(const std::string &bufferFormatString)
void setBit(const uint8_t num, const bool bitSet)
FEDDAQEventType daqEventType() const
const uint8_t * orderedBuffer_
void dumpOriginalBuffer(std::ostream &os) const
FEDTTSBits daqTTSState() const
bool checkNoSlinkCRCError() const
bool checkNoSLinkTransmissionError() const
FEDReadoutMode fedReadoutModeFromString(const std::string &readoutModeString)
FEDBufferState qdrMemoryState() const
static uint8_t readoutOrderForStripInChannel(const uint8_t physicalOrderStripIndexInChannel)
FEDBufferState frameAddressFIFOState() const
FEDBackendStatusRegister(const uint32_t backendStatusRegister)
uint16_t cmMedian(const uint8_t apvIndex) const
FEDDAQTrailer daqTrailer_
static const uint8_t PACKET_CODE_VIRGIN_RAW10
bool slinkFullFlag() const
const uint8_t * data() const
static const uint8_t PACKET_CODE_ZERO_SUPPRESSED
uint8_t ttsNibble() const
FEDBackendStatusRegister & setTotalLengthFIFOState(const FEDBufferState state)
bool qdrMemoryEmptyFlag() const
FEDDAQTrailer & setEventLengthIn64BitWords(const uint32_t eventLengthIn64BitWords)
FEDDAQTrailer & setEventStatusNibble(const uint8_t eventStatusNibble)
bool majorityAddressErrorForFEUnit(const uint8_t internalFEUnitNum) const
FEDBackendStatusRegister & setTTCReadyFlag(const bool bitSet)
FEDDAQTrailer & setCRC(const uint16_t crc)
FEDStatusRegister & setL1ABXFIFOBufferState(const FEDBufferState state)
static const uint16_t FEUNITS_PER_FED
FEDBufferState qdrMemoryState() const
void print(std::ostream &os) const
FEDLegacyReadoutMode legacyReadoutMode() const
void setQDRMemoryFullFlag(const bool bitSet)
bool feEnabled(const uint8_t internalFEUnitNum) const
FEDBufferState trackerHeaderFIFOState() const
void dump(std::ostream &os) const
void setL1ABXFIFOFullFlag(const bool bitSet)
static const uint8_t BUFFER_FORMAT_CODE_NEW
FEDBufferBase(const uint8_t *fedBuffer, const size_t fedBufferSize, const bool allowUnrecognizedFormat=false)
bool qdrMemoryFullFlag() const
bool internalFreezeFlag() const
FEDHeaderType headerType() const
const uint8_t * originalBuffer_
bool checkAPVEAddressValid() const
void printFlagsForBuffer(const FEDBufferState bufferState, const std::string name, std::ostream &os) const
static const uint8_t APV_MAX_ADDRESS
uint8_t packetCode(bool legacy=false, const uint8_t internalFEDChannelNum=0) const
void setL1ABXFIFOPartialFullFlag(const bool bitSet)
FEDBufferState l1aBxFIFOState() const
bool slinkTransmissionError() const
static const uint8_t PACKET_CODE_ZERO_SUPPRESSED_LITE8
FEDTTSBits ttsBits() const
static const uint8_t INVALID
const FEDChannel & channel(const uint8_t internalFEDChannelNum) const
static const uint8_t PACKET_CODE_VIRGIN_RAW8_TOPBOT
FEDDAQEventType fedDAQEventTypeFromString(const std::string &daqEventTypeString)
std::vector< FEDChannel > channels_
FEDBufferState getBufferState(const uint8_t bufferPosition) const
FEDDAQTrailer & setBadSourceIDBit(const bool bitSet)
bool l1aBxFIFOFullFlag() const
bool l1aBxFIFOEmptyFlag() const
static const uint8_t PACKET_CODE_PROC_RAW
static const uint16_t APVS_PER_FED
static const uint8_t PACKET_CODE_VIRGIN_RAW8_BOTBOT
void printHex(const void *pointer, const size_t length, std::ostream &os)
bool checkBufferFormat() const
static uint8_t physicalOrderForStripInAPV(const uint8_t readoutOrderStripIndexInAPV)
static const uint16_t FEDCH_PER_FEUNIT
Constants and enumerated types for FED/FEC systems.
bool trackerHeaderMonitorDataReadyFlag() const
FEDBackendStatusRegister & setTrackerHeaderMonitorDataReadyFlag(const bool bitSet)
const uint8_t * data() const
TrackerSpecialHeader trackerSpecialHeader() const
size_t bufferSize() const
FEDBackendStatusRegister & setSLinkFullFlag(const bool bitSet)
FEDBufferState feFPGABufferState() const
uint8_t packetCode() const
uint32_t daqLvl1ID() const
void setBufferSate(const uint8_t bufferPosition, const FEDBufferState state)
void init(const uint8_t *fedBuffer, const size_t fedBufferSize, const bool allowUnrecognizedFormat)
FEDBufferState l1aBxFIFOState() const
TrackerSpecialHeader specialHeader_
virtual void print(std::ostream &os) const
char data[epos_bytes_allocation]
bool doTrackerSpecialHeaderChecks() const
static const uint16_t FEDCH_PER_FED
static const uint16_t STRIPS_PER_APV
static const uint8_t PACKET_CODE_ZERO_SUPPRESSED_LITE8_TOPBOT
FEDBufferState totalLengthFIFOState() const
bool checkLengthFromTrailer() const
virtual bool channelGood(const uint8_t internalFEDChannelNum) const
bool slinkFullFlag() const
FEDBackendStatusRegister & setFEEventLengthFIFOState(const FEDBufferState state)
static const uint8_t PACKET_CODE_PROC_RAW8_BOTBOT
static const uint8_t BUFFER_FORMAT_CODE_OLD
uint8_t eventStatusNibble() const
volatile std::atomic< bool > shutdown_flag false
static const uint16_t SCOPE_MODE_MAX_SCOPE_LENGTH
static uint8_t readoutOrderForStripInAPV(const uint8_t physicalOrderStripIndexInAPV)
uint16_t daqSourceID() const
FEDStatusRegister & setQDRMemoryBufferState(const FEDBufferState state)
FEDBackendStatusRegister & setInternalFreezeFlag(const bool bitSet)
static const uint8_t PACKET_CODE_PROC_RAW8_TOPBOT
void setL1ABXFIFOEmptyFlag(const bool bitSet)
FEDDAQHeader daqHeader() const
FEDBackendStatusRegister & setBackpressureFlag(const bool bitSet)
bool checkMajorityAddresses() const
static const uint8_t PACKET_CODE_VIRGIN_RAW
bool feOverflow(const uint8_t internalFEUnitNum) const
uint32_t eventLengthInBytes() const
FEDBufferState feEventLengthFIFOState() const
FEDStatusRegister fedStatusRegister() const
void setQDRMemoryPartialFullFlag(const bool bitSet)
FEDBackendStatusRegister & setSLinkDownFlag(const bool bitSet)
FEDBufferFormat bufferFormat() const