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;
432 virtual void setFEUnitLength(
const uint8_t internalFEUnitNum,
const uint16_t length) = 0;
443 virtual bool checkStatusBits(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum)
const;
444 virtual void print(std::ostream& os)
const;
447 virtual const uint8_t*
data()
const;
456 virtual void setFEUnitLength(
const uint8_t internalFEUnitNum,
const uint16_t length);
470 virtual bool checkStatusBits(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum)
const;
471 virtual void print(std::ostream& os)
const;
478 uint16_t
feUnitLength(
const uint8_t internalFEUnitNum)
const;
479 bool fePresent(
const uint8_t internalFEUnitNum)
const;
487 bool unlocked(
const uint8_t internalFEDChannelNum)
const;
488 bool unlocked(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum)
const;
490 bool outOfSync(
const uint8_t internalFEDChannelNum)
const;
491 bool outOfSync(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum)
const;
493 bool apvError(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum)
const;
494 bool apvError(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum,
const uint8_t apvNum)
const;
496 bool apvAddressError(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum)
const;
497 bool apvAddressError(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum,
const uint8_t apvNum)
const;
500 virtual const uint8_t*
data()
const;
506 virtual void setFEUnitLength(
const uint8_t internalFEUnitNum,
const uint16_t length);
508 const std::vector<uint8_t>& feMajorityAddresses = std::vector<uint8_t>(
FEUNITS_PER_FED,0),
511 const uint32_t daqRegister = 0,
const uint32_t daqRegister2 = 0);
513 bool getBit(
const uint8_t internalFEDChannelNum,
const uint8_t bit)
const;
516 const uint8_t*
feWord(
const uint8_t internalFEUnitNum)
const;
517 uint8_t*
feWord(
const uint8_t internalFEUnitNum);
518 void setBit(
const uint8_t internalFEDChannelNum,
const uint8_t bit,
const bool value);
525 bool apvErrorFromBit(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum)
const;
529 void setUnlocked(
const uint8_t internalFEDChannelNum,
const bool value);
530 void setOutOfSync(
const uint8_t internalFEDChannelNum,
const bool value);
531 void setAPVAddressError(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum,
const bool value);
532 void setAPVError(
const uint8_t internalFEDChannelNum,
const uint8_t apvNum,
const bool value);
544 FEDChannel(
const uint8_t*
const data,
const size_t offset);
546 const uint8_t*
data()
const;
548 uint16_t
cmMedian(
const uint8_t apvIndex)
const;
562 FEDBufferBase(
const uint8_t* fedBuffer,
const size_t fedBufferSize,
const bool allowUnrecognizedFormat =
false);
565 void dump(std::ostream& os)
const;
568 virtual void print(std::ostream& os)
const;
596 bool feEnabled(
const uint8_t internalFEUnitNum)
const;
598 bool feOverflow(
const uint8_t internalFEUnitNum)
const;
603 bool channelGood(
const uint8_t internalFEUnitNum,
const uint8_t internalChannelNum)
const;
606 const FEDChannel&
channel(
const uint8_t internalFEUnitNum,
const uint8_t internalChannelNum)
const;
637 FEDBufferBase(
const uint8_t* fedBuffer,
const size_t fedBufferSize,
const bool allowUnrecognizedFormat,
const bool fillChannelVector);
640 void init(
const uint8_t* fedBuffer,
const size_t fedBufferSize,
const bool allowUnrecognizedFormat);
680 return ( (32 * (readout_order%4)) +
681 (8 * static_cast<uint16_t>(static_cast<float>(readout_order)/4.0)) -
682 (31 * static_cast<uint16_t>(static_cast<float>(readout_order)/16.0))
688 return ( 4*((static_cast<uint16_t>((static_cast<float>(physical_order)/8.0)))%4) +
689 static_cast<uint16_t>(static_cast<float>(physical_order)/32.0) +
690 16*(physical_order%8)
697 : wordSwapped_(
false)
741 return statusRegister;
804 : data_(fedStatusRegister) { }
810 {
return ( (0x1<<num) & (
data_) ); }
838 return getBit(8+internalFEUnitNum);
845 {
setBit(0,bitSet);
return *
this; }
848 {
setBit(1,bitSet);
return *
this; }
869 const bool trackerHeaderMonitorDataReadyFlagSet,
const bool slinkFullFlagSet)
881 : data_(backendStatusRegister) { }
890 {
return ( (0x1<<num) & (
data_) ); }
911 {
setBit(1,bitSet);
return *
this; }
914 {
setBit(2,bitSet);
return *
this; }
917 {
setBit(3,bitSet);
return *
this; }
920 {
setBit(4,bitSet);
return *
this; }
923 {
setBit(6,bitSet);
return *
this; }
926 {
setBit(7,bitSet);
return *
this; }
1009 switch (headerType) {
1015 return std::auto_ptr<FEDFEHeader>();
1021 switch (headerType) {
1027 return std::auto_ptr<FEDFEHeader>();
1033 switch (headerType) {
1039 return std::auto_ptr<FEDFEHeader>();
1064 const uint8_t apvNum,
const bool apvGood)
1076 return feWord(internalFEUnitNum)[9];
1096 return ( (
feWord(internalFEUnitNum)[15]<<8) | (
feWord(internalFEUnitNum)[14]) );
1155 return !
getBit(internalFEDChannelNum,5);
1160 return !
getBit(internalFEDChannelNum,4);
1171 return !
getBit(internalFEDChannelNum,0+2*(1-apvNum));
1176 return !
getBit(internalFEDChannelNum,1+2*apvNum);
1183 return ( pFEWord[bitInFeWord/8] & (0x1 << (bitInFeWord%8)) );
1188 return ( startOfWord[0] | (startOfWord[1]<<8) | (startOfWord[2]<<16) | (startOfWord[3]<<24) );
1193 memcpy(startOfWord,&value,4);
1198 return header_+internalFEUnitNum*2*8;
1209 setBit(internalFEDChannelNum,5,!value);
1214 setBit(internalFEDChannelNum,4,!value);
1219 setBit(internalFEDChannelNum,1+2*apvNum,!value);
1230 setBit(internalFEDChannelNum,0+2*(1-apvNum),!value);
1242 return ( (
header_[7] & 0xF0) >> 4 );
1267 return ( (
header_[0] & 0xF0) >> 4 );
1299 return ( (
trailer_[7] & 0xF0) >> 4 );
1334 return ( (
trailer_[0] & 0xF0) >> 4);
1670 #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