| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

FadcReadout.cc

Go to the documentation of this file.
00001 /*
00002  *  FadcReadout.cc
00003  *  FadcReadoutFormat
00004  *
00005  *  Created by Simon Patton on 9/2/10.
00006  *  Copyright 2010 DayaBay Collaboration. All rights reserved.
00007  *
00008  */
00009 #include "FadcReadoutFormat/FadcReadout.h"
00010 
00011 #include "DaqReadoutFormat/ByteBuffer.h"
00012 #include "FadcReadoutFormat/FadcFoot.h"
00013 #include "FadcReadoutFormat/FadcHead.h"
00014 #include "FadcReadoutFormat/FadcData.h"
00015 #include "FadcReadoutFormat/FadcTraits.h"
00016 
00017 using DybDaq::DaqBuffer;
00018 using DybDaq::DaqContainer;
00019 using DybDaq::DaqTraits;
00020 using DybDaq::FadcFoot;
00021 using DybDaq::FadcHead;
00022 using DybDaq::FadcData;
00023 using DybDaq::FadcReadout;
00024 
00025 FadcReadout::FadcReadout(const unsigned int triggerNumber,
00026                          const unsigned int triggerType,
00027                          const bool noData,
00028                          const FadcTraits& traits) :
00029     DaqContainer(),
00030     m_head(new FadcHead(triggerNumber,
00031                         triggerType,
00032                         noData,
00033                         traits)),
00034     m_data(0),
00035     m_foot(0) {
00036 }
00037 
00038 FadcReadout::FadcReadout(const ByteBuffer& byteBuffer,
00039                          const unsigned int bufferSize) :
00040     DaqContainer(byteBuffer,
00041                  bufferSize),
00042     m_head(0),
00043     m_data(0),
00044     m_foot(0) {
00045     byteBuffer.position(byteBuffer.position() + (bufferSize * kBytesInInt));
00046 }
00047 
00048 FadcReadout::~FadcReadout() {
00049     if (0 != m_foot) {
00050         delete m_foot;
00051     }
00052     if (0 != m_data) {
00053         FadcDataPtrList::const_iterator data;
00054         for (data = m_data->begin();
00055              data != m_data->end();
00056              ++data) {
00057             delete const_cast<FadcData*>(*data);
00058         }
00059         delete m_data;
00060     }
00061     if (0 != m_head) {
00062         delete m_head;
00063     }
00064 }
00065 
00066 const DaqTraits& FadcReadout::daqTraits() const {
00067     return head().fadcTraits();
00068 }
00069 
00070 const FadcHead& FadcReadout::head() const {
00071     if (0 == m_head && hasByteBuffer()) {
00072         const ByteBuffer& buffer = byteBuffer();
00073         const unsigned int originalPosition = buffer.position();
00074         buffer.position(begin());
00075         m_head = new FadcHead(buffer);
00076         buffer.position(originalPosition);
00077     }
00078     return *m_head;
00079 }
00080 
00081 const FadcReadout::FadcDataPtrList& FadcReadout::fadcData() const {
00082     if (0 == m_data) {
00083         m_data = new FadcDataPtrList();
00084         if (hasByteBuffer()) {
00085             const FadcTraits& traits = head().fadcTraits();
00086             const ByteBuffer& buffer = byteBuffer();
00087             
00088             const unsigned int originalPosition = buffer.position();
00089             buffer.position(begin() + (traits.headSize() * kBytesInInt));
00090             const unsigned int finished = (containerSize() - (traits.headSize() + traits.footSize())) / traits.dataSize();
00091             for (unsigned int count = 0;
00092                  count != finished;
00093                  ++count) {
00094                 FadcData* data = new FadcData(buffer,
00095                                               traits);
00096                 m_data->push_back(data);
00097             }
00098             buffer.position(originalPosition);
00099         }
00100     }
00101     return *m_data;
00102 }
00103 
00104 const FadcFoot& FadcReadout::foot() const {
00105     if (0 == m_foot) {
00106         if (hasByteBuffer()) {
00107             const FadcTraits& traits = head().fadcTraits();
00108             const ByteBuffer& buffer = byteBuffer();
00109             
00110             const unsigned int originalPosition = buffer.position();
00111             buffer.position(begin() + ((containerSize() - traits.footSize()) * kBytesInInt));
00112             m_foot = new FadcFoot(buffer,
00113                                   head().fadcTraits());
00114             buffer.position(originalPosition);
00115         } else {
00116             m_foot = new FadcFoot(head());
00117         }
00118     }
00119     return *m_foot;
00120 }
00121 
00122 unsigned int FadcReadout::gatherRom(DaqBuffer::OutputBufferList& outputBuffers) const {
00123     return gather(outputBuffers);
00124 }
00125 
00126 unsigned int FadcReadout::inspectRom(DaqBuffer::Bytes& inspectors) const {
00127     return inspect(inspectors);
00128 }
00129 
00130 unsigned int FadcReadout::romSize() const {
00131     return bufferSize();
00132 }
00133 
00134 unsigned int FadcReadout::gatherComponents(OutputBufferList& outputBuffers) const {
00135     unsigned int result = head().gather(outputBuffers);
00136     const FadcDataPtrList& data = fadcData();
00137     FadcDataPtrList::const_iterator entry;
00138     for (entry = data.begin();
00139          entry != data.end();
00140          ++entry) {
00141         result += (*entry)->gather(outputBuffers);
00142     }
00143     
00144     result += foot().gather(outputBuffers);
00145     return result;
00146 }
00147 
00148 unsigned int FadcReadout::inspectComponents(DaqBuffer::Bytes& inspectors) const {
00149     unsigned int result = head().inspect(inspectors);
00150     const FadcDataPtrList& data = fadcData();
00151     FadcDataPtrList::const_iterator entry;
00152     for (entry = data.begin();
00153          entry != data.end();
00154          ++entry) {
00155         result += (*entry)->inspect(inspectors);
00156     }
00157     
00158     result += foot().inspect(inspectors);
00159     return result;
00160 }
00161 
00162 unsigned int FadcReadout::bufferSize() const {
00163     unsigned int result = head().bufferSize();
00164     const FadcDataPtrList& data = fadcData();
00165     FadcDataPtrList::const_iterator entry;
00166     for (entry = data.begin();
00167          entry != data.end();
00168          ++entry) {
00169         result += (*entry)->bufferSize();
00170     }
00171     result += foot().bufferSize();
00172     return result;
00173 }
00174 
00175 void FadcReadout::expanded(const unsigned int size) {
00176     FadcFoot& footToUse = foot();
00177     footToUse.setDataLength(footToUse.dataLength() + (size * kBytesInInt));
00178     notifyExpandable(size);
00179 }
00180 
00181 bool FadcReadout::setRomExpandable(DaqExpandable& expandable) {
00182     return setExpandable(expandable);
00183 }
00184 
00185 const FadcData& FadcReadout::addData(const unsigned int channel,
00186                                      const unsigned int highDataByte,
00187                                      const unsigned int middleDataByte,
00188                                      const unsigned int lowDataByte) {
00189     const FadcTraits& traits = head().fadcTraits();
00190     FadcData* result = new FadcData(channel,
00191                                     highDataByte,
00192                                     middleDataByte,
00193                                     lowDataByte,
00194                                     traits);
00195     return add(result);
00196 }
00197 
00198 const FadcData& FadcReadout::add(const FadcData* data) {
00199     if (0 == m_data) {
00200         m_data = new FadcDataPtrList();
00201     }
00202     m_data->push_back(data);
00203     expanded(data->bufferSize());
00204     return *data;
00205 }
00206 
00207 FadcFoot& FadcReadout::foot() {
00208     if (0 == m_foot) {
00209         m_foot = new FadcFoot(head());
00210     }
00211     return *m_foot;
00212 }
00213 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:07:56 2011 for FadcReadoutFormat by doxygen 1.4.7