00001 #ifndef PixelDataFormatter_H
00002 #define PixelDataFormatter_H
00003
00034 #include "DataFormats/SiPixelDigi/interface/PixelDigi.h"
00035 #include "DataFormats/SiPixelRawData/interface/SiPixelRawDataError.h"
00036 #include "DataFormats/Common/interface/DetSetVector.h"
00037 #include "EventFilter/SiPixelRawToDigi/interface/ErrorChecker.h"
00038
00039 #include <boost/cstdint.hpp>
00040 #include <vector>
00041 #include <map>
00042
00043 class FEDRawData;
00044
00045 class SiPixelFedCablingMap;
00046 class SiPixelFrameConverter;
00047
00048 class PixelDataFormatter {
00049
00050 public:
00051
00052 typedef std::vector<PixelDigi> DetDigis;
00053 typedef std::map<uint32_t, DetDigis> Digis;
00054
00055 typedef std::pair<DetDigis::const_iterator, DetDigis::const_iterator> Range;
00056
00057 typedef std::vector<SiPixelRawDataError> DetErrors;
00058 typedef std::map<uint32_t, DetErrors> Errors;
00059
00060 PixelDataFormatter(const SiPixelFedCablingMap * map);
00061
00062 void setErrorStatus(bool ErrorStatus, bool OrderStatus);
00063
00064 int nDigis() const { return theDigiCounter; }
00065 int nWords() const { return theWordCounter; }
00066
00067 void interpretRawData(bool& errorsInEvent, int fedId, const FEDRawData & data, Digis & digis, Errors & errors);
00068
00069 FEDRawData * formatData( unsigned int lvl1_ID, int fedId, const Digis & digis);
00070
00071 private:
00072 mutable int theDigiCounter;
00073 mutable int theWordCounter;
00074
00075 const SiPixelFedCablingMap * theCablingMap;
00076 bool includeErrors;
00077 bool checkOrder;
00078 ErrorChecker errorcheck;
00079
00080 typedef unsigned int Word32;
00081 typedef long long Word64;
00082
00083
00084
00085 int checkError(const Word32& data) const;
00086
00087 int digi2word( const SiPixelFrameConverter* converter,
00088 uint32_t detId, const PixelDigi& digi,
00089 std::vector<Word32> & words) const;
00090
00091 int word2digi( const SiPixelFrameConverter* converter,
00092 const bool includeError,
00093 const Word32& word,
00094 Digis & digis) const;
00095
00096 std::string print(const PixelDigi & digi) const;
00097 std::string print(const Word64 & word) const;
00098
00099 uint32_t errorDetId(const SiPixelFrameConverter* converter,
00100 int fedId, int errorType, const Word32 & word) const;
00101
00102 static const int LINK_bits, ROC_bits, DCOL_bits, PXID_bits, ADC_bits;
00103 static const int LINK_shift, ROC_shift, DCOL_shift, PXID_shift, ADC_shift;
00104 };
00105
00106 #endif