File indexing completed on 2024-04-06 12:10:21
0001 #ifndef EventFilter_CSCRawToDigi_CSCCFEBData_h
0002 #define EventFilter_CSCRawToDigi_CSCCFEBData_h
0003
0004 class CSCCFEBTimeSlice;
0005 class CSCStripDigi;
0006 class CSCCFEBStatusDigi;
0007
0008 #include <vector>
0009 #include <iosfwd>
0010 #include <iostream>
0011 #include <cstdint>
0012
0013 class CSCCFEBData {
0014 public:
0015
0016 CSCCFEBData(unsigned boardNumber, const uint16_t *buf, uint16_t theFormatVersion = 2005, bool fDCFEB = false);
0017
0018 CSCCFEBData(unsigned boardNumber, bool sixteenSamples, uint16_t theFormatVersion = 2005, bool fDCFEB = false);
0019
0020 unsigned nTimeSamples() const { return theNumberOfSamples; }
0021
0022
0023 const CSCCFEBTimeSlice *timeSlice(unsigned i) const;
0024
0025 unsigned adcCounts(unsigned layer, unsigned channel, unsigned timeBin) const;
0026 unsigned adcOverflow(unsigned layer, unsigned channel, unsigned timeBin) const;
0027 unsigned controllerData(unsigned uglay, unsigned ugchan, unsigned timeBin) const;
0028 unsigned overlappedSampleFlag(unsigned layer, unsigned channel, unsigned timeBin) const;
0029 unsigned errorstat(unsigned layer, unsigned channel, unsigned timeBin) const;
0030
0031 void add(const CSCStripDigi &, int layer);
0032
0033
0034
0035
0036 void digis(uint32_t idlayer, std::vector<CSCStripDigi> &result) const;
0037
0038 std::vector<CSCStripDigi> digis(unsigned idlayer) const;
0039
0040 std::vector<std::vector<CSCStripDigi> > stripDigis();
0041
0042
0043 CSCCFEBStatusDigi statusDigi() const;
0044
0045 uint16_t *data() { return theData; }
0046 unsigned sizeInWords() const { return theSize; }
0047 unsigned boardNumber() const { return boardNumber_; }
0048 void setBoardNumber(int cfeb) { boardNumber_ = cfeb; }
0049 void setL1A(unsigned l1a);
0050 void setL1A(unsigned sample, unsigned l1a);
0051
0052 friend std::ostream &operator<<(std::ostream &os, const CSCCFEBData &);
0053 static void selfTest();
0054
0055
0056 bool check() const;
0057
0058 bool isDCFEB() const { return fDCFEB; }
0059
0060 private:
0061 CSCCFEBTimeSlice *timeSlice(unsigned i);
0062
0063 uint16_t theData[1600];
0064
0065
0066 std::vector<std::pair<int, bool> > theSliceStarts;
0067
0068 int theSize;
0069 unsigned boardNumber_;
0070 unsigned theNumberOfSamples;
0071 std::vector<uint16_t> bWords;
0072 uint16_t theFormatVersion;
0073 bool fDCFEB;
0074 };
0075
0076 #endif