#ifndef __JDAQTESTKIT__ #define __JDAQTESTKIT__ #include "TRandom3.h" #include "km3net-dataformat/online/JDAQ.hh" #include "km3net-dataformat/online/JDAQHit.hh" #include "km3net-dataformat/online/JDAQClock.hh" #include "km3net-dataformat/online/JDAQChronometer.hh" #include "km3net-dataformat/online/JDAQTriggerMask.hh" #include "JDAQ/JDAQEventIO.hh" #include "JDAQ/JDAQSummarysliceIO.hh" #include "JDAQ/JDAQTimesliceIO.hh" #include "JMath/JRandom.hh" /** * \author mdejong */ namespace KM3NETDAQ { using JMATH::getRandom; /** * Randomize chronometer. * * \param p pointer to valid object */ inline void randomize(JDAQChronometer* p) { new (p) JDAQChronometer(getRandom(1, 100000), //! detector getRandom(1, 99999999), //! run getRandom(1, 99999999)); //! frame index }; /** * Randomize hit. * * \param p pointer to valid object */ inline void randomize(JDAQHit* p) { new (p) JDAQHit(getRandom(0, NUMBER_OF_PMTS), getRandom(0, getRTS()), getRandom()); } /** * Randomize trigger mask. * * \param p pointer to valid object */ inline void randomize(JDAQTriggerMask* p) { new (p) JDAQTriggerMask(getRandom(1, 0xFFFFFFFF)); }; /** * Randomize event. * * \param p pointer to valid object */ inline void randomize(JDAQEvent* p) { p->clear(); p->setDAQChronometer(getRandom()); p->setDAQTriggerMask(getRandom()); for (int i = getRandom(1, 1000); i != 0; --i) { p->push_back(JDAQKeyHit(getRandom(0, 100000), getRandom())); } for (int i = getRandom(1, 10); i != 0; --i) { p->push_back(JDAQTriggeredHit(getRandom(0, 100000), getRandom(), p->getDAQTriggerMask())); } } /** * Randomize frame status. * * \param p pointer to valid object */ inline void randomize(JDAQFrameStatus* p) { int daq = (DAQ_UDP_RECEIVED_PACKETS.write(gRandom->Integer(99)) | // DAQ_UDP_SEQUENCE_NUMBER .write(gRandom->Integer(99))); // DAQ status int status = DAQ_WHITE_RABBIT.write(gRandom->Rndm() < 0.5 ? 0 : 1); // TDC status int fifo = DAQ_UDP_TRAILER .write(gRandom->Rndm() < 0.5 ? 0 : 1); // FIFO status for (size_t pmt = 0; pmt != NUMBER_OF_PMTS; ++pmt) { JBit(pmt).set(status, gRandom->Rndm() < 0.5 ? 0 : 1); // high-rate veto } new (p) JDAQFrameStatus(daq, status, fifo); } /** * Randomize summary frame. * * \param p pointer to valid object */ inline void randomize(JDAQSummaryFrame* p) { p->setDAQFrameStatus (getRandom()); p->setModuleIdentifier(getRandom(0, 100000)); for (int i = 0; i != NUMBER_OF_PMTS; ++i) { p->setRate(i, getRandom(0, 1.0e6)); } } /** * Randomize summary slice. * * \param p pointer to valid object */ inline void randomize(JDAQSummaryslice* p) { p->clear(); p->setDAQChronometer(getRandom()); for (UInt_t i = gRandom->Integer(100); i != 0; --i) { p->push_back(getRandom()); } } /** * Randomize timeslice. * * \param p pointer to valid object */ inline void randomize(JDAQSuperFrame* p) { p->clear(); p->setDAQSuperFrameHeader(JDAQSuperFrameHeader(getRandom(), getRandom(0, 100000), getRandom())); for (int i = getRandom(0, 10000); i != 0; --i) { p->add(getRandom()); } } /** * Randomize timeslice. * * \param p pointer to valid object */ inline void randomize(JDAQTimeslice* p) { p->clear(); p->setDAQChronometer(getRandom()); JDAQSuperFrame buffer(JDAQSuperFrameHeader(p->getDAQChronometer(), getRandom(0, 100000))); for (int i = getRandom(0, 10000); i != 0; --i) { buffer.add(getRandom()); } p->push_back(buffer); } } #endif