#include #include #include #include "JDAQ/JDAQEventIO.hh" #include "JDAQ/JDAQEvaluator.hh" #include "JSupport/JMultipleFileScanner.hh" #include "JSupport/JTreeScanner.hh" #include "JSupport/JSupport.hh" #include "Jeep/JParser.hh" #include "Jeep/JMessage.hh" /** * \file * * Program to test iteration using JSUPPORT::JTreeScanner. * \author mdejong */ int main(int argc, char **argv) { using namespace std; using namespace JPP; using namespace KM3NETDAQ; JMultipleFileScanner<> inputFile; JLimit_t& numberOfEvents = inputFile.getLimit(); int debug; try { JParser<> zap("Program to test iteration from a ROOT TTree."); zap['f'] = make_field(inputFile); zap['n'] = make_field(numberOfEvents) = JLimit::max(); zap['d'] = make_field(debug) = 3; zap(argc, argv); } catch(const exception& error) { FATAL(error.what() << endl); } typedef JTreeScanner JTreeScanner_t; //JTreeScanner_t::debug = debug; JTreeScanner_t in(inputFile, inputFile.getLimit()); DEBUG("Number of entries " << in.getEntries() << endl); DEBUG("Distance " << distance(in. begin(), in. end()) << endl); DEBUG("Distance " << distance(in.rbegin(), in.rend()) << endl); DEBUG("Limit " << inputFile.getLimit() << endl); DEBUG("hasNext iteration:"); while (in.hasNext()) { JDAQEvent* tev = in.next(); DEBUG(' ' << setw(2) << tev->getFrameIndex()); } DEBUG(endl); DEBUG("indexed iteration:"); for (counter_type i = inputFile.getLowerLimit(); i != inputFile.getUpperLimit(); ++i) { DEBUG(' ' << setw(2) << in.getEntry(i)->getFrameIndex()); } DEBUG(endl); DEBUG("forward iteration:"); for (JTreeScanner_t::iterator i = in.begin(); i != in.end(); ++i) { DEBUG(' ' << setw(2) << i->getFrameIndex()); } DEBUG(endl); DEBUG("reverse iteration:"); for (JTreeScanner_t::reverse_iterator i = in.rbegin(); i != in.rend(); ++i) { DEBUG(' ' << setw(2) << i->getFrameIndex()); } DEBUG(endl); // tests ASSERT(in.getEntries() > 1, "check number of entries"); ASSERT(inputFile.getUpperLimit() < in.getEntries() && inputFile.getLength() > 1, "check limit"); ASSERT(distance(in. begin(), in. end()), inputFile.getLimit().getLength()); ASSERT(distance(in.rbegin(), in.rend()), inputFile.getLimit().getLength()); for (JTreeScanner_t::iterator j = in.begin(), i = j++; j != in.end(); ++i, ++j) { ASSERT(i->getFrameIndex() < j->getFrameIndex()); } for (JTreeScanner_t::reverse_iterator j = in.rbegin(), i = j++; j != in.rend(); ++i, ++j) { ASSERT(i->getFrameIndex() > j->getFrameIndex()); } return 0; }