1 #ifndef EventFilter_SiStripRawToDigi_SiStripFEDBufferComponents_H 2 #define EventFilter_SiStripRawToDigi_SiStripFEDBufferComponents_H 161 uint8_t
internalFEDChannelNum(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum);
162 void printHex(
const void* pointer,
const size_t length, std::ostream& os);
206 uint32_t
l1ID()
const;
207 uint16_t
bxID()
const;
213 void print(std::ostream& os)
const;
215 const uint8_t*
data()
const;
238 uint16_t
crc()
const;
254 void print(std::ostream& os)
const;
256 const uint8_t*
data()
const;
265 const uint16_t
crc = 0,
268 const bool badFEDID =
false,
290 void print(std::ostream& os)
const;
292 operator uint16_t()
const;
300 const bool trackerHeaderMonitorDataReadyFlagSet =
false,
301 const bool slinkFullFlagSet =
false);
305 void setBit(
const uint8_t
num,
const bool bitSet);
331 bool feEnabled(
const uint8_t internalFEUnitNum)
const;
333 bool feOverflow(
const uint8_t internalFEUnitNum)
const;
336 void print(std::ostream& os)
const;
339 const uint8_t*
data()
const;
355 const uint8_t address = 0x00,
356 const uint8_t addressErrorRegister = 0x00,
410 void print(std::ostream& os)
const;
412 operator uint32_t()
const;
434 const bool backpressure =
false,
435 const bool slinkFull =
false,
436 const bool slinkDown =
false,
437 const bool internalFreeze =
false,
438 const bool trackerHeaderMonitorDataReady =
false,
439 const bool ttcReady =
true);
443 void setBit(
const uint8_t
num,
const bool bitSet);
479 bool checkChannelStatusBits(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum)
const;
483 const uint8_t internalFEUnitChannelNum,
484 const uint8_t apvNum)
const;
486 virtual void print(std::ostream& os)
const = 0;
489 virtual const uint8_t*
data()
const = 0;
496 virtual void setFEUnitLength(
const uint8_t internalFEUnitNum,
const uint16_t length) = 0;
498 const uint8_t internalFEUnitChannelNum,
509 void print(std::ostream& os)
const override;
512 const uint8_t*
data()
const override;
515 const uint8_t internalFEUnitChannelNum,
516 const uint8_t apvNum,
527 void setFEUnitLength(
const uint8_t internalFEUnitNum,
const uint16_t length)
override;
542 void print(std::ostream& os)
const override;
549 uint16_t
feUnitLength(
const uint8_t internalFEUnitNum)
const;
550 bool fePresent(
const uint8_t internalFEUnitNum)
const;
559 bool unlocked(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum)
const;
562 bool outOfSync(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum)
const;
565 bool apvError(
const uint8_t internalFEUnitNum,
const uint8_t internalFEUnitChannelNum,
const uint8_t apvNum)
const;
569 const uint8_t internalFEUnitChannelNum,
570 const uint8_t apvNum)
const;
573 const uint8_t*
data()
const override;
580 void setFEUnitLength(
const uint8_t internalFEUnitNum,
const uint16_t length)
override;
582 uint8_t*
feWord(
const uint8_t internalFEUnitNum);
583 const uint8_t*
feWord(
const uint8_t internalFEUnitNum)
const;
585 const std::vector<uint8_t>& feMajorityAddresses = std::vector<uint8_t>(
FEUNITS_PER_FED, 0),
586 const std::vector<FEDChannelStatus>& channelStatus =
622 const uint8_t*
data()
const;
631 uint16_t
cmMedian(
const uint8_t apvIndex)
const;
656 void dump(std::ostream& os)
const;
659 virtual void print(std::ostream& os)
const;
687 bool feEnabled(
const uint8_t internalFEUnitNum)
const;
689 bool feOverflow(
const uint8_t internalFEUnitNum)
const;
694 bool channelGood(
const uint8_t internalFEUnitNum,
const uint8_t internalChannelNum)
const;
697 const FEDChannel&
channel(
const uint8_t internalFEUnitNum,
const uint8_t internalChannelNum)
const;
758 bool checkRecognizedFormat =
true) {
759 if (!fedBuffer.
data())
762 static const size_t MIN_BUFFER_SIZE = 8 + 8 + 8;
764 if (fedBuffer.
size() < MIN_BUFFER_SIZE) {
765 LogDebug(
"FEDBuffer") <<
"Buffer is too small. Min size is " << MIN_BUFFER_SIZE <<
". Buffer size is " 766 << fedBuffer.
size() <<
". ";
769 if (checkRecognizedFormat) {
771 LogDebug(
"FEDBuffer") <<
"Buffer format not recognized. Tracker special header: " 781 os <<
obj.checkSummary();
819 (physicalOrderStripIndexInChannel / 128));
823 return ((32 * (readout_order % 4)) + (8 * static_cast<uint16_t>(static_cast<float>(readout_order) / 4.0)) -
824 (31 * static_cast<uint16_t>(static_cast<float>(readout_order) / 16.0)));
828 return (4 * ((static_cast<uint16_t>((static_cast<float>(physical_order) / 8.0))) % 4) +
829 static_cast<uint16_t>(static_cast<float>(physical_order) / 32.0) + 16 * (physical_order % 8));
862 const uint8_t
mode = (nibble & 0xF);
908 return statusRegister;
980 return getBit(8 + internalFEUnitNum);
1009 const bool trackerHeaderMonitorDataReadyFlagSet,
1010 const bool slinkFullFlagSet)
1021 : data_(backendStatusRegister) {}
1137 const uint8_t* headerBuffer) {
1138 switch (headerType) {
1144 return std::unique_ptr<FEDFEHeader>();
1149 switch (headerType) {
1155 return std::unique_ptr<FEDFEHeader>();
1160 switch (headerType) {
1166 return std::unique_ptr<FEDFEHeader>();
1171 const uint8_t internalFEUnitChannelNum)
const {
1176 const uint8_t internalFEUnitChannelNum,
1177 const uint8_t apvNum)
const {
1182 const uint8_t internalFEUnitChannelNum,
1192 const uint8_t internalFEUnitChannelNum,
1193 const uint8_t apvNum,
1194 const bool apvGood) {
1203 return feWord(internalFEUnitNum)[9];
1215 return ((
feWord(internalFEUnitNum)[15] << 8) | (
feWord(internalFEUnitNum)[14]));
1227 const uint8_t internalFEUnitChannelNum)
const {
1236 const uint8_t internalFEUnitChannelNum)
const {
1246 const uint8_t internalFEUnitChannelNum,
1247 const uint8_t apvNum)
const {
1257 const uint8_t internalFEUnitChannelNum,
1258 const uint8_t apvNum)
const {
1263 const uint8_t internalFEUnitChannelNum)
const {
1286 const uint8_t apvNum)
const {
1293 return (pFEWord[bitInFeWord / 8] & (0
x1 << (bitInFeWord % 8)));
1297 return (startOfWord[0] | (startOfWord[1] << 8) | (startOfWord[2] << 16) | (startOfWord[3] << 24));
1301 memcpy(startOfWord, &
value, 4);
1305 return header_ + internalFEUnitNum * 2 * 8;
1310 return const_cast<uint8_t*
>(std::as_const(*this).feWord(internalFEUnitNum));
1322 const uint8_t apvNum,
1328 const uint8_t apvNum,
1511 const uint8_t internalChannelNum)
const {
1563 : data_(
data), offset_(
offset), length_(length) {}
1582 #endif //ndef EventFilter_SiStripRawToDigi_FEDBufferComponents_H FEDBufferFormat bufferFormat() const
static uint8_t physicalOrderForStripInChannel(const uint8_t readoutOrderStripIndexInChannel)
size_t bufferSize() const
FEDBackendStatusRegister & setFEFPGABufferState(const FEDBufferState state)
FEDBackendStatusRegister & setQDRMemoryState(const FEDBufferState state)
FEDReadoutMode readoutMode() const
FEDBackendStatusRegister & setL1ABXFIFOState(const FEDBufferState state)
FEDLegacyReadoutMode legacyReadoutMode() const
void printFlags(std::ostream &os) const
static const uint8_t PACKET_CODE_ZERO_SUPPRESSED8_BOTBOT
bool checkNoSLinkTransmissionError() const
bool feOverflow(const uint8_t internalFEUnitNum) const
const uint8_t * data() const
void setBit(const uint8_t num, const bool bitSet)
FEDTTSBits daqTTSState() const
bool trackerHeaderMonitorDataReadyFlag() const
void setQDRMemoryEmptyFlag(const bool bitSet)
uint16_t sourceID() const
uint8_t packetCode() const
bool l1aBxFIFOEmptyFlag() const
FEDStatusRegister & setTrackerHeaderMonitorDataReadyFlag(const bool bitSet)
uint32_t eventLengthIn64BitWords() const
FEDBackendStatusRegister & setFrameAddressFIFOState(const FEDBufferState state)
void print(std::ostream &os) const
static const uint8_t PACKET_CODE_SCOPE
FEDBackendStatusRegister & setTrackerHeaderFIFOState(const FEDBufferState state)
FEDChannel(const uint8_t *const data, const uint32_t offset, const uint16_t length)
static const uint8_t PACKET_CODE_PROC_RAW10
FEDDAQTrailer & setSLinkCRCErrorBit(const bool bitSet)
FEDDAQTrailer & setTTSBits(const FEDTTSBits ttsBits)
FEDStatusRegister(const uint16_t fedStatusRegister)
bool l1aBxFIFOFullFlag() const
FEDBufferState qdrMemoryState() const
FEDStatusRegister & setSLinkFullFlag(const bool bitSet)
uint8_t internalFEDChannelNum(const uint8_t internalFEUnitNum, const uint8_t internalFEUnitChannelNum)
uint32_t daqEventLengthInBytes() const
bool slinkFullFlag() const
bool checkNoFEOverflows() const
bool checkReadoutMode() const
size_t size() const
Lenght of the data buffer in bytes.
FEDDAQTrailer & setSLinkTransmissionErrorBit(const bool bitSet)
FEDHeaderType fedHeaderTypeFromString(const std::string &headerTypeString)
bool l1aBxFIFOPartialFullFlag() const
uint16_t calculateFEDBufferCRC(const uint8_t *buffer, const size_t lengthInBytes)
const uint8_t * data() const
FEDHeaderType headerType() const
void printFlagsForBuffer(const FEDBufferState bufferState, const std::string name, std::ostream &os) const
const uint8_t * getPointerToDataAfterTrackerSpecialHeader() const
bool ttcReadyFlag() const
FEDDAQHeader daqHeader() const
uint8_t packetCodeFromString(const std::string &packetCodeString, FEDReadoutMode mode)
bool doDAQHeaderAndTrailerChecks() const
virtual std::string checkSummary() const
std::ostream & operator<<(std::ostream &os, const FEDBufferFormat &value)
FEDTTSBits ttsBits() const
bool slinkCRCError() const
bool getBit(const uint8_t num) const
FEDBufferFormat fedBufferFormatFromString(const std::string &bufferFormatString)
void setBit(const uint8_t num, const bool bitSet)
bool checkNoSlinkCRCError() const
void dumpOriginalBuffer(std::ostream &os) const
bool majorityAddressErrorForFEUnit(const uint8_t internalFEUnitNum) const
const uint8_t * orderedBuffer_
bool qdrMemoryPartialFullFlag() const
const uint8_t * getPointerToByteAfterEndOfPayload() const
FEDBufferState qdrMemoryState() const
bool feEnabled(const uint8_t internalFEUnitNum) const
bool feDataMissingFlag(const uint8_t internalFEUnitNum) const
FEDReadoutMode fedReadoutModeFromString(const std::string &readoutModeString)
static const uint8_t PACKET_CODE_ZERO_SUPPRESSED8_TOPBOT
static uint8_t readoutOrderForStripInChannel(const uint8_t physicalOrderStripIndexInChannel)
static const uint8_t PACKET_CODE_ZERO_SUPPRESSED10
FEDBackendStatusRegister(const uint32_t backendStatusRegister)
FEDDAQTrailer daqTrailer_
static const uint8_t PACKET_CODE_VIRGIN_RAW10
FEDBufferState l1aBxFIFOState() const
static const uint8_t PACKET_CODE_ZERO_SUPPRESSED
FEDBufferState l1aBxFIFOState() const
FEDBackendStatusRegister & setTotalLengthFIFOState(const FEDBufferState state)
FEDDAQTrailer & setEventLengthIn64BitWords(const uint32_t eventLengthIn64BitWords)
uint16_t daqSourceID() const
FEDDAQTrailer & setEventStatusNibble(const uint8_t eventStatusNibble)
FEDBackendStatusRegister & setTTCReadyFlag(const bool bitSet)
FEDDAQTrailer & setCRC(const uint16_t crc)
uint8_t nFEUnitsEnabled() const
bool getBit(const uint8_t num) const
FEDStatusRegister & setL1ABXFIFOBufferState(const FEDBufferState state)
static const uint16_t FEUNITS_PER_FED
void dump(std::ostream &os) const
bool checkNoExtraHeadersOrTrailers() const
bool checkLengthFromTrailer() const
bool slinkFullFlag() const
void print(std::ostream &os) const
void setQDRMemoryFullFlag(const bool bitSet)
FEDDAQEventType daqEventType() const
FEDBufferState getBufferState(const uint8_t bufferPosition) const
void setL1ABXFIFOFullFlag(const bool bitSet)
static const uint8_t BUFFER_FORMAT_CODE_NEW
uint8_t eoeNibble() const
const uint8_t * originalBuffer_
void print(std::ostream &os) const
static const uint8_t APV_MAX_ADDRESS
FEDBufferState frameAddressFIFOState() const
void setL1ABXFIFOPartialFullFlag(const bool bitSet)
bool slinkTransmissionError() const
bool qdrMemoryFullFlag() const
FEDBufferState trackerHeaderFIFOState() const
static const uint8_t INVALID
FEDBufferState feFPGABufferState() const
static const uint8_t PACKET_CODE_VIRGIN_RAW8_TOPBOT
FEDDAQEventType fedDAQEventTypeFromString(const std::string &daqEventTypeString)
bool checkSourceIDs() const
std::vector< FEDChannel > channels_
bool checkMajorityAddresses() const
bool slinkDownFlag() const
uint16_t cmMedian(const uint8_t apvIndex) const
FEDDAQTrailer & setBadSourceIDBit(const bool bitSet)
FEDBufferBase(const FEDRawData &fedBuffer)
uint32_t daqLvl1ID() 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 internalFreezeFlag() const
static uint8_t physicalOrderForStripInAPV(const uint8_t readoutOrderStripIndexInAPV)
static const uint16_t FEDCH_PER_FEUNIT
uint8_t ttsNibble() const
bool checkNoUnexpectedSourceID() const
const FEDChannel & channel(const uint8_t internalFEDChannelNum) const
Constants and enumerated types for FED/FEC systems.
FEDBackendStatusRegister & setTrackerHeaderMonitorDataReadyFlag(const bool bitSet)
bool checkAPVEAddressValid() const
bool backpressureFlag() const
FEDDAQTrailer daqTrailer() const
uint8_t eventStatusNibble() const
FEDBufferState feEventLengthFIFOState() const
FEDBackendStatusRegister & setSLinkFullFlag(const bool bitSet)
void setBufferSate(const uint8_t bufferPosition, const FEDBufferState state)
TrackerSpecialHeader specialHeader_
virtual bool channelGood(const uint8_t internalFEDChannelNum) const
FEDBufferState totalLengthFIFOState() const
char data[epos_bytes_allocation]
static const uint16_t FEDCH_PER_FED
static const uint16_t STRIPS_PER_APV
void printFlags(std::ostream &os) const
FEDStatusRegister fedStatusRegister() const
bool qdrMemoryEmptyFlag() const
FEDBackendStatusRegister & setFEEventLengthFIFOState(const FEDBufferState state)
static const uint8_t PACKET_CODE_PROC_RAW8_BOTBOT
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
bool checkBufferFormat() const
TrackerSpecialHeader trackerSpecialHeader() const
static const uint8_t BUFFER_FORMAT_CODE_OLD
FEDBufferStatusCode preconstructCheckFEDBufferBase(const FEDRawData &fedBuffer, bool checkRecognizedFormat=true)
bool doTrackerSpecialHeaderChecks() const
static const uint16_t SCOPE_MODE_MAX_SCOPE_LENGTH
static uint8_t readoutOrderForStripInAPV(const uint8_t physicalOrderStripIndexInAPV)
FEDStatusRegister & setQDRMemoryBufferState(const FEDBufferState state)
bool checkHeaderType() const
uint32_t daqEventLengthIn64bitWords() const
bool trackerHeaderMonitorDataReadyFlag() const
FEDBackendStatusRegister & setInternalFreezeFlag(const bool bitSet)
static const uint8_t PACKET_CODE_PROC_RAW8_TOPBOT
void setL1ABXFIFOEmptyFlag(const bool bitSet)
FEDBackendStatusRegister & setBackpressureFlag(const bool bitSet)
uint32_t eventLengthInBytes() const
static const uint8_t PACKET_CODE_VIRGIN_RAW
uint8_t apveAddress() const
void setQDRMemoryPartialFullFlag(const bool bitSet)
FEDBackendStatusRegister & setSLinkDownFlag(const bool bitSet)
uint8_t packetCode(bool legacy=false, const uint8_t internalFEDChannelNum=0) const
virtual void print(std::ostream &os) const