00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "EventReadoutFormat/EventHeader.h"
00010
00011 #include "DaqReadoutFormat/ByteBuffer.h"
00012 #include "EventReadoutFormat/EventTraits.h"
00013
00014 using DybDaq::ByteBuffer;
00015 using DybDaq::DaqTraits;
00016 using DybDaq::EventHeader;
00017 using DybDaq::EventBuffer;
00018
00019 EventHeader::EventHeader(const unsigned int site,
00020 const unsigned int detector,
00021 const unsigned int run,
00022 const unsigned int event,
00023 const unsigned int dataType,
00024 const bool cbltWrapping,
00025 const bool rawCblt,
00026 const bool triggerMismatch,
00027 const bool invalidData,
00028 const EventTraits& traits) :
00029 EventBuffer(new char[traits.headerSize(EventTraits::kEventHeader) * kBytesInInt],
00030 traits) {
00031 m_traits = &traits;
00032 traits.initializeHeader(EventTraits::kEventHeader,
00033 buffer());
00034 setMajorVersion(traits.majorVersion());
00035 setMinorVersion(traits.minorVersion());
00036 setHeaderSize(traits.headerSize(EventTraits::kEventHeader)),
00037 setTotalSize(headerSize());
00038 setSite(site);
00039 setDetector(detector);
00040 setRun(run);
00041 setEvent(event);
00042 setDataType(dataType);
00043 setCbltWrapping(cbltWrapping);
00044 setRawCblt(rawCblt);
00045 setTriggerMismatch(triggerMismatch);
00046 setInvalidData(invalidData);
00047 }
00048
00049 EventHeader::EventHeader(const ByteBuffer& byteBuffer) :
00050 EventBuffer(byteBuffer,
00051 *((EventTraits*)0)) {
00052 const char* buffer = byteBuffer.cursor();
00053 m_traits = EventTraits::readTraits(buffer);
00054 byteBuffer.position(byteBuffer.position() + (headerSize() * kBytesInInt));
00055 }
00056
00057 EventHeader::~EventHeader() {
00058 }
00059
00060 const DaqTraits& EventHeader::daqTraits() const {
00061 return *m_traits;
00062 }
00063
00064 unsigned int EventHeader::formatComponent() const {
00065 return EventTraits::kEventHeader;
00066 }
00067
00068 unsigned int EventHeader::majorVersion() const {
00069 return readUnsignedInt(EventTraits::kMajorVersion);
00070 }
00071
00072 unsigned int EventHeader::minorVersion() const {
00073 return readUnsignedInt(EventTraits::kMinorVersion);
00074 }
00075
00076 unsigned int EventHeader::headerSize() const {
00077 return readUnsignedInt(EventTraits::kEventHeaderSize);
00078 }
00079
00080 unsigned int EventHeader::totalSize() const {
00081 return readUnsignedInt(EventTraits::kEventTotalSize);
00082 }
00083
00084 unsigned int EventHeader::site() const {
00085 return readUnsignedInt(EventTraits::kEventSite);
00086 }
00087
00088 unsigned int EventHeader::detector() const {
00089 return readUnsignedInt(EventTraits::kEventDetector);
00090 }
00091
00092 unsigned int EventHeader::run() const {
00093 return readUnsignedInt(EventTraits::kEventRun);
00094 }
00095
00096 unsigned int EventHeader::event() const {
00097 return readUnsignedInt(EventTraits::kEventNumber);
00098 }
00099
00100 unsigned int EventHeader::dataType() const {
00101 return readUnsignedInt(EventTraits::kEventDataType);
00102 }
00103
00104 bool EventHeader::cbltWrapping() const {
00105 return readBool(EventTraits::kCbltWrapping);
00106 }
00107
00108 bool EventHeader::rawCblt() const {
00109 return readBool(EventTraits::kRawCblt);
00110 }
00111
00112 bool EventHeader::triggerMismatch() const{
00113 return readBool(EventTraits::kLtbMismatch);
00114 }
00115
00116 bool EventHeader::invalidData() const{
00117 return readBool(EventTraits::kInvalidData);
00118 }
00119
00120 unsigned int EventHeader::bufferSize() const {
00121 return headerSize();
00122 }
00123
00124 void EventHeader::setMajorVersion(const unsigned int majorVersion) {
00125 writeField(majorVersion,
00126 EventTraits::kMajorVersion);
00127 }
00128
00129 void EventHeader::setMinorVersion(const unsigned int minorVersion) {
00130 writeField(minorVersion,
00131 EventTraits::kMinorVersion);
00132 }
00133
00134 void EventHeader::setHeaderSize(const unsigned int headerLength) {
00135 writeField(headerLength,
00136 EventTraits::kEventHeaderSize);
00137 }
00138
00139 void EventHeader::setTotalSize(const unsigned int totalLength) {
00140 writeField(totalLength,
00141 EventTraits::kEventTotalSize);
00142 }
00143
00144 void EventHeader::setSite(const unsigned int site) {
00145 writeField(site,
00146 EventTraits::kEventSite);
00147 }
00148
00149 void EventHeader::setDetector(const unsigned int detector) {
00150 writeField(detector,
00151 EventTraits::kEventDetector);
00152 }
00153
00154 void EventHeader::setRun(const unsigned int run) {
00155 writeField(run,
00156 EventTraits::kEventRun);
00157 }
00158
00159 void EventHeader::setEvent(const unsigned int event) {
00160 writeField(event,
00161 EventTraits::kEventNumber);
00162 }
00163
00164 void EventHeader::setDataType(const unsigned int dataType) {
00165 writeField(dataType,
00166 EventTraits::kEventDataType);
00167 }
00168
00169 void EventHeader::setCbltWrapping(const bool cbltWrapping) {
00170 writeField(cbltWrapping,
00171 EventTraits::kCbltWrapping);
00172 }
00173
00174 void EventHeader::setRawCblt(const bool rawCblt) {
00175 writeField(rawCblt,
00176 EventTraits::kRawCblt);
00177 }
00178
00179 void EventHeader::setTriggerMismatch(const bool triggerMismatch) {
00180 writeField(triggerMismatch,
00181 EventTraits::kLtbMismatch);
00182 }
00183
00184 void EventHeader::setInvalidData(const bool invalidData) {
00185 writeField(invalidData,
00186 EventTraits::kInvalidData);
00187 }
00188
00189
00190