#ifndef __JDAQSUPERFRAME__ #define __JDAQSUPERFRAME__ #include "JIO/JSerialisable.hh" #include "JDAQ/JDAQ.hh" #include "JDAQ/JDAQPreamble.hh" #include "JDAQ/JDAQSuperFrameHeader.hh" #include "JDAQ/JDAQFrame.hh" #include "JDAQ/JDAQHit.hh" #include "JDAQ/JDAQRoot.hh" #include "JDAQ/JDAQException.hh" namespace KM3NETDAQ { namespace { using JIO::JReader; using JIO::JWriter; } /** * Data frame of one optical module. */ class JDAQSuperFrame : public JDAQPreamble, public JDAQSuperFrameHeader, public JDAQFrame { public: typedef JDAQFrame::const_iterator const_iterator; typedef JDAQFrame::iterator iterator; typedef JDAQFrame::const_reverse_iterator const_reverse_iterator; typedef JDAQFrame::reverse_iterator reverse_iterator; /** * Default constructor. */ JDAQSuperFrame() : JDAQPreamble(JLANG::JType()), JDAQSuperFrameHeader(), JDAQFrame() {} /** * Constructor. * * \param header JDAQ super frame header */ JDAQSuperFrame(const JDAQSuperFrameHeader& header) : JDAQPreamble(JLANG::JType()), JDAQSuperFrameHeader(header), JDAQFrame() {} /** * Copy constructor. * * \param super_frame JDAQ super frame */ JDAQSuperFrame(const JDAQSuperFrame& super_frame) : JDAQPreamble(JLANG::JType()), JDAQSuperFrameHeader(super_frame.getDAQSuperFrameHeader()), JDAQFrame(super_frame) {} /** * Add data from same optical module. * * \param super_frame JDAQ super frame * \return this JDAQ super frame */ JDAQSuperFrame& add(const JDAQSuperFrame& super_frame) { if (this->getModuleID() != super_frame.getModuleID()) throw JDAQException("JDAQSuperFrame::add(): Different module identifiers."); return add(static_cast(super_frame)); } /** * Add data. * * \param frame JDAQ frame * \return this JDAQ frame */ JDAQSuperFrame& add(const JDAQFrame& frame) { return add(frame.numberOfHits, frame.buffer); } /** * Add data. * * \param number_of_hits number of hits * \param data pointer to data * \return this data frame */ JDAQSuperFrame& add(const int number_of_hits, const JDAQHit* data) { JDAQFrame::add(number_of_hits, data); return *this; } /** * Read JDAQSuperFrame from input. * * \param in JReader * \param frame JDAQSuperFrame * \return JReader */ friend inline JReader& operator>>(JReader& in, JDAQSuperFrame& frame) { in >> static_cast (frame); in >> static_cast(frame); in >> static_cast (frame); return in; } /** * Write JDAQSuperFrame to output. * * \param out JWriter * \param frame JDAQSuperFrame * \return JWriter */ friend inline JWriter& operator<<(JWriter& out, const JDAQSuperFrame& frame) { out << static_cast (frame); out << static_cast(frame); out << static_cast (frame); return out; } /** * Get size of object. * * \return number of bytes */ virtual int getSize() const { return (JDAQPreamble ::sizeOf() + JDAQSuperFrameHeader::sizeOf() + sizeof(int) + numberOfHits * JDAQHit::sizeOf()); } ClassDef(JDAQSuperFrame,1); }; } #endif