Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JTestL1.cc
Go to the documentation of this file.
1 
2 #include <string>
3 #include <iostream>
4 #include <iomanip>
5 #include <vector>
6 #include <map>
7 
8 #include "JDAQ/JDAQHit.hh"
9 #include "JDAQ/JDAQSuperFrame.hh"
10 
11 #include "JDetector/JDetector.hh"
13 
15 #include "JTrigger/JTimesliceL1.hh"
19 #include "JTrigger/JBuildL1.hh"
20 #include "JTrigger/JBuildL2.hh"
21 #include "JTrigger/JHitToolkit.hh"
22 
23 #include "Jeep/JParser.hh"
24 #include "Jeep/JMessage.hh"
25 
26 namespace {
27 
29  using namespace JPP;
30 
31  /**
32  * Print time slice.
33  *
34  * \param out output stream
35  * \param title title
36  * \param timeslice time slice
37  */
38  template<class T>
39  void print(std::ostream& out, const std::string& title, JTimeslice<T>& timeslice)
40  {
41  using namespace std;
42  using namespace JPP;
43 
44  out << title << endl;
45 
46  for (typename JTimeslice<T>::const_iterator frame = timeslice.begin(); frame != timeslice.end(); ++frame) {
47 
48  out << "module " << frame->getModuleID();
49 
50  for (typename JTimeslice<T>::value_type::const_iterator hit = frame->begin(); hit != frame->end(); ++hit) {
51  out << ' ' << JHitToolkit<T>::getT(*hit);
52  }
53 
54  out << endl;
55  }
56  }
57 }
58 
59 /**
60  * \file
61  *
62  * Example program to test JTRIGGER::JBuildL1 and JTRIGGER::JBuildL2 hit coincidence building with user data.
63  * \author mdejong
64  */
65 int main(int argc, char **argv)
66 {
67  using namespace std;
68  using namespace KM3NETDAQ;
69  using namespace JPP;
70 
71  multimap<int, int> data;
72  JTriggerParameters parameters;
73  int debug;
74 
75  try {
76 
77  JParser<> zap("Example program to test hit coincidence building with user data."\
78  "\nformat: -u \"(<PMT> <time>)+\"");
79 
80  zap['u'] = make_field(data);
81  zap['@'] = make_field(parameters) = JPARSER::initialised();
82  zap['d'] = make_field(debug) = 0;
83 
84  zap(argc, argv);
85  }
86  catch(const exception &error) {
87  FATAL(error.what() << endl);
88  }
89 
90  using namespace KM3NETDAQ;
91 
92  cout.tie(&cerr);
93 
94  setDAQLongprint(true);
95 
96  parameters.set();
97 
98  cout << parameters << endl;
99 
100 
102 
103  JModule module = JModule::getInstance();
104 
105  module.setID(1001);
106 
107  detector.push_back(module);
108 
109  const JModuleRouter moduleRouter(detector);
110 
111 
112  typedef double hit_type;
118 
119  const JBuildL1_t buildL1(parameters);
120  const JBuildL2_t buildL2(parameters.L2);
121 
122  JTimesliceRouter timesliceRouter(parameters.numberOfBins);
123 
124 
125  JDAQTimeslice timeslice;
126 
127  {
128  JDAQSuperFrame frame(JDAQSuperFrameHeader(JDAQChronometer(), module.getID()));
129 
130  for (multimap<int, int>::const_iterator i = data.begin(); i != data.end(); ++i) {
131  frame.add(JDAQHit(i->first, i->second, 0));
132  }
133 
134  timeslice.push_back(frame);
135  }
136 
137  cout << timeslice << endl;
138 
139  timesliceRouter.configure(timeslice);
140 
141  const JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(timeslice[0], module);
142 
143  JTimeslice_t timesliceL0;
144  JTimeslice_t timesliceL1;
145  JTimeslice_t timesliceL2;
146 
147  timesliceL0.push_back(JSuperFrame1D_t(buffer));
148  timesliceL1.push_back(JSuperFrame1D_t(JDAQChronometer(), module.getID(), module.getPosition()));
149  timesliceL2.push_back(JSuperFrame1D_t(JDAQChronometer(), module.getID(), module.getPosition()));
150 
151  buildL1(buffer, back_inserter(timesliceL1[0]));
152  buildL2(buffer, timesliceL1[0], back_inserter(timesliceL2[0]));
153 
154  print(cout, "Trigger L0", timesliceL0);
155  print(cout, "Trigger L1", timesliceL1);
156  print(cout, "Trigger L2", timesliceL2);
157 
158  JTimesliceL1<JDAQTimesliceL1> outputL1(timesliceL1, timesliceRouter, moduleRouter, parameters.TMaxLocal_ns);
159  JTimesliceL1<JDAQTimesliceL2> outputL2(timesliceL2, timesliceRouter, moduleRouter, parameters.L2.TMaxLocal_ns);
160 
161  cout << outputL1;
162  cout << outputL2;
163 }
164 
Utility class to parse command line options.
Definition: JParser.hh:1410
std::vector< value_type >::const_iterator const_iterator
Definition: JTimeslice.hh:34
Data structure for all trigger parameters.
Data structure for a composite optical module.
Definition: JModule.hh:47
JBuildL2< hit_type > JBuildL2_t
Definition: JDataFilter.cc:96
void configure(const JDAQTimeslice &timeslice)
Configure.
Detector data structure.
Definition: JDetector.hh:77
Router for direct addressing of module data in detector data structure.
Empty structure for specification of parser element that is initialised (i.e.
Definition: JParser.hh:64
JSuperFrame2D< hit_type > JSuperFrame2D_t
Definition: JDataFilter.cc:93
Data structure for detector geometry and calibration.
Tools for handling different hit types.
1-dimensional frame with time calibrated data from one optical module.
JBuildL1< hit_type > JBuildL1_t
Definition: JDataFilter.cc:95
void setDAQLongprint(const bool option)
Set DAQ print option.
Definition: JDAQPrint.hh:28
void print(const TH1 &h1, std::ostream &out)
Print histogram parameters.
Template L2 builder.
Definition: JBuildL2.hh:47
Detector file.
Definition: JHead.hh:126
T & getInstance(const T &object)
Get static instance from temporary object.
Definition: JObject.hh:73
Hit data structure.
Definition: JDAQHit.hh:36
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1836
Router for fast addressing of hits in KM3NETDAQ::JDAQTimeslice data structure as a function of the op...
Data time slice.
int debug
debug level
Definition: JSirene.cc:59
JTimeslice< hit_type > JTimeslice_t
Definition: JDataFilter.cc:94
General purpose messaging.
Template L1 hit builder.
Definition: JBuildL1.hh:76
#define FATAL(A)
Definition: JMessage.hh:65
Direct access to module in detector data structure.
Auxiliary class to build JDAQTimeslice for L1 timeslice.
Definition: JTimesliceL1.hh:36
Utility class to parse command line options.
2-dimensional frame with time calibrated data from one optical module.
Data frame of one optical module.
JDAQSuperFrame & add(const JDAQSuperFrame &super_frame)
Add data from same optical module.
double hit_type
Definition: JDataFilter.cc:89
Time slice with calibrated data.
Definition: JTimeslice.hh:26
JSuperFrame1D< hit_type > JSuperFrame1D_t
Definition: JDataFilter.cc:92
int main(int argc, char *argv[])
Definition: Main.cpp:15