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

In This Package:

FecReadout.cc

Go to the documentation of this file.
00001 #include "FecReadoutFormat/FecReadout.h"
00002 #include "FecReadoutFormat/FecTraits.h"
00003 #include "FecReadoutFormat/FecData.h"
00004 #include "DaqReadoutFormat/ByteBuffer.h"
00005 
00006 #include <iostream>
00007 
00008 using DybDaq::DaqTraits;
00009 using DybDaq::FecData;
00010 using DybDaq::FecTraits;
00011 using DybDaq::FecReadout;
00012 
00013 
00014 FecReadout::FecReadout(const FecTraits& traits)
00015    : DaqContainer(),
00016      m_fecList(0),
00017      m_verFormat(0),
00018      m_fecTraits(&traits)
00019 {
00020 }
00021 
00022 FecReadout::FecReadout(const ByteBuffer& byteBuffer,
00023                        const unsigned int bufferSize,
00024                        const unsigned int verFormat)
00025    : DaqContainer(byteBuffer, bufferSize),
00026      m_fecList(0),
00027      m_verFormat(verFormat),
00028      m_fecTraits(0)
00029 {
00030    byteBuffer.position( byteBuffer.position() + bufferSize * kBytesInInt );
00031 }
00032 
00033 FecReadout::~FecReadout()
00034 {
00035    if ( m_fecList != 0 ) {
00036       FecDataPtrList::iterator it = m_fecList->begin();
00037       while ( it != m_fecList->end() ) {
00038          delete *it;
00039          ++it;
00040       }
00041       delete m_fecList;
00042    }
00043 }
00044 
00045 const DaqTraits& FecReadout::daqTraits() const
00046 {
00047    return fecTraits();
00048 }
00049 
00050 const FecReadout::FecDataPtrList& FecReadout::fecDataList() const
00051 {
00052    if ( m_fecList == 0 ) {
00053       m_fecList = new FecDataPtrList();
00054       if ( hasByteBuffer() ) {
00055          const FecTraits& traits = fecTraits();
00056          const ByteBuffer& buffer = byteBuffer();
00057 
00058          const unsigned int originalPosition = buffer.position();
00059          buffer.position( begin() );
00060          const unsigned int finished = containerSize() / traits.fecSize();
00061          for ( unsigned int count = 0; count != finished; ++count ) {
00062             FecData* fecData = new FecData(buffer, traits);
00063             m_fecList->push_back(fecData);
00064          }
00065          buffer.position( originalPosition );
00066       }
00067    }
00068    return *m_fecList;
00069 }
00070 
00071 unsigned int FecReadout::romSize() const
00072 {
00073    return bufferSize();
00074 }
00075 
00076 unsigned int FecReadout::gatherRom(OutputBufferList& outputBuffers) const
00077 {
00078    return gather(outputBuffers);
00079 }
00080 
00081 unsigned int FecReadout::inspectRom(DaqBuffer::Bytes& inspectors) const
00082 {
00083     return inspect(inspectors);
00084 }
00085 
00086 unsigned int FecReadout::bufferSize() const
00087 {
00088    unsigned int result = 0;
00089    const FecDataPtrList& fecList = fecDataList();
00090 
00091    FecDataPtrList::const_iterator it = fecList.begin();
00092    while ( it != fecList.end() ) {
00093       result += (*it)->bufferSize();
00094       ++it;
00095    }
00096 
00097    return result;
00098 }
00099 
00100 const FecData& FecReadout::addFecData(const unsigned int rpcCFId,
00101                                       const unsigned int rpcFecId,
00102                                       const bool transErr1,
00103                                       const bool transErr2,
00104                                       const unsigned int trigType,
00105                                       const bool fullFlag,
00106                                       const bool validGPS,
00107                                       const bool validCLK,
00108                                       const bool usingUTC,
00109                                       const unsigned int second,
00110                                       const unsigned int nanoSecond,
00111                                       const unsigned int hitMap)
00112 {
00113    FecData* result = new FecData(rpcCFId,
00114                                  rpcFecId,
00115                                  transErr1,
00116                                  transErr2,
00117                                  trigType,
00118                                  fullFlag,
00119                                  validGPS,
00120                                  validCLK,
00121                                  usingUTC,
00122                                  second,
00123                                  nanoSecond,
00124                                  hitMap,
00125                                  fecTraits() );
00126    return add( result );
00127 }
00128 
00129 unsigned int FecReadout::gatherComponents(OutputBufferList& outputBuffers) const 
00130 {
00131    unsigned int result = 0;
00132    const FecDataPtrList& fecList = fecDataList();
00133 
00134    FecDataPtrList::const_iterator it = fecList.begin();
00135    while ( it != fecList.end() ) {
00136       result += (*it)->gather(outputBuffers);
00137       ++it;
00138    }
00139 
00140    return result;
00141 }
00142 
00143 unsigned int FecReadout::inspectComponents(DaqBuffer::Bytes& inspectors) const
00144 {
00145     unsigned int result = 0;
00146     const FecDataPtrList& fecList = fecDataList();
00147     
00148     FecDataPtrList::const_iterator it = fecList.begin();
00149     while ( it != fecList.end() ) {
00150         result += (*it)->inspect(inspectors);
00151         ++it;
00152     }
00153     
00154     return result;
00155 }
00156 
00157 void FecReadout::expanded(const unsigned int size)
00158 {
00159    notifyExpandable(size);
00160 }
00161 
00162 bool FecReadout::setRomExpandable(DaqExpandable& expandable)
00163 {
00164    return setExpandable(expandable);
00165 }
00166 
00167 const FecTraits& FecReadout::fecTraits() const
00168 {
00169    if ( m_fecTraits == 0 ) {
00170       m_fecTraits = FecTraits::getTraits(m_verFormat);
00171    }
00172    return *m_fecTraits;
00173 }
00174 
00175 const FecData& FecReadout::add(const FecData* fecData)
00176 {
00177    if ( m_fecList == 0 ) {
00178       m_fecList = new FecDataPtrList();
00179    }
00180 
00181    m_fecList->push_back(fecData);
00182    expanded( fecData->bufferSize() );
00183 
00184    return *fecData;
00185 }
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:07:52 2011 for FecReadoutFormat by doxygen 1.4.7