Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:10:56

0001 #ifndef EventFilter_Phase2TrackerRawToDigi_Phase2TrackerPhase2TrackerFEDZSChannelUnpacker_H  // {
0002 #define EventFilter_Phase2TrackerRawToDigi_Phase2TrackerPhase2TrackerFEDZSChannelUnpacker_H
0003 
0004 #include "EventFilter/Phase2TrackerRawToDigi/interface/Phase2TrackerFEDDAQHeader.h"
0005 #include "EventFilter/Phase2TrackerRawToDigi/interface/Phase2TrackerFEDDAQTrailer.h"
0006 #include "EventFilter/Phase2TrackerRawToDigi/interface/Phase2TrackerFEDChannel.h"
0007 #include <cstdint>
0008 
0009 namespace Phase2Tracker {
0010 
0011   class Phase2TrackerFEDZSChannelUnpacker {
0012   public:
0013     Phase2TrackerFEDZSChannelUnpacker(const Phase2TrackerFEDChannel& channel);
0014     uint8_t clusterIndex() const { return data_[currentOffset_ ^ 7]; }
0015     uint8_t clusterLength() const { return data_[(currentOffset_ + 1) ^ 7]; }
0016     bool hasData() const { return valuesLeft_; }
0017     Phase2TrackerFEDZSChannelUnpacker& operator++();
0018     Phase2TrackerFEDZSChannelUnpacker& operator++(int);
0019 
0020   private:
0021     const uint8_t* data_;
0022     uint8_t currentOffset_;
0023     uint16_t valuesLeft_;
0024   };
0025 
0026   // unpacker for ZS CBC data
0027   inline Phase2TrackerFEDZSChannelUnpacker::Phase2TrackerFEDZSChannelUnpacker(const Phase2TrackerFEDChannel& channel)
0028       : data_(channel.data()), currentOffset_(channel.offset()), valuesLeft_(channel.length() / 2) {}
0029 
0030   inline Phase2TrackerFEDZSChannelUnpacker& Phase2TrackerFEDZSChannelUnpacker::operator++() {
0031     currentOffset_ = currentOffset_ + 2;
0032     valuesLeft_--;
0033     return (*this);
0034   }
0035 
0036   inline Phase2TrackerFEDZSChannelUnpacker& Phase2TrackerFEDZSChannelUnpacker::operator++(int) {
0037     ++(*this);
0038     return *this;
0039   }
0040 
0041 }  // namespace Phase2Tracker
0042 
0043 #endif  // } end def EventFilter_Phase2TrackerRawToDigi_Phase2TrackerPhase2TrackerFEDZSChannelUnpacker_H