#ifndef __JDAQSUMMARYSLICE__ #define __JDAQSUMMARYSLICE__ #include #include #include #include "JDAQ/JDAQRoot.hh" #include "JDAQ/JDAQPreamble.hh" #include "JDAQ/JDAQSummaryFrame.hh" #include "JDAQ/JDAQSummarysliceHeader.hh" #include "JDAQ/JDAQTimeslice.hh" #include "JDAQ/JDAQClock.hh" #include "JIO/JSerialisable.hh" #include "JIO/JIOLibrary.hh" namespace KM3NETDAQ { namespace { using JIO::JReader; using JIO::JWriter; } /** * Data summary slice. */ class JDAQSummaryslice : public JDAQPreamble, public JDAQSummarysliceHeader, public std::vector { public: /** * Default constructor. */ JDAQSummaryslice() : JDAQPreamble(JLANG::JType()), JDAQSummarysliceHeader(), std::vector() {} /** * Constructor. * * \param chronometer DAQ chronometer */ JDAQSummaryslice(const JDAQChronometer& chronometer) : JDAQPreamble(JLANG::JType()), JDAQSummarysliceHeader(chronometer), std::vector() {} /** * Constructor. * * \param timeslice time slice */ JDAQSummaryslice(const JDAQTimeslice& timeslice) : JDAQPreamble(JLANG::JType()), JDAQSummarysliceHeader(timeslice), std::vector() { for (JDAQTimeslice::const_iterator super_frame = timeslice.begin(); super_frame != timeslice.end(); ++super_frame) { std::vector counter(NUMBER_OF_PMTS, 0); int n = super_frame->size(); for (JDAQSuperFrame::const_iterator i = super_frame->begin(); n != 0; --n, ++i) ++counter[i->getPMT()]; JDAQSummaryFrame frame(super_frame->getModuleID()); for (int i = 0; i != NUMBER_OF_PMTS; ++i) frame[i].setValue(counter[i], getFrameTime()); this->push_back(frame); } } /** * Virtual destructor. */ virtual ~JDAQSummaryslice() {} /** * Read DAQ summaryslice from input. * * \param in JReader * \param summaryslice JDAQSummaryslice * \return JReader */ friend inline JReader& operator>>(JReader& in, JDAQSummaryslice& summaryslice) { summaryslice.clear(); in >> static_cast (summaryslice); in >> static_cast (summaryslice); in >> static_cast&>(summaryslice); return in; } /** * Write DAQ summaryslice to output. * * \param out JWriter * \param summaryslice JDAQSummaryslice * \return JWriter */ friend inline JWriter& operator<<(JWriter& out, const JDAQSummaryslice& summaryslice) { out << static_cast (summaryslice); out << static_cast (summaryslice); out << static_cast&>(summaryslice); return out; } /** * Print DAQ summary. * * \param out output stream * \param lpr long print * \return output stream */ ostream& print(ostream& out, const bool lpr = false) const { using namespace std; out << this->ClassName() << newline; out << dynamic_cast (*this) << newline; out << dynamic_cast(*this) << newline; for (JDAQSummaryslice::const_iterator module = this->begin(); module != this->end(); ++module) { out << ' ' << setw(5) << module->getModuleID(); for (int pmt = 0; pmt != NUMBER_OF_PMTS; ++pmt) out << ' ' << fixed << showpoint << setw(4) << setprecision(1) << module->getRate(pmt) * 1.0e-3; out << newline; } return out; } /** * Get size of object. * * \return number of bytes */ virtual int getSize() const { int len = 0; len += JDAQPreamble ::sizeOf(); len += JDAQSummarysliceHeader::sizeOf(); len += sizeof(int); len += this->size() * JDAQSummaryFrame::sizeOf(); return len; } ClassDef(JDAQSummaryslice,2); }; /** * Print DAQ summary. * * \param out output stream * \param summary summary * \return output stream */ inline ostream& operator<<(ostream& out, const KM3NETDAQ::JDAQSummaryslice& summary) { return summary.print(out, getLongprint(out)); } } #endif