#include #include #include #include "TRandom3.h" #include "km3net-dataformat/offline/Evt.hh" #include "km3net-dataformat/online/JDAQTimeslice.hh" #include "km3net-dataformat/online/JDAQSummaryslice.hh" #include "JTimeslice/JEventTimeslice.hh" #include "JTimeslice/JRandomTimeslice.hh" #include "JSummaryslice/JSummaryslice.hh" #include "JDetector/JDetector.hh" #include "JDetector/JDetectorToolkit.hh" #include "JDetector/JDetectorSimulator.hh" #include "JDetector/JPMTParametersMap.hh" #include "JDetector/JK40DefaultSimulator.hh" #include "JDetector/JPMTDefaultSimulator.hh" #include "JDetector/JCLBDefaultSimulator.hh" #include "JTrigger/JSummaryRouter.hh" #include "JTrigger/JK40RunByRunSimulator.hh" #include "JTrigger/JPMTRunByRunSimulator.hh" #include "JTrigger/JCLBRunByRunSimulator.hh" #include "Jeep/JPrint.hh" #include "Jeep/JParser.hh" #include "Jeep/JMessage.hh" namespace { using namespace JPP; /** * Auziliary class to set high-rate veto of PMT in simulation. */ class JCLBSimulator_t : public JCLBDefaultSimulator { public: /** * Constructor. * * \param pmt PMT */ JCLBSimulator_t(const int pmt) : pmt(pmt) {} /** * Get high-rate veto of given PMT. * * \param id PMT identifier * \return false */ virtual bool getHighRateVeto(const JPMTIdentifier& id) const { return id.getPMTAddress() == pmt; } int pmt; }; } /** * \file * Test program for KM3NETDAQ::JDAQFrameStatus. * * \author mdejong */ int main(int argc, char **argv) { using namespace std; using namespace JPP; using namespace KM3NETDAQ; UInt_t seed; int debug; try { JParser<> zap("Test program for KM3NETDAQ::JDAQFrameStatus."); zap['S'] = make_field(seed) = 0; zap['d'] = make_field(debug) = 3; zap(argc, argv); } catch(const exception &error) { FATAL(error.what() << endl); } gRandom->SetSeed(seed); cout.tie(&cerr); JDetector detector; detector.setVersion(JDetectorVersion::V3); detector.push_back(getModule(1001)); JDetectorSimulator simbad(detector); JSummaryRouter summaryRouter; JPMTParametersMap pmtParameters; DEBUG(detector); const double rate_Hz(10.0e3); const JRange range_Hz(rate_Hz - 5.0e2, rate_Hz + 5.0e2); for (int pmt = 0; pmt != NUMBER_OF_PMTS; ++pmt) { DEBUG("Test high-rate veto of PMT " << setw(2) << pmt << endl); try { simbad.reset(new JK40DefaultSimulator(rate_Hz)); simbad.reset(new JPMTDefaultSimulator(pmtParameters, detector)); simbad.reset(new JCLBSimulator_t(pmt)); } catch(const JException& error) { FATAL(error.what() << endl); } { JSummaryslice summary(JDAQChronometer(), simbad); DEBUG(summary); for (JDAQSummaryslice::const_iterator frame = summary.begin(); frame != summary.end(); ++frame) { for (int i = 0; i != NUMBER_OF_PMTS; ++i) { DEBUG("PMT " << setw(2) << i << " rate [Hz] " << SCIENTIFIC(12,3) << frame->getRate(i) << endl); ASSERT(range_Hz(frame->getRate(i))); ASSERT(frame->testHighRateVeto(i) == (i == pmt), "Standard simulation " << setw(2) << i); } } summaryRouter.update(&summary); } try { simbad.reset(new JK40RunByRunSimulator(summaryRouter, 0.0)); simbad.reset(new JPMTRunByRunSimulator(summaryRouter, pmtParameters, detector)); simbad.reset(new JCLBRunByRunSimulator(summaryRouter)); } catch(const JException& error) { FATAL(error.what() << endl); } summaryRouter.correct(dynamic_cast(simbad.getPMTSimulator())); DEBUG(summaryRouter); const JTimeRange period(-1.0e3, +1.0e3); const int run = 1; const int frame_index = 1; Evt evt; evt.mc_t = getTimeOfFrame(frame_index) + 0.5 * getFrameTime(); const JDAQChronometer chronometer(detector.getID(), run, frame_index, JDAQUTCExtended(getTimeOfFrame(frame_index))); JEventTimeslice event (chronometer, simbad, evt, period); JRandomTimeslice random (chronometer, simbad); JSummaryslice summary(chronometer, simbad); DEBUG(event); for (JDAQTimeslice::const_iterator frame = event.begin(); frame != event.end(); ++frame) { for (int i = 0; i != NUMBER_OF_PMTS; ++i) { ASSERT(frame->testHighRateVeto(i) == (i == pmt), "Run-by-run simulation PMT " << setw(2) << i); } } DEBUG(random); for (JDAQTimeslice::const_iterator frame = random.begin(); frame != random.end(); ++frame) { for (int i = 0; i != NUMBER_OF_PMTS; ++i) { ASSERT(frame->testHighRateVeto(i) == (i == pmt), "Run-by-run simulation PMT " << setw(2) << i); } } for (JDAQSummaryslice::const_iterator frame = summary.begin(); frame != summary.end(); ++frame) { for (int i = 0; i != NUMBER_OF_PMTS; ++i) { ASSERT(frame->testHighRateVeto(i) == (i == pmt), "Run-by-run simulation PMT " << setw(2) << i); } } } return 0; }