1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#ifndef EventFilter_Phase2TrackerRawToDigi_Phase2TrackerPhase2TrackerFEDBuffer_H // {
#define EventFilter_Phase2TrackerRawToDigi_Phase2TrackerPhase2TrackerFEDBuffer_H
#include "EventFilter/Phase2TrackerRawToDigi/interface/Phase2TrackerFEDDAQHeader.h"
#include "EventFilter/Phase2TrackerRawToDigi/interface/Phase2TrackerFEDDAQTrailer.h"
#include "EventFilter/Phase2TrackerRawToDigi/interface/Phase2TrackerFEDHeader.h"
#include "EventFilter/Phase2TrackerRawToDigi/interface/Phase2TrackerFEDChannel.h"
#include <cstdint>
#include <vector>
#include <map>
namespace Phase2Tracker {
class Phase2TrackerFEDBuffer {
public:
// gets data of one tracker FED to check, analyze and sort it
Phase2TrackerFEDBuffer(const uint8_t* fedBuffer, const size_t fedBufferSize);
~Phase2TrackerFEDBuffer();
//dump buffer to stream
void dump(std::ostream& os) const { printHex(buffer_, bufferSize_, os); }
//methods to get parts of the buffer
FEDDAQHeader daqHeader() const { return daqHeader_; }
FEDDAQTrailer daqTrailer() const { return daqTrailer_; }
size_t bufferSize() const { return bufferSize_; }
Phase2TrackerFEDHeader trackerHeader() const { return trackerHeader_; }
const Phase2TrackerFEDChannel& channel(const uint8_t internalPhase2TrackerFEDChannelNum) const {
return channels_[internalPhase2TrackerFEDChannelNum];
}
std::map<uint32_t, uint32_t> conditionData() const;
//methods to get info from DAQ header from FEDDAQHeader class
FEDDAQEventType daqEventType() const { return daqHeader_.eventType(); }
uint32_t daqLvl1ID() const { return daqHeader_.l1ID(); }
uint16_t daqBXID() const { return daqHeader_.bxID(); }
uint16_t daqSourceID() const { return daqHeader_.sourceID(); }
//methods to get info from DAQ trailer from FEDDAQTrailer class
uint32_t daqEventLengthIn64bitWords() const { return daqTrailer_.eventLengthIn64BitWords(); }
uint32_t daqEventLengthInBytes() const { return daqTrailer_.eventLengthInBytes(); }
uint16_t daqCRC() const { return daqTrailer_.crc(); }
FEDTTSBits daqTTSState() const { return daqTrailer_.ttsBits(); }
//methods to get info from the tracker header using Phase2TrackerFEDHeader class
FEDReadoutMode readoutMode() const;
inline const uint8_t* getPointerToPayload() const { return trackerHeader_.getPointerToData(); }
inline const uint8_t* getPointerToCondData() const { return condDataPointer_; }
inline const uint8_t* getPointerToTriggerData() const { return triggerPointer_; }
private:
const uint8_t* buffer_;
const size_t bufferSize_;
std::vector<Phase2TrackerFEDChannel> channels_;
FEDDAQHeader daqHeader_;
FEDDAQTrailer daqTrailer_;
Phase2TrackerFEDHeader trackerHeader_;
const uint8_t* payloadPointer_;
const uint8_t* condDataPointer_;
const uint8_t* triggerPointer_;
void findChannels();
//////////////// Deprecated or dummy implemented methods ///////////////////
public:
// check methods
inline bool doChecks() const { return true; } // FEDBuffer
inline bool checkNoFEOverflows() const { return true; } // FEDBufferBase
inline bool doCorruptBufferChecks() const { return true; } // FEDBuffer
}; // end of FEDBuffer class
} // namespace Phase2Tracker
#endif // } end def EventFilter_Phase2TrackerRawToDigi_Phase2TrackerPhase2TrackerFEDBuffer_H
|