Jpp  master_rocky-43-ge265d140c
the software that should make you happy
JTreeIterator.cc
Go to the documentation of this file.
1 
2 #include <string>
3 #include <iostream>
4 #include <iomanip>
5 
6 #include "JDAQ/JDAQEventIO.hh"
7 #include "JDAQ/JDAQEvaluator.hh"
8 
10 #include "JSupport/JTreeScanner.hh"
11 #include "JSupport/JSupport.hh"
12 
13 #include "Jeep/JParser.hh"
14 #include "Jeep/JMessage.hh"
15 
16 
17 /**
18  * \file
19  *
20  * Program to test iteration using JSUPPORT::JTreeScanner.
21  * \author mdejong
22  */
23 int main(int argc, char **argv)
24 {
25  using namespace std;
26  using namespace JPP;
27  using namespace KM3NETDAQ;
28 
29  JMultipleFileScanner<> inputFile;
30  JLimit_t& numberOfEvents = inputFile.getLimit();
31  int debug;
32 
33  try {
34 
35  JParser<> zap("Program to test iteration from a ROOT TTree.");
36 
37  zap['f'] = make_field(inputFile);
38  zap['n'] = make_field(numberOfEvents) = JLimit::max();
39  zap['d'] = make_field(debug) = 3;
40 
41  zap(argc, argv);
42  }
43  catch(const exception& error) {
44  FATAL(error.what() << endl);
45  }
46 
48 
49  //JTreeScanner_t::debug = debug;
50 
51  JTreeScanner_t in(inputFile, inputFile.getLimit());
52 
53  DEBUG("Number of entries " << in.getEntries() << endl);
54  DEBUG("Distance " << distance(in. begin(), in. end()) << endl);
55  DEBUG("Distance " << distance(in.rbegin(), in.rend()) << endl);
56  DEBUG("Limit " << inputFile.getLimit() << endl);
57 
58  DEBUG("hasNext iteration:");
59  while (in.hasNext()) {
60 
61  JDAQEvent* tev = in.next();
62 
63  DEBUG(' ' << setw(2) << tev->getFrameIndex());
64  }
65  DEBUG(endl);
66 
67  DEBUG("indexed iteration:");
68  for (counter_type i = inputFile.getLowerLimit(); i != inputFile.getUpperLimit(); ++i) {
69  DEBUG(' ' << setw(2) << in.getEntry(i)->getFrameIndex());
70  }
71  DEBUG(endl);
72 
73  DEBUG("forward iteration:");
74  for (JTreeScanner_t::iterator i = in.begin(); i != in.end(); ++i) {
75  DEBUG(' ' << setw(2) << i->getFrameIndex());
76  }
77  DEBUG(endl);
78 
79  DEBUG("reverse iteration:");
80  for (JTreeScanner_t::reverse_iterator i = in.rbegin(); i != in.rend(); ++i) {
81  DEBUG(' ' << setw(2) << i->getFrameIndex());
82  }
83  DEBUG(endl);
84 
85  // tests
86 
87  ASSERT(in.getEntries() > 1, "check number of entries");
88  ASSERT(inputFile.getUpperLimit() < in.getEntries() && inputFile.getLength() > 1, "check limit");
89 
90  ASSERT(distance(in. begin(), in. end()), inputFile.getLimit().getLength());
91  ASSERT(distance(in.rbegin(), in.rend()), inputFile.getLimit().getLength());
92 
93  for (JTreeScanner_t::iterator j = in.begin(), i = j++; j != in.end(); ++i, ++j) {
94  ASSERT(i->getFrameIndex() < j->getFrameIndex());
95  }
96 
97  for (JTreeScanner_t::reverse_iterator j = in.rbegin(), i = j++; j != in.rend(); ++i, ++j) {
98  ASSERT(i->getFrameIndex() > j->getFrameIndex());
99  }
100 
101  return 0;
102 }
General purpose messaging.
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
#define ASSERT(A,...)
Assert macro.
Definition: JMessage.hh:90
#define FATAL(A)
Definition: JMessage.hh:67
int debug
debug level
Definition: JSirene.cc:69
Scanning of objects from multiple files according a format that follows from the extension of each fi...
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:2142
ROOT TTree parameter settings of various packages.
int main(int argc, char **argv)
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
Utility class to parse command line options.
Definition: JParser.hh:1698
Base class for JTreeScanner.
Definition: JTreeScanner.hh:56
Template definition for direct access of elements in ROOT TChain.
int getFrameIndex() const
Get frame index.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Long64_t counter_type
Type definition for counter.
int j
Definition: JPolint.hh:792
KM3NeT DAQ data structures and auxiliaries.
Definition: DataQueue.cc:39
Definition: JSTDTypes.hh:14
Auxiliary class for defining the range of iterations of objects.
Definition: JLimit.hh:45