Jpp  master_rocky-40-g5f0272dcd
the software that should make you happy
JBuild.cc
Go to the documentation of this file.
1 
2 #include <string>
3 #include <iostream>
4 #include <iomanip>
5 #include <vector>
6 
7 #include "TROOT.h"
8 #include "TFile.h"
9 #include "TH1D.h"
10 
11 #include "JDAQ/JDAQEventIO.hh"
12 #include "JDetector/JDetector.hh"
16 #include "JTrigger/JHit.hh"
17 #include "JTrigger/JHitL0.hh"
18 #include "JTrigger/JHitL1.hh"
19 #include "JTrigger/JHitL2.hh"
20 #include "JTrigger/JHitR1.hh"
21 #include "JTrigger/JHitR2.hh"
22 #include "JTrigger/JBuildL0.hh"
23 #include "JTrigger/JBuildL1.hh"
24 #include "JTrigger/JBuildL2.hh"
25 
27 #include "JSupport/JSupport.hh"
28 
29 #include "Jeep/JParser.hh"
30 #include "Jeep/JMessage.hh"
31 
32 
33 namespace {
34 
35  /**
36  * Process event.
37  *
38  * \param build hit builder
39  * \param router module router
40  * \param event event
41  * \param h1 histogram
42  */
43  template<class JBuild_t>
44  inline void process(const JBuild_t& build,
45  const JDETECTOR::JModuleRouter& router,
46  const KM3NETDAQ::JDAQEvent& event,
47  TH1& h1)
48  {
49  using namespace std;
50 
51  typedef typename JBuild_t::value_type value_type;
52 
54 
55  build(event, router, back_inserter(data));
56 
57  h1.Fill((double) data.size());
58  }
59 }
60 
61 
62 /**
63  * \file
64  *
65  * Example program to test JTRIGGER::JBuildL0, JTRIGGER::JBuildL1 and JTRIGGER::JBuildL2 hit building with DAQ events.
66  * \author mdejong
67  */
68 int main(int argc, char **argv)
69 {
70  using namespace std;
71  using namespace JPP;
72  using namespace KM3NETDAQ;
73 
75  JLimit_t& numberOfEvents = inputFile.getLimit();
76  string outputFile;
77  string detectorFile;
78  JTriggerParameters parameters;
79  int debug;
80 
81  try {
82 
83  JParser<> zap("Example program to test hit building with DAQ events.");
84 
85  zap['f'] = make_field(inputFile);
86  zap['o'] = make_field(outputFile) = "build.root";
87  zap['n'] = make_field(numberOfEvents) = JLimit::max();
88  zap['a'] = make_field(detectorFile);
89  zap['@'] = make_field(parameters) = JPARSER::initialised();
90  zap['d'] = make_field(debug) = 0;
91 
92  zap(argc, argv);
93  }
94  catch(const exception &error) {
95  FATAL(error.what() << endl);
96  }
97 
98 
100 
101  try {
102  load(detectorFile, detector);
103  }
104  catch(const JException& error) {
105  FATAL(error);
106  }
107 
108  const JModuleRouter router(detector);
109 
110 
111  TFile out(outputFile.c_str(), "recreate");
112 
113  const Int_t N = 5000;
114 
115  TH1D h0("L0", NULL, N, -0.5, (Double_t) N - 0.5);
116  TH1D h1("L1", NULL, N, -0.5, (Double_t) N - 0.5);
117  TH1D h2("L2", NULL, N, -0.5, (Double_t) N - 0.5);
118 
119  // test compilation for various template specialisations
120 
121  {
122  JBuildL0<double> buildL0;
123  JBuildL1<double> buildL1(parameters);
124  JBuildL2<double> buildL2(parameters.L2);
125  }
126  {
127  JBuildL0<JHitL0> buildL0;
128  JBuildL1<JHitL1> buildL1(parameters);
129  JBuildL2<JHitL2> buildL2(parameters.L2);
130  }
131  {
132  JBuildL0<JHitR0> buildL0;
133  JBuildL1<JHitR1> buildL1(parameters);
134  JBuildL2<JHitR2> buildL2(parameters.L2);
135  }
136 
137  // primitive data types correspond to hit times [ns]
138 
139  JBuildL0<double> buildL0;
140  JBuildL1<double> buildL1(parameters);
141  JBuildL2<double> buildL2(parameters.L2);
142 
143 
144  while (inputFile.hasNext()) {
145 
146  STATUS("event: " << setw(10) << inputFile.getCounter() << '\r'); DEBUG(endl);
147 
148  const JDAQEvent* tev = inputFile.next();
149 
150  process(buildL0, router, *tev, h0);
151  process(buildL1, router, *tev, h1);
152  process(buildL2, router, *tev, h2);
153  }
154  NOTICE(endl);
155 
156  out.Write();
157  out.Close();
158 }
int main(int argc, char **argv)
Definition: JBuild.cc:68
string outputFile
Data structure for detector geometry and calibration.
Basic data structure for L0 hit.
Basic data structure for L1 hit.
Basic data structure for L2 hit.
Reduced data structure for L1 hit.
Basic data structure for R2 hit.
General purpose messaging.
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
#define STATUS(A)
Definition: JMessage.hh:63
#define NOTICE(A)
Definition: JMessage.hh:64
#define FATAL(A)
Definition: JMessage.hh:67
int debug
debug level
Definition: JSirene.cc:69
Direct access to module in detector data structure.
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.
Basic data structure for time and time over threshold information of hit.
Detector data structure.
Definition: JDetector.hh:96
Router for direct addressing of module data in detector data structure.
General exception.
Definition: JException.hh:24
Utility class to parse command line options.
Definition: JParser.hh:1698
General purpose class for object reading from a list of file names.
virtual bool hasNext() override
Check availability of next element.
counter_type getCounter() const
Get counter.
virtual const pointer_type & next() override
Get next element.
Template specialisation of L0 builder for JHitL0 data type.
Definition: JBuildL0.hh:105
Template specialisation of L0 builder for JHitR0 data type.
Definition: JBuildL0.hh:177
Template L0 hit builder.
Definition: JBuildL0.hh:38
Template specialisation of L1 builder for JHitL1 data type.
Definition: JBuildL1.hh:200
Template specialisation of L1 builder for JHitR1 data type.
Definition: JBuildL1.hh:287
Template L1 hit builder.
Definition: JBuildL1.hh:90
Template specialisation of L2 builder for JHitL2 data type.
Definition: JBuildL2.hh:229
Template specialisation of L2 builder for JHitR2 data type.
Definition: JBuildL2.hh:342
Template L2 builder.
Definition: JBuildL2.hh:49
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
KM3NeT DAQ data structures and auxiliaries.
Definition: DataQueue.cc:39
Definition: JSTDTypes.hh:14
Detector file.
Definition: JHead.hh:227
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition: JParser.hh:68
Auxiliary class for defining the range of iterations of objects.
Definition: JLimit.hh:45