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

In This Package:

EventReadout.cc

Go to the documentation of this file.
00001 /*
00002  *  EventReadout.cc
00003  *  RawFileReading
00004  *
00005  *  Created by Simon Patton on 7/20/10.
00006  *  Copyright 2010 DayaBay Collaboration. All rights reserved.
00007  *
00008  */
00009 
00010 #include "EventReadoutFormat/EventReadout.h"
00011 
00012 #include "DaqReadoutFormat/ByteBuffer.h"
00013 #include "CbltReadoutFormat/CbltReadout.h"
00014 #include "CbltReadoutFormat/CbltTraits.h"
00015 #include "EventReadoutFormat/EventHeader.h"
00016 #include "EventReadoutFormat/EventTraits.h"
00017 #include "EventReadoutFormat/RomFragment.h"
00018 #include "FadcReadoutFormat/FadcReadout.h"
00019 #include "FeeReadoutFormat/FeeReadout.h"
00020 #include "LtbReadoutFormat/LtbReadout.h"
00021 #include "FecReadoutFormat/FecReadout.h"
00022 #include "RtmReadoutFormat/RtmReadout.h"
00023 
00024 using DybDaq::ByteBuffer;
00025 using DybDaq::CbltReadout;
00026 using DybDaq::CbltTraits;
00027 using DybDaq::DaqBuffer;
00028 using DybDaq::DaqTraits;
00029 using DybDaq::EventReadout;
00030 using DybDaq::EventHeader;
00031 using DybDaq::EventBuffer;
00032 using DybDaq::FadcReadout;
00033 using DybDaq::FeeReadout;
00034 using DybDaq::LtbReadout;
00035 using DybDaq::FecReadout;
00036 using DybDaq::RtmReadout;
00037 using DybDaq::RomFragment;
00038 
00039 EventReadout::EventReadout(const EventReadout& readout):
00040 DaqContainer(readout),
00041 m_header(0),
00042 m_fragments(0),
00043 m_cbltTraits((CbltTraits*)0) {
00044     // Currently assumes a ByteBuffer based EventReadout is being copied.
00045 }
00046 
00047 EventReadout::EventReadout(const unsigned int site,
00048                            const unsigned int detector,
00049                            const unsigned int run,
00050                            const unsigned int event,
00051                            const unsigned int dataType,
00052                            const bool rawCblt,
00053                            const bool triggerMismatch,
00054                            const bool invalidData,
00055                            const EventTraits& traits) :
00056 DaqContainer(),
00057 m_header(new EventHeader(site,
00058                          detector,
00059                          run,
00060                          event,
00061                          dataType,
00062                          false,
00063                          rawCblt,
00064                          triggerMismatch,
00065                          invalidData,
00066                          traits)),
00067 m_fragments(0),
00068 m_cbltTraits((CbltTraits*)0) {
00069 }
00070 
00071 EventReadout::EventReadout(const unsigned int site,
00072                            const unsigned int detector,
00073                            const unsigned int run,
00074                            const unsigned int event,
00075                            const unsigned int dataType,
00076                            const bool rawCblt,
00077                            const bool triggerMismatch,
00078                            const bool invalidData,
00079                            const CbltTraits& cbltTraits,
00080                            const EventTraits& traits) :
00081 DaqContainer(),
00082 m_header(new EventHeader(site,
00083                          detector,
00084                          run,
00085                          event,
00086                          dataType,
00087                          true,
00088                          rawCblt,
00089                          triggerMismatch,
00090                          invalidData,
00091                          traits)),
00092 m_fragments(0),
00093 m_cbltTraits(&cbltTraits) {
00094 }
00095 
00096 EventReadout::EventReadout(const ByteBuffer& byteBuffer) :
00097 DaqContainer(byteBuffer,
00098              0),
00099 m_header(0),
00100 m_fragments(0),
00101 m_cbltTraits((CbltTraits*)0) {
00102     byteBuffer.position(byteBuffer.position() + (header().totalSize() * kBytesInInt));
00103 }
00104 
00105 EventReadout::~EventReadout() {
00106     if (0 != m_fragments) {
00107         RomFragmentPtrList::iterator fragment;
00108         for (fragment = m_fragments->begin();
00109              fragment != m_fragments->end();
00110              ++fragment) {
00111             delete const_cast<RomFragment*>(*fragment);
00112         }
00113         delete m_fragments;
00114     }
00115     if (0 != m_header) {
00116         delete m_header;
00117     }
00118 }
00119 
00120 const DaqTraits& EventReadout::daqTraits() const {
00121     return header().eventTraits();
00122 }
00123 
00124 const EventHeader& EventReadout::header() const {
00125     if (0 == m_header && hasByteBuffer()) {
00126         const ByteBuffer& buffer = byteBuffer();
00127         
00128         const unsigned int originalPosition = buffer.position();
00129         buffer.position(begin());
00130         m_header = new EventHeader(buffer);
00131         buffer.position(originalPosition);
00132     }
00133     return *m_header;
00134 }
00135 
00136 const EventReadout::RomFragmentPtrList& EventReadout::romFragments() const {
00137     if (0 == m_fragments) {
00138         m_fragments = new RomFragmentPtrList();
00139         if (hasByteBuffer()) {
00140             const ByteBuffer& buffer = byteBuffer();
00141             
00142             const unsigned int originalPosition = buffer.position();
00143             buffer.position(begin() + (header().headerSize() * kBytesInInt));
00144             const EventTraits& traits = header().eventTraits();
00145             const bool cbltWrapping = header().cbltWrapping();
00146             const unsigned int finished = begin() + (bufferSize() * kBytesInInt);
00147             while (buffer.position() != finished) {
00148                 const RomFragment* romFragment = new RomFragment(buffer,
00149                                                                  traits,
00150                                                                  cbltWrapping);
00151                 m_fragments->push_back(romFragment);
00152             }
00153             buffer.position(originalPosition);
00154         }
00155     }
00156         return *m_fragments;
00157 }
00158 
00159 unsigned int EventReadout::bufferSize() const {
00160     return header().totalSize();
00161 }
00162 
00163 unsigned int EventReadout::gatherComponents(OutputBufferList& outputBuffers) const {
00164     unsigned int result = header().gather(outputBuffers);
00165     const RomFragmentPtrList& fragments = romFragments();
00166     RomFragmentPtrList::const_iterator fragment;
00167     for (fragment = fragments.begin();
00168          fragment != fragments.end();
00169          ++fragment) {
00170         result += (*fragment)->gather(outputBuffers);
00171     }
00172     return result;
00173 }
00174 
00175 unsigned int EventReadout::inspectComponents(DaqBuffer::Bytes& inspectors) const {
00176     unsigned int result = header().inspect(inspectors);
00177     const RomFragmentPtrList& fragments = romFragments();
00178     RomFragmentPtrList::const_iterator fragment;
00179     for (fragment = fragments.begin();
00180          fragment != fragments.end();
00181          ++fragment) {
00182         result += (*fragment)->inspect(inspectors);
00183     }
00184     return result;
00185 }
00186 
00187 void EventReadout::expanded(const unsigned int size) {
00188     // If this is non-const, then header must already exist.
00189     m_header->setTotalSize(m_header->totalSize() + size);
00190     notifyExpandable(size);
00191 }
00192 
00193 void EventReadout::addReadout(const FadcReadout* readout,
00194                               const unsigned int slot) {
00195     addReadout(readout,
00196                slot,
00197                header().eventTraits().moduleType(EventTraits::kFadcModule));
00198 }
00199 
00200 void EventReadout::addReadout(const FeeReadout* readout,
00201                               const unsigned int slot) {
00202     addReadout(readout,
00203                slot,
00204                header().eventTraits().moduleType(EventTraits::kFeeModule));
00205 }
00206 
00207 void EventReadout::addReadout(const LtbReadout* readout,
00208                               const unsigned int slot) {
00209     
00210     addReadout(readout,
00211                slot,
00212                header().eventTraits().moduleType(EventTraits::kLtbModule));
00213 }
00214 
00215 void EventReadout::addReadout(const FecReadout* readout,
00216                               const unsigned int slot) {
00217     
00218     addReadout(readout,
00219                slot,
00220                header().eventTraits().moduleType(EventTraits::kRpcRomModule));
00221 }
00222 
00223 void EventReadout::addReadout(const RtmReadout* readout,
00224                               const unsigned int slot) {
00225     
00226     addReadout(readout,
00227                slot,
00228                header().eventTraits().moduleType(EventTraits::kRpcRtmModule));
00229 }
00230 
00231 void EventReadout::addReadout(const RomData* readout,
00232                               const unsigned int slot,
00233                               const unsigned int moduleType) {
00234     RomFragment* result;
00235     if (header().cbltWrapping()) {
00236         CbltReadout* cbltReadout = new CbltReadout(slot,
00237                                                    moduleType,
00238                                                    readout,
00239                                                    *m_cbltTraits);
00240         result = new RomFragment(header().site(),
00241                                  header().detector(),
00242                                  moduleType,
00243                                  slot,
00244                                  cbltReadout,
00245                                  header().eventTraits(),
00246                                  true,
00247                                  *this);
00248     } else {
00249         result = new RomFragment(header().site(),
00250                                  header().detector(),
00251                                  moduleType,
00252                                  slot,
00253                                  readout,
00254                                  header().eventTraits(),
00255                                  false,
00256                                  *this);
00257     }
00258     add(result);
00259 }
00260 
00261 const RomFragment& EventReadout::add(const RomFragment* fragment) {
00262     if (0 == m_fragments) {
00263         m_fragments = new RomFragmentPtrList();
00264     }
00265     m_fragments->push_back(fragment);
00266     expanded(fragment->bufferSize());
00267     return *fragment;
00268 }
00269 
00270 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:08:24 2011 for EventReadoutFormat by doxygen 1.4.7