/search.css" rel="stylesheet" type="text/css"/> /search.js">
| 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 "EventReadoutFormat/RomHeader.h"
00019 #include "FadcReadoutFormat/FadcReadout.h"
00020 #include "FeeReadoutFormat/FeeReadout.h"
00021 #include "LtbReadoutFormat/LtbReadout.h"
00022 #include "FecReadoutFormat/FecReadout.h"
00023 #include "RtmReadoutFormat/RtmReadout.h"
00024 
00025 using DybDaq::ByteBuffer;
00026 using DybDaq::CbltReadout;
00027 using DybDaq::CbltTraits;
00028 using DybDaq::DaqBuffer;
00029 using DybDaq::DaqTraits;
00030 using DybDaq::EventReadout;
00031 using DybDaq::EventHeader;
00032 using DybDaq::EventBuffer;
00033 using DybDaq::FadcReadout;
00034 using DybDaq::FeeReadout;
00035 using DybDaq::LtbReadout;
00036 using DybDaq::FecReadout;
00037 using DybDaq::RtmReadout;
00038 using DybDaq::RomFragment;
00039 using DybDaq::RomHeader;
00040 
00041 EventReadout::EventReadout(const EventReadout& readout):
00042 DaqContainer(readout),
00043 m_header(0),
00044 m_fragments(0),
00045 m_cbltTraits((CbltTraits*)0) {
00046     // Currently assumes a ByteBuffer based EventReadout is being copied.
00047 }
00048 
00049 EventReadout::EventReadout(const unsigned int site,
00050                            const unsigned int detector,
00051                            const unsigned int run,
00052                            const unsigned int event,
00053                            const unsigned int dataType,
00054                            const bool rawCblt,
00055                            const bool triggerMismatch,
00056                            const bool invalidData,
00057                            const bool rpcSortDisabled,
00058                            const bool dataSortTimeout,
00059                            const EventTraits& traits) :
00060 DaqContainer(),
00061 m_header(new EventHeader(site,
00062                          detector,
00063                          run,
00064                          event,
00065                          dataType,
00066                          false,
00067                          rawCblt,
00068                          triggerMismatch,
00069                          invalidData,
00070                          rpcSortDisabled,
00071                          dataSortTimeout,
00072                          traits)),
00073 m_fragments(0),
00074 m_cbltTraits((CbltTraits*)0) {
00075 }
00076 
00077 EventReadout::EventReadout(const unsigned int site,
00078                            const unsigned int detector,
00079                            const unsigned int run,
00080                            const unsigned int event,
00081                            const unsigned int dataType,
00082                            const bool rawCblt,
00083                            const bool triggerMismatch,
00084                            const bool invalidData,
00085                            const bool rpcSortDisabled,
00086                            const bool dataSortTimeout,
00087                            const CbltTraits& cbltTraits,
00088                            const EventTraits& traits) :
00089 DaqContainer(),
00090 m_header(new EventHeader(site,
00091                          detector,
00092                          run,
00093                          event,
00094                          dataType,
00095                          true,
00096                          rawCblt,
00097                          triggerMismatch,
00098                          invalidData,
00099                          rpcSortDisabled,
00100                          dataSortTimeout,
00101                          traits)),
00102 m_fragments(0),
00103 m_cbltTraits(&cbltTraits) {
00104 }
00105 
00106 EventReadout::EventReadout(const ByteBuffer& byteBuffer) :
00107 DaqContainer(byteBuffer,
00108              0),
00109 m_header(0),
00110 m_fragments(0),
00111 m_cbltTraits((CbltTraits*)0) {
00112     byteBuffer.position(byteBuffer.position() + (header().totalSize() * kBytesInInt));
00113 }
00114 
00115 EventReadout::~EventReadout() {
00116     if (0 != m_fragments) {
00117         RomFragmentPtrList::iterator fragment;
00118         for (fragment = m_fragments->begin();
00119              fragment != m_fragments->end();
00120              ++fragment) {
00121             delete const_cast<RomFragment*>(*fragment);
00122         }
00123         delete m_fragments;
00124     }
00125     if (0 != m_header) {
00126         delete m_header;
00127     }
00128 }
00129 
00130 const DaqTraits& EventReadout::daqTraits() const {
00131     return header().eventTraits();
00132 }
00133 
00134 const EventHeader& EventReadout::header() const {
00135     if (0 == m_header && hasByteBuffer()) {
00136         const ByteBuffer& buffer = byteBuffer();
00137         
00138         const unsigned int originalPosition = buffer.position();
00139         buffer.position(begin());
00140         m_header = new EventHeader(buffer);
00141         buffer.position(originalPosition);
00142     }
00143     return *m_header;
00144 }
00145 
00146 const EventReadout::RomFragmentPtrList& EventReadout::romFragments() const {
00147     if (0 == m_fragments) {
00148         m_fragments = new RomFragmentPtrList();
00149         if (hasByteBuffer()) {
00150             const ByteBuffer& buffer = byteBuffer();
00151             
00152             const unsigned int originalPosition = buffer.position();
00153             buffer.position(begin() + (header().headerSize() * kBytesInInt));
00154             const EventTraits& traits = header().eventTraits();
00155             const bool cbltWrapping = header().cbltWrapping();
00156             const unsigned int finished = begin() + (bufferSize() * kBytesInInt);
00157             while (buffer.position() != finished) {
00158                 const RomFragment* romFragment = new RomFragment(buffer,
00159                                                                  traits,
00160                                                                  cbltWrapping);
00161                 m_fragments->push_back(romFragment);
00162             }
00163             buffer.position(originalPosition);
00164         }
00165     }
00166         return *m_fragments;
00167 }
00168 
00169 bool EventReadout::containsPmtFragments() const {
00170     const EventTraits& traits = header().eventTraits();
00171     const unsigned int kLtbModuleType = traits.moduleType(EventTraits::kLtbModule);
00172     const unsigned int kFeeModuleType = traits.moduleType(EventTraits::kFeeModule);
00173     const unsigned int kFadcModuleType = traits.moduleType(EventTraits::kFadcModule);
00174     const RomFragmentPtrList& fragments = romFragments();
00175     for (RomFragmentPtrList::const_iterator fragment = fragments.begin();
00176          fragment != fragments.end();
00177          ++fragment) {
00178         unsigned int romType = (*fragment)->header().moduleType();
00179         if (kLtbModuleType == romType || kFeeModuleType == romType || kFadcModuleType == romType) {
00180             return true;
00181         }
00182     }
00183     return false;
00184 }
00185         
00186 bool EventReadout::containsRpcFragments() const {
00187     const EventTraits& traits = header().eventTraits();
00188     const unsigned int kRpcRomModuleType = traits.moduleType(EventTraits::kRpcRomModule);
00189     const unsigned int kRpcRtmModuleType = traits.moduleType(EventTraits::kRpcRtmModule);
00190     const RomFragmentPtrList& fragments = romFragments();
00191     for (RomFragmentPtrList::const_iterator fragment = fragments.begin();
00192          fragment != fragments.end();
00193          ++fragment) {
00194         unsigned int romType = (*fragment)->header().moduleType();
00195         if (kRpcRomModuleType == romType || kRpcRtmModuleType == romType) {
00196             return true;
00197         }
00198     }
00199     return false;
00200 }
00201 
00202 unsigned int EventReadout::bufferSize() const {
00203     return header().totalSize();
00204 }
00205 
00206 unsigned int EventReadout::gatherComponents(OutputBufferList& outputBuffers) const {
00207     unsigned int result = header().gather(outputBuffers);
00208     const RomFragmentPtrList& fragments = romFragments();
00209     RomFragmentPtrList::const_iterator fragment;
00210     for (fragment = fragments.begin();
00211          fragment != fragments.end();
00212          ++fragment) {
00213         result += (*fragment)->gather(outputBuffers);
00214     }
00215     return result;
00216 }
00217 
00218 unsigned int EventReadout::inspectComponents(DaqBuffer::Bytes& inspectors) const {
00219     unsigned int result = header().inspect(inspectors);
00220     const RomFragmentPtrList& fragments = romFragments();
00221     RomFragmentPtrList::const_iterator fragment;
00222     for (fragment = fragments.begin();
00223          fragment != fragments.end();
00224          ++fragment) {
00225         result += (*fragment)->inspect(inspectors);
00226     }
00227     return result;
00228 }
00229 
00230 void EventReadout::expanded(const unsigned int size) {
00231     // If this is non-const, then header must already exist.
00232     m_header->setTotalSize(m_header->totalSize() + size);
00233     notifyExpandable(size);
00234 }
00235 
00236 void EventReadout::addReadout(const FadcReadout* readout,
00237                               const unsigned int slot) {
00238     addReadout(readout,
00239                slot,
00240                header().eventTraits().moduleType(EventTraits::kFadcModule));
00241 }
00242 
00243 void EventReadout::addReadout(const FeeReadout* readout,
00244                               const unsigned int slot) {
00245     addReadout(readout,
00246                slot,
00247                header().eventTraits().moduleType(EventTraits::kFeeModule));
00248 }
00249 
00250 void EventReadout::addReadout(const LtbReadout* readout,
00251                               const unsigned int slot) {
00252     
00253     addReadout(readout,
00254                slot,
00255                header().eventTraits().moduleType(EventTraits::kLtbModule));
00256 }
00257 
00258 void EventReadout::addReadout(const FecReadout* readout,
00259                               const unsigned int slot) {
00260     
00261     addReadout(readout,
00262                slot,
00263                header().eventTraits().moduleType(EventTraits::kRpcRomModule));
00264 }
00265 
00266 void EventReadout::addReadout(const RtmReadout* readout,
00267                               const unsigned int slot) {
00268     
00269     addReadout(readout,
00270                slot,
00271                header().eventTraits().moduleType(EventTraits::kRpcRtmModule));
00272 }
00273 
00274 void EventReadout::addReadout(const RomData* readout,
00275                               const unsigned int slot,
00276                               const unsigned int moduleType) {
00277     RomFragment* result;
00278     if (header().cbltWrapping()) {
00279         CbltReadout* cbltReadout = new CbltReadout(slot,
00280                                                    moduleType,
00281                                                    readout,
00282                                                    *m_cbltTraits);
00283         result = new RomFragment(header().site(),
00284                                  header().detector(),
00285                                  moduleType,
00286                                  slot,
00287                                  cbltReadout,
00288                                  header().eventTraits(),
00289                                  true,
00290                                  *this);
00291     } else {
00292         result = new RomFragment(header().site(),
00293                                  header().detector(),
00294                                  moduleType,
00295                                  slot,
00296                                  readout,
00297                                  header().eventTraits(),
00298                                  false,
00299                                  *this);
00300     }
00301     add(result);
00302 }
00303 
00304 const RomFragment& EventReadout::add(const RomFragment* fragment) {
00305     if (0 == m_fragments) {
00306         m_fragments = new RomFragmentPtrList();
00307     }
00308     m_fragments->push_back(fragment);
00309     expanded(fragment->bufferSize());
00310     return *fragment;
00311 }
00312 
00313 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Fri May 16 2014 09:53:15 for EventReadoutFormat by doxygen 1.7.4