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,
1509 const uint8_t internalChannelNum)
const {
1561 : data_(
data), offset_(
offset), length_(length) {}
1580 #endif //ndef EventFilter_SiStripRawToDigi_FEDBufferComponents_H