Back to home page

Project CMSSW displayed by LXR

 
 

    


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   /// read from an existing data stream.
0016   CSCCFEBData(unsigned boardNumber, const uint16_t *buf, uint16_t theFormatVersion = 2005, bool fDCFEB = false);
0017   /// create,
0018   CSCCFEBData(unsigned boardNumber, bool sixteenSamples, uint16_t theFormatVersion = 2005, bool fDCFEB = false);
0019 
0020   unsigned nTimeSamples() const { return theNumberOfSamples; }
0021 
0022   /// count from 0.  User should check if it's a bad slice
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   /// Fill strip digis for layer with raw detid = idlayer
0033   /// WARNING: these digis have no comparator information.
0034 
0035   ///faster way to get to digis
0036   void digis(uint32_t idlayer, std::vector<CSCStripDigi> &result) const;
0037 
0038   std::vector<CSCStripDigi> digis(unsigned idlayer) const;
0039   /// deprecated.  Use the above method.
0040   std::vector<std::vector<CSCStripDigi> > stripDigis();
0041 
0042   /// returns one status digi per cfeb
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   /// makes sure each time slice has a trailer
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   /// Shows where in theData the words start.  A bad slice will
0065   /// be tagged with a false
0066   std::vector<std::pair<int, bool> > theSliceStarts;
0067   /// in words
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