00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "Event/DaqLtb.h"
00010
00011 #include "Conventions/Detectors.h"
00012 #include "Event/DaqLtbFrame.h"
00013 #include "LtbReadoutFormat/LtbHead.h"
00014 #include "LtbReadoutFormat/LtbReadout.h"
00015 #include "LtbReadoutFormat/LtbTraits.h"
00016
00017 using DayaBay::Detector;
00018 using DayaBay::DaqLtb;
00019 using DayaBay::DaqLtbFrame;
00020 using DybDaq::LtbHead;
00021 using DybDaq::LtbReadout;
00022 using DybDaq::LtbTraits;
00023
00024 DaqLtb::DaqLtb(const LtbReadout& ltbReadout,
00025 const Detector& detector) :
00026 m_ltbReadout(const_cast<LtbReadout*>(<bReadout)),
00027 m_detector(&detector),
00028 m_framePtrs(0) {
00029 }
00030
00031 DaqLtb::DaqLtb(const unsigned int localTriggerNumber,
00032 const unsigned int rawTriggerTotal,
00033 const unsigned int ltbStatus,
00034 const Detector& detector) :
00035 m_ltbReadout(new LtbReadout(localTriggerNumber,
00036 rawTriggerTotal,
00037 ltbStatus,
00038 false,
00039 LtbTraits::defaultTraits())),
00040 m_detector(&detector),
00041 m_framePtrs(0) {
00042 }
00043
00044 DaqLtb::~DaqLtb() {
00045 if (0 != m_framePtrs) {
00046 LtbFramePtrList::iterator finished = m_framePtrs->end();
00047 for(LtbFramePtrList::iterator frame = m_framePtrs->begin();
00048 frame != finished;
00049 ++frame) {
00050 delete *frame;
00051 }
00052 delete m_framePtrs;
00053 }
00054 }
00055
00056 const DaqLtbFrame& DaqLtb::firstFrame() const {
00057 return *(frames().front());
00058 }
00059
00060 const DaqLtb::LtbFramePtrList& DaqLtb::frames() const {
00061 if (0 == m_framePtrs) {
00062 LtbFramePtrList** framePtrs = const_cast<LtbFramePtrList**>(&m_framePtrs);
00063 *(framePtrs) = new LtbFramePtrList();
00064 const LtbReadout::LtbFramePtrList& frames = m_ltbReadout->ltbFrames();
00065 const LtbReadout::LtbFramePtrList::const_iterator finished = frames.end();
00066 for (LtbReadout::LtbFramePtrList::const_iterator frame = frames.begin();
00067 finished != frame;
00068 ++frame) {
00069 (*framePtrs)->push_back(new DaqLtbFrame(*(*frame),
00070 *m_detector));
00071 }
00072 }
00073 return *m_framePtrs;
00074 }
00075
00076 unsigned int DaqLtb::localTriggerNumber() const {
00077 return m_ltbReadout->head().localTriggerNumber();
00078 }
00079
00080 const LtbReadout* DaqLtb::ltbReadout() const {
00081 return m_ltbReadout;
00082 }
00083
00084 bool DaqLtb::addFrame(DaqLtbFrame* frame) {
00085 if (0 == m_framePtrs) {
00086 m_framePtrs = new LtbFramePtrList();
00087 }
00088 m_framePtrs->push_back(frame);
00089 m_ltbReadout->addFrame(frame->ltbFrame());
00090 return true;
00091 }