File indexing completed on 2024-04-06 12:10:47
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef EventFilter_L1TRawToDigi_MP7PacketReader_h
0009 #define EventFilter_L1TRawToDigi_MP7PacketReader_h
0010
0011 #include "EventFilter/L1TRawToDigi/interface/MP7FileReader.h"
0012
0013 typedef std::pair<uint32_t, uint32_t> PacketRange;
0014
0015 class Packet {
0016 public:
0017 typedef std::map<uint32_t, std::vector<uint32_t> > LinkMap;
0018
0019 size_t size() const { return last_ - first_ + 1; }
0020 uint32_t first_;
0021 uint32_t last_;
0022 LinkMap links_;
0023 };
0024
0025 class PacketData {
0026 public:
0027 const std::string& name() const { return name_; }
0028
0029 typedef std::vector<Packet>::const_iterator const_iterator;
0030
0031 const_iterator begin() const { return packets_.begin(); }
0032
0033 const_iterator end() const { return packets_.end(); }
0034
0035 size_t size() const { return packets_.size(); }
0036
0037 private:
0038 std::string name_;
0039 std::vector<Packet> packets_;
0040
0041 friend class MP7PacketReader;
0042 };
0043
0044 class MP7PacketReader {
0045 public:
0046 typedef std::vector<PacketData>::const_iterator const_iterator;
0047
0048 MP7PacketReader(const std::string& path, uint32_t striphdr = 0, uint32_t stripftr = 0, uint32_t ikey = 0);
0049
0050
0051
0052 virtual ~MP7PacketReader();
0053
0054 bool valid() const { return reader_.valid(); }
0055
0056 const PacketData& get(size_t i) { return buffers_.at(i); }
0057
0058 const_iterator begin() const { return buffers_.begin(); }
0059
0060 const_iterator end() const { return buffers_.end(); }
0061
0062 size_t size() const { return buffers_.size(); }
0063
0064 private:
0065 void load();
0066 static std::vector<PacketRange> findPackets(std::vector<uint64_t> data);
0067
0068 std::vector<PacketData> buffers_;
0069 MP7FileReader reader_;
0070 uint32_t header_;
0071 uint32_t footer_;
0072 uint32_t ikey_;
0073 };
0074
0075 #endif