1 #ifndef EventFilter_SiStripRawToDigi_SiStripFEDBufferComponents_H
2 #define EventFilter_SiStripRawToDigi_SiStripFEDBufferComponents_H
4 #include "boost/cstdint.hpp"
109 uint8_t
internalFEDChannelNum(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum);
110 void printHex(
const void* pointer,
const size_t length, std::ostream& os);
155 uint32_t
l1ID()
const;
156 uint16_t
bxID()
const;
162 void print(std::ostream& os)
const;
164 const uint8_t*
data()
const;
185 uint16_t
crc()
const;
201 void print(std::ostream& os)
const;
203 const uint8_t*
data()
const;
233 void print(std::ostream& os)
const;
235 operator uint16_t ()
const;
243 const bool trackerHeaderMonitorDataReadyFlagSet =
false,
244 const bool slinkFullFlagSet =
false);
247 void setBit(
const uint8_t num,
const bool bitSet);
274 bool feEnabled(
const uint8_t internalFEUnitNum)
const;
276 bool feOverflow(
const uint8_t internalFEUnitNum)
const;
279 void print(std::ostream& os)
const;
282 const uint8_t*
data()
const;
298 const uint8_t address = 0x00,
const uint8_t addressErrorRegister = 0x00,
299 const uint8_t feEnableRegister = 0xFF,
const uint8_t feOverflowRegister = 0x00,
330 void print(std::ostream& os)
const;
332 operator uint32_t ()
const;
354 const bool backpressure =
false,
const bool slinkFull =
false,
355 const bool slinkDown =
false,
const bool internalFreeze =
false,
356 const bool trackerHeaderMonitorDataReady =
false,
const bool ttcReady =
true);
359 void setBit(
const uint8_t num,
const bool bitSet);
396 bool checkChannelStatusBits(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum)
const;
399 bool checkStatusBits(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum,
const uint8_t apvNum)
const;
400 virtual bool checkStatusBits(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum)
const = 0;
401 virtual void print(std::ostream& os)
const = 0;
404 virtual const uint8_t*
data()
const = 0;
408 virtual void setFEUnitLength(
const uint8_t internalFEUnitNum,
const uint16_t length) = 0;
419 virtual bool checkStatusBits(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum)
const;
420 virtual void print(std::ostream& os)
const;
423 virtual const uint8_t*
data()
const;
432 virtual void setFEUnitLength(
const uint8_t internalFEUnitNum,
const uint16_t length);
446 virtual bool checkStatusBits(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum)
const;
447 virtual void print(std::ostream& os)
const;
454 uint16_t
feUnitLength(
const uint8_t internalFEUnitNum)
const;
455 bool fePresent(
const uint8_t internalFEUnitNum)
const;
463 bool unlocked(
const uint8_t internalFEDChannelNum)
const;
464 bool unlocked(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum)
const;
466 bool outOfSync(
const uint8_t internalFEDChannelNum)
const;
467 bool outOfSync(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum)
const;
469 bool apvError(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum)
const;
470 bool apvError(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum,
const uint8_t apvNum)
const;
472 bool apvAddressError(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum)
const;
473 bool apvAddressError(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum,
const uint8_t apvNum)
const;
476 virtual const uint8_t*
data()
const;
482 virtual void setFEUnitLength(
const uint8_t internalFEUnitNum,
const uint16_t length);
484 const std::vector<uint8_t>& feMajorityAddresses = std::vector<uint8_t>(
FEUNITS_PER_FED,0),
487 const uint32_t daqRegister = 0,
const uint32_t daqRegister2 = 0);
489 bool getBit(
const uint8_t internalFEDChannelNum,
const uint8_t bit)
const;
492 const uint8_t*
feWord(
const uint8_t internalFEUnitNum)
const;
493 uint8_t*
feWord(
const uint8_t internalFEUnitNum);
494 void setBit(
const uint8_t internalFEDChannelNum,
const uint8_t bit,
const bool value);
501 bool apvErrorFromBit(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum)
const;
505 void setUnlocked(
const uint8_t internalFEDChannelNum,
const bool value);
506 void setOutOfSync(
const uint8_t internalFEDChannelNum,
const bool value);
507 void setAPVAddressError(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum,
const bool value);
508 void setAPVError(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum,
const bool value);
520 FEDChannel(
const uint8_t*
const data,
const size_t offset);
522 const uint8_t*
data()
const;
524 uint16_t
cmMedian(
const uint8_t apvIndex)
const;
538 FEDBufferBase(
const uint8_t* fedBuffer,
const size_t fedBufferSize,
const bool allowUnrecognizedFormat =
false);
541 void dump(std::ostream& os)
const;
544 virtual void print(std::ostream& os)
const;
571 bool feEnabled(
const uint8_t internalFEUnitNum)
const;
573 bool feOverflow(
const uint8_t internalFEUnitNum)
const;
578 bool channelGood(
const uint8_t internalFEUnitNum,
const uint8_t internalChannelNum)
const;
581 const FEDChannel&
channel(
const uint8_t internalFEUnitNum,
const uint8_t internalChannelNum)
const;
612 FEDBufferBase(
const uint8_t* fedBuffer,
const size_t fedBufferSize,
const bool allowUnrecognizedFormat,
const bool fillChannelVector);
615 void init(
const uint8_t* fedBuffer,
const size_t fedBufferSize,
const bool allowUnrecognizedFormat);
655 return ( (32 * (readout_order%4)) +
656 (8 * static_cast<uint16_t>(static_cast<float>(readout_order)/4.0)) -
657 (31 * static_cast<uint16_t>(static_cast<float>(readout_order)/16.0))
663 return ( 4*((static_cast<uint16_t>((static_cast<float>(physical_order)/8.0)))%4) +
664 static_cast<uint16_t>(static_cast<float>(physical_order)/32.0) +
665 16*(physical_order%8)
672 : wordSwapped_(
false)
716 return statusRegister;
784 : data_(fedStatusRegister) { }
790 {
return ( (0x1<<num) & (
data_) ); }
818 return getBit(8+internalFEUnitNum);
825 {
setBit(0,bitSet);
return *
this; }
828 {
setBit(1,bitSet);
return *
this; }
849 const bool trackerHeaderMonitorDataReadyFlagSet,
const bool slinkFullFlagSet)
861 : data_(backendStatusRegister) { }
870 {
return ( (0x1<<num) & (
data_) ); }
891 {
setBit(1,bitSet);
return *
this; }
894 {
setBit(2,bitSet);
return *
this; }
897 {
setBit(3,bitSet);
return *
this; }
900 {
setBit(4,bitSet);
return *
this; }
903 {
setBit(6,bitSet);
return *
this; }
906 {
setBit(7,bitSet);
return *
this; }
989 switch (headerType) {
995 return std::auto_ptr<FEDFEHeader>();
1001 switch (headerType) {
1007 return std::auto_ptr<FEDFEHeader>();
1013 switch (headerType) {
1019 return std::auto_ptr<FEDFEHeader>();
1044 const uint8_t apvNum,
const bool apvGood)
1056 return feWord(internalFEUnitNum)[9];
1076 return ( (
feWord(internalFEUnitNum)[15]<<8) | (
feWord(internalFEUnitNum)[14]) );
1135 return !
getBit(internalFEDChannelNum,5);
1140 return !
getBit(internalFEDChannelNum,4);
1151 return !
getBit(internalFEDChannelNum,0+2*(1-apvNum));
1156 return !
getBit(internalFEDChannelNum,1+2*apvNum);
1163 return ( pFEWord[bitInFeWord/8] & (0x1 << (bitInFeWord%8)) );
1168 return ( startOfWord[0] | (startOfWord[1]<<8) | (startOfWord[2]<<16) | (startOfWord[3]<<24) );
1173 memcpy(startOfWord,&value,4);
1178 return header_+internalFEUnitNum*2*8;
1189 setBit(internalFEDChannelNum,5,!value);
1194 setBit(internalFEDChannelNum,4,!value);
1199 setBit(internalFEDChannelNum,1+2*apvNum,!value);
1210 setBit(internalFEDChannelNum,0+2*(1-apvNum),!value);
1222 return ( (
header_[7] & 0xF0) >> 4 );
1247 return ( (
header_[0] & 0xF0) >> 4 );
1279 return ( (
trailer_[7] & 0xF0) >> 4 );
1314 return ( (
trailer_[0] & 0xF0) >> 4);
1595 #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
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
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
FEDDataType fedDataTypeFromString(const std::string &dataTypeString)
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)
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_
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
FEDDataType dataType() 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
void setL1ABXFIFOPartialFullFlag(const bool bitSet)
FEDBufferState l1aBxFIFOState() const
bool slinkTransmissionError() const
unsigned int offset(bool)
FEDTTSBits ttsBits() const
static const uint8_t INVALID
const FEDChannel & channel(const uint8_t internalFEDChannelNum) const
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
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
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 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)
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