1 #ifndef EventFilter_SiStripRawToDigi_SiStripFEDBuffer_H 2 #define EventFilter_SiStripRawToDigi_SiStripFEDBuffer_H 27 FEDBuffer(
const uint8_t* fedBuffer,
const uint16_t fedBufferSize,
const bool allowBadBuffer =
false);
29 void print(std::ostream& os)
const override;
32 bool feGood(
const uint8_t internalFEUnitNum)
const;
37 bool fePresent(uint8_t internalFEUnitNum)
const;
40 virtual bool channelGood(
const uint8_t internalFEDannelNum,
const bool doAPVeCheck =
true)
const;
46 virtual bool doChecks(
bool doCRC =
true)
const;
65 bool checkStatusBits(
const uint8_t internalFEUnitNum,
const uint8_t internalChannelNum)
const;
95 uint8_t sampleNumber()
const;
97 uint16_t adcPreMix()
const;
105 const uint16_t channelPayloadOffset,
106 const int16_t channelPayloadLength,
107 const uint16_t offsetIncrement = 1);
108 void readNewClusterInfo();
109 static void throwBadChannelLength(
const uint16_t length);
110 void throwBadClusterLength();
111 static void throwUnorderedData(
const uint8_t currentStrip,
const uint8_t firstStripOfNewCluster);
132 uint8_t sampleNumber()
const;
133 uint16_t
adc()
const;
134 bool hasData()
const;
139 static void throwBadChannelLength(
const uint16_t length);
153 uint8_t sampleNumber()
const;
154 uint16_t
adc()
const;
155 bool hasData()
const;
162 const uint16_t channelPayloadOffset,
163 const int16_t channelPayloadLength,
164 const uint16_t offsetIncrement,
166 void readNewClusterInfo();
167 static void throwBadChannelLength(
const uint16_t length);
168 static void throwBadWordLength(
const uint16_t word_length);
169 static void throwUnorderedData(
const uint8_t currentStrip,
const uint8_t firstStripOfNewCluster);
202 return feHeader_->checkChannelStatusBits(internalFEDChannelNum);
214 currentWordOffset_(0),
215 currentLocalBitOffset_(0),
216 bitOffsetIncrement_(10),
218 channelPayloadOffset_(0),
219 channelPayloadLength_(0),
221 valuesLeftInCluster_(0) {}
224 const uint16_t channelPayloadOffset,
225 const int16_t channelPayloadLength,
226 const uint16_t offsetIncrement,
246 uint16_t length = channel.
length();
249 if (num_bits <= 0 or num_bits > 16)
257 uint16_t length = channel.
length();
266 uint16_t length = channel.
length();
291 return (plusOneBitOffset % BITS_PER_BYTE) ? (plusOneWordOffset < nextChanWordOffset)
292 : (plusOneWordOffset <= nextChanWordOffset);
339 currentOffset_(channel.
offset() + 3),
341 valuesLeft_((channel.length() - 3) / 2) {
342 if ((channel.
length() - 3) % 2)
371 valuesLeftInCluster_(0),
372 channelPayloadOffset_(0),
373 channelPayloadLength_(0) {}
376 const uint16_t channelPayloadOffset,
377 const int16_t channelPayloadLength,
378 const uint16_t offsetIncrement)
391 uint16_t length = channel.
length();
399 uint16_t length = channel.
length();
408 uint16_t length = channel.
length();
456 #endif //ndef EventFilter_SiStripRawToDigi_SiStripFEDBuffer_H static FEDRawChannelUnpacker procRawModeUnpacker(const FEDChannel &channel)
virtual bool doChecks() const
static void throwUnorderedData(const uint8_t currentStrip, const uint8_t firstStripOfNewCluster)
bool checkFEUnitLengths() const
static FEDZSChannelUnpacker zeroSuppressedModeUnpacker(const FEDChannel &channel)
bool checkStatusBits(const uint8_t internalFEDChannelNum) const
static void throwBadChannelLength(const uint16_t length)
virtual bool doCorruptBufferChecks() const
static void throwBadWordLength(const uint16_t word_length)
bool checkFEPayloadsPresent() const
static FEDZSChannelUnpacker preMixRawModeUnpacker(const FEDChannel &channel)
static FEDRawChannelUnpacker scopeModeUnpacker(const FEDChannel &channel)
void readNewClusterInfo()
static FEDRawChannelUnpacker virginRawModeUnpacker(const FEDChannel &channel)
FEDRawChannelUnpacker(const FEDChannel &channel)
uint8_t internalFEDChannelNum(const uint8_t internalFEUnitNum, const uint8_t internalFEUnitChannelNum)
static FEDBSChannelUnpacker zeroSuppressedModeUnpacker(const FEDChannel &channel, uint16_t num_bits)
static void throwBadChannelLength(const uint16_t length)
static void throwUnorderedData(const uint8_t currentStrip, const uint8_t firstStripOfNewCluster)
static FEDBSChannelUnpacker zeroSuppressedLiteModeUnpacker(const FEDChannel &channel, uint16_t num_bits)
static FEDBSChannelUnpacker virginRawModeUnpacker(const FEDChannel &channel, uint16_t num_bits)
const FEDFEHeader * feHeader() const
virtual bool channelGood(const uint8_t internalFEDannelNum, const bool doAPVeCheck=true) const
bool feGoodWithoutAPVEmulatorCheck(const uint8_t internalFEUnitNum) const
bool fePresent_[FEUNITS_PER_FED]
void setLegacyMode(bool legacy)
uint8_t sampleNumber() const
uint16_t adcPreMix() const
const uint8_t * payloadPointer_
bool fePresent(uint8_t internalFEUnitNum) const
bool majorityAddressErrorForFEUnit(const uint8_t internalFEUnitNum) const
static const uint16_t FEUNITS_PER_FED
uint8_t sampleNumber() const
uint16_t channelPayloadLength_
uint8_t valuesLeftInCluster_
uint8_t packetCode(bool legacy=false, const uint8_t internalFEDChannelNum=0) const
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
uint8_t valuesLeftInCluster_
const FEDChannel & channel(const uint8_t internalFEDChannelNum) const
uint16_t channelPayloadOffset_
FEDRawChannelUnpacker & operator++()
bool checkChannelPacketCodes() const
void readNewClusterInfo()
uint8_t sampleNumber() const
FEDZSChannelUnpacker & operator++()
static FEDZSChannelUnpacker zeroSuppressedLiteModeUnpacker(const FEDChannel &channel)
uint8_t nFEUnitsPresent() const
uint16_t currentWordOffset_
uint16_t currentLocalBitOffset_
uint16_t bitOffsetIncrement_
uint16_t channelPayloadOffset_
std::unique_ptr< FEDFEHeader > feHeader_
bool checkFEUnitAPVAddresses() const
std::string checkSummary() const override
const uint8_t * data() const
FEDBuffer(const uint8_t *fedBuffer, const uint16_t fedBufferSize, const bool allowBadBuffer=false)
uint8_t getCorrectPacketCode() const
bool checkChannelLengthsMatchBufferLength() const
char data[epos_bytes_allocation]
bool checkAllChannelStatusBits() const
static void throwBadChannelLength(const uint16_t length)
virtual bool channelGood(const uint8_t internalFEDChannelNum) const
uint16_t channelPayloadLength_
uint16_t calculateFEUnitLength(const uint8_t internalFEUnitNumber) const
bool checkChannelLengths() const
bool feGood(const uint8_t internalFEUnitNum) const
FEDBSChannelUnpacker & operator++()
void print(std::ostream &os) const override
bool feOverflow(const uint8_t internalFEUnitNum) const
uint16_t offsetIncrement_