00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "LtbReadoutFormat/LtbHead.h"
00011
00012 #include "DaqReadoutFormat/ByteBuffer.h"
00013 #include "LtbReadoutFormat/LtbTraits.h"
00014
00015 using DybDaq::ByteBuffer;
00016 using DybDaq::DaqTraits;
00017 using DybDaq::LtbBuffer;
00018 using DybDaq::LtbHead;
00019
00020 LtbHead::LtbHead(const unsigned int localTriggerNumber,
00021 const unsigned int rawTriggerTotal,
00022 const unsigned int ltbStatus,
00023 const bool clockError,
00024 const LtbTraits& traits) :
00025 LtbBuffer(new char[traits.headSize() * kBytesInInt],
00026 traits) {
00027 m_traits = &traits;
00028 traits.initializeHead(buffer());
00029 setRawTriggerTotal(rawTriggerTotal);
00030 setRawTriggersSaved(0);
00031 setLtbStatus(ltbStatus);
00032 setLocalTriggerNumber(localTriggerNumber);
00033 setClockError(clockError);
00034 }
00035
00036 LtbHead::LtbHead(const ByteBuffer& byteBuffer) :
00037 LtbBuffer(byteBuffer,
00038 *((LtbTraits*)0)) {
00039 const char* buffer = byteBuffer.cursor();
00040 m_traits = LtbTraits::readTraits(buffer);
00041 byteBuffer.position(byteBuffer.position() + kBytesInInt);
00042 }
00043
00044 LtbHead::~LtbHead() {
00045 }
00046
00047 const DaqTraits& LtbHead::daqTraits() const {
00048 return *m_traits;
00049 }
00050
00051 unsigned int LtbHead::formatComponent() const {
00052 return LtbTraits::kHead;
00053 }
00054
00055 unsigned int LtbHead::version() const {
00056 return readUnsignedInt(LtbTraits::kVersion);
00057 }
00058
00059 unsigned int LtbHead::rawTriggerTotal() const {
00060 return readUnsignedInt(LtbTraits::kRawTriggerTotal);
00061 }
00062
00063 unsigned int LtbHead::rawTriggersSaved() const {
00064 return readUnsignedInt(LtbTraits::kRawTriggersSaved);
00065 }
00066
00067 unsigned int LtbHead::ltbStatus() const {
00068 return readUnsignedInt(LtbTraits::kLtbStatus);
00069 }
00070
00071 unsigned int LtbHead::localTriggerNumber() const {
00072 return readUnsignedInt(LtbTraits::kLocalTriggerNumber);
00073 }
00074
00075 bool LtbHead::clockError() const {
00076 return readBool(LtbTraits::kClockError);
00077 }
00078
00079 unsigned int LtbHead::bufferSize() const {
00080 return ltbTraits().headSize();
00081 }
00082
00083 void LtbHead::setRawTriggerTotal(const unsigned int rawTriggerTotal) {
00084 writeField(rawTriggerTotal,
00085 LtbTraits::kRawTriggerTotal);
00086 }
00087
00088 void LtbHead::setRawTriggersSaved(const unsigned int rawTriggersSaved) {
00089 writeField(rawTriggersSaved,
00090 LtbTraits::kRawTriggersSaved);
00091 }
00092
00093 void LtbHead::setLtbStatus(const unsigned int ltbStatus) {
00094 writeField(ltbStatus,
00095 LtbTraits::kLtbStatus);
00096 }
00097
00098 void LtbHead::setLocalTriggerNumber(const unsigned int localTriggerNumber) {
00099 writeField(localTriggerNumber,
00100 LtbTraits::kLocalTriggerNumber);
00101 }
00102
00103 void LtbHead::setClockError(const bool clockError) {
00104 writeField(clockError,
00105 LtbTraits::kClockError);
00106 }